~/ / Статьи об ИИ / Спецификация 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) удалены. Оборвавшийся поток ответа теряет запрос, который выполнялся, и клиент должен отправить его заново как новый запрос.
Что теперь объявлено устаревшим
| Возможность | Объявлено устаревшим в | Самое раннее удаление | Рекомендуемый переход |
|---|---|---|---|
| Roots | 2026-07-28 | Первая редакция, выпущенная 2027-07-28 или позже | Передавать каталоги или файлы через параметры инструментов, URI ресурсов или конфигурацию сервера |
| Sampling | 2026-07-28 | Первая редакция, выпущенная 2027-07-28 или позже | Напрямую интегрироваться с API провайдеров LLM |
| Logging | 2026-07-28 | Первая редакция, выпущенная 2027-07-28 или позже | Писать журнал в stderr для stdio или использовать OpenTelemetry |
| Dynamic Client Registration | 2026-07-28 | Первая редакция, выпущенная 2027-07-28 или позже | Client ID Metadata Documents |
| Транспорт HTTP+SSE | 2025-03-26 | Через три месяца после того, как SEP-2596 получит статус Final | Streamable HTTP |
| Значения thisServer и allServers параметра includeContext | 2025-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), который их выдал, и не должны использовать их повторно с другим сервером авторизации.