Протоколы, которые придумывали для «локального сервера на одной машине», на производстве ведут себя иначе. Как только MCP-серверов становится много и они уходят за балансировщик, невидимое протокольное состояние начинает кусаться: сессии требуют sticky-маршрутизации или общего хранилища, долгоживущие стримы рвутся на таймаутах шлюзов, а запрос на согласование (handshake) превращается в точку отказа. 28.07.2026 мейнтейнеры Model Context Protocol выпустили ревизию спецификации 2026-07-28, и её главным событием они называют переход к ядру без сессий: из двунаправленного stateful-протокола MCP превращается в обычный request/response.

Главный вопрос : «Что именно меняется в архитектуре сервера и сколько стоит переезд?» Разбор — по официальному announcement и тексту спецификации.

Что произошло и где читать

  • 28.07.2026 — официальный announcement ревизии 2026-07-28 в блоге проекта (авторы — лид-мейнтейнеры David Soria Parra и Den Delimarsky).
  • Спецификация и changelog опубликованы на modelcontextprotocol.io: версия с датой 2026-07-28 доступна как отдельный документ с историей изменений.
  • SDK первого эшелона (TypeScript, Python, Go, C#) поддержали ревизию в день релиза, Rust — в бете; к announcement приложены заметные миграционные заметки для ломающихся мест.
  • Контекст по масштабам проекта (заявление мейнтейнеров, нашими замерами не подтверждено): около полумиллиарда загрузок Tier 1 SDK в месяц, TypeScript и Python пересекли по миллиарду суммарно.

Что изменилось в протоколе

АспектБылоСталоЧто это даёт инженеру
Сессияhandshake initialize/initialized и заголовок Mcp-Session-Idофициально убраны (SEP-2575, SEP-2567); каждый запрос несёт версию протокола, идентичность и возможности клиента в _metaлюбой запрос может приземлиться на любой инстанс за обычным round-robin балансировщиком, общее хранилище состояний не нужно
Обнаружениеобязателен handshakeнеобязательный вызов server/discoverклиент, которому нужно заранее узнать возможности сервера, делает один явный RPC
Состояние приложенияпряталось в транспорт сессиирекомендация: выдавать явный handle из инструмента и передавать его аргументом в следующих вызовахмодель «видит» состояние и переносит его между инструментами; отладка становится проще
Маршрутизацияшлюз разбирал JSON-телообязательные заголовки Mcp-Method и Mcp-Name для Streamable HTTP (SEP-2243)гейтвей, rate limiter и WAF маршрутизируют и учитывают вызовы по заголовкам
Запросы сервера клиентуelicitation/create, sampling/createMessage, roots/list держали открытый стримMulti Round-Trip Requests (SEP-2322): сервер возвращает resultType: "input_required" с вопросами, клиент повторяет вызов с inputResponsesсценарий «уточни у пользователя посреди вызова» работает поверх stateless-транспорта, без висящих соединений
Спискиtools/list и родственники перечитывались зановоответы содержат ttlMs и cacheScope (SEP-2549), порядок детерминированныйкаталоги инструментов кэшируются; стабильный порядок не ломает кэш промптов при переподключении
Авторизацияобычные источники ошибок OAuth-обменасервер обязан вернуть iss по RFC 9207 и клиент обязан проверить его до обмена кода (SEP-2468); application_type перестаёт ломать localhost-редиректы десктопных и CLI-клиентов (SEP-837); Dynamic Client Registration официально депрекирован в пользу Client ID Metadata Documents (CIMD); клиентские credentials привязаны к выдавшему их issuer (SEP-2352)закрывается путаница между авторизационными серверами; меньше сюрпризов у CLI-интеграций
Расширениянеформальноформальный фреймворк: Tasks переехали в расширение io.modelcontextprotocol/tasks (SEP-2663) с опросом tasks/get и tasks/update, к расширению относятся также MCP Apps и Enterprise Managed Authorization; нотификации — единый стрим subscriptions/listen с подпиской по типамопциональные механизмы развиваются отдельно от ядра
Устареваниеad hocполитика с окном минимум 12 месяцев; уходят Roots, Sampling и Logging (SEP-2577, работают ещё минимум год) и legacy HTTP+SSE транспортапгрейд можно планировать, а не переживать его

Почему отказ от сессий — это про надёжность, а не про моду

Для любого, кто эксплуатировал JSON-RPC-сервисы за балансировщиком, список выше читается как сборник снятых граблей: sticky-сессии, orphaned-стримы, «рукопожатие» как точка отказа, перезагрузка инстанса, теряющая все соединения. Перенос состояния из транспорта в явные ручки и заголовки Mcp-Method/Mcp-Name делает MCP-сервер обычным HTTP-сервисом, который можно балансировать, учитывать, логировать и обновлять штатными средствами. Обратная сторона, которую мейнтейнеры и называют честно: миграция для тех, кто завязан на Mcp-Session-Id, — ломающая; а MRTR добавляет лишних кругов там, где раньше хватало одного удерживаемого потока.

Применение к нашему направлению

Ревизия полезна не только тем, кто строит агентов:

  • Проектирование API вообще. Приёмы — «состояние в явном handle, а не в сессии транспорта», «маршрутизация по заголовкам вместо разбора тела», «кэшируемые каталоги с TTL и scope» — переносимы на любые JSON-RPC-over-HTTP сервисы, включая обычные бэкенды приложений.
  • Интеграции и шлюзы. Если вы пропускаете агентный трафик через свой gateway, новые обязательные заголовки — подарок: метсить и ограничивать конкретные инструменты можно без парсинга тела запроса.
  • Безопасность OAuth. Проверка iss до обмена authorization code — банальная, но массово пропускаемая гигиена; полезно сверить с ней не только MCP-клиенты.

Границы и риски

  • Миграция — реальная стоимость: Официальное предупреждение: дороже всего тем, кто зависел от идентификаторов сессий. Оценка переезда чужого сервера «на глаз» — обещание, которого давать не стоит.
  • Экосистема неодновременна. В проде живут серверы и клиенты ревизий 2025-06-18 и 2025-11-25; версии протокола сосуществуют через MCP-Protocol-Version, но проверять совместимость конкретной пары «клиент-сервер» всё равно вам.
  • Без сессий ≠ без состояния приложения. Рекомендация с явными handle перекладывает заботу о согласованности состояния на вас: ручка, срок жизни, отзыв — это своя проектировочная работа.
  • MRTR — не бесплатно. Сценарии «уточнить у пользователя посреди вызова» теперь стоят дополнительных кругов запрос-ответ.

Как использовать информацию

  1. Прочитать changelog ревизии (modelcontextprotocol.io/specification/2026-07-28/changelog) и найти в нём свои зависимости от сессий и стримов.
  2. Провести аудит своих MCP-серверов и клиентов: где используется `Mcp-Session-Id), handshake, удерживаемые SSE-потоки.
  3. Настроить проброс и проверку Mcp-Method/Mcp-Name на своём шлюзе — это можно сделать и до переезда.
  4. Проверить авторизацию: валидация iss по RFC 9207, поведение localhost-редиректов для CLI/десктоп-клиентов, план перехода DCR → CIMD.
  5. Заложить в roadmap переезд до истечения 12-месячных окон устаревания Roots, Sampling, Logging и HTTP+SSE.

Полезные ссылки

  1. Текст спецификации.
  2. Блог Model Context Protocol.