Перейти к содержимому
Выберите тему

Редакции и версии протокола

Какие редакции MCP существуют, что значат Modern, Legacy и Dual-era, как клиент и сервер договариваются о версии в редакции 2026-07-28

сверено со спецификацией 4 октября 2026

В репозитории спецификации опубликованы пять редакций и черновик следующей.

Редакция Эпоха Заметное
2024-11-05 Legacy самая ранняя из опубликованных; транспорт HTTP+SSE
2025-03-26 Legacy появился Streamable HTTP, HTTP+SSE объявлен устаревшим
2025-06-18 Legacy появился заголовок MCP-Protocol-Version
2025-11-25 Legacy последняя редакция с рукопожатием initialize
2026-07-28 Modern протокол без состояния; текущая редакция

Что именно изменилось в текущей редакции, перечислено в её списке изменений и на странице «Переход на 2026-07-28».

Термины даёт сама спецификация, на странице Versioning and Compatibility.

Термин Значение
Modern версии, где версия, сведения о сторонах и возможности передаются в каждом запросе: 2026-07-28 и новее
Legacy версии, где сначала устанавливается сессия рукопожатием initialize: 2025-11-25 и старше
Dual-era реализация, которая поддерживает обе эпохи

Эпоха - свойство конкретной реализации, а не протокола в целом. Какой клиент или SDK к какой эпохе относится, нужно смотреть в его документации.

Рукопожатия нет. Клиент указывает версию в каждом запросе: в поле _meta под ключом io.modelcontextprotocol/protocolVersion, а на HTTP ещё и в заголовке MCP-Protocol-Version.

СерверКлиентСерверКлиентalt[версия поддерживается][версия не поддерживается]запрос с версией в _metaрезультатошибка -32022 со списком версийтот же запрос с подходящей версией

Если сервер не поддерживает запрошенную версию, он обязан вернуть ошибку UnsupportedProtocolVersionError с кодом -32022 и списком версий, которые поддерживает.

Ответ на неподдерживаемую версию
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32022,
"message": "Unsupported protocol version",
"data": {
"supported": ["2026-07-28", "2025-11-25"],
"requested": "1900-01-01"
}
}
}

Клиенту следует выбрать версию из списка supported и повторить запрос. Если общей версии нет, остаётся показать ошибку пользователю.

Узнать версии заранее можно запросом server/discover. Сервер обязан его реализовать, клиент вызывать не обязан.

Спецификация приводит таблицу исходов для всех сочетаний.

Клиент Сервер Что будет
Modern Modern работает
Modern Legacy не работает; на stdio клиенту стоит сначала отправить server/discover, чтобы отказ был предсказуемым
Dual-era Modern работает, клиент остаётся в Modern
Dual-era Legacy работает: клиент распознаёт Legacy-сервер и переходит на initialize
Legacy Modern не работает; у Legacy-клиента нет способа перейти на новую версию
Legacy Dual-era работает по правилам согласованной Legacy-редакции
Legacy Legacy работает по правилам своей редакции

Как клиент Dual-era определяет эпоху сервера:

  • на stdio - отправляет server/discover; любой ответ, кроме результата и распознанной ошибки Modern, означает Legacy-сервер;
  • на HTTP - отправляет запрос в новом формате; при ответе 400 смотрит тело: распознанная ошибка Modern означает Modern-сервер, всё остальное - Legacy.

Результат проверки клиенту следует запомнить: эпоха - свойство сервера, а не отдельного запроса.

Серверу, который поддерживает только Modern, спецификация советует в ответ на initialize назвать поддерживаемые версии. Для пользователя Legacy-клиента это может быть единственная подсказка.

Подробности транспортной части - на странице «Транспорты».