Пособие по работе с FastMCP 2.0: создание и развертывание MCP-серверов
📌 Что такое Model Context Protocol (MCP)?
Model Context Protocol (MCP) — это открытый протокол для подключения больших языковых моделей (LLM) к внешним источникам данных, инструментам и API. MCP создан компанией Anthropic и призван стандартизировать взаимодействие между ИИ-приложениями и внешним миром.
Ключевая идея MCP: Позволить LLM, таким как Claude, выходить за пределы своих внутренних знаний и безопасно взаимодействовать с внешними системами (базами данных, файловой системой, погодными API и т.д.) через единый стандартизированный интерфейс.
Как это работает?
Архитектура MCP строится на взаимодействии трех основных компонентов:
- MCP Сервер (Server): Программа, предоставляющая доступ к данным или инструментам (например, к локальной файловой системе, API GitHub или базе данных).
- Клиент (Client): Приложение (например, Claude for Desktop, Cursor IDE или ваша программа), которое подключается к серверу и передает его возможности LLM.
- Языковая модель (LLM): Модель (например, Claude), которая решает, когда и какой инструмент использовать для ответа на запрос пользователя.
Протокол использует JSON-RPC 2.0 для обмена сообщениями между клиентом и сервером.
🏗️ Основные концепции MCP: Tools, Resources, Prompts
Сервер может предоставлять три типа сущностей:
| Концепция | Описание | Аналог в REST API | Пример |
|---|---|---|---|
| Инструменты (Tools) | Функции, которые выполняют действия и возвращают результат. | POST-запросы (для изменения состояния). | Конвертер валют, поиск в интернете, отправка email. |
| Ресурсы (Resources) | Данные, которые клиент может "прочитать" и передать в контекст LLM. | GET-запросы (для получения данных). | Доступ к файлу, данным из БД, логам приложения. |
| Промпты (Prompts) | Шаблоны запросов, которые помогают структурировать взаимодействие с LLM. | Предопределенные сценарии диалога. | Шаблон для анализа данных или генерации отчета. |
🚀 Практика: Создаем MCP-сервер с FastMCP 2.0
FastMCP 2.0 — это высокоуровневый Python-фреймворк для создания MCP-серверов и клиентов. Он значительно упрощает разработку, автоматически генерируя описание инструментов на основе типов и докстрок вашего кода.
Шаг 1: Установка и настройка
# Создаем проект и виртуальное окружение mkdir my-mcp-server && cd my-mcp-server python -m venv .venv # Активируем окружение (macOS/Linux) source .venv/bin/activate # Активируем окружение (Windows) .venv\Scripts\activate # Устанавливаем FastMCP pip install fastmcp
Шаг 2: Пишем сервер
Создайте файл server.py со следующим кодом. Это базовый сервер с одним инструментом (Tool) и одним ресурсом (Resource).
from fastmcp import FastMCP
import json
# Инициализируем сервер с именем "Demo"
mcp = FastMCP("Demo")
# 1. Объявляем Инструмент (Tool) - функцию, которую может вызвать LLM.
@mcp.tool
def search_web(query: str) -> str:
"""
Выполняет поиск в интернете по заданному запросу и возвращает результаты.
Args:
query (str): Поисковый запрос, например, "погода в Москве".
Returns:
str: Отформатированные результаты поиска.
"""
# Здесь должна быть реальная логика вызова поискового API.
# Для примера возвращаем заглушку.
return f"Результаты поиска по запросу '{query}':\n- Пункт 1\n- Пункт 2"
# 2. Объявляем Ресурс (Resource) - данные, которые LLM может прочитать.
# Декоратор указывает URI ресурса и его имя.
@mcp.resource("file:///app-info.json")
def get_app_info() -> str:
"""
Возвращает статическую информацию о приложении в формате JSON.
"""
info = {
"app_name": "My MCP Server",
"version": "1.0.0",
"author": "Ваше имя"
}
return json.dumps(info, ensure_ascii=False, indent=2)
# 3. Запускаем сервер.
# В режиме 'stdio' сервер ожидает сообщения от клиента (например, Claude Desktop).
if __name__ == "__main__":
mcp.run(transport="stdio")
Важное примечание по логированию: При запуске в режиме stdio нельзя использовать print(), так как это помешает протоколу. Все логи должны идти в stderr (например, через logging).
Шаг 3: Подключаем сервер к клиенту (Claude Desktop)
Для тестирования подключим сервер к Claude for Desktop.
- Найдите или создайте файл конфигурации:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
- Windows: %APPDATA%\Claude\claude_desktop_config.json
- Добавьте в него путь к вашему серверу (замените ABSOLUTE_PATH на полный путь к папке проекта):
{ "mcpServers": { "my-server": { "command": "python", "args": [ "-m", "uv", "--directory", "ABSOLUTE_PATH/my-mcp-server", "run", "server.py" ] } } } - Перезапустите Claude Desktop. После этого в интерфейсе появится иконка инструментов, и модель сможет использовать ваш сервер.
☁️ Развертывание в FastMCP Cloud
FastMCP Cloud — это платформа для хостинга MCP-серверов, которая позволяет делиться ими через интернет. Это простой способ сделать ваш сервер доступным для разных клиентов.
Шаг 1: Подготовка репозитория
Разместите код вашего сервера (файл server.py и requirements.txt, если есть) в публичном или приватном репозитории на GitHub.
Шаг 2: Создание проекта в FastMCP Cloud
- Перейдите на fastmcp.cloud и войдите через GitHub.
- Нажмите "Create Project".
- Укажите ссылку на ваш GitHub-репозиторий и настройте проект:
- Name: Имя проекта (станет частью URL).
- Entrypoint: Точка входа (например, server.py или server.py:mcp, если объект сервера называется mcp).
- Authentication: Отключите для публичного доступа или включите для ограничения доступа членам вашей организации.
Шаг 3: Подключение к клиенту
После деплоя ваш сервер получит постоянный URL вида https://your-project-name.fastmcp.app/mcp. Этот URL можно добавить в поддерживаемые клиенты (например, в настройки расширений Claude).
📖 Заключение и дальнейшие шаги
Вы изучили основы MCP и FastMCP. Главное преимущество этого подхода — стандартизация: один раз написав сервер, вы можете подключать его к разным клиентам (Claude, Cursor, Cline) и разным LLM.
Что делать дальше:
- Изучите реальные примеры: Посмотрите официальные туториалы по созданию, например, сервера для работы с погодой через NWS API.
- Добавьте аутентификацию: Для доступа к защищенным данным используйте встроенные в FastMCP провайдеры (Google, GitHub, Azure).
- Создайте MCP-клиент: FastMCP позволяет также писать клиенты на Python для программного взаимодействия с любыми MCP-серверами.
Вы можете начать с простого сервера, описанного выше, и постепенно расширять его функциональность, добавляя новые инструменты для работы с вашими данными и системами.