AI-инжиниринг
MCP (Model Context Protocol): стандарт подключения AI к внешним системам
Цели урока
- Понять архитектуру MCP: клиент-серверная модель, транспорт, capabilities
- Создать MCP-сервер с tools и resources с нуля на Node.js
- Научиться определять tools с JSON Schema и обрабатывать вызовы
- Реализовать resources: статические, шаблонные, с подписками на изменения
- Освоить production-паттерны: remote deploy, безопасность, композиция серверов
MCP - это USB-C для AI. До него каждая интеграция писалась вручную: Claude + GitHub, Claude + Notion, Claude + БД. После - один протокол, любой клиент. Anthropic открыл его в ноябре 2024 - и за 3 месяца появилось 1000+ серверов. Claude Desktop, Cursor, VS Code, Windsurf - все добавили поддержку. Это самый быстрорастущий стандарт в AI-инфраструктуре за всё время.
- Claude Desktop + MCP серверы: одна команда - поиск в Jira, проверка GitHub PR, отправка в Slack. Без переключения вкладок
- Cursor использует MCP для подключения к внутренним API компаний - AI-ассистент с доступом к production данным в реальном времени
- Anthropic опубликовал reference MCP-серверы для PostgreSQL, Google Drive, Puppeteer, Brave Search - готовые к использованию
- Компании строят internal MCP-серверы: AI получает доступ к внутренним системам через единый протокол вместо десятков кастомных интеграций
Как появился MCP
**Ноябрь 2024**: Anthropic выпускает MCP как open-source стандарт - MIT лицензия, открытая спецификация. **Декабрь 2024**: Claude Desktop добавляет нативную поддержку, первые 100 community-серверов. **Январь 2025**: Cursor, Windsurf, VS Code Copilot добавляют MCP. **Февраль 2025**: 1000+ open-source серверов на GitHub. **Март 2025**: крупные компании объявляют о production-деплое internal MCP-серверов. За 4 месяца MCP стал де-факто стандартом AI tool integration - быстрее чем любой другой протокол в истории developer tools.
Предварительные знания
MCP: стандартный протокол для AI интеграций
До ноября 2024 мир AI-интеграций выглядел как вавилонская башня. ChatGPT plugins - один формат. LangChain tools - другой. Каждый стартап - своя самодельная схема. N клиентов × M систем = N×M интеграций, которые надо писать, поддерживать и отлаживать заново при каждом обновлении.
**Model Context Protocol (MCP)** - открытый стандарт от Anthropic, который сломал эту логику. Один сервер реализует протокол - и автоматически работает с Claude Desktop, Cursor, VS Code, любым custom agent. N + M вместо N × M. Это USB-C для AI: один разъём, любое устройство.
| Компонент MCP | Что делает | Аналогия |
|---|---|---|
| Tools | Функции которые AI может вызывать (запросы к API, файловые операции) | Function calling, но стандартизированный |
| Resources | Данные которые AI может читать (файлы, БД, API ответы) | GET endpoint - read-only доступ к данным |
| Prompts | Шаблоны промптов которые сервер предоставляет клиенту | Предустановленные команды / slash-commands |
| Transport | Способ связи: stdio (stdin/stdout) или HTTP+SSE | USB-кабель между устройствами |
Под капотом - **JSON-RPC 2.0** поверх транспорта. Каждое сообщение выглядит как `{"jsonrpc": "2.0", "method": "tools/call", "params": {...}, "id": 1}`. Не новый формат - знакомый RPC. Это важно: Anthropic не изобретала велосипед, а взяла battle-tested стандарт и добавила discovery, versioning и security model поверх него.
За 3 месяца после релиза MCP появилось 1000+ open-source серверов: для GitHub, Jira, PostgreSQL, Slack, Notion, файловых систем. Claude Desktop, Cursor, Windsurf, VS Code - все добавили поддержку. Это самый быстрорастущий стандарт в AI-инфраструктуре.
MCP - это просто ещё один способ tool calling
MCP - стандартизированный протокол с discovery, versioning и security model. Tool calling - это механизм вызова функций внутри одного LLM-вызова. MCP - это межпроцессная коммуникация со своим lifecycle
Обычный tool calling (OpenAI function calling, Anthropic tool use) работает в рамках одного запроса к API: схема определена, модель вызывает функцию, бекенд исполняет. MCP - слой выше: сервер запускается как отдельный процесс, клиент динамически обнаруживает его capabilities через `tools/list`, подключение персистентное. Плюс встроенная версионность, аутентификация, audit trail. Это разные уровни абстракции.
Какую проблему решает MCP?
Создание MCP Server с нуля
MCP-сервер - обычная Node.js программа. Никакого магии: `@modelcontextprotocol/sdk` берёт на себя транспорт и JSON-RPC, разработчик только регистрирует capabilities. Весь код сервера - это объявления: что умею, как вызывать, что верну.
Жизненный цикл MCP-сервера - это handshake-протокол. Клиент стартует процесс (stdio) или подключается по HTTP. Происходит `initialize` - обмен capabilities. Потом `tools/list` - клиент узнаёт что умеет сервер. После этого - `tools/call` когда AI решает что нужно. Всё это автоматически, разработчик только регистрирует handlers.
- **Запуск** - клиент стартует процесс сервера (stdio) или подключается по HTTP
- **Initialize** - handshake: клиент и сервер обмениваются capabilities
- **List** - клиент запрашивает tools/list, resources/list, prompts/list
- **Use** - клиент вызывает tools/call, resources/read когда AI решает что нужно
- **Shutdown** - клиент отключается, сервер завершает работу
**stdio транспорт - для локальных серверов.** Процесс запускается клиентом, общение через stdin/stdout. Идеально для разработки и персональных инструментов. Для production и remote доступа - HTTP+SSE транспорт.
Как Claude Desktop узнаёт о доступных tools MCP-сервера?
MCP Tools: определение и обработка вызовов
**Tools** - главная capability MCP-сервера. Это функции, которые AI вызывает для действий: запрос к API, запись в базу, выполнение команды. Каждый tool определяется именем, описанием и JSON Schema параметров.
Важный инсайт: описание tool и параметров - это промпт для модели. Claude решает, какой tool вызвать, анализируя именно этот текст. Плохое описание = модель вызывает не то, не тогда, не с теми параметрами. Это не техническая проблема - это промпт-инжиниринг на уровне API.
**Tools выполняют действия - это side effects.** Создание задачи, отправка email, запись в БД - необратимые операции. В agentic loop Claude сам решает когда вызывать tools. Tool для удаления базы без подтверждения - не гипотетический риск, это реальный сценарий в production. Деструктивные операции требуют human-in-the-loop.
Что является определяющим фактором для AI при выборе, какой MCP tool вызвать?
MCP Resources: данные для контекста AI
**Resources** - read-only данные, которые MCP-сервер предоставляет клиенту для контекста. Принципиальное отличие от tools: resources не выполняют действия, они только читаются. Файлы, конфигурации, данные из БД, документация - всё это resources.
Разделение Tools и Resources - это не просто архитектурная чистота. Это security model. Resources безопасно загрузить в контекст перед ответом - они не изменяют состояние. Tools потенциально опасны - у них есть side effects. Клиент (Claude Desktop, Cursor) показывает пользователю разные UX-паттерны для чтения vs действия.
| Capability | Tools | Resources |
|---|---|---|
| Назначение | Выполнение действий (side effects) | Чтение данных (read-only) |
| Кто инициирует | AI решает вызвать tool | Пользователь или AI запрашивает resource |
| Примеры | create-task, send-email, deploy | project-config, task-details, logs |
| Безопасность | Требует подтверждения (может быть опасно) | Безопасно - только чтение |
**Resource templates** (`tasks://{taskId}`) - удобный паттерн. AI может запросить `tasks://PROJ-123` - конкретную задачу, а template автоматически извлечёт taskId и загрузит данные. Не нужно создавать отдельный resource для каждого элемента.
В чём ключевое отличие MCP Resources от Tools?
MCP в production: деплой, безопасность, композиция серверов
stdio - для локальной разработки. В production появляется другой класс проблем: как деплоить remote-серверы через HTTP+SSE, как аутентифицировать клиентов, как не дать AI вызвать `delete-database` в 3 часа ночи без подтверждения.
- **Аутентификация** - Bearer token в HTTP headers. Каждый клиент имеет свой токен с ограниченными правами
- **Авторизация на уровне tools** - не все пользователи могут вызывать все tools. Admin tools - только для администраторов
- **Input validation** - Zod-схемы валидируют параметры tools до выполнения. SQL injection через tool параметры - реальная угроза
- **Rate limiting** - ограничение вызовов tools по пользователю. AI может вызвать tool 100 раз в цикле
- **Audit log** - логирование каждого tool call: кто, что, когда, результат. Обязательно для compliance
**AI может вызвать tool неожиданно.** В agentic loop модель сама решает какие tools вызывать. MCP-сервер с tool `delete-database` без подтверждения - бомба замедленного действия. Деструктивные операции требуют human-in-the-loop.
Как реализуется композиция нескольких MCP-серверов?
MCP - это просто ещё один способ tool calling
MCP - стандартизированный протокол с discovery, versioning и security model. Обычный tool calling работает внутри одного запроса к LLM API. MCP - межпроцессная коммуникация с персистентным подключением
OpenAI function calling и Anthropic tool use - механизм на уровне одного inference запроса. Схема определена → модель решает вызвать → бекенд исполняет → возвращает результат. MCP - слой выше: отдельный процесс-сервер с lifecycle, динамическое обнаружение capabilities через `tools/list`, версионирование, аутентификация, audit trail. Cursor знает не только что может tool, но и какая у него версия - и может выбрать совместимый сервер.
Итоги
- MCP - стандартный протокол (JSON-RPC 2.0) для подключения AI к внешним системам: N + M вместо N × M интеграций
- MCP Server предоставляет 3 capability: Tools (действия с side effects), Resources (read-only данные), Prompts (шаблоны)
- Описания tools и параметров - это промпт для AI: чем точнее, тем точнее модель выбирает инструмент
- Resources - read-only данные: статические URI или templates (tasks://{taskId}) для динамической загрузки
- Production: HTTP+SSE транспорт, Bearer auth, rate limiting, audit log, human-in-the-loop для деструктивных операций
Вопросы для размышления
- Какие внутренние системы в текущем или прошлом проекте можно было бы подключить к AI через MCP? Что это изменило бы в ежедневной работе команды?
- Чем MCP-сервер отличается от обычного REST API с точки зрения безопасности - какие угрозы специфичны именно для AI-вызовов?
- При каких условиях стоит строить собственный MCP-сервер, а при каких - использовать готовый из open-source реестра?
Что дальше
MCP - протокол. Теперь стоит посмотреть как AI coding assistants (Copilot, Cursor, Claude Code) используют MCP и похожие паттерны для интеграции с IDE и кодовой базой.
- AI Coding Assistants изнутри — Cursor и Claude Code используют MCP для подключения к инструментам разработчика
- Autonomous Agents — MCP-серверы как tools для автономных агентов - Devin, SWE-Agent подключаются к системам через MCP
Связанные уроки
- aie-16-tool-calling — MCP стандартизирует интерфейс tool-calling
- aie-46-ai-coding-assistants — Coding-ассистенты потребляют MCP-серверы
- aie-44-ai-backend-node — Backend реализует MCP-сервер
- aie-17-agent-fundamentals — Агенты получают инструменты через MCP
- net-54-rpc — Стандартизированные client-server вызовы возможностей
- sd-10-microservices