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

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

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

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

По спецификации у запроса нет параметров, кроме обычного _meta.

Запрос
{
"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": {}
}
}
}
Ответ
{
"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, и выполнят его по старым правилам. Проверка даёт предсказуемый отказ.

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