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

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

Страница: https://mcpdoc.ru/protocol/versions/
Указатель сайта: https://mcpdoc.ru/llms.txt

Версия MCP - это дата редакции спецификации, например `2026-07-28`. Последняя редакция - `2026-07-28`. Она делит все реализации на две эпохи: Modern (версия передаётся в каждом запросе) и Legacy (версия согласуется один раз, рукопожатием `initialize`).

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

## Редакции

В [репозитории спецификации](https://github.com/modelcontextprotocol/modelcontextprotocol/tree/main/docs/specification) опубликованы пять редакций и черновик следующей.

| Редакция | Эпоха | Заметное |
|---|---|---|
| `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 | протокол без состояния; текущая редакция |

Что именно изменилось в текущей редакции, перечислено в её [списке изменений](https://modelcontextprotocol.io/specification/2026-07-28/changelog) и на странице [«Переход на 2026-07-28»](https://mcpdoc.ru/protocol/migration/).

## Три термина

Термины даёт сама спецификация, на странице [Versioning and Compatibility](https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning).

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

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

## Как стороны договариваются о версии

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

```mermaid
sequenceDiagram
    participant C as Клиент
    participant S as Сервер

    C->>S: запрос с версией в _meta
    alt версия поддерживается
        S-->>C: результат
    else версия не поддерживается
        S-->>C: ошибка -32022 со списком версий
        C->>S: тот же запрос с подходящей версией
    end
```

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

```json title="Ответ на неподдерживаемую версию"
{
  "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`](https://mcpdoc.ru/protocol/discovery/). Сервер обязан его реализовать, клиент вызывать не обязан.

## Совместимость эпох

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

| Клиент | Сервер | Что будет |
|---|---|---|
| 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-клиента это может быть единственная подсказка.

Подробности транспортной части - на странице [«Транспорты»](https://mcpdoc.ru/protocol/transports/).
