Команда разработки протокола MCP выпустила новую версию 28 июля 2026 года, которая отказывается от сессий на уровне протокола и принудительно переводит каждый запрос в stateless-режим. Если вы используете MCP-клиенты, серверы или агенты, вам придется переписать код, который полагается на постоянный ID сессии, иначе вы столкнетесь с ошибками маршрутизации, промахами кэша и бесконтрольной фоновой работой.

Почему это важно

Раньше MCP требовал выполнения «рукопожатия» (handshake), в результате которого создавался идентификатор сессии. Входящие сервисы полагались на этот ID, чтобы гарантировать, что серия запросов попадет на один и тот же процесс, позволяя балансировщикам нагрузки использовать «липкую» маршрутизацию (sticky routing) и хранить данные сессии в памяти. Релиз июля заменяет эту модель на чистый поток «запрос-ответ». Теперь сервер можно добавлять или удалять, не беспокоясь о потере сессий. Протокол больше не сохраняет контекст; теперь это обязанность приложения.

Команды, сохраняющие старый код, ориентированный на сессии, столкнутся с тем, что запросы будут перенаправляться на неверные экземпляры, кэши будут давать промахи, а фоновые задачи — накапливаться. Команды, перешедшие на stateless-паттерн, смогут использовать MCP за не-sticky балансировщиками нагрузки и получат более точную наблюдаемость (observability) всей цепочки запросов.

Что изменилось на самом деле

  • Жизненный цикл протокола — «рукопожатие» и ID сессии исчезают. Каждый запрос должен содержать всю информацию, необходимую серверу; нет никакой гарантии, что последующий запрос попадет на тот же процесс.
  • HTTP-маршрутизация — шлюзы теперь считывают два новых заголовка, Mcp-Method и Mcp-Name, чтобы решить, куда перенаправить запрос. Маршрутизация через session-cookie больше не работает.
  • Кэширование — в спецификацию добавлены поля ttlMs (время жизни в миллисекундах) и cacheScope для операций чтения. Вы сами решаете, допустимы ли устаревшие данные, и соответствующим образом настраиваете кэш.
  • Наблюдаемость — блок _meta теперь ожидает полезную нагрузку W3C Trace Context, что позволяет системам трассировки объединять работу пограничных шлюзов, инструментов и бэкенда в единый сквозной след (end-to-end trace).
  • Композиция — расширения формализованы; новые возможности можно добавлять без изменения основной спецификации, что способствует архитектуре плагинного типа.
  • Длительные задачи — простого цикла «запрос-ответ» больше недостаточно для задач, выполняющихся минуты или часы. Протокол теперь определяет объект Task для асинхронной работы, снабженный механизмами управления жизненным циклом.

Риски, скрытые в устаревшем коде

Быстрый аудит часто выявляет паттерны, предполагающие наличие состояния (statefulness):

  • In-memory карты (в памяти), где ключами служат ID сессий.
  • Балансировщики нагрузки, настроенные на sticky sessions.
  • Процедуры запуска, которые предварительно загружают данные конкретной сессии в локальную память.
  • Логика очистки, которая удаляет бизнес-данные при завершении сессии.

Если хотя бы один из этих элементов сохранится после миграции, система начнет терять данные или утекать ресурсами под нагрузкой.

Конкретный чек-лист по миграции

1. Проведите инвентаризацию текущих допущений

Составьте карту всех мест в коде, где используются ID сессий, правила sticky-маршрутизации или локальный кэш процесса. Задокументируйте, какие компоненты зависят от каждого из них.

2. Сделайте идентификацию явной

Добавляйте ID тенанта (tenant ID), ID запуска (run ID) и ID пользователя (user ID) в каждый полезный нагрузку или заголовок запроса. Относитесь к этим идентификаторам как к единственному источнику истины для авторизации и партиционирования данных.

3. Обновите конфигурацию маршрутизации

Замените маршрутизацию на основе сессий правилами, считывающими Mcp-Method и Mcp-Name. Протестируйте новую логику шлюза на минимальном развертывании из двух экземпляров за не-sticky балансировщиком нагрузки.

4. Рефакторинг логики кэширования

Перейдите на использование новых полей ttlMs и cacheScope. Проведите нагрузочное тестирование, чтобы увидеть, как различные значения TTL влияют на частоту попаданий в кэш (hit rate) и требования к актуальности данных.

5. Включите сквозную трассировку

Заполняйте блок _meta заголовком W3C Trace Context. Убедитесь, что трассировка теперь проходит от пограничного шлюза через ваши бэкенд-сервисы без разрывов.

6. Используйте модель Task для асинхронной работы

Определите, кто может создавать задачу, установите максимальное время выполнения и ограничьте лимиты очередей. Добавьте явные политики отмены и повторных попыток, а также ограничьте действия агента, пока задача находится в статусе ожидания.

7. Изучите примечания к релизам SDK и клиентских библиотек

Ознакомьтесь с ними до 28 июля.

8. Запустите регрессионные тесты, ориентированные на сценарии ошибок

Помимо тестов основного сценария (happy path), имитируйте отсутствие заголовков, истекшие задачи и некорректные директивы кэширования. Убедитесь, что система корректно обрабатывает такие сбои (graceful degradation).

На что обратить внимание в дальнейшем

Команды, проводящие миграцию безопасно, будут тестировать границы системы, а не только основной сценарий. Любое развертывание в продакшене, которое все еще ожидает наличия ID сессии после 28 июля, может потерять совместимость с новыми MCP-серверами.