Стварэнне масштабаваемых, безстандартных сервераў MCP 2026 (Тэхнічны дэтальны аналіз)
Практычныя інструкцыі па стварэнні масштабаваемых, безстандартных сервераў MCP 2026 (Тэхнічны дэтальны аналіз): контракты, перакананні і месцы для вставкі коду для команд, якія выкарыстоўваюць гэты патэрн.
Існавайце гэта як перапрацоўаны варыянт ідэй з документа “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: не кладзіце ключы прадаўцаў у рэпазітарый, задаце максімальны тэрмін дзейнасці токена на кожную сесію і зберагачыце транскрыпты разам з фіксатрамі для ацэнкі, каб пазнейшыя замены мадэляў заставаліся пораўнанымі.