Курс по Claude Code

Как создать сервер MCP с помощью Python, Docker и Claude Code

Как создать MCP-сервер с Python, Docker и Claude Code

Создание собственного MCP-сервера позволяет подключить Claude Code к любому внутреннему инструменту или API.

Структура MCP-сервера

MCP-сервер — это процесс, который общается с Claude Code по стандартному протоколу через stdin/stdout. Может быть написан на любом языке.

Минимальная структура Python MCP-сервера:

# server.py
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp import types

server = Server("my-custom-server")

@server.list_tools()
async def list_tools() -> list[types.Tool]:
    return [
        types.Tool(
            name="get_metrics",
            description="Получить метрики приложения",
            inputSchema={
                "type": "object",
                "properties": {
                    "service": {"type": "string", "description": "Имя сервиса"}
                },
                "required": ["service"]
            }
        )
    ]

@server.call_tool()
async def call_tool(name: str, arguments: dict) -> list[types.TextContent]:
    if name == "get_metrics":
        service = arguments["service"]
        # Ваша логика здесь
        metrics = fetch_metrics(service)
        return [types.TextContent(type="text", text=str(metrics))]

async def main():
    async with stdio_server() as streams:
        await server.run(*streams, server.create_initialization_options())

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

Зависимости

pip install mcp anthropic
# pyproject.toml
[project]
dependencies = ["mcp>=1.0.0"]

Упаковка в Docker

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY server.py .
CMD ["python", "server.py"]

Регистрация в Claude Code

// .claude/mcp.json
{
  "mcpServers": {
    "my-metrics": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "my-metrics-server"],
      "env": {
        "METRICS_API_KEY": "your-key"
      }
    }
  }
}

Или для локального Python скрипта:

{
  "mcpServers": {
    "my-metrics": {
      "command": "python",
      "args": ["/path/to/server.py"]
    }
  }
}

Использование Claude Code для создания MCP

Интересно: можно попросить Claude Code написать сам MCP-сервер:

Создай MCP-сервер на Python, который:
1. Подключается к нашему внутреннему API (base URL в env: INTERNAL_API_URL)
2. Предоставляет tool get_deployment_status(service: str)
3. Предоставляет tool trigger_deploy(service: str, version: str)

Итог

  • MCP-сервер = процесс на stdin/stdout, реализующий протокол MCP
  • Python + библиотека mcp — наиболее удобный способ
  • Docker упрощает изоляцию и деплой сервера
  • Регистрация в .claude/mcp.json, работает в любой сессии проекта

Практические задания

#1

Создай минимальный MCP-сервер

Создай MCP-сервер на Python с одним инструментом: get_timestamp(format: str) -> str, который возвращает текущее время в заданном формате.

Подключи его к Claude Code и проверь, что Claude может вызывать инструмент.

Подсказки

#2

Упакуй сервер в Docker

Возьми MCP-сервер из предыдущего задания и упакуй его в Docker-контейнер.

Обнови конфигурацию Claude Code для запуска сервера через Docker. Убедись, что инструмент по-прежнему работает.

Подсказки