Начало / Понятия / Обнаружение
Обнаружение (server/discover)
Как сервер рассказывает о себе
server/discover позволяет клиенту узнать поддерживаемые версии протокола, возможности и идентичность сервера до любых других запросов. Реализовать его ДОЛЖНЫ все серверы; клиент может его не вызывать.
Из чего состоит сервер#
Схема показывает типичный сервер MCP, разобранный на семь групп. Наведите на деталь или перемещайтесь стрелками: справа от каждой — её назначение, внизу — подробности и фрагмент сообщения.
Запрос и ответ#
Запрос не несёт параметров, кроме стандартных полей _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"
}
}Таблица полей#
| Поле | Описание |
|---|---|
resultType |
Тип результата. Для обычного ответа "complete". |
supportedVersions |
Версии протокола, которые поддерживает сервер. Клиент выбирает одну из них для следующих запросов. |
capabilities |
Возможности сервера: инструменты, ресурсы, шаблоны запросов и другие. |
_meta["io.modelcontextprotocol/serverInfo"] |
Название и версия программы сервера. Серверам СЛЕДУЕТ указывать это поле. |
instructions |
Необязательные указания на естественном языке для языковой модели о том, как эффективно пользоваться сервером. |
ttlMs |
Время свежести ответа в миллисекундах: подсказка для кэширования. |
cacheScope |
Кто может использовать кэш: "public" или "private". |
Как отвечает ваш сервер, можно проверить бесплатной проверкой MCP-сервера: она сверяет server/discover, ttlMs, cacheScope, resultType и название сервера с требованиями ревизии.
Когда вызывать#
Вызывать server/discover не обязательно: клиент может сразу отправить любой запрос и обработать ошибку UnsupportedProtocolVersionError, если версия не поддерживается. Но метод полезен в двух случаях.
- Показать сведения о сервере. Из одного ответа клиент узнаёт идентичность, возможности и версии, не опрашивая по отдельности
tools/list,prompts/listиresources/list. - Проба совместимости на stdio. У stdio нет статус-кодов HTTP, по которым можно было бы решить, возвращаться ли к старому протоколу. Поэтому клиент, который поддерживает и современные, и прежние серверы, СЛЕДУЕТ отправить
server/discoverпервым. Правила отката: «Версии и совместимость».
Возможности и перечни#
Возможности сервера в capabilities определяют, какие методы клиент может вызывать. Например, "tools": {"listChanged": true} значит, что сервер умеет уведомлять об изменении перечня инструментов, а "resources": {} — что он отвечает на resources/list и resources/read. Клиент, получив это, не пытается вызвать то, чего сервер не поддерживает.
Результаты server/discover, tools/list, prompts/list, resources/list, resources/templates/list и resources/read несут обязательные поля ttlMs и cacheScope. ttlMs подсказывает клиенту, как долго можно не обновлять ответ, а cacheScope показывает, могут ли общие посредники (например, прокси) его кэшировать. Эти поля дополняют уведомления об изменениях.