MCP (Model Context Protocol)
MCP (Model Context Protocol)
Открытый протокол, по которому большая языковая модель (LLM) общается с внешними источниками данных и инструментами — файлами, базами, API, серверами — через стандартный «разъём», не зная заранее, какой именно сервис на другом конце.
История
MCP анонсировала компания Anthropic 25 ноября 2024 года. Сразу — с открытой спецификацией, референсной реализацией на TypeScript и Python и каталогом готовых серверов на GitHub. Идея вызревала весь 2024 год: к тому моменту у каждого AI-IDE и каждого AI-ассистента был свой формат «плагинов» — у ChatGPT свой, у LangChain свой, у Cursor свой, у Continue свой, и подключить одну и ту же базу данных к разным ассистентам означало написать четыре несовместимые обёртки.
- 2023 — OpenAI запускает ChatGPT Plugins и Function Calling. Первая массовая попытка дать LLM-инструменты, но всё привязано к одному вендору и одному формату.
- Весь 2024 — рост числа AI-IDE (Cursor, Cline, Continue, Zed AI, Aider). Каждая разработала свой способ давать модели контекст. Дублирование становится невыносимым.
- 25 ноября 2024 — Anthropic публикует спецификацию MCP версии 2024-11-05, открытый репозиторий
modelcontextprotocol/serversи поддержку в Claude Desktop. - Декабрь 2024 — март 2025 — поддержку добавляют Cursor, Cline, Zed, Sourcegraph Cody, Replit, плагины для JetBrains.
- Весна 2025 — выходят спецификации с HTTP+SSE-транспортом (раньше был только stdio), и MCP перестаёт быть «локальным». Появляются managed-серверы и облачные провайдеры MCP.
- Конец 2025 — OpenAI и Google объявляют поддержку MCP в своих агентских продуктах, что окончательно превращает протокол из «штуки Anthropic» в индустриальный стандарт.
На момент мая 2026 в публичном реестре modelcontextprotocol/servers лежит порядка нескольких тысяч серверов, написанных сообществом: от обёрток к Postgres и GitHub до интеграций с домашними «умными» розетками. Владелец и шеф-архитектор протокола — по-прежнему Anthropic, но участвуют все крупные AI-лаборатории и независимые контрибьюторы.
Что это такое
MCP — это формальное соглашение о том, как клиент (например, Claude Code или Cursor) разговаривает с сервером, который умеет показать модели данные и дать ей выполнить функции. Соглашение состоит из четырёх вещей:
- Транспорт. Как байты идут от клиента к серверу. Сейчас поддерживается два варианта:
stdio(сервер — отдельный процесс, клиент пишет ему в stdin и читает stdout) иHTTP + Server-Sent Events(сервер — удалённый веб-сервис). - Формат сообщений. JSON-RPC 2.0. Это значит: каждое сообщение — это JSON-объект с полями
jsonrpc: "2.0",method,params,id. Ответ — JSON-объект с тем жеidи полемresultилиerror. Это та же самая схема, что лежит под LSP (Language Server Protocol — стандартом, по которому редакторы общаются с языковыми анализаторами; именно из мира LSP вдохновение и выросло). - Семантика сущностей. Что именно сервер может предоставить. Их три типа:
- Resources (ресурсы) — данные, на которые модель может «посмотреть»: содержимое файла, строка из базы, статья из вики. Идентифицируются URI.
- Tools (инструменты) — функции, которые модель может вызвать с аргументами: «прочитай файл», «отправь сообщение», «выполни SQL-запрос». У каждого инструмента есть JSON-Schema описание входов и выходов.
- Prompts (промпт-шаблоны) — заготовки текстов, которые сервер предлагает использовать как шаблоны для диалога. - Сценарий жизненного цикла. Как клиент и сервер договариваются о версиях, обмениваются capability (что каждый из них умеет), и как обрабатываются ошибки и отключения.
Чем MCP отличается от соседних понятий:
- MCP vs Function Calling (от OpenAI). Function Calling — это формат, в котором модель просит выполнить функцию внутри одного API-вызова к LLM. Сами функции живут в коде приложения. MCP добавляет слой выше: функции (tools) живут в отдельном процессе-сервере, и любой совместимый клиент может их подключить. Function Calling — «как модель говорит «вызови X»»; MCP — «как X живёт и подключается к разным моделям».
- MCP vs RAG. RAG (Retrieval-Augmented Generation, «генерация с подтягиванием») — это паттерн: ищем релевантные куски в базе и кладём их в промпт. MCP — протокол; через MCP можно реализовать RAG-сервер, но RAG возможен и без MCP, а MCP возможен без RAG.
- MCP vs плагины ChatGPT. ChatGPT-плагины — это закрытый формат одного вендора. MCP — открытая спецификация, любой клиент и любой сервер могут договориться, не спрашивая Anthropic.
- MCP vs WebHooks. WebHooks — это «сервис A зовёт сервис B по событию». MCP — «клиент подписан на ресурсы и зовёт инструменты сам, синхронно, в рамках разговора».
Аналогии из жизни
Аналогия 1: USB-разъём. До USB у каждого периферийного устройства был свой кабель и свой разъём: мышь по PS/2, клавиатура по DIN, принтер по LPT, сканер по SCSI, модем по COM. Чтобы добавить новое устройство, нужно было докупать карту расширения. USB решил это: один разъём, любое устройство, операционка сама разбирается. MCP — это USB для контекста: один протокол, любой источник данных, любой ассистент сам разбирается.
Где ломается: USB перестаёт быть невидимым, как только устройство требует большой мощности или гарантированной задержки — для камер и аудио всё равно нужны специальные классы и драйверы. У MCP так же: тривиальные кейсы (файлы, БД) — просто, а как только нужна потоковая запись или гарантия порядка событий, начинаются нюансы транспорта и сессионности, поверх которых приходится строить надстройки.
Аналогия 2: Шведский шведский стол в отеле. Вместо того чтобы тащить с собой свою еду, готовить её и подавать, ты приходишь к большому столу, где сервер «отеля» уже разложил блюда (resources), повара готовы по запросу пожарить тебе омлет (tools), и есть карточки с рекомендованными комбинациями (prompts). Ты выбираешь сам, повар не знает, кто ты и что ты с этим сделаешь.
Где ломается: шведский стол подразумевает, что ты сам видишь все блюда и не задаёшь повару вопросов в реальном времени. MCP-клиент же ведёт диалог: модель может спросить сервер, изменилось ли содержимое ресурса, попросить более новую версию, отказаться от ответа. Аналогия не передаёт эту интерактивность.
Аналогия 3: Стандарт грузового контейнера TEU. До 1956 года каждый порт грузил корабль по-своему, каждое судно строилось под свой груз, и любая пересадка превращалась в перепаковку. Стандартный 20-футовый контейнер сделал так, что внутри может лежать что угодно — кофе, телевизоры, машины — а снаружи он одинаков: один кран, одна перевалка, один поезд. MCP — стандартный контейнер для контекста: внутри может быть что угодно (база, файлы, API, личные заметки), снаружи — единая JSON-RPC обёртка.
Где ломается: контейнер — статичный объект, его погрузили один раз и больше не открывают до прибытия. Внутри MCP-сервера, наоборот, идёт постоянный обмен — модель снова и снова что-то спрашивает, сервер отвечает. Аналогия передаёт идею стандартизации интерфейса, но не передаёт постоянный диалог.
Как это работает
Представь, что у тебя на ноутбуке запущен Claude Code и ты хочешь, чтобы он умел читать твою локальную базу данных DuckDB. Шаги:
- Запуск сервера. Ты в
~/.claude/settings.jsonпрописываешь блокmcpServers, где для имениclientsуказано: «запусти командуmcp-duckdb --db /Users/pasha/clients.duckdb». Claude Code при старте запускает этот процесс. - Handshake (рукопожатие). Клиент посылает серверу первое сообщение —
initialize— с указанием версии протокола, своих capabilities (умеет ли он отображать прогресс, поддерживает ли streaming) и информации о клиенте. Сервер отвечает своими capabilities и списком: «я предоставляю tools, resources и prompts». - Discovery (опись). Клиент шлёт
tools/listи получает массив описаний инструментов. Например: «есть инструментsql_queryс параметромquery: string, возвращает строки результата». Аналогично дляresources/listиprompts/list. Эти описания попадают в системный промт модели — теперь модель знает, что у неё есть руки. - Решение модели. Пользователь спрашивает: «сколько строк в таблице records?». Модель видит в своём системном промте, что есть инструмент
sql_query, и решает его вызвать. Это решение — формально tool-use в формате нативного API LLM (это всё ещё function calling): модель отвечает не текстом, а JSON-объектом{"tool": "sql_query", "input": {"query": "SELECT COUNT(*) FROM records"}}. - Маршрутизация. Клиент видит, что инструмент
sql_queryпринадлежит серверуclients, и шлёт емуtools/callсообщение с этими параметрами. JSON-RPC сообщение по stdio выглядит так (упрощённо):
json {"jsonrpc":"2.0","id":42,"method":"tools/call", "params":{"name":"sql_query","arguments":{"query":"SELECT COUNT(*) FROM records"}}} - Исполнение. Сервер парсит сообщение, выполняет SQL по DuckDB, заворачивает результат:
json {"jsonrpc":"2.0","id":42, "result":{"content":[{"type":"text","text":"4935747"}]}} - Возврат модели. Клиент кладёт ответ в контекст модели как «результат tool-call с id 42». Модель видит число и формулирует человеческий ответ: «В таблице 4 935 747 записей».
Параллельно идёт и поток ресурсов. Модель может попросить «подпишись на изменения ресурса file:///Users/pasha/notes.md» — и сервер будет слать notifications/resources/updated, когда файл меняется. Это уже асинхронные нотификации поверх того же JSON-RPC канала.
Ещё одна важная штука — sampling (выборка): сервер может попросить клиента вызвать LLM от своего имени. Например, MCP-сервер для перевода говорит: «эй, клиент, переведи мне эту строку через свою модель». Это переворачивает обычную картину «клиент зовёт сервер» — иногда сервер тоже может звать клиента. Так строятся sub-agents и иерархические сценарии.
Главный сдвиг мышления
MCP — это не про «как сделать AI умнее», а про «как один AI умеет работать с любым контекстом без переписывания». Ценность не в одном сервере, а в комбинаторике: имея 10 клиентов и 100 серверов, ты получаешь 1000 готовых интеграций без линейного роста кода.
Где встречается в обычной жизни
- Когда ты пишешь Claude в браузере и просишь его «посмотри в моём Google Drive файл X». Под капотом — MCP-сервер Google Drive, который Anthropic поднял как managed-интеграцию. Ты не видишь протокола, но он там.
- Когда в IDE с AI-ассистентом (Cursor, VS Code, JetBrains) ты подключил GitHub и просишь «найди в моих репозиториях упоминания функции foo» — это MCP-сервер
githubпо HTTP+SSE. Раньше каждое IDE писало свою интеграцию, сейчас все берут одну. - Когда умный дом понимает голосовые команды через локальный AI (Home Assistant + локальная LLM) — в большинстве open-source сборок это MCP-сервер home-assistant, дающий модели tools «включи свет», «закрой жалюзи».
- Когда корпоративный чат-бот по справочнику кадров отвечает «у Иванова 8 дней отпуска» — за ним обычно стоит MCP-сервер к 1С/HR-системе, написанный кем-то один раз и подключённый ко всем внутренним ассистентам компании.
- Когда копилот в Office/Google Docs читает твой документ, чтобы предложить переформулировку, — это (в современных сборках) MCP-ресурс «текущий документ», который редактор отдаёт модели.
Где встречается в IT и бизнесе
- AI-разработка под ключ. Все современные coding-агенты — Claude Code, Cursor, Cline, Aider — используют MCP, чтобы дать модели tools «прочитай файл», «выполни команду в терминале», «посмотри лог». Это и есть нынешний дефолтный способ делать AI-IDE.
- Внутренние ассистенты компаний. HR, продажи, поддержка. Компания пишет один MCP-сервер к своей CRM/ERP и подключает его и к корпоративному Claude, и к чат-боту в Slack, и к голосовому ассистенту в колл-центре.
- Data-команды. MCP-серверы к Snowflake, BigQuery, Postgres, DuckDB позволяют любому аналитическому ассистенту делать осмысленные SQL без хардкода. Это убирает ограничение «надо специально учить модель под конкретную схему».
- DevOps и SRE. MCP-серверы к Kubernetes, Grafana, Datadog, Sentry. Модель может сама «зайти и посмотреть» в логи и метрики во время инцидента — раньше для этого писали кучу проектных интеграций.
- Личные ассистенты. Календарь, почта, заметки, банк. Появляется класс «персональных MCP-стеков», где у пользователя свой набор серверов под свой контекст, и любая модель видит его одинаково.
Кто пользуется
- Anthropic — автор протокола, использует во всех своих продуктах: Claude Desktop, Claude Code, Claude в браузере и Claude API. Сотни миллионов tool-вызовов в день (точную цифру открыто не раскрывают).
- Microsoft / GitHub — встроили в Copilot Workspace и GitHub-копилоты, опубликовали официальный MCP-сервер
github. - JetBrains — поддержка MCP в AI Assistant начиная с 2025.4.
- Google — поддержка MCP в Gemini Code Assist и в части потребительского Gemini в 2025-2026.
- OpenAI — в течение 2025 добавили совместимость в Responses API и в потребительский ChatGPT, что было заметным «зачищением» протокольной войны.
- Стартапы: Cursor, Cline, Continue, Zed, Sourcegraph Cody, Aider, Replit Agent, Devin (Cognition) — все опираются на MCP как на основной способ подавать контекст модели.
- Корпорации — Stripe, Cloudflare, Block, Linear открыто опубликовали свои MCP-серверы.
В моём собственном чате прямо сейчас, например, подключён MCP-сервер clients с инструментами sql_query, phone_lookup, inn_lookup — это типичная корпоративная интеграция к внутренней БД.
Альтернативы и конкуренты
- OpenAI Function Calling / Responses API.
+ родной для GPT, не требует отдельного процесса; – до 2025 был привязан к одному вендору, библиотеки tools не переиспользуются между провайдерами. - LangChain Tools / LlamaIndex Tools.
+ огромная экосистема готовых обёрток в Python; – живут как библиотека внутри одного приложения, нельзя «подключить» внешний tool снаружи без переписывания. - ChatGPT Plugins (закрыты в 2024) и GPTs.
+ нулевой порог входа для конечного пользователя; – OpenAI-only, ограничены OpenAPI-форматом, не дают резидентного состояния. - Custom REST/GraphQL + ручная функция в промпте.
+ предсказуемо и просто для одного сценария; – не переиспользуется, каждая модель/клиент учится с нуля. - Google Agents SDK + A2A (Agent-to-Agent).
+ думает в категориях «агент-агенту», есть планирование; – пока более узкая поддержка вне Google-экосистемы, частично совместимо с MCP.
Когда НЕ стоит использовать
- Когда у тебя один-единственный простой инструмент в одном-единственном приложении. Например, чат-бот с одной функцией «получи погоду». Заводить отдельный MCP-сервер — оверкилл. Function Calling прямо в коде проще и быстрее, потому что нет накладных расходов на отдельный процесс и handshake.
- Когда нужен жёсткий контроль за latency и пропускной способностью. MCP добавляет два хопа (клиент → сервер → клиент) и сериализацию JSON. Для real-time голосовых ассистентов с миллисекундным бюджетом — это уже заметно.
- Когда сервер должен работать без живой модели рядом (например, плановые фоновые задачи). MCP — это диалог с моделью, не cron. Для batch-сценариев лучше обычная очередь задач.
Связанные понятия
- JSON-RPC 2.0 — формат запросов и ответов, на котором стоит весь MCP. Простой, текстовый, не привязан к транспорту.
- LSP (Language Server Protocol) — старший брат MCP, тот же подход, но для языков программирования и редакторов. MCP сознательно скопировал его философию.
- Function Calling / Tool Use — способность LLM просить выполнить функцию. MCP — это «снаружи функции», function calling — «внутри запроса к модели».
- RAG (Retrieval-Augmented Generation) — паттерн «подтянуть контекст, потом сгенерировать». Часто реализуется через MCP-сервер с инструментом
searchили ресурсами «куски документации». - Server-Sent Events (SSE) — однонаправленный поток событий по HTTP, на котором работает удалённый транспорт MCP. Проще, чем WebSocket, не требует апгрейда соединения.
- Agent loop — цикл «модель думает → решает вызвать tool → клиент выполняет → результат идёт обратно». MCP стандартизирует второй и третий шаги цикла.
Грабли, на которые наступают новички
Подключив MCP-сервер с большим набором tools, легко переполнить контекст модели описаниями инструментов — каждое описание занимает токены, и при тридцати инструментах на сервере у тебя десятки тысяч токенов уходит впустую. Хорошие клиенты позволяют включать/выключать конкретные tools и группы; используй это.
Литература и источники
- modelcontextprotocol.io — официальная документация и спецификация. Самое актуальное место для глубокого погружения.
- github.com/modelcontextprotocol/servers — открытый реестр серверов. Лучшие примеры —
filesystem,github,postgres,slack. - github.com/modelcontextprotocol/specification — формальная спецификация в репозитории. Полезно, когда нужно реализовать своё.
- «Building Effective Agents» — статья Anthropic, декабрь 2024. Не про MCP напрямую, но про принципы агентских паттернов, в которые MCP встроен. Искать в Google по названию + «anthropic».
- Wikipedia (en): «Model Context Protocol» — уже есть статья с историей и сравнениями. Хорошее обзорное чтение перед погружением в спецификацию.
- LSP-спецификация (microsoft.github.io/language-server-protocol) — если интересно, откуда выросла идея. Чтение часа на два, после него MCP становится «о, понятно, тот же подход».
Где встретилось у меня
В пятницу 29 мая я через Claude Code лез в боевую DuckDB-базу клиентов, подключённую к Claude как MCP-сервер clients. Часть данных лежала в DuckDB (cold), часть — в отдельной SQLite (hot), и второй разъём MCP к hot ещё не был сделан коллегой. Это типичная ситуация «один источник через MCP уже виден модели, второй — пока нет, и модель чувствует слепое пятно». В тот же день параллельный subagent тоже шёл по MCP-тулзам к веб-поиску и веб-фетчу — без всякого моего участия, по тому же самому протоколу.
Краткое резюме
- MCP — открытый протокол от Anthropic (ноябрь 2024), стандартизирующий, как AI-клиенты подключаются к источникам данных и функциям.
- Под капотом — JSON-RPC 2.0 по stdio или HTTP+SSE. Сущности: tools (функции), resources (данные), prompts (шаблоны).
- Цель — убрать N×M-проблему: вместо M интеграций под каждый из N клиентов получаем единый разъём.
- Сейчас де-факто индустриальный стандарт: поддержан Anthropic, Microsoft, Google, OpenAI, JetBrains и десятками AI-IDE.
- Знать MCP полезно не как программисту, а как заказчику: понимать, что AI-ассистент с MCP-сервером к твоей CRM — это вопрос недели, а не квартала.