Три возможности сервера#
Сервер MCP может предложить приложению три вида возможностей. Они различаются тем, кто решает, что использовать: модель, приложение или пользователь.
| Возможность | Кто выбирает | Что это | Основные методы |
|---|---|---|---|
| Инструмент (Tool) | Модель | Функция с именем, описанием и схемой параметров | tools/list, tools/call |
| Ресурс (Resource) | Приложение или пользователь | Данные для контекста, доступные по адресу (URI) | resources/list, resources/read, resources/templates/list |
| Шаблон запроса (Prompt) | Пользователь | Заготовка сообщений или сценария | prompts/list, prompts/get |
Сервер объявляет, какие из трёх возможностей он поддерживает. Минимальный сервер может предлагать только один инструмент.
Инструменты#
Инструмент — единица действия. Сервер описывает каждый инструмент так, чтобы модель могла решить, когда его вызвать, и правильно составить параметры.
- Имя — уникальный идентификатор инструмента на сервере.
- Описание — текст для модели: что инструмент делает и когда применять. От качества описания зависит, выберет ли модель инструмент верно.
- Схема входных параметров — JSON Schema. В ревизии 2026-07-28 допускаются любые ключевые слова JSON Schema 2020-12.
- Результат — содержимое для модели и, при необходимости, структурированные данные: в ревизии 2026-07-28 структурированный результат может быть любым значением JSON.
{
"tools": [
{
"name": "get_stock",
"description": "Возвращает остаток товара на складе по артикулу.",
"inputSchema": {
"type": "object",
"properties": {
"sku": { "type": "string", "description": "Артикул товара" }
},
"required": ["sku"]
}
}
],
"ttlMs": 60000,
"cacheScope": "public"
}Поля ttlMs и cacheScope обязательны в результатах списков с ревизии 2026-07-28: они подсказывают клиенту, как долго можно хранить список. Пример упрощён и вымышлен, полный набор обязательных полей — в спецификации.
Безопасность инструментов#
Спецификация называет инструменты путём к выполнению произвольного кода. Поэтому хост обязан получить явное согласие пользователя перед вызовом, а описания и пометки инструментов следует считать недоверенными данными, если сервер не доверенный.
Практическая рекомендация: подключайте только те серверы, чьё происхождение вы можете проверить, и ограничивайте права, которые сервер получает в ваших системах.
Ресурсы#
Ресурс — данные, которые приложение подгружает в контекст: файл, строка таблицы, страница справки. У каждого ресурса есть адрес (URI). Список доступных ресурсов клиент получает методом resources/list, а содержимое — методом resources/read. Для семейства однотипных ресурсов сервер публикует шаблоны адресов (resources/templates/list).
Ресурс отличается от инструмента тем, что его не «вызывает» модель по своему решению: приложение или пользователь выбирает, что добавить в контекст. Для получения изменений в ревизии 2026-07-28 клиент подписывается на уведомления через единый поток subscriptions/listen.
Если ошибка возникает при чтении несуществующего ресурса, ревизия 2026-07-28 использует код -32602 (неверные параметры) вместо прежнего -32002.
Шаблоны запросов#
Шаблон запроса — готовый сценарий, который сервер предлагает пользователю: например, «проверить код на уязвимости» или «подготовить сводку по неделе». Клиент получает список методом prompts/list, а заполненный шаблон — методом prompts/get. Выбор всегда за пользователем: ассистент не подставляет шаблон сам.
Запрос данных у пользователя#
Единственная возможность, которую в действующей ревизии предлагает клиент серверу: запрос данных у пользователя (elicitation). Сервер в ходе работы может попросить выбрать вариант, уточнить параметр или подтвердить действие, например стоимость нового проекта перед созданием.
В ревизии 2026-07-28 такой запрос строится на многошаговых запросах: сервер возвращает промежуточный результат типа input_required со списком нужных сведений, а клиент повторяет исходный запрос, добавив ответы. Открытый двунаправленный поток для этого больше не нужен.
Что устарело#
Три возможности признаны устаревшими в ревизии 2026-07-28. Они продолжают работать не менее двенадцати месяцев, но новые реализации не должны их добавлять.
| Возможность | Что было | Что использовать вместо |
|---|---|---|
| Roots устарело | Клиент сообщал серверу доступные каталоги | Пути в параметрах инструментов, адреса ресурсов, настройки сервера |
| Sampling устарело | Сервер просил хост обратиться к модели | Прямая работа с интерфейсом поставщика модели |
| Logging устарело | Журнал сервера передавался клиенту | Вывод в stderr (stdio) или OpenTelemetry |
Полный перечень — в разделе «Изменения и устаревшее».