глава 04

Свой MCP-сервер

Когда готового сервера под вашу систему нет, его пишут самостоятельно. У Anthropic есть официальные SDK на TypeScript и Python - они берут на себя протокол, а вы описываете возможности.

Что вы определяете

Главное - это tools. Каждый tool - это функция с понятным описанием и параметрами. Описание важно: именно по нему модель понимает, когда инструмент применить. Плохое описание - модель не вызовет инструмент или вызовет невпопад.

1
Создаёте сервер
Заводите MCP-сервер из SDK и даёте ему имя.
2
Объявляете tool
Имя, описание простыми словами, схема параметров. Описание - как инструкция для модели.
3
Пишете обработчик
Функция, которая получает параметры и возвращает результат: ходит в вашу систему, считает, дёргает API.
4
Запускаете на транспорте
Для локального сервера - stdio. Клиент запустит его по команде из конфига.

Минимальный пример

Концептуально на Python это выглядит так - один сервер с одним инструментом:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("my-server")

@mcp.tool()
def get_order_status(order_id: str) -> str:
    """Вернуть статус заказа по его номеру."""
    # здесь поход в вашу систему
    return lookup_status(order_id)

if __name__ == "__main__":
    mcp.run()

Строка документации под функцией - это и есть описание для модели. После запуска и подключения в конфиге клиент увидит инструмент get_order_status и сможет его вызвать, когда пользователь спросит про статус заказа.

Как это видит клиент

Клиент при старте спрашивает сервер о возможностях и получает список инструментов с описаниями и параметрами. Дальше модель сама решает, нужно ли вызвать get_order_status, и с каким order_id. Клиент исполняет вызов и возвращает результат модели в диалог.

Когда писать свой

  • Есть внутренняя система или API, которых нет в готовых серверах.
  • Нужна специфичная логика: свои правила, доступы, форматы.
  • Хотите дать команде один общий сервер под рабочие процессы.