общее

Свой MCP-сервер с нуля — Python туториал

Свой MCP-сервер с нуля — Python туториал

Вы когда-нибудь хотели, чтобы ваш ИИ-ассистент мог напрямую работать с вашей CRM, базой данных или файловой системой? MCP-сервер (Model Context Protocol) — это стандарт, который позволяет это сделать. По данным ToolBench от Arcade, в 2026 году уже проиндексировано 41 921 MCP-сервер и 218 422 инструмента — но 76,6% из них получили оценку F (меньше 50 баллов из 100). В этой статье мы разберём, как написать качественный MCP-сервер на Python с нуля, избежав типичных ошибок.

76,6%
серверов получили оценку F
0,5%
инструментов получили A или выше
53,3%
успешных запусков серверов

Что такое MCP-сервер и зачем он нужен

MCP (Model Context Protocol) — это открытый протокол, который позволяет ИИ-моделям (например, ChatGPT, Claude) вызывать внешние инструменты и получать доступ к данным. MCP-сервер — это программа, которая реализует этот протокол и предоставляет набор tools, resources и prompts. В отличие от обычного API, MCP требует строгого соблюдения handshake, описания capabilities и корректных ответов в формате JSON-RPC.

Зачем вам свой сервер? Готовые решения часто не дают гибкости, а многие публичные серверы работают нестабильно. Исследование 30 публичных MCP-серверов показало, что 14 из 30 (46,7%) не смогли даже запуститься — ошибка на этапе launch/init. Свой сервер вы контролируете полностью.

⚡ Факт: Только 0,5% инструментов в ToolBench получили оценку A или выше — это значит, что даже опубликованные серверы часто содержат ошибки.

Архитектура MCP-сервера на Python

MCP-сервер состоит из трёх основных компонентов:

  • Transport layer — отвечает за связь с клиентом (stdin/stdout, HTTP, WebSocket).
  • Protocol handler — обрабатывает JSON-RPC сообщения, выполняет handshake.
  • Tool/Resource definitions — ваши функции, которые вызываются по запросу.

Для Python есть официальный SDK: github.com/modelcontextprotocol. В нём уже реализованы базовые классы для сервера, так что вам остаётся только описать инструменты.

Установка и настройка окружения

Создайте виртуальное окружение и установите пакет:

pip install mcp

После установки можно создать файл server.py и импортировать mcp.server. Убедитесь, что версия Python >= 3.10.

Пошаговое создание MCP-сервера

Рассмотрим минимальный пример — сервер, который умеет складывать два числа и возвращать текущее время.

Шаг 1: Базовый каркас

Создайте экземпляр сервера и определите его имя:

from mcp.server import Server

server = Server("my-calculator")

Шаг 2: Определите инструменты

Каждый инструмент — это функция с декоратором @server.tool. Обязательно опишите схему с помощью type hints или pydantic:

from mcp.server import tool

@tool(description="Складывает два целых числа")
def add(a: int, b: int) -> int:
    return a + b

@tool(description="Возвращает текущее время в формате HH:MM:SS")
def current_time() -> str:
    from datetime import datetime
    return datetime.now().strftime("%H:%M:%S")

Шаг 3: Запустите сервер

Используйте транспорт stdin/stdout (по умолчанию):

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

Запустите скрипт: python server.py. Сервер будет ждать сообщений от клиента. Для теста можно использовать MCP Inspector или написать простой клиент.

⚡ Факт: В исследовании 30 публичных серверов у 4 из 11 (36%) серверов, требующих env-переменные, запуск прошёл успешно без секретов. Убедитесь, что ваш сервер не падает при отсутствии переменных.

Типичные ошибки при разработке MCP-серверов

Чтобы ваш сервер не пополнил статистику 76,6% неудачных, избегайте следующих ошибок:

  1. Игнорирование описаний инструментов. Клиент использует описание для выбора инструмента. Если описание пустое или неинформативное — инструмент не вызовут.
  2. Некорректная обработка ошибок. Любое исключение внутри инструмента должно возвращать JSON-RPC ошибку, а не крашить сервер.
  3. Отсутствие таймаутов. Долгие операции (запросы к БД, файловые операции) должны иметь таймаут, иначе клиент зависнет.
  4. Хардкод секретов. Никогда не пишите токены, пароли или ключи прямо в коде — используйте переменные окружения.
  5. Плохая валидация входных данных. Всегда проверяйте типы и диапазоны. Злоумышленник может передать строку вместо числа и сломать сервер.
Важно: Даже локальный запуск не гарантирует безопасность. Если ваш сервер даёт доступ к файловой системе или БД, убедитесь, что инструменты не позволяют выполнить произвольные команды или прочитать чувствительные данные.

Продвинутый пример: сервер для работы с файлами

Рассмотрим более сложный сервер, который читает и записывает файлы в заданной директории. Это полезно для локального ИИ-ассистента.

import os
from mcp.server import Server, tool

server = Server("file-manager")
ALLOWED_DIR = os.environ.get("ALLOWED_DIR", ".")

@tool(description="Читает содержимое файла. Путь должен быть внутри ALLOWED_DIR.")
def read_file(path: str) -> str:
    full_path = os.path.abspath(os.path.join(ALLOWED_DIR, path))
    if not full_path.startswith(os.path.abspath(ALLOWED_DIR)):
        raise PermissionError("Доступ запрещён")
    with open(full_path, "r") as f:
        return f.read()

@tool(description="Записывает текст в файл. Создаёт файл, если он не существует.")
def write_file(path: str, content: str) -> bool:
    full_path = os.path.abspath(os.path.join(ALLOWED_DIR, path))
    if not full_path.startswith(os.path.abspath(ALLOWED_DIR)):
        raise PermissionError("Доступ запрещён")
    with open(full_path, "w") as f:
        f.write(content)
    return True

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

Обратите внимание: мы проверяем, что файл находится внутри разрешённой директории, чтобы избежать path traversal. Безопасность — ответственность сервера, а не только клиента.

⚡ Факт: По данным Arcade ToolBench, только 0,5% инструментов получили оценку A или выше. Качественная валидация и безопасность — то, что отличает хороший сервер от среднего.

Тестирование и отладка MCP-сервера

Для тестирования используйте MCP Inspector — графический инструмент, который подключается к вашему серверу и позволяет вызывать инструменты вручную. Также можно написать простой клиент на Python:

from mcp.client import Client

client = Client("stdio", command=["python", "server.py"])
result = client.call_tool("add", {"a": 2, "b": 3})
print(result)  # 5

Проверьте, что сервер корректно обрабатывает ошибки — например, при неверных аргументах возвращает ошибку, а не падает.

Совет: Добавьте логирование с помощью стандартного модуля logging. Это поможет быстро найти проблемы в продакшене.

Заключение: MCP-сервер для регионального бизнеса

Для компаний в Саратовской области и других регионах MCP-сервер — это возможность интегрировать ИИ в существующие процессы без дорогих платформ. Вы можете написать сервер на Python, развернуть его на обычном VPS или локальном Linux-хосте и подключить к CRM, учётным системам или документам. Стоимость внедрения — только время разработчика, а результат — автоматизация рутины.

Наш опыт показывает, что средний MCP-сервер для внутренних нужд можно написать за 2-3 дня. При этом вы полностью контролируете безопасность и функциональность.

Частые вопросы

MCP использует стандартизированный протокол JSON-RPC, требует handshake и описания возможностей. Клиенты (ИИ-модели) могут динамически обнаруживать инструменты, что не поддерживается в REST.
Да, Python-сервер работает на любой ОС. Однако некоторые транспорты (например, Unix sockets) доступны только на Linux. Для тестов используйте stdio.
Claude Desktop, продолжения для VS Code (Continue.dev), а также библиотеки для Python, TypeScript и Java.
Используйте аутентификацию через токен в заголовках или переменные окружения. Для локальных серверов достаточно ограничить доступ по сети (localhost).
В официальном репозитории MCP на GitHub есть примеры на Python, TypeScript и Java. Также можно изучить серверы из ToolBench.
Хотите построить такой дом в Саратовской области? Мы рассчитаем стоимость по вашим параметрам за 2 минуты — без звонков и навязывания. Открыть расчёт →

Нужна ИИ-автоматизация под ваш бизнес?

Запишитесь на бесплатную консультацию — обсудим задачу и пришлём готовое решение.

Обсудить проект →

Читайте также

Содержание

Higgsfield CLI и Claude Code: подключение, автоматизация, цены | 2026

Читать →

Содержание

DeepSeek V4 vs GPT-5.5 vs Claude Opus 4.7: Сравнение AI-Моделей | 2026

Читать →

Содержание

Claude Opus 4.7 — новая модель Anthropic: обзор, бенчмарки, цены | 2026

Читать →

Полезная статья?

Сохраните в закладки, чтобы не потерять

Ctrl + D