Сервер MCP — это не магия. Это обычная программа, которая объявляет, что она умеет, и ждёт вызовов. Самый маленький полезный сервер предоставляет один инструмент (tool). Посмотрим на упрощённый набросок такого сервера и разберём его по частям.
# объявляем инструмент
name: "find_task"
description: "Найти задачу в трекере по её номеру. \
Возвращает заголовок, статус и исполнителя."
input_schema:
number: integer # номер задачи, например 412
# что инструмент делает, когда его вызвали
handler(number):
task = tracker.get(number)
return { title, status, assignee }
Четыре части любого инструмента
- Имя (
find_task) — короткий машинный идентификатор. По нему хост отличает один инструмент от другого. - Описание — текст для модели. Именно его читает Claude, решая, подходит ли инструмент под задачу. Это не комментарий «для людей», а рабочая часть.
- input_schema — какие данные нужны на вход и какого они типа. Здесь — целое число
number. Схема позволяет модели собрать корректный вызов, а серверу — проверить полученное. - handler — собственно работа: сервер идёт в трекер, достаёт задачу и возвращает результат.
Кто что делает
Модель формирует вызов (find_task с number: 412) — но сама ничего не выполняет. Вызов уходит на сервер, сервер делает работу и возвращает данные обратно. Запускать ли действие, по-прежнему решает хост и человек.
Заметь: в сервере нет ни слова про Claude. Он просто объявляет инструмент по протоколу. Любой MCP-клиент сможет с ним работать — в этом и смысл общего протокола.