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

Как сервер рассказывает о себе

> Страница сайта MCP Docs — неофициального перевода документации Model Context Protocol (https://mcpdocs.ru/concepts/discovery/). Тип: Перевод. Основа: Спецификация, раздел «Discovery» (https://modelcontextprotocol.io/specification/2026-07-28/server/discover). Ревизия спецификации 2026-07-28, сверено 05.10.2026.

`server/discover` позволяет клиенту узнать поддерживаемые версии протокола, возможности и идентичность сервера до любых других запросов. Реализовать его ДОЛЖНЫ все серверы; клиент может его не вызывать.

## Из чего состоит сервер

Схема показывает типичный сервер MCP, разобранный на семь групп. Наведите на деталь или перемещайтесь стрелками: справа от каждой — её назначение, внизу — подробности и фрагмент сообщения.



## Запрос и ответ

Запрос не несёт параметров, кроме стандартных полей `_meta` ([подробнее](https://mcpdocs.ru/protocol/#polya-meta)):

```json
{
  "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
{
  "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"`. |

> **Заметка переводчика.** `serverInfo` сообщает сам сервер, протокол его не проверяет. Он нужен для отображения, журналов и отладки: от него НЕ СЛЕДУЕТ менять поведение клиента и принимать решения о безопасности.

Как отвечает ваш сервер, можно проверить бесплатной [проверкой MCP-сервера](https://mcpprotocol.ru/mcp-check/): она сверяет `server/discover`, `ttlMs`, `cacheScope`, `resultType` и название сервера с требованиями ревизии.

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

Вызывать `server/discover` не обязательно: клиент может сразу отправить любой запрос и обработать ошибку `UnsupportedProtocolVersionError`, если версия не поддерживается. Но метод полезен в двух случаях.

- **Показать сведения о сервере.** Из одного ответа клиент узнаёт идентичность, возможности и версии, не опрашивая по отдельности `tools/list`, `prompts/list` и `resources/list`.
- **Проба совместимости на stdio.** У stdio нет статус-кодов HTTP, по которым можно было бы решить, возвращаться ли к старому протоколу. Поэтому клиент, который поддерживает и современные, и прежние серверы, СЛЕДУЕТ отправить `server/discover` первым. Правила отката: [«Версии и совместимость»](https://mcpdocs.ru/protocol/versions/).

> **Заметка переводчика.** В публикациях о ревизии 2026-07-28 встречается мнение, что `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` показывает, могут ли общие посредники (например, прокси) его кэшировать. Эти поля дополняют уведомления об изменениях.
