КЛАСТЕР 04 · MCP ВВЕДЕНИЕ ~16 МИНУТ
День 16 · из 35

Знакомство с MCP

Кластер 02 показал, что у агента есть инструменты. Но как именно подключать к нему чужие сервисы — Google Drive, GitHub, базу данных, корпоративную CRM? Сегодня — про стандарт, который индустрия выбрала ответом на этот вопрос.

Суть урока

MCP (Model Context Protocol) — это открытый стандарт для подключения инструментов и данных к LLM-агентам. Анонсирован Anthropic в конце 2024, к 2026 поддержан почти всеми крупными игроками (OpenAI, Google, Microsoft). Решает простую, но болезненную проблему: каждое приложение раньше делало свои собственные интеграции, MCP даёт один протокол. Сделал MCP-сервер один раз — он работает с любым агентом, поддерживающим стандарт. AI-инженер думает про MCP не как про «ещё одну библиотеку», а как про USB для LLM.

Проблема: N×M интеграций

До MCP каждое AI-приложение интегрировалось с каждым внешним сервисом отдельно. Cursor делал свою интеграцию с GitHub. Claude — свою. ChatGPT с плагинами — третью. Каждое приложение писало собственный код для подключения каждого сервиса.

Когда сервисов и приложений несколько — это квадратичная задача. N приложений × M сервисов = N×M интеграций. Каждая интеграция — своя архитектура, свои контракты, своя поддержка, свои баги.

Что было до MCP · каждая пара уникальна
Агенты
Cursor Claude Desktop ChatGPT Свой агент
Сервисы
GitHub Google Drive Slack Postgres Notion
4 агента × 5 сервисов = 20 разных интеграций, каждую кто-то пишет и поддерживает

В реальном мире цифры были ещё хуже: десятки агентов и сотни сервисов. Каждая компания, делающая AI-продукт, тратила месяцы на интеграции вместо собственной логики продукта. И при этом ни одна из этих интеграций не была переиспользуемой.

Это та же проблема, которую в своё время решали USB, HTTP, OAuth и любой другой удачный стандарт: превратить квадратичную сложность в линейную через общий протокол.

MCP делает то же самое: вместо «каждый агент знает, как разговаривать с каждым сервисом» — «каждый агент знает MCP, каждый сервис говорит на MCP, и они автоматически работают вместе». N+M вместо N×M.

Что такое MCP по сути

Если в одну фразу: MCP — это стандартный способ для агента узнать у внешнего сервиса, что тот умеет, и вызывать эти умения. Это и всё.

Технически — это спецификация на основе JSON-RPC, описывающая:

  • Как агент обнаруживает возможности сервиса: «какие у тебя есть инструменты? какие данные? какие промпты?»
  • Как агент вызывает инструмент сервиса и получает результат
  • Как сервис отдаёт агенту данные в форме, понятной модели
  • Как они устанавливают и поддерживают соединение, обрабатывают ошибки

Конкретного кода — минимум. Большая часть стандарта — это контракты: формат сообщений, имена операций, структура ошибок. Реализация — за тобой или за библиотеками.

Три типа того, что MCP-сервер может отдавать

В стандарте есть три основных «примитива», которые сервер выставляет агенту:

Tools

Инструменты

Действия, которые агент может вызвать: send_email, create_pr, query_db. Это про то, что было в Дне 6 — но теперь стандартизированное.

Resources

Ресурсы

Данные, к которым агент может обращаться: файлы, документы, записи БД. Не «вызов действия», а «дай мне посмотреть».

Prompts

Промпты

Заранее заготовленные шаблоны промптов, которые сервис предоставляет агенту. «Используй вот этот промпт для анализа моих данных».

Для большинства задач — главные tools. Resources и prompts полезны, но реже. Когда говорят «подключил MCP-сервер» — в 80% случаев речь именно про инструменты.

i
Это не «новый способ» делать tools
MCP — не альтернатива tool calling, который был в Дне 6. Это оболочка над ним. Внутри MCP-серверы выставляют инструменты, агент через стандартный канал их обнаруживает и вызывает. Связка с моделью (function calling в API) — всё та же.

Анатомия: клиент, сервер, протокол

В мире MCP две роли:

MCP-клиент — это твой агент (или приложение)

Клиент — это всё, что хочет «попросить услуг»: Cursor, Claude Desktop, твой собственный агент. Клиент знает про MCP-стандарт и умеет:

  • Подключаться к нескольким MCP-серверам одновременно
  • Узнавать у каждого сервера, что он умеет
  • Собирать список инструментов от всех серверов и давать его модели
  • Когда модель вызывает инструмент — направлять вызов в нужный сервер
  • Получать результат и класть его в контекст модели

Клиент — это «маршрутизатор» между моделью и внешним миром. Бо́льшую часть работы делают готовые SDK (от Anthropic, Microsoft, opensource). Тебе как разработчику агента — не надо писать MCP-клиента с нуля.

MCP-сервер — это интеграция с конкретным сервисом

Сервер — это «адаптер» к чему-то внешнему. Один сервер = один сервис: GitHub-MCP, Google-Drive-MCP, Postgres-MCP. Сервер выставляет наружу инструменты этого сервиса в формате MCP.

Серверы бывают разные:

  • Готовые от вендоров. GitHub, Anthropic, Google публикуют свои MCP-серверы для своих сервисов
  • Сообщества. Сотни opensource MCP-серверов: для Notion, Linear, Slack, баз данных, файловых систем
  • Твои собственные. Когда у тебя есть внутренний сервис или специфичные нужды — пишешь свой сервер

Главное: один и тот же сервер работает с любым MCP-клиентом. Написал GitHub-MCP — он сразу подключается к Cursor, к Claude, к твоему агенту, ко всему, что поддерживает MCP.

Транспорт — как клиент и сервер разговаривают

MCP-стандарт описывает что передаётся, но также определяет как. Есть два основных режима:

  • stdio — сервер запускается как локальный процесс рядом с клиентом, разговаривают через stdin/stdout. Самый простой случай: ты ставишь MCP-сервер локально, клиент его запускает и общается. Все локальные сценарии (доступ к файлам, к локальной БД) — так.
  • HTTP / SSE — сервер крутится где-то в облаке, клиент стучится по сети. Для удалённых сервисов: облачные API, корпоративные сервисы.

Транспорт прозрачен — модель и большинство твоего кода не различают, по какому каналу идёт общение. Это абстракция, как HTTPS vs HTTP — снаружи одинаково.

Полный цикл одного запроса

Чтобы интуиция прижилась — пример того, как MCP работает на одном запросе агента «посмотри последний PR в моём репозитории и составь комментарий»:

Цикл MCP-взаимодействия
01
Запуск клиента Агент стартует, подключается к настроенным MCP-серверам (GitHub-MCP, Slack-MCP и т.д.).
02
Discovery Клиент спрашивает у каждого сервера: «какие у тебя инструменты?». Собирает список: list_prs, get_pr, create_comment, и т.д.
03
Промпт модели Клиент кладёт список доступных инструментов в system prompt модели — в стандартном формате tool calling.
04
Решение модели Модель видит запрос пользователя, выбирает: «нужно вызвать list_prs». Возвращает tool call.
05
Маршрутизация Клиент видит вызов list_prs, понимает что это из GitHub-MCP, отправляет MCP-запрос туда.
06
Сервер делает работу GitHub-MCP внутри обращается к настоящему GitHub API, получает список PR, возвращает клиенту в MCP-формате.
07
Результат в контекст Клиент кладёт результат в массив messages как tool_result, делает следующий вызов модели.
08
Цикл продолжается Модель видит результат, решает «теперь возьму последний PR через get_pr»... и так до завершения задачи.

Заметь главное: модель ничего не знает про MCP. Для неё это просто инструменты в стандартном формате tool calling. Вся магия MCP — между клиентом и сервером. Это и есть смысл хорошей абстракции.

Решения AI-инженера

Развилка 1. MCP или прямые tool calls

Не все инструменты нужно делать через MCP. Когда у тебя в агенте всего 2-3 простых инструмента, ты сам их написал, они нужны только в этом агенте — нет смысла оборачивать в MCP-сервер. Прямой tool call (как в Дне 6) проще и быстрее.

MCP начинает давать выигрыш, когда:

  • Один и тот же набор инструментов нужен в нескольких агентах или приложениях
  • Инструменты обращаются к внешнему сервису, у которого есть готовый MCP-сервер
  • Хочешь, чтобы пользователи могли сами подключать свои сервисы к твоему агенту
  • Делаешь нечто долгосрочное и хочешь экосистемную совместимость

Для прототипа на выходных — прямые tool calls. Для продукта, который растёт — MCP стоит обдумать.

Развилка 2. Подключать готовое или писать своё

Соблазн «напишу свой MCP-сервер для GitHub» обычно лишний. Готовый GitHub-MCP уже есть, поддерживается, обновляется. Свой будет хуже, и время на него можно потратить на собственно продукт.

Писать свой MCP-сервер имеет смысл, когда: (а) для нужного сервиса нет готового, (б) ты делаешь внутреннюю интеграцию своих систем, (в) специфичная логика, которую готовые не покрывают.

Концептуальные грабли

«Подключим MCP — и агент сразу будет круче». MCP — это транспортный стандарт, не интеллект. Подключение MCP-сервера само по себе ничего не улучшает в работе модели. Оно даёт возможность агенту обращаться к новым данным или действиям — но как агент с ними справится, зависит от его архитектуры (Кластеры 02-03), а не от наличия MCP.

MCP без хороших инструментов и хорошего промпта — это просто красивая абстракция, не работающий продукт.

Подключение MCP-сервера = передача агенту реальных прав на твою систему. Дал GitHub-MCP — агент может комментировать PR, мерджить, удалять ветки. Дал Postgres-MCP — может выполнять SQL.

Возвращаемся к Дню 0 (безопасность) и Дню 15 (контролируемые переходы): не давай агенту больше прав, чем нужно. У хороших MCP-серверов есть конфиги read-only режима, разрешённых операций. Используй их.

Особенно осторожно с непроверенными MCP-серверами от сообщества — это код, который получит доступ к твоим данным.

Подключил 5 MCP-серверов, у каждого по 10 инструментов — теперь в system prompt модели сразу описание 50 инструментов. Это дополнительные 5000-15000 токенов на каждый запрос. По цене из Дня 8 — серьёзная статья расхода.

Подключай только реально используемые сервера. Если у сервера много инструментов — посмотри, можно ли отключить ненужные. Бо́льшая часть продуктовых агентов использует 5-10 инструментов, а не 50.

Стандарт — молодой (2024). Реализации у разных вендоров слегка расходятся, иногда есть нюансы. «Работает в Claude Desktop» не всегда значит «работает в Cursor» без правок.

К 2026 ситуация стабилизировалась, но крайние кейсы по-прежнему могут отличаться. Привычка: тестировать MCP-сервер в каждом клиенте, где собираешься его использовать. Универсальной совместимости 100% пока нет.

Практика

Эксперимент 01 · Подключи готовый MCP к Claude Desktop

Самый быстрый путь увидеть MCP вживую

Если у тебя установлен Claude Desktop — открой его конфиг (Settings → Developer → Edit Config). Добавь в него filesystem MCP-сервер с путём к одной из твоих папок. Перезапусти Claude. Теперь у Claude есть доступ к этим файлам — попроси «посмотри, какие у меня там лежат файлы». Это и есть MCP в действии: добавил один блок в конфиг — агент получил новые способности. Это та самая «USB-подобность», о которой шла речь.

Эксперимент 02 · Изучи каталог готовых серверов

Прогуляйся по экосистеме

Открой mcp.so / awesome-mcp-servers / mcp.directory (любой из каталогов MCP-серверов). Посмотри, что уже есть: серверы для Slack, Notion, Postgres, файловых систем, GitHub, Jira, AWS, и сотен других. Это масштаб экосистемы за полтора года существования стандарта. Найди 2-3 сервера, которые могли бы быть полезны в твоём гипотетическом проекте.

Эксперимент 03 · Прикинь, какие MCP нужны твоему агенту

На бумаге, 15 минут

Возьми идею AI-агента, над которой работаешь (или гипотетическую). Перечисли все внешние данные/действия, к которым агенту нужен доступ. По каждому — есть ли готовый MCP-сервер? Если нет — что нужно написать? Какие из них read-only, а какие — пишут данные? Какие нужны точно с подтверждением пользователя (вспоминаем Дни 0 и 15)? Это твой архитектурный план интеграций.

Что в Дне 17
Поняли, что такое MCP. В Дне 17 — следующий шаг: как первый инструмент попадает в контекст агента. Концептуально пройдём через цикл «обнаружение → описание → вызов» на конкретном примере. Связка с Днём 6: теперь увидишь, как «дать агенту инструмент» выглядит на практике через MCP.