Короткий ответ
У протокола есть официальный SDK для Python. Внутри него — FastMCP, слой, который убирает почти весь служебный код: вы пишете обычную функцию, вешаете декоратор, и она становится инструментом, доступным агенту.
Минимальный рабочий сервер — это несколько строк:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("мой-сервер")
@mcp.tool()
def сложить(a: int, b: int) -> int:
"""Складывает два числа."""
return a + b
if __name__ == "__main__":
mcp.run()
Всё, это уже сервер, который можно подключить к агенту.
Что здесь важно понять
Подписи типов — не формальность. По ним агент понимает, что можно передать в функцию. Функция без аннотаций работать будет, но модель начнёт подставлять что попало.
Строка документации — это инструкция для модели. Именно по ней агент решает, вызвать инструмент или нет. Здесь ровно та же логика, что с навыками: расплывчатое описание означает, что инструмент не вызовут никогда. Пишите, что делает функция и в каком случае она нужна.
Имя функции тоже читается моделью. получить_остаток_по_складу понятнее, чем get_data2.
Инструменты и ресурсы
В протоколе есть два разных понятия, и путаница между ними — частая причина странного поведения.
Инструмент (@mcp.tool()) — действие. Агент вызывает его, когда хочет что-то сделать или посчитать.
Ресурс (@mcp.resource()) — данные, которые агент может прочитать, как файл. Ресурс не выполняет действий, он отдаёт содержимое.
Правило простое: если это глагол — инструмент, если существительное — ресурс. Список товаров лучше отдать ресурсом, а «создай заказ» сделать инструментом.
Как проверить до подключения
Не подключайте сырой сервер сразу к агенту: если он падает при запуске, вы увидите невнятную ошибку в редакторе, а не причину.
Сначала запустите его руками в терминале и убедитесь, что процесс живёт. Дальше удобно пользоваться инспектором из состава SDK — он показывает список инструментов и позволяет вызвать их вручную, без модели.
Порядок «сначала проверил сам, потом подключил» экономит основную часть времени на отладке.
С чего начать по-настоящему
Самый полезный первый сервер — обёртка вокруг того, что у вас уже есть: внутреннего API, базы, скрипта, который вы запускаете руками. Не нужно придумывать новое, достаточно дать агенту доступ к существующему.
Начните с одной функции только на чтение. Убедились, что агент вызывает её к месту, — добавили вторую.
Про безопасность
Ваш сервер выполняется с вашими правами. Инструмент, принимающий строку и подставляющий её в запрос к базе или в команду оболочки, — это дыра, через которую можно сделать что угодно, а инструкции модели приходят в том числе из текстов, которые она читает.
Проверяйте входные данные так же, как в обычном коде, доступном снаружи. Подробнее — в разборе безопасности MCP.
Общий разбор создания сервера, без привязки к языку, — в материале как создать свой MCP-сервер. Как подключить готовый — в инструкции.