MCP 2026-07-28: як спецыфікацыя без стану мяняе дызайн аддаленых сервераў
Спецыфікацыя MCP 2026-07-28 адмаўляецца ад стану: без сесій і рукапаціскання, затое з MRTR, Tasks і падказкамі для кэша. Што мяняецца для аддаленых сервераў і як іх перавесці.
Крыніцы: MCP Just Changed Its Architecture: Why the 2026 Specification Makes MCP Truly Cloud-Native
Выключны пункт для MCP
Рэвізія Model Context Protocol з датай 2026-07-28 ўсё болей значныя подыянне, чым звычайна апдэйтаванне версіі. Яна абарачвае адну з фундаментальных прыязванняў MCP, а самае – тое, што даўнейшы сервер організаваны ў адпаведнасці да сесіі протаколу, якая з’яўляецца ў зв’язку. MCP перайшла ад модэлю з станамі, двунаправленага тыпу, да модэлю запыткаў і адпаведных адпаведзей, які працуе як звычайная распрастранёная HTTP-інфраструктура. У аанунцыяцыя пра кандыдата на выпуск гаворылася, што гэта самая большая рэвізія з моменту стварэння протаколу, а фінальная спецыфікацыя была праказана 28 ліпня 2026 года.
Stateful MCP не быў неспроможны працаваць. Проблема заключалася у тым, што стан на рэвэлі протакола ствараў аперацыйныя обмежэнні, якія неадаптаваны для сучасных хмарных платформ. Для удалённага развяртвання можа знадобіцца памятаць ідэнтыфікатор сесіі, прыкрэпіць гэтую сесію да аднаго бэкенду, коордынаваць стан між рэплікамі і падтрымліваць працю механізмаў дыялогу працоўгалага часу для взаімадзеясіння, якія на самай працэ па сваім характэру ўскладненыя. Гэта ўможлівана у малых масштабах. У вялікіх масштабах гэта стварае тыя ж проблемы, з якімі працавалі веб-сістэмы з функцыяй «sticky-session» працоўгалага часу працоўгалаг часу ўжо багатыя гады.
У новым дыяграме сеанс пратаку знікла, а таксама была адмована процедура initialize і initialized. Кожны запіт містыць неабяжлівыя метаданы кліента, і серверы стаюць доступнымі за дапамою явнага адкрыцця. Абменаванне межа серверамі і кліентамі перарганізавана як кантэйнеры з калькамі, заголовкі HTTP несу метаданы маршрутызацыі, кліенты отрымаюць падказкі па кэшаванні у адпаведных адпаведзех, дзейнікі, якія работаюць довга, пераносяцца ў розсьланне Tasks, калітэцкі менеджмент расшырэнняў стае болей формалізаваным, а таксама з’являецца строгейшая політыка адмовы ад старых версій. Рэзультатам являецца ядро MCP, якое можа зручна працаваць за спінам з звычнымі балансэрамі навантажэння, шлюзамі, фаерваламі веб-зяўскоў і рэалізаціямі без сервера або з аўтаматычным масштабаваннем.
Адзін псіхалагічны модэль дапамагае. Старыя далёкія серверы MCP працавалі як протакол дыстрыбуіраванага кантакту для размов, тады калі новая версія працуе як HTTP API, чыя станоўчая працэздатнасць чыста выражаецца на слою аплікацыі або расшырэння.
Чаму MCP, адаснованы на сэсіях, стаў непадходзячым
Фразу "станоўчы MCP зламаўся" трэба атрымліваць адзінакова, таму што станоўчы MCP не перастаў працаваць раптам. Адбылося так, што стан, кераваны протаколам, стаў все менш прыдатным для інфраструктуры, дзе размешваліся серверы MCP.
У пакуеце ранейшай версіі кліент пачынаў работу з запітам initialize, а сервер адпавядаў Mcp-Session-Id, які кожны наступны запіт быў змушаны несці. Гэта прыяўязывала логічнага кліента да сеансу на стороне сервера. Сам прыклад ранейшага і пазнейшага стану ад стваральнікаў чытка паказвае разліку: у старым падходзе быў неабходны запіт на ініцыялізацыю, пасля чаго следаваў фактычны вызов інструмента, тады як протакол 2026 можа надсылаць вызов інструмента безпосерэдна як адзін самостойны запіт.
Эфект аплікацыянага працавання мае большое значэнне, чым захаваны HTTP-запрос. Уявіце сабе MCP-сэрвіс з восьмю рэплікамі за лоад-балансэрам. За наявнасцю сэсій запрос №1 стварае сэсію на інстанцыі A, а запрос №2 павінен зноў дасягнуць інстанцыі A, калі толькі стан сэсіі не будзе аднародны. Гэта вымагае выбору між двумя стратэгіямі: «лепкій» маршрутызацыёй, калі той самы кліент продовжвае падключацца да той самай інстанцыі, або аднародным хранэннем сэсій, якое можа чытаць кожная інстанцыя. У обох случаях практыка протакола залежыць ад топалогіі размешчэння.
«Лепкія» маршрутызацыя паскорбляе гнучкасцю, таму што лоад-балансэр больш не можа направляць кожны запрос да той інстанцыі, якая ў стане працаваць. Одна вузел можа быць перавантажана, а іншы — без працы, таму што сэсіі зафіксаваны на адной інстанцыі, а перэхід на альтэрнатыўную інстанцыю стае сложнейшым, калі первоначальны стан знаходзіцца на вузелі, які знік.
Зберагчыце сэсій у спяльнай базе дадзеных рашыяе частку проблемы, ал адночаса стварае проблемы, прытаманныя распраўяным сістэмам. Кожная сэсія стае запісью, якую неабходна ствараць, копіюваць, практычна абанаваць, адчысціць і заставляць быць доступной ў всі часы. У такім случае сервер MCP ёсцца прыемленьнем, якое включае падсістэму стану сэсій, распраўленую між разнымі апаратамі. Версія, прызначаная для тэставання, называе «лепкія» сэсіі і спяльныя базы дадзеных інфраструктурой, якая перастае быць неабходной на роўні протаколу, калі сэсіі знікаюць.
Kubernetes, платформы для автаскалінгу контэйнероў, хмарныя функцыі і безсерверныя асяроддзя ўсё больш ясна паказваюць гэтую проблему. Запрос можа паставіцца на под A, але гэты под можа знікнуць пад час скалінгу, і наступны запрос паставіцца на под F. Для безстановага HTTP-сервіса гэта абсалютна нормальна, але гэта шкодзіць протаколу, правільнае функцыонаванне якога выклікаеся наявнасцю стану, асоцыяванага з з’яўленням з’язку.
Стары пратакол мяў ўсё жа адной другай концэптуальнай неадпаведнасці. У ём была двухканальная модэль, па якой серверы моглі падаць запыткі да кліента. Працэсы выявлення, агледжэння даных і прадставлення спіса корэняў усе завіселі ад гэтага патэрна, што было логічна, калі існаваў стойкі канал. Стойкія двухканальныя стрымы навантажваюць інфраструктуру, адтолькі ўсе элементы — фаервалы, проксі, гейтвейы, аутоскаляры, серверлесс-сервісы і пулы з’яўленняў — маюць свае сопрацэсаванні і перыяды жыцця. Падтрымкі стрыму ачытым проста для таго, каб сервер могаў пазней задаць запыт, фундаментальна разлічыцца ад звычайных запыткаў і адпаведзей у фармаце HTTP.
Распрацоўшчык, які прыметылі гэты падход самастойна, прадставіў конкрэтны прыклад парадаксальных наследків. Ён назваў новы безстановы протакол значна простым для рэалізацыі як на стороне кліента, так і на стороне сервера, і падкрэсліў, што прыкладнія програмы больш не трэбае адстэйкаць ідэнтыфікатораў сесій на стороне сервера чы не кераваць сесіяй занова на аднай машыне. Пасля гэтага ён стварыў прыстрой для адкрыцця безстановых MCP і выдалі новую інтэграцыю Datasette MCP.
Такім чынам, суць не ў тым, што стан ёсць паслабленьнем. Закрыты стан протакола ёсць даскладным у кераванні, тады як явны стан прыкладнай програмы ёсць кантролюемым.
Сесія і процэс абмовкі зніклі
Першая змянай, якую бачаюць людзі, — гэта тое, што сесія пратаку больш не існуе. У 2026-07-28 знікла абмянка initialize і notifications/initialized, а таксама заголовак Mcp-Session-Id. Кожны запіт цяпер уключае версію пратаку і можлівасці кліента ў элеменце _meta. Кліент, які хочаць пазнакоміцца з серверам раней, можа вызваць server/discover. У фінальным журнале змян обеі змяны, сесію і процэс абмянкі, атрыбутуюць як значныя змяны.
Раней прабэг быў такі: спачатку процэс абмянкі, а пасля — сам запіт:
Client
|
| initialize
v
MCP Server
|
| Mcp-Session-Id = ABC
v
Client
|
| tools/call + Mcp-Session-Id: ABC
v
Same logical server session
Цяпер жа вызов можа адказвацца безпосерэдзе:
Client
|
| tools/call
| protocol version
| capabilities
| client metadata
v
Load Balancer
|
+----> MCP Instance A
|
+----> MCP Instance B
|
+----> MCP Instance C
Запрос зараз мае ўсю інфармацыю, якая неабходна слою пратаку для яго правільнага аналізу. Крэму гэтага, Streamable HTTP копіюе важлівыя метаданы ў заголовкі, напрыклад, у гэтым запыце:
POST /mcp HTTP/1.1
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: search
Content-Type: application/json
Тэла застаецца адказным джэрэлам, тады калі HTTP-запаковка прадаёт метаданы, якія можна выкарыстоўваць проміжным элементам. Спецыфікацыя выклекчвае, каб проміжныя элементы і каналы перэдачы, калі гэта дапаможна, адхроўвалі некансістэнтныя камбінацыі заголовкаў і тэлы.
Удаленне сесіі не значыць, што аплікацыі не можаць мець стан. Стан аплікацыі проста стае часткай модэлі дадзэнняў. Напрыклад, працэс пакупак могаў бы вернуць ідэнтыфікатор кошыка:
{
"basket_id": "bsk_8f2a..."
}
і наступны календар з’явлення інструмента будзе перадаць гэты ручку знову разам з айтэмам:
{
"basket_id": "bsk_8f2a...",
"item_id": "SKU-123"
}
На стороне сервера ідэнтыфікатор шукаецца ў Redis, PostgreSQL, DynamoDB, Cosmos DB, сховішчы об’ектаў або будзь-якай іншай прыдатнай сістэме. Транспорт MCP больш не керуе гэтым станам. Адпаведальныя за развіцце рэкамендуюць вжываць явныя ідэнтыфікаторы, такія як basket_id і browser_id, як спосаб замены схованага стану пратаколу.
Гэта прымыкае да архітэктурнага раздзелення, якое паказана тут:
MCP protocol state
|
v
NONEApplication state
|
v
Explicit IDs + external state store
Long-running task state
|
v
Tasks extension + durable task store
Можна сказаць, што гэта найважлівейшая ідэя ў всім выласце.
Метаданы і адналёгчэнне аднаходжэння на запыт
Калі процэс узгоджэння ўступае, як сервер можа дазнацца, якую версію протакола і якія можлівасці падтрымае кліент? Адказ — метаданы на кожны запыт. Зарэзерваваныя поля _meta знаходзяцца пад просторам імен io.modelcontextprotocol/*, а версія протакола і можлівасці кліента супроводжваюць кожны запыт, без якога-лібо ексклюзівнага узгоджэння, якое бы зберагалася ў з’язку. Калі кліент выбірае ідэнтыфікацыю сябе, яго ідэнтыфікатор таксама перавозіцца як метаданы на запыт, а серверы можаць дадаць свае метаданы ў рэзультатах запыту. Канцэптуальна структура запыту выглядае так:
{
"jsonrpc": "2.0",
"id": 42,
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "MCP stateless architecture"
},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientCapabilities": {
"extensions": {
"io.modelcontextprotocol/tasks": {}
}
},
"io.modelcontextprotocol/clientInfo": {
"name": "my-agent",
"version": "3.2.0"
}
}
}
}
Калі інфармацыя з самага пачатку ўжыткавая, сервер рэалізуе server/discover. У падзеўным логу змян гэта стае обавязковым RPC для сервераў, тады кліенты можаць выявіць падтрымваныя версіі протакола, ўмеласці і ідэнтыфікатор сервера прычымо да выканання іншых дзеянняў. Гэта зручна, калі кліенту трэба выбраць сваю дзеяльнасць на адной з падтрымваных серверам умеласцяў.
Хуткае разлікаванне тут існуе. Кліенты могу не вызываць server/discover, але серверы зобав’язаны яго запростаць. Таму MCP больш не патрабуе процэса выявлення для стварэння сесіі, але ўсё ж праставляе формальны спосаб прыцмовага аналізу умеласцяў. Яго прыметы супамінаюць зрэлыя HTTP API, дзе кожны запіт можа быць самастойна адгукнуты, а неабавязковыя канцэнтры выявлення або метаданы даюць болей дакладную інфармацыю.
Маршрутызацыя по прынцыпу «раунд-робін» і масштабаванне да нуля
Хутчэй усё практычнае значэнне дызайну працюе ў архітэктурэ воблака. Без сесій протакола канцэнтры MCP можа працаваць за дапамою звычайнага балансіра навантажэння з простым методам роутавання round-robin. У офіцыяльным аанунсе гэта прызначаецца як цялевая мадэль: калькі экземпляра MCP, роутаванне round-robin і відсутнае спяльнае сховішча сесій протакола.
Узьмім тры копіі за балансірам навантажэння:
+------------------+
| Load Balancer |
+---------+--------+
|
+------------+------------+
| | |
v v v
MCP Pod A MCP Pod B MCP Pod C
Запрос 1 можа паць у A, запрос 2 — у C, а запрос 3 — у B. Жадна правіла протаколу не выклеквае, каб усе тры запыткі дасяглі аднойчынага экземпляра, што якраз і ўсё, чаго хочуць воблак-сістэмы.
Падазрóўкай, што автаскалер горызонтальных падов прымае рашэнне, што за ноч чатырэба толькі аднаго рэпліканта. Два экземпляра могу знікнуць. Калі пазней прыходзіць запытка, можа запусціцца новы экземпляр, які зможа яго адразу обслужыць, адколі ёму не трэба спачатку восстанавляць сесію протаколу. Архітэктура стае такой:
Сама служба MCP ўсё без стану, а бізнес-стан застаецца стойкім за ўзмоўкай ад яе.
Аднак існуе адзін застэрэжны момент. Безстановы MCP не прымусвае автаматычна кожную аплікацыю MCP масштабавацца да нуля. Калі аплікацыя зберагае кошык, рабочы план, канвэрсацыю, транзакцыю чы заданне толькі ў памяці процэса, яна проста стварыла проблему скрытага стану на вышэйшам роўні.
Працэспрабавна рэалізацыя прыбліжэння да нуля выкалікае патрэбу, каб усе, што павінна застацца жывой пасля зупінкі працы прыемлівача, знаходзілася ў стойкай інфраструктурэ. Аднам з можлівых падходаў у працэйнай асяроддзі ёсць выкарыстоўванне Redis для кароткакаліснай коордынаціі, PostgreSQL або кераванай базы дадзеных тыпу NoSQL для зберагчання стану прыемлівача на довгі час, а таксама хранэння вялікіх файлоў у спецыяльных сховішчах. Аўтэнтыфікацыя таксама адбываецца па зяўні боку працэса, за дапамогою сістэмы автарызаціі OAuth або OIDC, а не на адгадванні з местнай памяці.
Компрэсія ў такім падходзе ўсёвыразна. Протакол дазволяе ствараць інфраструктуру без стану, і тады разрабоць прыемлівача стае адпаведальным за выбір таго, які стан застаецца, дзе ён зберагаецца, як адбываецца яго автарызацыя, як дуго ён застаецца і як яго ачышчаюць. Гэта ўлучшаныя межы пад час праектавання сістэм.
Самастоятэльнае кераванне станам
Явныя ідэнтыфікаторы можаць стаць найболей значным рэзультатам гэтага модэлю. Возьмімо агента для закупкаў на базе ШЫ, якому дана задача замовіць 100 GPU, атрымаць адзначэнне і падаць замовленне. Дызайн, адаснованы на сесіях, могаў бы лёгка спрыяць таму, што гэты працэс будзе захаваны ў стане сесіі MCP. Новая архітэктура спрыяе таму, каб усё было відна — падчас стварэння запіту вяртаецца ідэнтыфікатор:
create_purchase_request()
|
v
purchase_request_id = pr_123
|
v
request_approval(pr_123)
|
v
approval_id = appr_789
|
v
submit_purchase(pr_123, appr_789)
Стан большэй не ўкладваецца ў сесію HTTP. Гэта даны домэна, і гэта моцнае якосць, таму што даны домэна можна захістыць, аўдытаваць, стварыць версіі, копіюваць і запытваць незалежна. Запіс стану можа выглядаць так:
{
"purchase_request_id": "pr_123",
"user_id": "user_42",
"status": "awaiting_approval",
"items": [
{
"sku": "GPU-H100",
"quantity": 100
}
],
"created_at": "2026-08-21T08:00:00Z"
}
MCP-сервер проста ўсуне ідэнтыфікатор і пераканаецца ў правілах автарызацыі. Таксама павышаецца можлівасць абзірнасці. У зменшэнні да фразы „сесія ABC зрабіла кашто-што“ сістэма можа адмаўляць, што запіт на пакупку pr_123 перайшоў з статусу draft у approved, тое ўтвараецца трэйс з рэальным бізнес-значэннем.
Безпека таксама стае простэйшай для разумення. Непрозрачны ідэнтыфікатор сам по сабе ніколі не ёсць достатнім падтверджэнням прав, і сервер все раве павінен пераканацца, што аўтэнтыфікованы корыстнік мае право маніпуляваць станам, які знаходзіцца за тым ідэнтыфікаторам. Пашырэнне Tasks ставіцца да ідэнтыфікатораў задач так сама: серверы должны ствараць ID, якія будуць важкія для здагадкі, а выключэнне tasks/list — гэта свядомы выбор з метай прыховання прыватнасці, адколі ніхто не можа перыябраць ID задач іншых людзей.
Багатарадовыя запіты
Адзінаковыя запыткі з сервера да кліента ствараюць ўзняты проблема. Разглянем такі вызов інструмента:
delete_customer_data(customer_id=123)
Сервер не можа безпечна адчыніць нічога, пакуль корыстнік не падтвердзіць гэта за дапамою запытку на кшталт "Адчыніць 48 запісаў?". Старыя модэлі моглі залічыць канал адчыненым і запытаць кліента пра дадатковыя даны. Дызайн без стану не можа завісіць ад стацыярна адчыненага з’яўлення, і для падрыхтавання такой сітуацыі існуюць багатарадовыя запыткі, або MRTR.
MRTR абаранее адзін логічны аперат, якім для выкарыстоўвання трэба калькі разоў адправіць даны, без пастойнага з’яўлення чы працы сесіі на стороне сервера. Калі чакаецца падтверджэння, раз’яснення чы адбіранне прыкладаў, нічога не задае HTTP-з’яўленне у ачынены стан чы не выкарыстоўвае механізм пастойных з’яўленняў. У замен абмен стае ланцоўкай адзінаковых HTTP-запытоў, спаяных за дапамогою стану продажчыні. Кліент спачатку запрашвае адпаведную дзеянне, напрыклад tools/call для інструмента выдалення дадзенаў. Сервер не запускае свой сопны RPC-запыт да кліента, пакуль первісны аперат застаеся на паузе, і адпавядае проміжным рэзультатам, у яком пазначаецца, што трэба ўсё больш інфармацыі:
{
"resultType": "input_required",
"inputRequests": {
"confirm": {
"type": "elicitation",
"message": "Delete 48 records?",
"schema": {
"type": "boolean"
}
}
},
"requestState": "..."
}
Кліент збірае адказы і прабуе зноў адправіць первісны запіт, дадаўшы іх разам:
Client
|
| tools/call
v
Server
|
| input_required
| requestState
v
Client
|
| user confirmation
v
Client
|
| same operation + inputResponses + requestState
v
Any MCP instance
Такім чынам, аператыя дзеляецца на калькі HTTP-звяроўкаў, без патрэбы трывалага падтрымання адкрытага канекту. У офіцыяльным выданні MRTR опісваецца як замена для серверамі ініціяваваных шаблонаў elicitation/create, sampling/createMessage і roots/list.
Ключовым полем ёсць requestState. Усе, што патрэбна серверу для продажы працы, размешчаецца ў ям, упакаванае як непрозрачны токен, які падпісваецца, шыфруецца або іншым спосабам захоўваецца ад парадукавання. Спецыфікацыя не перакладае весь стан прыемлівання ў адну цэнтральную базу дадзэння MCP, а інфармацыя, неабходная для продажы взаімадзея, проста надаецца ў наступным запыце. Гэта супамінае токен продажы, а большыя перавагі заключаюцца у тым, што дзейсна дзейсная взаімадзея больш не значыць дзейсна дзейснае фізычнае з’яўленне.
HTTP-загаловкі і падказкі кэша
Пераход на стан без дзеяння дзяржавы сам па сабе падышае масштабаванне, адзе протакол таксама стае прыемнейшым для работы інфраструктуры HTTP. Запыткі HTTP, якія можна стрымаваць, несу стандартызаваныя заголовкі, такія як Mcp-Method і Mcp-Name, таму шлюзы і балансэры навантажэння можу прымець каналы перэдачы, автарызацыю, ліміты частоты і тэлеметрыю без адчынення тэла JSON-RPC. Тэла ўсё рава застаецца адпаведным джэрэлам інформацыі, і будзь-яя неспакоўка межу копіюемым заголовкам і адпаведным полем тэла ведае да адхоўкі запыткі.
Шлюз можа прачытаць гэтыя два значэння:
Mcp-Method = tools/call
Mcp-Name = search
і застосаваць такі пераконтрэбнікі політыкі:
tools/call + search -> route/search-cluster
tools/call + execute -> route/execution-cluster
resources/read -> route/resource-cluster
Гэта забезпечвае чыстыя разлікі між планамі керування і апрацоўкі дадзэнняў, адколі проміжны элемент можа з’ясаваць катэгорыю аператыўных заданняў без неабходнасці розумець схему JSON прыкладнага програма.
У выданні таксама дадаўся метаданы кэшавання праз ttlMs і cacheScope. Адпаведныя даны могу быць включаныя ў адпаведны адпаведзь:
{
"result": {
"tools": [
...
],
"ttlMs": 60000,
"cacheScope": "public"
}
}
Семантыка цяперашняя навмесна падобная HTTP cache-control. ttlMs паведамляе кліенту, як давго рэзультат залічаецца свежым, а cacheScope адказвае, чы рэзультат можна безбедна дзеліць. У фінальной спецыфікацыі "public" і "private" разлічваюцца, і рэалізавальнікам працоўваецца паведамляць, каб яны не выкорыстоўвалі значэння cacheScope як замену перакананням у автарызацыі. Крытэрый свежасці выглядае так:
fresh_until = response_received_time + ttlMs
Зазвычай кліенту следуе пераз’явіць запіт, калі ёму трэба рэзультат, а гэты рэзультат ужо не актуальны, а не выкарыстоўваць TTL як обавязковы інтэрвал паллінгу. Для рэалізацый, якія прыменяюць паллінг, спецыфікацыя рэкамендуе вікорыстоўваць механізмы джыттэра і бэкঅফфа.
Каталогі інструментаў робяць гэтыя значэнні зрозумелымі. Калі сервер перыявляе 250 інструментаў, а падключаецца 500 агентаў, сталявыя вызовы tools/list ад кожнага з іх ствараюць вялікі трафік у контрольнай сярэжцы. Разумны TTL дазволяе кліентам павтараць выкарыстоўванне каталога, а дэтэрміністычны парадак запобегае непатрэбным змянам у серыяваным наборэ інструментаў, што можа падтрымаць стабільнасць кэшаў запытаў LLM. У логу змян рэкамендуецца дэтэрміністычны парадак самэй з гэтай прычыны. Іншая перавага: канектыя SSE, якія застаюцца ачытымі, больш не ёсць ўжо ўзначальным спосабам даведання пра змяны, таму можа працаваць як кэш з свежымі данымі, так і паведамленні пра змяны.
Задачы, якія выконваюцца дзяўна
API-я без стану дасяжнае і адпаведныя яны яшчэ должны караць задачы, якія выконваюцца калькі мінут або гадоў. Возьмімо такі календар:
run_ml_training_job()
Можаць адправіць заданне на распрацоўку дадзенняў, чакаць на GPU, запускаць калькольнікэ этапаў, ствараць пункты перапакоўкі і аплодаваць рэзультаты. Падтрыманне адкрытага HTTP-з’яўлення працы ўсю гэтую час адбывання задання ёсць вразлівым. Архітэктура 2026-07-28 рашае гэтыя проблемы за дапамою расшырэння Tasks, якое ідэнтыфікуецца як io.modelcontextprotocol/tasks.
Для падтрымванага tools/call сервер можа адпаведзець, выдаваючы ідэнтыфікатор задання заместо канечнага рэзультата:
{
"resultType": "task",
"task": {
"taskId": "task_7b93...",
"status": "working"
}
}
Пасэнт тады можа запытаць пра статус:
tasks/get(taskId)
І продовжайце адзіравацыю, пакуль задача не будзе паведамлена як completed, failed або cancelled. Пашырэнне таксама прымеяе tasks/update для дадзення дапаможніх даных і tasks/cancel для анулювання.
Адна разліка ўсё ж такі важлівая. Основны протакол ўсёлякі, а пашырэнне Tasks спецыяльна стварае стабільны стан:
Core MCP
|
+---- Stateless request/response
Tasks extension
|
+---- Durable asynchronous state machine
Гэта не супераспрацоўка. Гэта раздзелэнне абавясцей. Задача можа быць прысвоўана зовнішній сістэме задаў, як у гэтым прайцэсе:
MCP tools/call
|
v
Create task
|
v
Queue / workflow engine
|
+--> Kubernetes Job
|
+--> Azure Batch
|
+--> AWS Step Functions
|
+--> Databricks Job
|
+--> CI/CD pipeline
Кліянты выкарыстоўваюць ID задання MCP як стойкі ідэнтыфікатор для апранавання стану таго зовнішньага рабочага прайсепту. У прымэтных сэтапах не трэба зберагаць стан задання толькі ў словніку внутры процэсу. Расшырэння опісвае задання як стойкія машыны станоў і рэкамендуе стойкае зберагачыце ID задання, каб запыты продаваліся і пасля збою кліянта чы рэстарту сервера.
Заставалася ўсьмохненасць у адной з рэалізацыях. Расшырэння Tasks можа яшчэ патрабаваць, каб запыты направляліся да таго сістэмы, якая зберагае стан задання. У пачатковай працэўнай працэсе Mcp-Name можа несці ID задання для операцый tasks/get, tasks/update і tasks/cancel, што дазволяе проміжным элементам адправляць дадатковыя запыты да суб’екта, які зберагае стан, калі гэта неабходна. Полны абмян межы кліянтом, серверам MCP і двігунам задання паказаны ў гэтым дыяграме парадоксу:
Client MCP Server Task DB / Engine
| | |
|--- 1. tools/call ------>| |
| |--- 2. Register Task ----->| (Status: working)
|<-- 3. Return taskId ----| |
| | |
|--- 4. tasks/get ------->| |
| \--- 5. Query state ----->| (Status: working)
|<-- 6. Status: working --/ |
| | |
|--- 7. tasks/get ------->| |
| \--- 8. Query state ----->| (Status: completed)
|<-- 9. Final Result -----/ |
У стандартным падчынку кліент пачынае выкананне задання за дапамою tools/call, а сервер запісвае інформацыю пра задання у спяльную базу дадзейна, такую як Redis, PostgreSQL, або у механізм керавання робочымі працэсамі, напрыклад AWS Step Functions чытаў Kubernetes. Пасля чаго сервер негайна вяртае taskId і пачатковы статус working. Першыя HTTP-з’ўязкі заканчываюцца чыста, і цэлкам вывалююцца сетавыя рэсурсы, а кліент перыядычна пераглядае прыбыль задання за дапамою tasks/get.
Таму точныя архітэктурныя апісанні не гласяць, што ўсё ў MCP ўсунуто з станам. Сама сэрцавая частка MCP ўсунута з станам, а станавыя дзеянні явна мадэлююцца за дапамою дадзейна прыкладнення і розшырэнняў, такіх як Tasks.
Агент для апрацоўкі дадзейна і аперацый з машынным навчаннем у працэсе вырабоцтва
Уявіце сабе платформу AI для працэсу вырабоцтва, якая надае інструменты MCP агенту падпрыёмства. Гэты агент распаўляе такія інструменты:
search_dataset()
inspect_schema()
run_sql()
start_training_job()
get_training_metrics()
deploy_model()
rollback_deployment()
Потым корыстнік просіць следзячыя дзеянні: знайсці найновейшы набор дадзэных пра пакінанне кліентаў, аналізаваць яго, атрымаваць праект модэлі, парабяліць показнікі з модэллю, якая выкарыстоўваецца у практыцы, і запусціць модэль толькі калі парадак падыходзіць як мінімум 5%.
У старай архітэктурэ з станамі сістэма могла падтрымваць дзейнае сесія протаколу, якае фіксавала взаімадзеянне, што спаявала логічны прабег задачы корыстніка з аднай інстанцай сервера. У новай архітэктурэ працэс можа быць спецыяльна спраектаваны. Першы вызов можа быць пошукам:
search_dataset("customer churn latest")
і сервер вяртае кантроллер набора дадзэнай:
{
"dataset_id": "ds_2026_08_20_0042"
}
Наступны ўпыт адбываецца праз гэты хэндл для перагляду схемы:
inspect_schema("ds_2026_08_20_0042")
Схема выйшла з метаданных сістэмы. Наступны выклік запускае навчанне:
start_training_job("ds_2026_08_20_0042")
Сервер MCP стварае стойкую задачу:
task_id = "task_train_98af..."
Сама падрэбнаець выканана параду механізма MCP. Кліент адзін за адным запытае яе:
tasks/get("task_train_98af...")
і задача можа пераходзіць праз рад стаў:
QUEUED
|
RUNNING
|
EVALUATING
|
INPUT_REQUIRED
|
RUNNING
|
COMPLETED
У стане INPUT_REQUIRED сістэма можа запрашваць санкцыю на запуск, пазначаючы, што кандыдаты ў 7,2% лепшы, але гэта прызведзе да адрыхвання віток на GPU на 18%. MRTR можа задаць гэты вопыт без падтрымкі першага з’яўлення. Кліент адпавядае так:
inputResponses = {
"approve": true
}
і запрос працюе даўжэй.
Цяпер уявіце сэрвер MCP, які працуе на шасці рэпліках Kubernetes:
Ingress
|
Load Balancer
|
+------+------+------+------+
| | | | |
MCP1 MCP2 MCP3 MCP4 MCP5
|
v
Task Store
|
+-------+-------+
| |
Redis PostgreSQL
|
v
Workflow Engine
|
+-----+------+
| |
GPU Job Model Registry
Ёнтут першы tools/call падае на MCP2, наступны запіт — на MCP5, запыт аб стане задачы — на MCP1, а практыка падтверджэння — на MCP3. Нічога не ламаецца, таму што пратакт больш не прыпускае, што сесія прыўязана да аднаго конкрэтнага сервера. Знішчаны MCP3 заменяецца Kubernetes. Калі колькісць рэплік з шасоў зменіцца на два за ноч, рабочы працэс застаецца цішы, таму што стан задачы і прыкладнення знаходзіцца параду ў процэсу. Самэ там спецыфікацыя падтверджвае свою практычную цэннасць.
Автарызацыя і паўнэйшая захоўка безпекі
Паралельна з безстановымі змянамі выконваюцца значныя падынагі праваўнай безпекі. У пасляпэльнай версіі выклікаецца стрэльнейшы статус OAuth і OIDC: серверы автарызацыі должны задаваць параметр iss так, як опісана ў RFC 9207, а кліенты MCP павінны пераканацца ў ідэнтыфікаторы выдавача пры выкарыстоўванні коду автарызацыі, чым усунуць атакі, заснованыя на плутанні сервераў автарызацыі. Крэдытнаі даныя кліента таксама прыязначаюцца таму выдавачу, які іх стварыў, таму ўжыцце іх проты іншага сервера автарызацыі забараняецца. Функцыя дынамічнай рэгістраціі кліента застаецца для сумасупадзення, але формальна ўзнікла, а ў яе месца выкорыстоўваюцца дакументы метадаў ID кліента.
Модэль абярання корыстна зменшваецца з выкарыстоўваннем прынцыпу безстановасці, хоць яна таксама прыносіць павіннасі. У рэальных умовах эксплуатацыі неабходна атрыбутавацыя кожнага запіту і разрэшэнне на выкарыстоўванне конкрэтнага інструмента чы рэсурса. Трэба пераканацца, што спецыфічныя ідэнтыфікаторы стану супадаюць з атрыбутаваным аб’ектам, запобегчы выяўленню ID заданняў, а таксама шыфруваць чутлівы стан як у схованых даных, так і пад час перадачы. Разглядзім такі прыклад:
basket_id = bsk_123
user_id = user_456
Ніхто не павінен выводзіць з гэтаго, што наявнасць bsk_123 ўсё, што трэба, каб дзеяць з кошкам. Адначы сервер павінен спачатку пераканацца ў праве на власнасць, следуючы гэтым прынцыпам:
authenticated_subject == basket.owner
А пасля — застосаваць правы на выкарыстоўванне інструменту.
Працэс распространення кантэксту трэйсінгу W3C таксама задокументаваны; ён перадаецца праз _meta за дапамою traceparent, tracestate і baggage. Трэйсінг між хостам, кліентам MCP, серверам MCP і сервісамі, які знаходзяцца ніжэй у ланцюгу, стае значна простым, і адпаведныя распрацоўшчыкі прыяўляюць яго безпасова да трэйсінгу, сумеснага з OpenTelemetry. Таму аспекты стварэння можлівасці назірання за сістэмай павінны быць часткай дызайну з самага пачатку. Шлях запіта, які працуе па прынцыпах трэйсінгу, можа выглядаць так:
User Request
|
v
Agent
|
| traceparent
v
MCP Client
|
| traceparent
v
MCP Gateway
|
v
MCP Server
|
v
Database / Queue / API
Рэзультатныя пазначкі могу паказаць цэлы ланцуг прычын-наследків, а не набор несувязаных HTTP-транзакцый.
Расшырэнні стаюць першага класа
Расшырэнні таксама атрымліваюць формальны статус. Яны вялікі час існавалі, але ніч не нагадвала зрэлага жыцёвага цыклу, роўнага жыцёваму цыклу основнага протаколу. Цяпер кожнае пашырэнне мае ідэнтыфікатор reverse-DNS, чыстае выкананне пераговораў пра можлівасці, сае власны рэпазітары, незалежную версіяванне і спецыяльную галузь у процэсе SEP.
Прычына заключаецца ў тым, што MCP развіваецца быстрэй, чым адна монолітная версія протакола можа безпечна эвалююць. Функцыя падтрымкі задач не должна прымушваць кожную рэалізацыю выпалоўваць асінхронныя распраўленыя заданні, а мінімальны сервер у фармаце командной лініі не павінен быць прымушаны вжываць MCP Apps. Большыя екосістэмы стандартоў таксама следуюць той жа прагматыцы — падтрымкі малога і стабільнага ядра, а спецыялізаваныя функцыі перакладаюць у модулі, якія зміняюцыся за сваім графікам.
У гэтым выласці два расшырэння займаюць прыорытэтныя месцы. MCP Apps дадзеяе інтэрактыўны інтэрфейс, выкананы серверам, унутрь sandbox-iframe, а Tasks дадзеяе асінхронную експансію. Рэзультуючая іерархія выглядае так:
MCP
|
+----------+----------+
| |
Core Protocol Extensions
| |
Stateless HTTP +-----+------+
| |
Tasks MCP Apps
Гэта дае MCP можлівасць розвівацца ў значна болей стабільны спосаб.
Занепады і апгрэйды
У выданні намеравана ўведзена формальная схема жыццўага цыклу функцый. Хроніка змян візначае статусы «Актыўны», «Занепадзілы» і «Удалены» і встановлівае мінімальны перыод занепаду у дванаццаць месцаў, такім чынам даўаючы распрацоўшчыкам прыкладнікаў прыемлівы перыяд міграцыі і запобiegаючы тыротным змянам кожны раз, калі прайшоў протакол.
«Roots», «Sampling» і «Logging» знаходзяцца у спіску занепадзілых элементаў. Oficыйныя рэкамендаціі па міграцыі заклёвваюць замену «Roots» на явныя параметры інструментаў, URI рысаў аб канфігурацыю сервера, замену «Sampling» на прымытую інтэграцыю з прадаўцамі LLM, а таксама замену «Logging» на stderr аб OpenTelemetry. Стары транспорт HTTP+SSE таксама занепадзілы, і прыемлемым варыянтом ёсць Streamable HTTP.
Эксперыментальный API задач з 2025-11-25 паказвае ўсё новы рубік міграцыі. Ён цяпер знаходзіцца ў расшырэнні io.modelcontextprotocol/tasks з перэработаным цыклам жыцця, які базуецца на методах tasks/get, tasks/update і tasks/cancel. Метод tasks/list больш не існуе, таму што выкананне перыяда задач без сесіі стварае проблемы з дыяпазонам прав і прыватнасцю.
Для організацыі, якая мігруе існуючы флот MCP, найбезпечнейшы парадак дзеянняў выглядае так:
- Апгрэйдаваеце SDK, а потым шукаеце код, які выкарыстоўвае
Mcp-Session-Id. Акрутна разглядзіце канцэнтрацыі, заснованыя на сесіях, рэестры з’яўленняў і правіла маршрутацыі стыкі-сесій, створаныя на аснове старой модэлі. - Раздзеляйце стан пратаколу ад стану прыкладнага праграмы, даўаючы кожнам элементу, які прэдставляе рэальны стан бізнесу, чыстае ідэнтыфікатора і перакладаючы яго ў адпаведны, стойкі сховішча.
public і private мае наследкі для безпекі.Дакументацыя па міграцыі ў чынны TypeScript SDK таксама паказвае перэходную рэальнасць. Рэалізацыі можна падтрымваць новы протакол, заўсёды зберагаючы механізмы сумеснасці для кліентаў з пакананага перыяду, тады міграцыя можа вестыцца поступова і не будзе вымагаць моментальнага пераходу на новы стан у всім экосістэме.
Што гэта значыць для архітэктуры MCP
Найсерьёзнейшы наследак — гэта тое, што MCP цяпер раздзеляе чатыры аспекты, якія раней былі зліпленыя разам:
- Слой протаколу адпавядае за значэнне паведамленняў.
- Слой транспортування перадае запіты праз HTTP або stdio.
- Слой аплікацыі зберагае стан, кантэкст автарызацыі, працэсы працы і тое, што ідэнтыфікуе бізнес-об’ект.
- Слой расшырэння з’являе неабяжлівыя функцыі, такія як асінхронныя заданні і MCP-аплікацыі.
Структура слоёў выглядае так:
+----------------------------+
| MCP Protocol |
| JSON-RPC + request model |
+-------------+--------------+
|
+-------------v--------------+
| Transport |
| stdio / Streamable HTTP |
+-------------+--------------+
|
+-------------v--------------+
| Application Layer |
| explicit IDs + databases |
+-------------+--------------+
|
+-------------v--------------+
| Extensions |
| Tasks / MCP Apps / others |
+----------------------------+
Гэта метода дазволяе значна лепшае масштабаванне, чым калекаванне всего ў адну абстракцыю сесіі з дзеянням толькі ў межах з’язку, і яна прыбліжае MCP да давно усталёных практык распрацоўкі распадзеленых сістэм: апрацоўка запытак без стану, стойкі зовнішні стан, явныя ідэнтыфікаторы, семантыка кэша, ідэмпатныя практыкі перапрыбутку, асінхронныя кантролеры заданняў і распадзеленая трэйсінг.
Компрэсіі
Ёсць паследкі. Галоўная перадчыннае — горызонтальнае масштабаванне, а цена — гэта тое, што кераванне станам стае задачай самай аплікацыі. Распрацоўшчыкі должны вырашыць, як ствараюцца кантролеры стану, як дуго яны існуюць, дзе яны зберагаюцца, як адбываецца автарызацыя доступу і як чыстацца застарэлыя кантролеры.
Паколькі можлівасці кліента і метаданы перавозяцца з кожным запыткам, розмер пакета дадзеных незначна зрастае. Дадзеннія, якія дадаюцца дапамогай, зазвычай малыя, але сістэмы з вельмі высокай праўоцэсавасцю должны утрымвацца ад непатрэбнага павтарэння такіх пакетаў.
MRTR дазваляе выкорыстоўваць HTTP без стану для абмяну, які раней выклікаў запыткі, ініціяваныя серверам, хоць ён болей відкрыта паказвае машыну стану взаімадзеі. Кліент павінен распазнаваць input_required, зберагаць стан запытку, збіраць адпаведзі і правільна прабаваць знову.
Заданні караюцца за довгачасную екзекуцыю, але за гэта ёсць хранальнік заданняў — ўсё той жа дыяфрагменны падсістэм. Гэта не дыфект, а проста явны стан, які заменяе сабою захаваны стан пратаколу.
Кэшаванне павышае эфектыўнасць, але неправільныя значэнні cacheScope могу стварыць проблемы з безпекай. Адпаведзь, неправільна пазначаная як "public", можа стаць доступной у розных кантэкстах автарызаціі, і інструкцыі з кэшавання паведамляюць, што дыямэтр кэшу не заменяе автарызацію на прымітывнам узле.
Безстановы карэн не трэба спрыяць як менш эфектыўную архітэктуру. Ёго лепей апісваць як адпаведна распадзеленую адпаведная адпаведнасць.
Канцэптуальны перакід
Калі спытвалі, дзе адбываецца логічная взаімадзея, старыя модэлі непрамаўна стваралі вражанне, што гэта відбываецца ўнутры сесіі MCP, прыўязанай да з’яўлення. Новыя модэлі замест таго спытваюць, які стан на самай працэ патрэбен, і адпаведнае адпаведнасць ёсць чытальна: ідэнтыфікатор домэна, ідэнтыфікатор задання, кантэкст автарызаціі або токен стану запіту, неабходны для продажу. Такая абстракцыя дазволяе лепшая масштабавацца.
Транзакцыі маюць ID транзакцый, рабочыя пралэты Kubernetes — ID заданняў, корзіны пакупак — ID корзін, пайплайны CI — ID запускаў, а заданняя на навчанне — ID выканання. Аплікацыі MCP цяпер можаць выкарыстоўваць тое ж самае апісанне.
Што даў гэты выласк
Гэты вылік — гэта не проста чыстка пратакту. Ён пераключае MCP з інтэграцыі агентаў, заснованых на з’яўленні з’ўязку, на хмарныя, распадзеленыя сістэмы, пры чым элементы гэтага пераключэння выглядаюць так:
- Адмова ад
Mcp-Session-Idпаставляе канец афіннасі на рэвэлі пратакту. - Адмова ад процэсу абмінання робіць кожны запіт самастойным абмінаннем.
server/discoverадкрывае можлівасць адкрыць характэрыстыкі без прыўязкі сэмантыкі сесіі.Mcp-MethodіMcp-Nameдазваляюць вікорыстоўваць трафік MCP з звычайнымі інструментамі HTTP.ttlMsіcacheScopeствараюць спакойны слоўнік для кліентаў і шлюзоў, які адносіцца да свежасці і аднародкі дадзенняў.- MRTR адмовляецца ад ідэі, што сервер, які запытае кліента, патрабуе з’ўязку, які ніколі не заканчываецца.
- Заданнія ўтвараюць стойкую абстракцыю для працы, якая трывае дыяўольш чым адзін запіт HTTP.
- Явныя хэндлы вываліваюць стан бізнесу за межы схованых транспортных метадаў і перакладаюцы яго ў сэрвэрны мадэль дадзэнняў самай аплікацыі.
- Расшырэнні запобегаюць перанасыццю основнай часткі аплікацыі, дазваляючы экосістэме працаваць быстра.
- Болей строгая автарызацыя адпавядае спосабу працы рэальных рэалізацый OAuth і OIDC.
- Канвэнціі кантэкста трэйсу з OpenTelemetry спрабоўваюць павялічыць зручнасць адзірвання распрастраненых сістэм MCP.
- Формальная політыка знявання падтрымкі дае экосістэме прыемны спосаб прыняць змяны.
Безстановы мадэль значна спрабоўвае павялічыць простатацю рэалізацыі MCP, а праца інструментаў explorer і Datasette ад незалежных распрацоўшчыкаў паказвае, што гэтая простатацыя ператвараецца на практычныі інструментарый. Яго апісанне старага протаколу як такога, які выкалікае неабходнасць ініцыялізаціі сесіі, і новага як адной самодостатней прашы прыменяецца да оператыўных змян, якіх прагледалі адпавядальныя за аптэманаванне.
Вывад для архітэктараў — MCP не адмахнуўся ад стану. Што ён адмахнуўся, так гэта — заштыненага стану, які належыў пратаколу, заменіўшы яго на явны, складальны стан, які належыць аплікацыі. Гэтае змена дазволяе серверу MCP перэйсці з такога спарування:
sticky sessions
+
shared session store
+
long-lived connections
+
connection affinity
і даўжэй да гэтага:
stateless request handling
+
ordinary load balancing
+
external durable state
+
explicit handles
+
asynchronous task primitives
Для падчынных сістэмах карпоратыў гэта ўзнаменны прынт, адколькі гэта значна лепя падходзіць для Kubernetes, автаскалінгу, выканання без сервера, API-гейтвэяў, аплынных апдэйтаў без перыядаў зупінкі, маршрутызацыі між кантэнтамі, распраўляючага трэйсінгу і велікіх платформ з калькуляцыяй за корыстуванне. Проста кажучы, гэтыя спецыфікацыі ператвараюць MCP з стандарту для таго, як агенты вызываюць інструменты, у інфраструктуру, якая практычна падходзіць для сучасных распраўляючых сістэміяў AI.