← Назад к курсу

Пособие по работе с FastMCP 2.0: создание и развертывание MCP-серверов

📌 Что такое Model Context Protocol (MCP)?

Model Context Protocol (MCP) — это открытый протокол для подключения больших языковых моделей (LLM) к внешним источникам данных, инструментам и API. MCP создан компанией Anthropic и призван стандартизировать взаимодействие между ИИ-приложениями и внешним миром.

Ключевая идея MCP: Позволить LLM, таким как Claude, выходить за пределы своих внутренних знаний и безопасно взаимодействовать с внешними системами (базами данных, файловой системой, погодными API и т.д.) через единый стандартизированный интерфейс.

Как это работает?
Архитектура MCP строится на взаимодействии трех основных компонентов:

  1. MCP Сервер (Server): Программа, предоставляющая доступ к данным или инструментам (например, к локальной файловой системе, API GitHub или базе данных).
  2. Клиент (Client): Приложение (например, Claude for Desktop, Cursor IDE или ваша программа), которое подключается к серверу и передает его возможности LLM.
  3. Языковая модель (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.

  1. Найдите или создайте файл конфигурации:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Добавьте в него путь к вашему серверу (замените ABSOLUTE_PATH на полный путь к папке проекта):
    {
      "mcpServers": {
        "my-server": {
          "command": "python",
          "args": [
            "-m",
            "uv",
            "--directory",
            "ABSOLUTE_PATH/my-mcp-server",
            "run",
            "server.py"
          ]
        }
      }
    }
    
  3. Перезапустите Claude Desktop. После этого в интерфейсе появится иконка инструментов, и модель сможет использовать ваш сервер.

☁️ Развертывание в FastMCP Cloud

FastMCP Cloud — это платформа для хостинга MCP-серверов, которая позволяет делиться ими через интернет. Это простой способ сделать ваш сервер доступным для разных клиентов.

Шаг 1: Подготовка репозитория
Разместите код вашего сервера (файл server.py и requirements.txt, если есть) в публичном или приватном репозитории на GitHub.

Шаг 2: Создание проекта в FastMCP Cloud

  1. Перейдите на fastmcp.cloud и войдите через GitHub.
  2. Нажмите "Create Project".
  3. Укажите ссылку на ваш 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-серверами.

Вы можете начать с простого сервера, описанного выше, и постепенно расширять его функциональность, добавляя новые инструменты для работы с вашими данными и системами.