MCP

MCP (Model Context Protocol) — открытый протокол от Anthropic (ноя 2024), де-факто стандарт 2025–2026: единый интерфейс между LLM и внешним миром (tools + resources + prompts). «USB-C для AI-агентов».

Суть

Вместо того чтобы писать интеграцию под каждую пару (модель × сервис), пишешь MCP-сервер один раз — и его подключает любая LLM-среда (Claude, Cursor, VS Code, ChatGPT).

Зачем это нужно

Снимает комбинаторный взрыв интеграций. Объединяет «руки» (Tool Calling) и базу знаний (RAG) агента под одним интерфейсом — то есть закрывает сразу tools + resources в Agent Anatomy.

Как работает

  • Сервер выставляет три вида возможностей: tools (действия), resources (данные), prompts (шаблоны).
  • Готовые серверы: Gmail, Google Drive, Slack, Linear, Notion, GitHub, Calendar, n8n — десятки.
  • Принцип: «написал сервер один раз — работает со всеми моделями».
  • MCP — это «транспорт» / способ реализации, а не «магия памяти»: через него агенты общаются между собой и с инструментами (например, ходят в долгосрочную память или делают RAG по кодовой базе). Как именно реализовать хождение в память — через MCP, свою прослойку или API — вопрос проектирования. В курсе на MCP строят коммуникацию компонентов мультиагентной системы.
  • MCP как узел графа vs как tool: обычно MCP-инструмент вызывает сама LLM (Tool Calling). Но в LangGraph MCP-сервер можно подключить и как отдельный узел графа, в который ведёт условное ребро — вызов решает код, а не модель (детерминизм, экономия токенов, видимость на диаграмме). Типично для fallback-цепочки RAG→MCP (см. LangGraph MCP as Node).

Пример

Реестр инструментов: каждый инструмент — единая обёртка (имя, описание, JSON-схема, handler), to_openai_spec() отдаёт его в формате, понятном любой LLM. Реестр собирается в один список tools — это и есть «написал один раз → работает со всеми моделями».

class MCPTool:                       # единая обёртка инструмента (совместима с OpenAI/MCP)
    def __init__(self, name, description, schema, handler):
        self.name, self.description = name, description
        self.schema, self.handler = schema, handler      # JSON-схема аргументов + Python-функция

    def to_openai_spec(self):        # один формат -> понимает любая LLM (GPT/Claude/Ollama)
        return {"type": "function", "function": {
            "name": self.name, "description": self.description, "parameters": self.schema}}

registry = {                         # реестр доступных инструментов
    "read_file": MCPTool("read_file", "Читает файл с диска.",
                         {"type": "object", "properties": {"filepath": {"type": "string"}}},
                         handler=lambda filepath: open(filepath).read()),
}
tools_for_llm = [t.to_openai_spec() for t in registry.values()]   # единым списком в параметр tools

Связано с

  • Tool Calling — MCP стандартизирует подключение инструментов
  • Agent Anatomy — MCP = tools + knowledge base под одним интерфейсом
  • RAG — ресурсы/данные тоже отдаются через MCP
  • LangGraph MCP as Node — MCP как узел графа (альтернатива «MCP как tool»)

Открытые вопросы

  • как писать собственный MCP-сервер (минимальный пример)
  • безопасность: что выставлять наружу через MCP