Claude знает всё — кроме вашего проекта. Пишем MCP-сервер с нуля

Claude знает всё — кроме вашего проекта. Пишем MCP-сервер с нуля

Claude объясняет технологии лучше любой документации. Но спросите про медленные запросы в вашей конкретной базе — получите лекцию по индексам вообще. Попросите проверить статус вашего сервиса — придётся копировать вывод вручную. Спросите про ошибки за последний час — «прикрепите лог».

Проблема не в Claude. Он просто не знает ваш проект.

Готовых MCP-серверов уже больше 10 000. Но все они покрывают публичные сервисы: GitHub, Notion, Slack, Linear. Внутренний API, самописный мониторинг, нестандартная схема БД — для этого коннектора нет. Придётся писать свой. Это занимает один вечер.

MCP за один абзац

Model Context Protocol — открытый стандарт от Anthropic. Вы поднимаете локальный сервер, прописываете его в конфиге Claude Desktop или Claude Code, и модель получает инструменты: может вызывать ваши функции прямо в диалоге. Без copy-paste, без «прикрепи файл» — Claude сам берёт данные, когда они нужны.

Когда не хватает готовых серверов

Свой сервер нужен, когда у вас: внутренний API без публичного коннектора, доступ к продовой БД с вашей конкретной схемой, мониторинг инфраструктуры без переключения на Grafana, внутренние скрипты, которые хотите вызывать из диалога.

Три файла

Минимальный рабочий MCP-сервер — три файла:

my-project-mcp/ ├── server.py ├── pyproject.toml └── claude_desktop_config.json

server.py — вся логика. Берём FastMCP:

from mcp.server.fastmcp import FastMCP import subprocess, json mcp = FastMCP("project-mcp") @mcp.tool() def db_slow_queries() -> str: """Топ-5 медленных запросов за последние 10 минут""" return json.dumps(get_slow_queries(), ensure_ascii=False) @mcp.tool() def service_status(service: str) -> str: """Статус systemd-сервиса""" result = subprocess.run( ["systemctl", "status", service], capture_output=True, text=True ) return result.stdout[:2000] mcp.run()

Декоратор @mcp.tool() — единственное, что нужно знать из специфики MCP. Остальное — обычный Python.

pyproject.toml:

[project] name = "project-mcp" version = "0.1.0" dependencies = ["mcp[cli]>=1.0.0"] [project.scripts] project-mcp = "server:mcp.run"

Подключение к Claude Desktop — добавляем в ~/Library/Application Support/Claude/claude_desktop_config.json:

{ "mcpServers": { "project-mcp": { "command": "uv", "args": ["--directory", "/path/to/my-project-mcp", "run", "project-mcp"] } } }

Перезапускаем — в настройках Claude появляется новый сервер со статусом Running. На Linux конфиг лежит в ~/.config/Claude/, на Windows — в %APPDATA%\Claude\.

Claude знает всё — кроме вашего проекта. Пишем MCP-сервер с нуля

Что получается в диалоге

До подключения:— Что там с базой?— Claude: «Для диагностики медленных запросов обычно смотрят на индексы...»

После:— Что там с базой?— Claude: «Нашёл 3 медленных запроса: user_sessions — 1.2 сек, order_history — 0.8 сек, audit_log — 0.6 сек. Объяснить причины или сразу предложить индексы?»

Claude сам вызвал db_slow_queries(), получил реальные данные, проанализировал и ответил про ваш конкретный прод — не про базы данных вообще.

Что подключают backend/DevOps разработчики

Каждая интеграция ниже — 15–30 строк Python. Принцип один: берёте то, на что обычно переключаете вкладку, и делаете это инструментом Claude.

→ Статус очередей (Redis, RabbitMQ, Celery)→ Последние ошибки из Sentry или внутреннего логгера→ Метрики Prometheus без открытия Grafana→ PR, ждущие ревью в GitLab→ Статус деплоев во внутреннем CI→ Данные из внутренней БД по вашей конкретной схеме

Ресурсы

Документация MCP: docs.anthropic.com/mcp

FastMCP — библиотека для быстрого старта: github.com/jlowin/fastmcp

Каталог готовых серверов для вдохновения: github.com/modelcontextprotocol/servers

Через MCP Claude перестаёт быть универсальным советчиком и становится коллегой, который знает ваш конкретный стек. Разница ощущается с первого запроса — и особенно в 23:00, когда что-то падает в проде.

2