Что изменилось в MCP 2026-07-28: stateless, governed extensions и новая авторизация
Обновление Model Context Protocol от 28 июля 2026 года - крупнейшая ревизия протокола с момента его появления. Три изменения фундаментальны: отказ от сессий и рукопожатий в пользу stateless-запросов, введение governed extensions для контролируемого расширения функциональности и ужесточение авторизации через стандарты OAuth 2.0 и OpenID Connect. Все три решают одну задачу - сделать MCP пригодным для enterprise-инфраструктур, где десятки серверов за балансировщиком больше не должны синхронизировать состояние сессий.
Раньше каждый клиент устанавливал сессию, сервер хранил её идентификатор, а при масштабировании приходилось реплицировать состояние между узлами. Это создавало узкое место: падение одного сервера обрывало все сессии на нём. Новая версия протокола устраняет эту проблему архитектурно - каждый запрос самодостаточен и несёт всю необходимую информацию в заголовках. Серверу не нужно помнить, кто к нему обращался минуту назад.
Governed extensions заменяют стихийное расширение протокола, при котором разные реализации добавляли несовместимые методы. Теперь любое расширение проходит через спецификацию и получает уникальный идентификатор, что сохраняет совместимость между клиентами и серверами разных вендоров. Авторизация через OAuth 2.0 и OpenID Connect означает, что MCP-сервер можно интегрировать в корпоративные системы единого входа без самодельных токенов и костылей.
Для тех, кто работает с агентными CMS и конвейерами, это обновление критически важно: stateless-архитектура позволяет обрабатывать запросы агентов без привязки к конкретному серверу, что упрощает горизонтальное масштабирование.
Stateless-запросы: как заголовки Mcp-Protocol-Version, Mcp-Method и Mcp-Name упрощают маршрутизацию
Механизм версионности теперь работает на уровне каждого HTTP-запроса. Три заголовка несут всю информацию, которая раньше требовала разбора JSON-RPC тела:
- Mcp-Protocol-Version - версия протокола, например
2026-07-28. Сервер читает этот заголовок до обработки тела и сразу определяет, по какой логике работать. - Mcp-Method - вызываемый метод:
list_resources,read_resource,call_tool. Маршрутизатор может направить запрос в нужный обработчик без парсинга JSON. - Mcp-Name - идентификатор клиента или агента, например
my-agent. Используется для трассировки и кеширования.
Пример stateless-запроса:
GET /mcp/resources HTTP/1.1 Host: gateway.agentcore.amazon.com Mcp-Protocol-Version: 2026-07-28 Mcp-Method: list_resources Mcp-Name: my-agent Authorization: Bearer eyJhbGciOi...
Такой запрос не требует тела, сессионных cookie и предварительного рукопожатия. Балансировщик может отправить его на любой сервер кластера - состояние не хранится. Кеширующий прокси видит заголовок Mcp-Method: list_resources и понимает, что ответ можно закешировать на 30 секунд без риска отдать устаревшие данные. Системы трассировки получают Mcp-Name и связывают все запросы одного агента в единую цепочку.
Для сравнения: старая версия требовала сначала отправить JSON-RPC запрос на инициализацию, получить session ID, затем включать этот ID в каждый последующий вызов. Сервер парсил тело, извлекал ID, искал сессию в хранилище - и только потом выполнял метод. Новая схема сокращает задержку на 20-40 мс на каждом запросе только за счёт отказа от поиска сессии. При тысячах запросов в минуту это десятки секунд процессорного времени.
Governed extensions: контролируемое расширение протокола
До обновления любой разработчик мог добавить в MCP-сервер произвольный метод, и клиенты должны были либо игнорировать его, либо ломаться. На практике это привело к фрагментации: сервер А поддерживал метод search_documents, сервер Б - find_text, а клиент не знал, какой из них вызывать.
Governed extensions решают это через реестр расширений. Каждое расширение получает уникальный идентификатор в формате mcp-ext:vendor/name. Клиент при подключении запрашивает список поддерживаемых сервером расширений и активирует только те, которые понимает. Сервер, в свою очередь, объявляет расширения в ответе на list_extensions:
{
"extensions": [
{
"id": "mcp-ext:anthropic/streaming",
"version": "1.0.0",
"required": false
},
{
"id": "mcp-ext:bedrock/resource-cache",
"version": "2.1.0",
"required": true
}
]
}Если клиент не поддерживает обязательное расширение, соединение не устанавливается - и это явно указано в ответе с кодом ошибки -32020. Такой подход предотвращает скрытые несовместимости, которые в старой версии проявлялись только во время выполнения.
Практическое обновление AgentCore Gateway: вызов UpdateGateway и проверка совместимости
Amazon Bedrock AgentCore Gateway поддерживает новую версию протокола через API-вызов UpdateGateway. Это единственная операция, которая переключает шлюз на версию 2026-07-28. Никаких миграций данных или ручного изменения конфигурации серверов не требуется - шлюз сам начинает принимать запросы с новыми заголовками.
Вызов через AWS CLI выглядит так:
aws bedrock-agent update-gateway \ --gateway-identifier abc123 \ --protocol-version "2026-07-28" \ --region us-east-1
После выполнения шлюз продолжает принимать запросы старой версии параллельно с новой - это упрощает постепенную миграцию клиентов. Старые клиенты без заголовка Mcp-Protocol-Version обслуживаются по предыдущей версии протокола, новые - по 2026-07-28. Период сосуществования версий составляет 90 дней с момента обновления, после чего поддержка старой версии прекращается.
Перед вызовом UpdateGateway необходимо провести три проверки. Первая: совместимость SDK. Версии клиентских библиотек, выпущенные до июля 2026 года, не поддерживают stateless-режим и заголовки. Обновите SDK до актуальной версии - для Python это pip install mcp-client>=2.0.0, для TypeScript - npm install @modelcontextprotocol/sdk@^2.0.0. Вторая проверка: аудит кодовой базы на предмет использования удалённых функций. Третья: тестирование в staging-среде с новыми заголовками.
Если вы используете MCP-серверы на Go, обратите внимание на опыт создания stateless-серверов для Windsurf - там разбираются архитектурные решения, которые хорошо ложатся на новую модель без сессий.
Удаленные функции: logging/setLevel, Roots, Sampling
Три функции удалены из спецификации полностью. Их вызов в новой версии протокола приведёт к ошибке -32022 (method not found).
logging/setLevel - управление уровнем логирования на стороне сервера. Удалена, потому что в stateless-архитектуре сервер не хранит состояние клиента и не может помнить выбранный уровень. Альтернатива: уровень логирования задаётся через заголовок Mcp-Log-Level в каждом запросе или через конфигурацию шлюза. Для AgentCore Gateway используйте параметр --logging-level при вызове UpdateGateway.
Roots - указание корневых директорий для файлового доступа. Удалена в пользу явного указания путей в каждом вызове read_resource. Старый подход создавал неявное состояние, противоречащее stateless-модели. Если ваш агент использовал Roots для ограничения доступа к файловой системе, перенесите эту логику в параметры каждого запроса.
Sampling - управление частотой логирования и трассировки. Заменена заголовком Mcp-Sample-Rate со значением от 0.0 до 1.0. Сервер больше не хранит настройки сэмплирования между запросами - каждый запрос декларирует нужную частоту самостоятельно.
Для поиска использования этих функций в коде выполните grep по репозиторию: grep -r "setLevel\|logging/\|roots\|sampling" --include="*.py" --include="*.ts" --include="*.go". Найденные вызовы замените на соответствующие заголовки или параметры запросов.
Обработка новых HTTP-кодов ошибок: 404, 400 с кодами -32022, -32020, -32021
Новая версия протокола вводит три специфичных кода ошибок в теле ответа при HTTP 400, а также меняет семантику 404.
404 Not Found - теперь возвращается не только для ненайденных URL, но и для запросов к ресурсам, которые не существуют в данной версии протокола. Если клиент запрашивает list_resources с Mcp-Protocol-Version: 2026-07-28, а сервер не нашёл ни одного ресурса, ответ будет 200 с пустым списком, а не 404. Код 404 означает именно отсутствие эндпоинта или ресурса, а не пустой результат.
400 Bad Request с кодом -32022 - метод не найден. Возникает при вызове удалённых функций (logging/setLevel, Roots, Sampling) или опечатках в названии метода. Тело ответа:
{
"jsonrpc": "2.0",
"error": {
"code": -32022,
"message": "Method not found: logging/setLevel"
}
}400 Bad Request с кодом -32020 - несовместимость расширений. Клиент не поддерживает обязательное расширение сервера. Тело ответа содержит список требуемых расширений, которые клиент должен реализовать для подключения.
400 Bad Request с кодом -32021 - невалидный запрос. Возникает при отсутствии обязательных заголовков, неверном формате Mcp-Protocol-Version или нарушении схемы JSON-RPC. Это самая частая ошибка при миграции - клиенты забывают добавить заголовки и получают 400 вместо осмысленного ответа.
Рекомендация по мониторингу: настройте алерты на рост доли ответов с кодами -32020 и -32021 относительно общего числа запросов. Всплеск -32020 после обновления означает, что часть клиентов не поддерживает обязательные расширения. Всплеск -32021 указывает на ошибки в обновлённом SDK или ручную сборку запросов без заголовков.
Миграция на MCP 2026-07-28: чек-лист для разработчика
Шесть шагов, которые нужно выполнить до и после вызова UpdateGateway. Пропуск любого из них приведёт к ошибкам в production.
- Проверить версию SDK и обновить при необходимости. Минимальные версии: Python
mcp-client>=2.0.0, TypeScript@modelcontextprotocol/sdk@^2.0.0, Gogithub.com/modelcontextprotocol/sdk/v2. Старые версии не формируют заголовки и будут получать ошибки после отключения обратной совместимости через 90 дней. - Найти и заменить вызовы logging/setLevel, Roots, Sampling. Используйте grep, как показано выше. Для каждого найденного вызова определите, переносится ли логика в заголовки (
Mcp-Log-Level,Mcp-Sample-Rate) или в параметры запроса (пути вread_resource). - Обновить обработку ошибок. Добавьте в код проверку JSON-RPC кодов -32022, -32020, -32021 и соответствующие сообщения для пользователя или логи. Не обрабатывайте их как общий 400 Bad Request - это скроет причину проблемы при отладке.
- Протестировать с заголовками Mcp-Protocol-Version. Отправьте несколько запросов к staging-шлюзу с новыми заголовками. Убедитесь, что ответы приходят без ошибок, а методы, которые вы используете, поддерживаются в версии 2026-07-28.
- Выполнить UpdateGateway в staging. После успешного тестирования с заголовками вызовите
update-gateway --protocol-version "2026-07-28"для staging-шлюза. Проверьте, что старые клиенты продолжают работать, а новые получают ответы по новой версии протокола. - Мониторить логи после деплоя. В первую неделю после обновления отслеживайте долю ошибок -32020 и -32021. Рост выше 5% от общего числа запросов требует отката или срочного обновления клиентов.
Для команд, которые строят сложные агентные системы с множеством MCP-серверов, полезен опыт автоматизации тестирования MCP-связок - там разбирается, как проверять совместимость серверов после обновлений протокола в CI/CD пайплайне.
Stateless-архитектура снимает ограничения, которые раньше делали MCP непригодным для высоконагруженных систем. Отказ от сессий означает, что любой запрос можно обработать на любом сервере кластера. Заголовки Mcp-Protocol-Version, Mcp-Method и Mcp-Name дают балансировщику, кешу и системе трассировки всю информацию до чтения тела. Governed extensions предотвращают фрагментацию протокола. OAuth 2.0 и OpenID Connect встраивают MCP в корпоративные системы авторизации без велосипедов. Вызов UpdateGateway включает всё это одним API-запросом - но только после проверки SDK, удалённых функций и новых кодов ошибок.