# Обнаружение: server/discover

> Запрос server/discover в MCP 2026-07-28 - как клиент узнаёт версии, возможности и имя сервера, когда его вызывать и чем он отличается от MCP Server Card

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

`server/discover` - запрос, которым клиент узнаёт у сервера поддерживаемые версии протокола, возможности и имя. Сервер обязан его реализовать. Клиент вызывать не обязан: можно сразу отправить любой запрос.

появился в редакции 2026-07-28, сверено со спецификацией 4 октября 2026

## Запрос

По [спецификации](https://modelcontextprotocol.io/specification/2026-07-28/server/discover) у запроса нет параметров, кроме обычного `_meta`.

```json title="Запрос"
{
  "jsonrpc": "2.0",
  "id": "discover-1",
  "method": "server/discover",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": { "name": "ExampleClient", "version": "1.0.0" },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}
```

## Ответ

```json title="Ответ"
{
  "jsonrpc": "2.0",
  "id": "discover-1",
  "result": {
    "resultType": "complete",
    "supportedVersions": ["2026-07-28"],
    "capabilities": {
      "tools": {},
      "resources": {}
    },
    "_meta": {
      "io.modelcontextprotocol/serverInfo": { "name": "ExampleServer", "version": "1.0.0" }
    },
    "instructions": "This server provides weather and resource utilities.",
    "ttlMs": 3600000,
    "cacheScope": "public"
  }
}
```

| Поле | Что в нём |
|---|---|
| `supportedVersions` | версии протокола, которые поддерживает сервер |
| `capabilities` | возможности сервера: инструменты, ресурсы, шаблоны и другие |
| `_meta` с ключом `io.modelcontextprotocol/serverInfo` | имя и версия программы сервера; рекомендуемое поле |
| `instructions` | необязательная подсказка для модели, как пользоваться сервером |
| `ttlMs`, `cacheScope` | сколько миллисекунд ответ можно считать свежим и можно ли кэшировать его на общих узлах |

Имя и версию сервер сообщает сам, протокол их не проверяет. Спецификация не рекомендует менять по ним поведение клиента и принимать по ним решения о безопасности.

## Когда вызывать

Спецификация называет два случая.

1. **Показать сведения о сервере.** Один ответ заменяет три отдельных запроса `tools/list`, `prompts/list` и `resources/list`, если нужно только узнать, что сервер умеет.
2. **Проверить эпоху сервера на stdio.** На stdio нет статуса HTTP, по которому можно понять, что сервер старый. Клиенту, который поддерживает и Modern, и Legacy, следует сначала отправить `server/discover`.

Три исхода проверки на stdio:

| Ответ сервера | Вывод | Что делать |
|---|---|---|
| результат `DiscoverResult` | сервер Modern | выбрать версию из `supportedVersions` |
| распознанная ошибка Modern, например `-32022` | сервер Modern, но версия не подошла | взять версию из списка в ошибке; на `initialize` не переходить |
| любая другая ошибка или тишина | сервер Legacy | перейти на рукопожатие `initialize` |

Привязывать переход к одному коду ошибки нельзя: старые серверы отвечают на незнакомый запрос по-разному, а иногда не отвечают совсем.

Клиенту, который поддерживает только Modern, проверка тоже рекомендована. Некоторые старые серверы не проверяют, что запрос пришёл после `initialize`, и выполнят его по старым правилам. Проверка даёт предсказуемый отказ.

## Отличие от MCP Server Card

MCP Server Card - это документ по адресу `.well-known/mcp.json`, который описывал бы сервер без обращения к нему. Он предложен в [SEP-2127](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127). На 4 октября 2026 это открытый запрос на изменение в статусе рассмотрения; в редакцию `2026-07-28` он не входит.

`server/discover` - принятая часть протокола и работает на любом транспорте. Авторы изменения, которое ввело `server/discover`, прямо пишут, что оба механизма задуманы как дополняющие друг друга.

## Что читать дальше

- [Редакции и версии](https://mcpdoc.ru/protocol/versions/) - полная таблица совместимости эпох.
- [Ядро без состояния](https://mcpdoc.ru/protocol/stateless/) - поля `_meta`, которые несёт каждый запрос.
