>_toolkitbox

~/ / Статьи об ИИ / Спецификация MCP 2026-07-28: что изменилось и что проверить в собственных файлах

Спецификация MCP 2026-07-28: что изменилось и что проверить в собственных файлах

Редакция 2026-07-28 спецификации Model Context Protocol (MCP) убирает сессии на уровне протокола, объявляет устаревшими прежний транспорт HTTP+SSE и ряд возможностей и смягчает правила для схем инструментов. В статье изложен официальный список изменений и показано, как проверить два файла, которые вы пишете сами: конфигурацию MCP и схемы своих инструментов.

Опубликовано: · Сверено с официальной спецификацией 2026-10-24. Статья излагает её содержание и не заменяет её.

Главные изменения

  • Сессии на уровне протокола и заголовок Mcp-Session-Id удалены из транспорта Streamable HTTP. Сервер, которому нужно состояние между вызовами, использует явные дескрипторы: он сам создаёт их и передаёт как обычные аргументы инструментов.
  • MCP становится протоколом без состояния: рукопожатие initialize удалено. Каждый запрос несёт версию протокола и возможности клиента в _meta, а при несовпадении версий возвращается UnsupportedProtocolVersionError.
  • Серверы обязаны реализовать новый вызов server/discover, в котором сообщаются поддерживаемые версии протокола, возможности и идентификация сервера.
  • HTTP-эндпоинт GET и resources/subscribe заменены на subscriptions/listen: один долгоживущий поток ответа для уведомлений об изменениях, на которые клиент подписался.
  • Запросы, инициируемые сервером, такие как roots/list, sampling/createMessage и elicitation/create, заменены шаблоном Multi Round-Trip Requests: сервер возвращает результат, в котором запрашивает ввод, а клиент повторяет исходный запрос вместе со своими ответами.
  • Экспериментальные задачи (tasks) переносятся из ядра протокола в официальное расширение.
  • Возобновляемые потоки SSE (Last-Event-ID) удалены. Оборвавшийся поток ответа теряет запрос, который выполнялся, и клиент должен отправить его заново как новый запрос.

Что теперь объявлено устаревшим

ВозможностьОбъявлено устаревшим вСамое раннее удалениеРекомендуемый переход
Roots2026-07-28Первая редакция, выпущенная 2027-07-28 или позжеПередавать каталоги или файлы через параметры инструментов, URI ресурсов или конфигурацию сервера
Sampling2026-07-28Первая редакция, выпущенная 2027-07-28 или позжеНапрямую интегрироваться с API провайдеров LLM
Logging2026-07-28Первая редакция, выпущенная 2027-07-28 или позжеПисать журнал в stderr для stdio или использовать OpenTelemetry
Dynamic Client Registration2026-07-28Первая редакция, выпущенная 2027-07-28 или позжеClient ID Metadata Documents
Транспорт HTTP+SSE2025-03-26Через три месяца после того, как SEP-2596 получит статус FinalStreamable HTTP
Значения thisServer и allServers параметра includeContext2025-11-25Следует за SamplingОпустить поле или использовать none

Устаревшая возможность остаётся частью спецификации. Самое раннее удаление указывает, когда её можно будет удалить, а фактическое удаление решается при подготовке выпуска. Новая политика жизненного цикла возможностей устанавливает минимальный срок устаревания в двенадцать месяцев.

Проверьте конфигурацию MCP

Если в вашей конфигурации всё ещё используется транспорт HTTP+SSE, он входит в список устаревших. В документации Claude Code тип sse тоже назван устаревшим, и там рекомендуется использовать HTTP-серверы там, где они доступны. Спецификация описывает замену, Streamable HTTP: сервер предоставляет единственный эндпоинт, принимающий POST, а клиент отправляет каждое сообщение JSON-RPC отдельным HTTP POST.

  • Каждый POST должен содержать заголовок Accept, в котором перечислены и application/json, и text/event-stream.
  • Каждый POST должен содержать заголовок MCP-Protocol-Version, значение которого совпадает с версией протокола в теле запроса.
  • Запросы несут заголовок Mcp-Method, а для tools/call, resources/read и prompts/get ещё и заголовок Mcp-Name.
  • Сервер отвечает на каждый запрос одним объектом JSON или потоком SSE, относящимся только к этому запросу.

Какую редакцию протокола поддерживает ваш клиент, нужно смотреть в документации клиента. Приведённая ниже проверка читает .mcp.json или claude_desktop_config.json и сообщает о таких записях, как удалённый сервер без type или сервер, который всё ещё использует sse.

Попробовать: MCP Config Checker

Правила проверены по документации 2026-10-23.

Документация: Claude Code / Model Context Protocol / VS Code

Не проверяется: существует ли команда, устанавливается ли пакет, отвечает ли удалённый сервер, а также настройки, которые другие приложения читают по-своему.

Всё выполняется в вашем браузере. Конфигурация не загружается на сервер.

В схемах инструментов можно использовать весь JSON Schema 2020-12

  • inputSchema и outputSchema теперь допускают любое ключевое слово JSON Schema 2020-12, а structuredContent может быть любым значением JSON. Спецификация добавляет требования к разрешению $ref и границы для ресурсов, которые могут использовать ключевые слова композиции.
  • Сервер может пометить параметр инструмента атрибутом x-mcp-header, чтобы его значение копировалось в HTTP-заголовок Mcp-Param-{name}. Помеченный параметр должен быть строкой, целым числом или булевым значением, но не числом.
  • Помеченное свойство должно быть достижимо от корня схемы только по ключам properties. Цепочка не должна проходить через items, oneOf, anyOf, allOf, not, if/then/else или $ref.
  • Клиент, использующий Streamable HTTP, должен отклонять определение инструмента, в котором аннотация x-mcp-header нарушает эти правила; это означает, что инструмент исключается из результата tools/list.

Чтобы протестировать схему инструмента, вставьте её вместе с примером набора аргументов в приведённый ниже валидатор. Он проверяет основные ключевые слова Draft 2020-12 и сообщает, какие из них не проверяет.

Попробовать: JSON Schema Validator

Для поддерживаемых ключевых слов следует JSON Schema Draft 2020-12. Читает $ref только внутри той же схемы.

Всё выполняется в вашем браузере. Схема и данные не загружаются.

Вопросы безопасности для серверов

  • Сервер обязан проверять заголовок Origin во всех входящих соединениях, чтобы предотвратить атаки DNS rebinding. Если заголовок присутствует и недействителен, сервер должен ответить HTTP 403 Forbidden.
  • Сервер, работающий локально, должен привязываться только к localhost (127.0.0.1), а не ко всем сетевым интерфейсам (0.0.0.0).
  • Серверам следует реализовать надлежащую аутентификацию для всех соединений.
  • Сервер, обрабатывающий тело запроса, должен отклонять запрос, заголовки которого не соответствуют телу, с ответом HTTP 400 и ошибкой JSON-RPC HeaderMismatch (код -32020).
  • Серверам авторизации следует включать параметр iss в ответы авторизации (RFC 9207), а если iss присутствует, клиенты должны проверить его, прежде чем обменивать код авторизации.
  • Клиенты должны привязывать сохранённые учётные данные клиента к издателю (issuer), который их выдал, и не должны использовать их повторно с другим сервером авторизации.

Источники