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

Міграцыя MCP-сервера на спецыфікацыю 2026-07-28: дваццаць хвілін, крок за крокам

Пераводзім MCP-сервер на спецыфікацыю 2026-07-28 прыкладна за дваццаць хвілін: сесій больш няма, пяць змен, якія трэба ведаць, крокі для Python SDK 2.0 і перапісванне пад MRTR.

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

Крыніцы: Your MCP Server Is Running on a Deprecated Spec. Here’s the 20-Minute Migration.

Нічага не зламалася, і гэта самае трывожнае. 28 ліпня 2026 года протакол Model Context Protocol публікав сваю спецыфікацыю 2026-07-28 — найбольшыя змяны з моменту першага з’яўлення далёкага MCP. Адметкі, на якія рэгулярна рэгулярна спакоўваліся серверы, былі знятыя з вжыцтва, а модэль транспорту зменіла свой фармат, пры тым сумяшнасць засталася. Серверы продавалі сваю работу без логаў кэшування, алармоў чы ўпаваджэння красных паведамленняў.

Гэта ўжо той тып тэхнічнага боргу, які застаецца непазначаным, пакуль хтось не патрабуе расшырэння магчымасцей, або пакуль не заканчываецца дванаццацімі месцамі перыоду зняцья з вжыцтва, і якая-небудзь залежнасць перастае падтрымвалася. Сервер, які яшчэ вікорыстоўвае версію 2025-11-25, астаецца адстаючым. Сервер, які працуе за дапамогою старой модэлі HTTP+SSE, вікорыстоўвае тэхналогію, якая ужо знята з вжыцтва, а таксама, можа, тры функцыі, якія ўскора будуць знятыя.

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

Чаму былі выкарыстоўваны сесіі

Інжынерныя мотыўы пояснююць усё іншае. MCP быў запусцаны ў канцы 2024 года як протакол, орыентаваны на сесіі: кліент пачынае працу з сігналу initialize, сервер выдае Mcp-Session-Id, і кожны наступны запіт несе гэты ідэнтыфікатор. Гэта падходзіла для первіснага варыянта, калі быў толькі адны кліент і адны сервер на адной машыне праз стандартны ввод-выход.

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

Зважыце, калікія патрабаванняя ў ідэнтыфікатора сесіі. Або тэхніка «sticky routing», калі адзін кліент завжды прабывае да той самай інстанцы, або спяльны хранальнік сесій, да якога можа звернуцца будзь-яя інстанцыя. Звычны HTTP-сервіс раптам патрабуе балансавання навантажэння, якое врачоўвае афінітэт, і чагось у родзе Redis, проста каб задовольніць транспортныя выкарыстанні, перш чым ён зможа выконваць якія-небудзь корыстныя задачы.

У пастаце Дэвіда Сорыя Парры і Дэна Дэлімарскага все сказана працоўна: MCP пераходзіць з двухкультурнага, з станам протаколу на протакол запыт/адказ без стану, што было аднам з найбольш патрабаваных змян ад распрацоўшчыкаў, якія хацелі надзеянасці і масштабавання. Трывожнасць выказвае сама велічына. SDK-ы першага рангу маюць майжэ паў мільярда завантажэнняў на месцы, а SDK-ы на TypeScript і Python кожны з іх перасігнуў мільярд загалом. Протакол такога масштабу не можа продовжваць заставляць кожнае развертанне рашаць прыбліжнасць сесій.

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

Пяць змян, якія трэба зрозумець

1. Няма рукапрымства, няма заголовка сесіі

Абмянка пакетаў initialize і initialized асобнае з заголовкам Mcp-Session-Id офіцыйна знятыя з вжыцтва (SEP-2575 і SEP-2567). Кожны запіт ёсць самастоятэльным, пры чым версія, ідэнтыфікатор кліента і яго можлівасці знаходзяцца ў роўні _meta. Запыт па новай спецыфікацыі выглядае так:

POST /mcp HTTP/1.1
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: search

{"jsonrpc":"2.0","id":1,"method":"tools/call",
 "params":{"name":"search","arguments":{"q":"otters"},
 "_meta":{"io.modelcontextprotocol/clientInfo":
              {"name":"my-app",
                "version":"1.0"}
          }}}

Кліент, які хочаць знайсці заздалегідзе прызначэнні сервера, можа выкарыстоўваць новы RPC server/discover; гэта не ўмовна, і гэта ўжо не ўмовны процэс абмавінання.

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

2. Два ўмовныя заголовкі

З тэперашнья часу запыткі HTTP у Streamable павінны мяць атрыбуты Mcp-Method і Mcp-Name (SEP-2243), і ад сервера апэкўваецца падтверджэнне, што яны адпавядаюць запытцы. Гэта прыносіць перавагі інфраструктурэ: шлюз, лімітар швайнаў чы ўраджэнне атак можа кераваць трафікам і ведаць колькасць запыткаў за дапамогою галоўных атрыбутаў, а таксі прыпініць парсінг JSON. Усі, хто раней адмовіўся ад лімітавання швайнаў па кожным інструменту, таму што назва інструмента была захавана ў тэле запыткі, цяпер маюць можлівасць гэта зробіць.

3. Адпаведныя для кэшавання адпаведзі

Рэзультаты з tools/list, prompts/list, resources/list і resources/read цяпер уключаюць ttlMs і cacheScope (SEP-2549) і вяртаюцца у дэтэрміністычным парадку. Кліенты можаць кэшаваць каталог вашых інструментоў і падтрымліваць стабільнасць кэша запытанняў у вышэйшых роўнях праз паўтарныя падключэнні. Паколькі значны частака сумы за токены агента складаецца з паўтарна адправляваных ваказаў інструментоў, гэта таксама служыць функцыяй контролю віток.

4. Жорсткейшая автарызацыя

Было внесена чатыры змены, і адна з іх можа поясніць баг, з якім вы вялі борацца:

  • Серверы автарызацыі должны вяртаваць параметр iss, заданы ў RFC 9207, а кліенты должны яго пераканацца перад выкарыстаннем коду (SEP-2468), чым закрываецца атака на памылку атрыбутаў.
  • Кліянты задаюць application_type пад Дынамічным рэгістрацыяй кліента (SEP-837), таму серверы автарызацыі перастаюць адхоўляць перыядры на localhost для дэсктопных і CLI-прыстрымоў. Калі працэс OAuth для CLI калі-небудзь збіўся за прычыной памылкі redirect_uri, верагодна, гэта і ёсць прычына.
  • Крэдытнаі даныя кліента прыязначаны таму, хто іх стварыў, і не можна іх вярнуць у вжыцце на разных серверах автарызацыі (SEP-2352).
  • Сама Дынамічная рэгістрацыя кліента формальна ўстарэлілася на корыстцу Дакументаў метадаў ID кліента. Яна яшчэ працюе, але будзе знята ў будучых версіях.

5. Спіс устарэлых элементаў

Слова «устарэлы» тут мае важлівы значэнь. Рэшэнья Root, Sampling і Logging (SEP-2577) ўстарэлі, але застаюцца функцыональнымі, і ў іх шчэ ёсць прынеймна дванаццац месцаў на адхоўленне, таму новыя рэалізацыі не должны іх вжываць. Стары спосаб перадачы дадзенаў HTTP+SSE таксама ўстарэліў, і ў ім таксама ёсць годзіна на поступовае адхоўленне.

Функцыя tasks была перамешчана, а не знята з выкарыстоўвання. Яна перайшла з экспэрыментальнага ядра ў розшырэнне io.modelcontextprotocol/tasks; для яе запытанняў вікорыстоўваецца tasks/get, а для апдэйтаў — новы метод tasks/update (SEP-2663). Уведамленні пра змяны цяпер надаюцца праз адну тэчку subscriptions/listen, у якую кліенты можаць падключыцца за сваім бажаннем.

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

Міграцыя, па кроках

У гідзе выкарыстоўваецца Python SDK; яго перайменаванне ўсё болей ускладнюе працу, чым у іншых трох, хоць структура застаецца тая ж у TypeScript, Go і C#.

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

Мінуты 2 да 5: апдэйтуйце SDK. Python SDK досяг версіі 2.0.0 у той дзень, калі былі апублікаваны спецыфікацыі, і цяпер pip install mcp завантажае версію 2.x.

pip install --upgrade "mcp>=2"

Адзін важлівы змяненні, пра які трэба знаты: SDK перайшоў з httpx на httpx2. Калі httpx выкарыстоўваецца іншым чынам у вашай іерархіі залежнасцяў, трэба гэта выправіць зараз.

Мінуты 5-10: перайменаваць клас. Усе Python-серверы падвергаюцца вплыву. FastMCP цяпер называецца MCPServer; няма аліяў і няма спецыяльных механізмаў для постауповага зняць яго выкарыстоўванне:

# Before, on mcp 1.x
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Demo")

# After, on mcp 2.x
from mcp.server.mcpserver import MCPServer

mcp = MCPServer("Demo")

У той жа самай версіі ўключаны ўсьмо тры перэйменаванні:

# Wire types are snake_case now
result.isError        # → result.is_error
tool.inputSchema      # → tool.input_schema

# The error class matches the new capitalisation
except McpError:      # → except MCPError:

mcp-types цяпер ўтварае самастоятэльны пакет, але mcp.types застаецца падтрымліваным шляхам для імпорту, таму такі імпорты продовжуюць працаваць. Увага: тыя, хто вікорыстоўвае самастоятэльны пакет fastmcp заместо офіцыйнага SDK, не будуць парадзеяны. Гэта аднае іншае праекта з сае сябе 3.x версіямі, і адна з прычын перайменавання — ўтрымаць іх адзін ад другога.

Мінуты 10–15: адмахнуцца ад механізмаў сесій. Слоўнікі сесій, таймеры для чысткі і экземпляр Redis, створаны толькі для зберагання стану сесій, можна ўсе адмахнуцца. Калі справаўна патрэбна працёздатнась між вызывамі, выкорыстаце шаблон handle:

# Instead of hiding state in a session the model can't see:
@mcp.tool()
def open_dataset(path: str) -> str:
    """Open a dataset and return a handle for subsequent calls."""
    handle = register_dataset(path)     # your own store, your own TTL
    return handle                        # the model now HOLDS this

@mcp.tool()
def query_dataset(handle: str, query: str) -> list[dict]:
    """Query a previously opened dataset."""
    return lookup(handle).query(query)

Мінуты 15–18: параболізацыя новых заголовкаў. Сервер павінен пераканацца, што прыходзячыя значэнні Mcp-Method і Mcp-Name супадаюць з запітам. SDK пакрывае звычны шлях, але за кордонам спецыяльнага гейтвэя або ручна напісанага транспорту неабходна пераканацца ў цэласообразнасі на всіх етапах.

Мінуты 18–20: выправленне коду памылкі. Яго лёгка працягнуць, і гэта спрычыняе плутаную працу кліента. Памылкі з прычыны відсутнасці рэсурса должны выкарыстоўваць стандартны код JSON-RPC invalid-params -32602, а не власны код MCP -32002.

Можна выпускаць

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

Калі трэба больш часу

Серверы, які выкарыстоўваюць методы выборкавання, запітоўвання або іншыя падобныя падходы, сталкнуцца з неабходнасцю повнага перапісву коду, што Real Python называе самым значным пунктам у спіску заходаў па міграцыі. Раней сервер могаў ініціяваць запіт і адправіць адпаведзь кліенту праз відкрыты двунаправлены поток. У безстановым дызайне такога потоку няма, таму для выкарыстоўвання інформацыі прымаецца мадэль калькуляцыі за дапамою калькуляцый кількіх раундоў (SEP-2322).

Новы прыем працюе так: сервер адпавядае з resultType: „input_required“ і запытаннямі, на якія трэба адпаведзці, а кліент пасля таго павтарае первісны запыт, адправляючы сваія адпаведзі ваўле inputResponses. Гэта змінюе спосаб напісання інструментаў. Апрацоўшчык не можа зупініцца на паўпаце і чакаць на адпаведзь. Йго можна вызваць калькуляцый разоў для адной логічнай операцыі, і ён павінен правільна продактуваць працу, калі прыйдзе інпут, таму все, што зберагаецца ў локальных зменных пад час паўпацы, павінна быць зберагнута там, куды зможа дасягнуць прабная вызов.

Рэзультаты ўжо ёсць рэальныя. Каляндар развіцця Supabase паказвае, што такая функцыя давно была ў планах, але не могла быць рэалізавана, таму што ўсе ўсія серверы MCP працуюць без зберагання стану, а MRTR дазволяе гэта зробіць, паўстаноўляючы можлівасць для інструментаў паверкі з корыстнікам перад тым, як выконваць задачу, напрыклад, для вычыслення косту новага праекта або запыту, які мог бы стварыць відмену дадзенняў. Стварэнне такога інструмента стае трохі сложнейшым, але ўмоžненне яго працы без зберагання стану у масштабных умовах стае рэальнасцю.

Што дае новы пратакол

Manufact выконваее тыячы сервераў MCP і падтрымлівае фрэймворк адкрытага кода mcp-use. Компанія зафіксавала, што версія SDK v2 ў апрыксімаванні на 83% меньшая за розмерамі і на 25% быстрэйшая, прычынай чаго назвала новы падзэл кліента і сервера. У аналізе экасістэмы ад Agentic AI Foundation зазначаецца, што сервер цяпер дзейнае як будзь-яшы іншы HTTP-сервіс, адпавядаючы з той інстанцыі, якую выбірае балансавальнік, а гейтвейі здыйснююць маршрутызацыю і обмежэння частоты запытоў за дапамогою заголовкаў. Дванаццацьмесячная стратэгія значыць, што пратакол таксама не будзе розвівацца без удзеле компаніі.

Для адаптавання такога адкрытага стандарта працэўвалася быстра. За калькі дзён прадаўцы інфраструктуры, адпаведальныя за SDK, платформы воблака і вэндоры інструментаў аанунсавалі падтрымку, выдалі інструкцыі па міграцыі і выпусцілі версіі для практычнага выкарыстоўвання. SDK Agents ад Cloudflare працавае з гэтымі стандартамі з самага пачатку, Amazon Bedrock AgentCore апрацоўвае безстановыя элементы, а Microsoft Foundry, Netlify, Figma, Supabase і Honeycomb таксама прыўялі удзел. Honeycomb заявляе, што майжэ адна з пяці ўсіх месячных інтэрактыўных запытоў зараз надходзіць ад агентаў, што пояснюе важнасць гэтага явішча. Агенты выйшлі за межы этапы дэманстрацый.

Заліквідаванне падтрымкі версіі 1.x

Гэта легітымны выбар. Можна застацца на гэтай версіі і чакаць:

# Buys you time, keeps security patches coming
pip install "mcp>=1.28,<2"

Калі вы там, ведаце два моманты. Лінія 1.x знаходзіцца ў рэжыме тыпавання, дзе выконваюцься толькі правкі з аспекту безпекі. А пашырэнне Tasks яшчэ не ўключанае ў версію Python SDK 2.0, таму ёна застаўлена ў базовых спецыфікаціях, не потрапіўшы ў SDK. Для корыстувачаў Python, якія залежаць ад Tasks, правільны выбор — чакаць. Поставіце нагадку ў календары на дванаццаць месяцаў пасля выходу версій Roots, Sampling і Logging, адтолькі ўпоры ў зняважэнні функцый здаюцца безканечнымі, пакуль яны не заканчыцца.

Апасцеркаяць нявыразнае зняважэння

Радыкальныя змены ўсёвідомны: ўнаследкі іх будова прагрываецца, з’яўляюцца проблэмы, і ўсё гэта лягчае рашацца. Зняважэння ж за сваёю сутнасцю ёсць тыхім. Сервер працуе, тэсты праходзяць, і нічы не паказвае проблем, аднак проблемы накапліваюцца: транспорт з датай заканчыць дзеяння, немае можлівасці лёгкага горызонтальнага масштабавання, а залежнасці застаюцься ў рэжыме тыпавання, пакуль экасістэма розвіваецца далей. Версія, заданая ў MCP-Protocol-Version, — гэта дата, і варта пераканацца, якой ёй зараз вік.

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

Спадні матэрыялы

  • Порэванаўанне 16 архітэктураў RAG: каторы патэрн падходзіць для каторай проблемы — Аналіз шанзацоў RAG у чатырох катэгорыях: ад стандартнага і гібрыднага адзысквання да агентных, графічных і федэраваных дыяграм, з практычным планам разработкі месцам за месцам.
  • ClickHouse MCP і меры чытання-жадання: структураваны доступ для агентаў — Доступ MCP толькі для чытання не запобегае запісам, а таксама некорэктным цыфрам, выцекам даных або адкрыцці схемы. Дакладнейша інфармацыя пра рэзультаты тэстаў ClickHouse і способы, якімі структураваныя інструменты для метрык зменшаюць рызыкі.
  • Стварэнне сервера MCP для журналу працы, які можна шукаты, за 190 ліній TypeScript — невялікі сервер MCP, які працуе з файламі у фармаце Markdown: чатыры інструменты на адміністрацыю, апісанні у стылі запітаў, дэмант-кліент на стандарцы stdio, які таксама служыць для тэставання, а таксама рэальныя прыемніцы.