Галоўная / Артыкулы

Стварэнне масштабаваемых, безстандартных сервераў MCP 2026 (Тэхнічны дэтальны аналіз)

Практычныя інструкцыі па стварэнні масштабаваемых, безстандартных сервераў MCP 2026 (Тэхнічны дэтальны аналіз): контракты, перакананні і месцы для вставкі коду для команд, якія выкарыстоўваюць гэты патэрн.

Выдавец: REACTAPP.TOP11 хв чытання2446 слоў

Крыніцы: Stateless Model Context Protocol: Building Scalable MCP 2026 Specification Servers (Technical Deepdive)

Існавайце гэта як перапрацоўаны варыянт ідэй з документа “Stateless Model Context Protocol: Building Scalable MCP 2026 Specification Servers (Technical Deepdive)” для аператараў: чыстыя этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы. Этап “Адгледжэння” найкрашча працюе, калі яго розглядаць як вімерную плошчу. Запісайце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметкі з вярнення да пачатковага стану прычаму расшырэння масштаба. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнае рэзультат. Відкрытыя даныя пра косты з’являюцца рана, таму не будзе неспакою, калі працэс перэйдзе з дэманстрацыі ў спяльныя сераўеры.

Проблема з станам дадзенняў: чаму MCP да 2026 года мела труднасці з масштабаваннем

Для этапы «The Stateful Bottleneck Why» неабяжна практыка — адыначы выклікваць вхідныя даны, назначыць адпаведнага адпаведальнага за крок і задаць крытэрыя завершэння пры перадзеіснавленні коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Конфігурацыю трэба знаходзіць за межамі коду прыемленае. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў павінны быць аднароджаны ў адном месца, якое аператары можаць пераглядаць, не чытаючы весь граф. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні.

+--------------------------------------------------------------------------+
|                       Pre-2026 Stateful Architecture                     |
|                                                                          |
|   +--------------+      WebSocket / SSE      +-----------------------+   |
|   | Client Agent | <=======================> | MCP Server Pod A      |   |
|   +--------------+    (Session Pinned)       | (In-Memory Session)   |   |
|                                              +-----------------------+   |
|                                                          |               |
|                                                    State Lookup          |
|                                                          v               |
|                                              +-----------------------+   |
|                                              | Central Redis Cache   |   |
|                                              +-----------------------+   |
+--------------------------------------------------------------------------+

Труднасці, якія стварае афіннас сесый

Для этапы «The Friction of Session» неабяжна прадзеўдзіць вводныя даны, абавесцелівальніка крока і крэтыяры завершэння пры перадзеўстве коду. Аперацыйныя працавнікі павінны магчымае перадзеўсці крок з вядомага пункту контролю, не прымушаныя здагадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вяснавання проблем. Перапрыбуткі, людзкія контрольныя пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольнае пісьменне выказванне.

У сэрцы MCP 2026–07–28: маршрутызацыя заголовкаў і самаадкладныя RPC

Для ўрагу «Under the Hood» неабходна пазначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры перадзмене коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Валідзіце кароткія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Калі наступны крок — гэта код або вызов інструмента, валідзіце структураваныя выходныя даны з парадаксамі, а не вольнай фармату прозы. Для ўрагу «Under the Hood» неабходна пазначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры перадзмене коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выканання і вартасць токеноў або запытак разам з функцыйнальнымі рэзультатамі. Відразлівасць вартасцей з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмавай версіі ў спяльныя сераўеры.

+--------------------------------------------------------------------------+
|                     MCP 2026-07-28 Stateless Architecture                |
|                                                                          |
|   +--------------+    HTTP POST (Self-Describing)    +---------------+   |
|   | Client Agent | --------------------------------> | Round-Robin   |   |
|   +--------------+   Headers: Mcp-Method, Mcp-Name   | Load Balancer |   |
|                                                      +---------------+   |
|                                                              |           |
|                                           Any Worker Pod     |           |
|                                       +----------------------+--------+  |
|                                       |                      |        |  |
|                                       v                      v        v  |
|                                  +--------+              +--------+ +---+|
|                                  | Pod 1  |              | Pod 2  | |...||
|                                  +--------+              +--------+ +---+|
+--------------------------------------------------------------------------+

Самаадмініструемы JSON-RPC 2.0 праз _meta

Калі працуеце з фазай самаадмініструемага JSON-RPC 2.0, спачатку запісайце умовы вікорыстоўвання: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыпалення. Такі спіс дапамагае заліцварыць пазнейшыя змены ў кодзе. Зберагайце настройкі параду ў кодзе прыемліка. Файлы сераўнавання, храненні секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць пераглядаць іх без неабходнасці чытання всей структуры. Зберагайце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадзесланне ідэнтычных прамаўляючых частак ёсць распашчынай прычыной некантрольаванага вітрачання рэсурсоў.

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "query_database",
    "arguments": {
      "query": "SELECT count(*) FROM users WHERE status = 'active';"
    }
  },
  "id": "req-98421",
  "_meta": {
    "protocolVersion": "2026-07-28",
    "clientInfo": {
      "name": "AutonomousAgentWorker",
      "version": "4.1.0"
    },
    "progressToken": "tok_998122",
    "traceContext": {
      "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
    }
  }
}

Обавязковыя загаловкі маршрутызацыі HTTP на роўні 7

Калі працюеце над этапам зобавальнага маршрутызавання HTTP на роўні 7, спачатку запісайце умовы працы: неабходныя даны, сігнал успеху і тое, што вядзецца пад частым неудачам. Такі спіс контроля дапамагае залічыць усе змяны ў кодзе.

Аднаходжэнне сервера і розумны кэшаванне

Калі працюеце над стадзіямі «Адказванне сервера» і «Інтэлігентныя функцыі», спачатку запісайце умовы вярбунка: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі спіс дапамагае залічваць пазнейшыя змены ў кодзе чыста і прозрачна. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыполнення павінна вказваць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Зберагаеце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Павторны адправкі ідэнтычных даных ўсё часта стаюць прычыной зайвых вітрачэнняў. Калі працюеце над стадзіямі «Адказванне сервера» і «Інтэлігентныя функцыі», спачатку запісайце умовы вярбунка: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі спіс дапамагае залічваць пазнейшыя змены ў кодзе чыста і прозрачна. Запісвайце час выканання і вартасць токена або запыту разам з функцыйнальнымі рэзультатамі. Відразувыя даны пра вартасці запобегаюць неспакойным рахункам, калі праця пераходзіць з дэмавайшых умов у спяльныя сераўеры.

{
  "jsonrpc": "2.0",
  "result": {
    "protocolVersion": "2026-07-28",
    "capabilities": {
      "tools": { "listChanged": false }
    },
    "serverInfo": {
      "name": "Scalable-Stateless-MCP-Server",
      "version": "2.0.0"
    },
    "cacheControl": {
      "ttlMs": 3600000,
      "cacheScope": "public"
    }
  },
  "id": "disc-001"
}

Стварэнне сервера без стану для прымення: FastAPI, FastMCP 2.0 і OAuth 2.1

Этап стварэння сервера без стану працюе найкрашча, калі яго розглядаць як меркаваны аспект. Запісаце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметкі па поверненню да пачатковага стану пры розшырэнні масштаба. Храніце настройкі пазначыльна ад коду прымення. Файлы сяродавішча, хранальнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх элементаў. Задаце ліміты токэнаў на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расшырваюць кантэкст; строгі ліміты запобегаюць таму, каб дэманстрацыі ператварыліся на неспакоючыя рахункі.

+-----------------------------------------------------------------------------+
|                       Stateless Request Dispatching                         |
|                                                                             |
|   Client Request w/ Bearer JWT                                              |
|   + Header: Mcp-Method: tools/call                                          |
|   + Header: Mcp-Name: query_database                                        |
|                                                                             |
|         │                                                                   |
|         ▼                                                                   |
|   +------------------------------------+                                    |
|   | OAuth 2.1 Bearer Validation        |  ---> (401 Unauthorized if invalid)|
|   | verify_token()                     |                                    |
|   +------------------------------------+                                    |
|         │                                                                   |
|         ▼ Decoded Claims (user_info)                                        |
|   +------------------------------------+                                    |
|   | Header-Based Route Dispatcher      |                                    |
|   | extract Mcp-Method / Mcp-Name      |                                    |
|   +------------------------------------+                                    |
|         │                                                                   |
|         ├──────────────────────────────┐                                    |
|         ▼                              ▼                                    |
|   [ tools/call ]               [ server/discover ]                          |
|   Execute tool handler          Return cached capability                    |
|   Scoped to user_info['sub']    manifest & protocol specs                   |
+-----------------------------------------------------------------------------+
from fastapi import FastAPI, Depends, HTTPException, Header, Security
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from pydantic import BaseModel
from typing import Dict, Any, Optional
import jwt


app = FastAPI(title="Stateless MCP 2026 Server")
security = HTTPBearer()
JWT_SECRET = "production_secret_key"
JWT_ALGORITHM = "HS256"
def verify_token(credentials: HTTPAuthorizationCredentials = Security(security)) -> Dict[str, Any]:
    """
    Validates incoming OAuth 2.1 Bearer JWT tokens.
    Converts the MCP server into a standard OAuth Resource Server.
    """
    try:
        payload = jwt.decode(credentials.credentials, JWT_SECRET, algorithms=[JWT_ALGORITHM])
        return payload
    except Exception:
        raise HTTPException(status_code=401, detail="Invalid Bearer token")
class JsonRpcRequest(BaseModel):
    jsonrpc: str = "2.0"
    method: str
    params: Optional[Dict[str, Any]] = None
    id: Any
    _meta: Optional[Dict[str, Any]] = None
@app.post("/mcp")
async def handle_mcp_request(
    request: JsonRpcRequest,
    mcp_method: Optional[str] = Header(None, alias="Mcp-Method"),
    mcp_name: Optional[str] = Header(None, alias="Mcp-Name"),
    user_info: Dict[str, Any] = Depends(verify_token)
):
    """
    Stateless MCP Request Handler conforming to the 2026-07-28 specification.
    Prefers Mcp-Method and Mcp-Name headers for fast execution dispatch.
    """
    effective_method = mcp_method or request.method
    # Route: Tool Execution
    if effective_method == "tools/call":
        tool_name = mcp_name or (request.params.get("name") if request.params else None)
        arguments = request.params.get("arguments", {}) if request.params else {}

        if tool_name == "query_database":
            query = arguments.get("query")
            user_id = user_info.get("sub", "anonymous")

            # Context is scoped directly to the authenticated token claims
            return {
                "jsonrpc": "2.0",
                "result": {
                    "content": [
                        {
                            "type": "text",
                            "text": f"Executed query '{query}' for user {user_id}"
                        }
                    ]
                },
                "id": request.id
            }

        # Standard JSON-RPC Method Not Found (-32601)
        return {
            "jsonrpc": "2.0",
            "error": {
                "code": -32601,
                "message": f"Tool '{tool_name}' not found"
            },
            "id": request.id
        }
    # Route: Server Discovery
    elif effective_method == "server/discover":
        return {
            "jsonrpc": "2.0",
            "result": {
                "protocolVersion": "2026-07-28",
                "capabilities": {
                    "tools": {"listChanged": False}
                },
                "serverInfo": {
                    "name": "Scalable-Stateless-MCP-Server",
                    "version": "2.0.0"
                }
            },
            "id": request.id
        }
    # Unsupported Protocol Method
    return {
        "jsonrpc": "2.0",
        "error": {
            "code": -32601,
            "message": f"Method '{effective_method}' unsupported"
        },
        "id": request.id
    }

Калітэцкое кераванне трафікам без парсінга на роўні 7: Настройкі Envoy і Gateway

Этап каральніка трафіку з нулявым аналізам на рэвэе 7 працуе найкрашча, калі яго розглядаюць як вімерную паверхню. Зафіксавце адна ідэальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваце сферу дзейнасці. Дакументавце як шлях успеху, так і шлях вярнэння. Перапрыбуткі, людзкія контрольны пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Задаце бюджэт на токены на кожны раунд і на кожную сесію. Інструменты з агентамі агрэсывна расшырваюць кантэкст; строгі ліміты запобегаюць таму, каб дэманстрацыі ператварыліся на неспакоўныя рахункі.

routes:
  - match:
      prefix: "/mcp"
      headers:
        - name: "Mcp-Method"
          exact_match: "tools/call"
        - name: "Mcp-Name"
          exact_match: "query_database"
    route:
      cluster: mcp_database_tools_cluster
  - match:
      prefix: "/mcp"
    route:
      cluster: mcp_general_cluster

Каральнік стану без сесый: запыткі з колькасцю раунд-трыпоў і ўзаемныя компрэсіі

Этап каральніка стану без сэсій работае наяўна, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адна ідэальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Задаўце ліміты на токены за кожны раунд і за кожную сэсію. Інструменты-агенты агрэсывна расшырваюць кантэкст; строгі ліміты запобегаюць таму, каб дэманстрацыі ператварыліся на неспакоўныя рахункі. Этап каральніка стану без сэсій работае наяўна, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адна ідэальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выканання і косты токенав або запытак праза функцыйнае рэзультат. Відкрытая інформацыя пра косты запобегае неспакоўным рахункам, калі працэс пераходзіць з дэманстрацыі ў спяльныя сераўеры.

Інтэрактыўны цыкл кантракту з множыцай раунд-трыпаў (MRTR)

Для этапы MRTR з мнагацяковымі запітамі неабходна прадзеўжча апыліцыя інпутаў, вядомасць пра адпаведальнага за крок і крэатарыяў выходу пры перадзмене коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Конфігурацыю трэба заставляць праза межамі коду аплікацыі. Файлы сяродавішча, хранальнікі секрэтных дадзеных і флагі функцыяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабходнасці чытання всей структуры. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходны дадзеныя з перакананнем схэмы, чым вольныя тэкстовыя апісанні.

Аналіз архітэктурных компромісаў

У стадыі аналізу компромісаў у архітэктурэ неабходна пазначыць вхідныя даны, адпаведальнага за выкананне крока і крытэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымае перадзеіснаваць крок з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Неабходна аддзеіснаваць дакументацыю як для стандартнага, так і для альтэрнатывнага ходу выканання. Практыка павторных спроб, перакрыцча ад чалавека і обработка непрацэсуючых паведамленняў ёсць часткай самага продукту, а не пасляднім этапам дапрацоўкі. Калі наступны крок — гэта код чыя-небудзь вызов інструменту, лепш выкарыстоўваць структураваныя выходныя даны з перакрычэнням схемы, чым вольныя тэкстовыя апісанні.

Развёртыванне у воблака: масштабаванне MCP на Kubernetes і Serverless

Для этапы MCP з масштабаванням развёртывання тыпу Cloud-Native неабяжна прадзефінавацыя вхідных дадзеных, адпраўніка крока і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі павінны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшае, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны працэс. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходны дадзеныя з перакананнем схэмы, чым вольныя тэкстовыя апісанні.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: mcp-tool-server-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: mcp-tool-server
  minReplicas: 3
  maxReplicas: 50
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
    - type: External
      external:
        metric:
          name: nginx_ingress_controller_requests
        target:
          type: Value
          averageValue: 1000m

Вывык і наступныя крокі

У стадыі «Вывыкладак, наступныя крокі» неабходна прадзеўжды візначаць інпуты, адпаведальную особу за крок і крытэрыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій этапы як даговору межа інпутамі і падтвердзенымы выходнымы данымі. Даўце назвы артыфактам, візначыце перакананні ў успеху і адмовіцеся ад беззвучнага частковага завершэння. Калі наступны крок — гэта код або вызов інструмента, валідаванне за дапамою схемы лепша, чым вільная проза з неструктураванымі выходнымы данымі.

Рэсурсы для адносовейшых вястэй

У стадыі «Рэсурсы для аднавальнай інфармацыі» неабяжна практычна ваказаць параметры вхідных дадзеных, адпаведальнага за шаг і крэтыяры завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск шагу з вядомай точкі контролю, не прабуючы спадараць сяброўскі стан. Запісваюць час выканання і кост токена або запыту празаўседле з рэзультатамі функцыянальнай працы. Візуабельнае паказанне костаў з самага пачатку запобегае неспакою, калі працэс пераходзіць з дэмавай версіі ў спяльныя асяроддзя. Калі наступны шаг — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даныя з перакананням схемы, чым вольныя тэкстовыя фарматы.

Чэк-ліст для эксплуатацыі

Працюючы над чэк-лістам для эксплуатацыі, спачатку запісваюць умовы: неабяжныя параметры вхідных дадзеных, сігнал успеху і тое, што выканаецца у разы частковага нявыпання. Такі чэк-ліст дапамагае заставаць празмены коду чыстымі і прозрачнымі.

Спрытваце гэты ўрадок як кантракт межа вхіднымі дадзеннямі і паверыжанымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце крытэрыя успеху і не прымайце часткова завершанне без паведамлення.

Зберагаце ў кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадзесланне ідэнтычных прамаўляючых частак ёсць частым выклікам працэзу.

Адкройце інструменты з вузкімі схемамі і чыткімі пазначэннямі парадуктываў. Хостам неабходна ведаць, якія вызовы мутуюць стан, перш чым яны будуць аўтаматычна затверджаны.

Калі дозволяе бюджэт, дадзіце тэст, які перабірае крытычны маршрут у CI з фіксатрамі, а не з рэальнымі платнымі API.

Документаваце як успешны, так і вярнучы маршруты разам. Перапрыбуткі, людзкія контрольныя пункты і обработка неканальных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам.

Перш чым запускаць стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для крытычнага шляху і паказвце способы абяроны. У спільных срэдах неабходны ліміты частоты запытанняў, пераконтроўкі прав на выкарыстоўванне рэсурсаў і чысткі власнік для змены секрэтных даных. Валіце простую надзейнасць працы над крэатывнымі, але разовымі дэманстрацыйнімі прыкладамі.

Прыметка для ecba7bb3b9c6: не кладзіце ключы прадаўцаў у рэпазітарый, задаце максімальны тэрмін дзейнасці токена на кожную сесію і зберагачыце транскрыпты разам з фіксатрамі для ацэнкі, каб пазнейшыя замены мадэляў заставаліся пораўнанымі.