# Минимальный сервер: один инструмент

Курс: MCP: подключаем инструменты — https://zero2claude.ru/learn/mcp
Канонический URL: https://zero2claude.ru/learn/mcp/3-1-minimalnyy-server

Минимальный MCP-сервер с одним инструментом собран из четырёх частей: имя, описание, схема входа и сама работа. Разбор на коде.

Сервер 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-клиент сможет с ним работать — в этом и смысл общего протокола.
