Переход на редакцию 2026-07-28
Что изменилось в MCP 2026-07-28 по сравнению с 2025-11-25 и что менять в сервере и клиенте - отказ от initialize и сессий, MRTR, новые заголовки, коды ошибок, кэш
сверено со списком изменений спецификации 4 октября 2026
Источник - Key Changes редакции 2026-07-28. Ниже изменения сгруппированы по тому, что нужно сделать.
Главное
Заголовок раздела «Главное»Было в 2025-11-25 |
Стало в 2026-07-28 |
Изменение |
|---|---|---|
initialize и notifications/initialized |
версия и возможности в _meta каждого запроса |
SEP-2575 |
сессии, заголовок Mcp-Session-Id |
сессий нет; состояние - через явные идентификаторы в аргументах | SEP-2567 |
сведения о сервере из ответа на initialize |
обязательный для сервера запрос server/discover |
SEP-2575 |
сервер отправляет elicitation/create, sampling/createMessage, roots/list |
сервер возвращает результат «нужны данные», клиент повторяет запрос | SEP-2322 |
поток по GET, resources/subscribe, resources/unsubscribe |
один запрос subscriptions/listen |
SEP-2575 |
ping, logging/setLevel, notifications/roots/list_changed |
удалены | SEP-2575 |
возобновление потока по Last-Event-ID |
не поддерживается | SEP-2575 |
| Tasks в основном протоколе (экспериментально) | Tasks - отдельное расширение | SEP-2663 |
Что менять в сервере
Заголовок раздела «Что менять в сервере»- Не ждать
initialize. Версию и возможности клиента брать из_metaзапроса. Запрос без обязательных полей отклонять с кодом-32602. Подробнее - «Ядро без состояния». - Реализовать
server/discover. Это обязательный запрос. Формат - на странице «Обнаружение». - Не хранить состояние «по соединению». Списки инструментов, ресурсов и шаблонов не должны зависеть от соединения. Если между вызовами нужно состояние, выдавать идентификатор и принимать его аргументом - см. «Инструменты с состоянием».
- Заменить запросы к клиенту на MRTR. Вопрос пользователю и прочие обращения к клиенту вкладываются в результат. Порядок - «Многошаговые запросы».
- Добавить
resultTypeво все результаты. Значение"complete"для обычного результата. - Добавить
ttlMsиcacheScopeв результатыtools/list,prompts/list,resources/list,resources/templates/list,resources/readиserver/discover. - Проверять заголовки HTTP.
MCP-Protocol-Version,Mcp-Method,Mcp-Nameобязаны совпадать с телом; при расхождении -400и код-32020. См. «Транспорты». - Поменять код «ресурс не найден» с
-32002на-32602. - Отвечать
405на GET и DELETE по адресу MCP, если сервер поддерживает только новую редакцию - это рекомендация спецификации. - Журнал. Сообщения
notifications/messageотправлять только по запросам, где клиент указал уровень в_meta. Сама функция Logging объявлена устаревшей - см. «Что устарело». - Возвращать инструменты в постоянном порядке - это рекомендация, она помогает кэшу.
Что менять в клиенте
Заголовок раздела «Что менять в клиенте»- Прикладывать
_metaк каждому запросу: версию и возможности обязательно, имя клиента - по рекомендации. - На HTTP добавлять заголовки
MCP-Protocol-Version,Mcp-Methodи, где нужно,Mcp-Name. Поддержкаx-mcp-headerдля клиента обязательна. - Обрабатывать
resultType."input_required"- собрать ответы и повторить запрос с новымid. Отсутствие поля считать значением"complete". - Обрабатывать ошибку
-32022: выбрать версию из спискаsupportedи повторить. - Не возобновлять оборванный поток. Отправить запрос заново с новым
id. - Отменять запрос на HTTP закрытием потока, а не уведомлением.
- Для изменений списков открывать
subscriptions/listenвместо потока по GET. - Принимать код
-32002от старых серверов наравне с-32602.
Если нужно работать с обеими эпохами
Заголовок раздела «Если нужно работать с обеими эпохами»Спецификация называет такую реализацию Dual-era и описывает, как определить эпоху второй стороны.
| Кто | Как действует |
|---|---|
| клиент на stdio | отправляет server/discover; при ошибке, не похожей на ошибку Modern, или при молчании переходит на initialize |
| клиент на HTTP | отправляет запрос в новом формате; при 400 без распознанной ошибки Modern переходит на initialize |
| сервер | запрос с _meta обслуживает без состояния; запрос initialize - по правилам согласованной старой редакции |
Сервер может обслуживать обе эпохи одновременно на одном адресе. Полная таблица исходов - на странице «Редакции и версии».
Авторизация: что изменилось
Заголовок раздела «Авторизация: что изменилось»| Изменение | Суть |
|---|---|
| Dynamic Client Registration объявлена устаревшей | предпочтительный способ - Client ID Metadata Documents; см. «Регистрация клиента» |
параметр iss в ответе авторизации |
серверу авторизации следует его включать; клиент обязан проверить его, если он есть |
| учётные данные клиента привязаны к серверу авторизации | клиент обязан хранить их по идентификатору издателя и не использовать с другим сервером авторизации |
application_type при динамической регистрации |
клиент обязан указывать подходящее значение |
Что устарело, но работает
Заголовок раздела «Что устарело, но работает»Roots, Sampling, Logging и Dynamic Client Registration объявлены устаревшими в этой редакции; HTTP+SSE устарел раньше. Сроки и замены - на странице «Что устарело».
Что проверить в своём SDK
Заголовок раздела «Что проверить в своём SDK»Этот список описывает протокол, а не конкретную библиотеку. Какую редакцию и какую эпоху поддерживает ваш SDK, нужно смотреть в его документации и примечаниях к выпускам: спецификация этого не определяет.