Как стать автором
Обновить

Model Context Protocol (MCP) – универсальный протокол для взаимодействия с ИИ, и почему это замечательно

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров4.9K
Изображение взято с https://www.anthropic.com
Изображение взято с https://www.anthropic.com

Введение: Что такое MCP, и зачем он нужен?

Знаете, я часто ловлю себя на мысли, что современные ИИ-ассистенты типа ChatGPT/Claude/Gemini/подставьте_сюда_свой_любимый – это очень умные и совершенно оторванные от реальности теоретики. Они здорово рассуждают, очень умно звучат, пишут без ошибок, но стоит попросить их проверить свежие данные или заглянуть в документ (упаси господи, если в БД) – тут же начинаются проблемы. Я не раз сталкивался с этим, когда пытался использовать ИИ для работы с реальными данными (На заре своих попыток использования ассистентов. За два года многое поменялось, конечно, свои хаки есть. Но в целом, ситуация с этим прежняя - все плохо).

Проблема в том, что они живут в информационном вакууме. Каждый раз, когда мы пытаемся подружить LLMку с новым API или сервисом — это боль. Одна из проблем — зоопарк несовместимых друг с другом решений, это очень похоже на зарядки для девайсов (как в анекдоте: «Идея: У нас есть 14 разных разъемов для зарядки, сейчас мы сделаем стандарт, который объединит все, и все будут использовать его, круто! Реальность: У нас есть 15 разных разъемов для зарядки.»).

Было бы замечательно, если бы существовал единый стандарт. Типа USB-C для ИИ-ассистентов. Именно так подумали ребята из Anthropic, анонсировав в ноябре 2024 года Model Context Protocol (MCP).

Когда я впервые услышал про MCP, я сходу не понял, что это значит. Мне показалось, что это просто какая-то там очередная библиотека. Чем глубже я погружался, тем больше понимал: это не так. MCP – это попытка создать стандартный протокол общения между ИИ и внешним миром. На ум приходит аналогия про контейнеры для перевозки грузов: был такой Малком Маклин, которого считают "отцом контейнеризации" (не докер). Его идея сделать размеры контейнеров и оборудование для их погрузки (всякиу краны и крепления на судах, грузовиках и поездах) единообразными - произвела настоящую революцию в мировой торговле в 50-60х годах XX века, резко снизив стоимость и время перевозок. Вот и здесь идея такая же: а давайте сделаем так, чтобы все ИИ, которые поддерживают MCP - работали по единому интерфейсу, и любой софт можно было единообразно к ним подключать.

Что под капотом у MCP

Основная цель MCP – унифицировать способ, которым приложения делятся контекстом с LLM. А контекст – это всё, что нужно модели для адекватного ответа на наши запроса: история диалога, инструкции в промпте, внешние данные (если модель умеет гуглить, например) и память о прошлых взаимодействиях. MCP - это ответ на вопрос, как дать доступ модели к данным там, где эти данные живут – в файлах, корпоративных приложениях, базах знаний, БД и тд. Вместо зоопарка интеграций – единый протокол, упрощающий и ускоряющий подключение любых новых источников.

Архитектура - знакомый типичный клиент-сервер, но с ИИ-изюминкой. MCP использует классическую клиент-серверную модель, но адаптированную для нужд ИИ. В основе лежит триада:

  1. MCP Host: Это приложение, где живет LLM (например, Claude Desktop или Cursor IDE). Хост хочет получить доступ к внешним возможностям/данным

  2. MCP Client: Компонент внутри хоста. Для каждого внешнего сервиса создается клиент, который устанавливает соединение с соответствующим сервером и общается с ним по протоколу MCP

  3. MCP Server: Внешняя программа или сервис, который предоставляет хосту определенные данные или функции по протоколу MCP. Сервер может быть локальным (доступ к файлам на компьютере) или удаленным (обертка над API или, например, БД). Каждый сервер определяет и объявляет, какими ресурсами, инструментами и подсказками он может поделиться с моделью

Общение между клиентом и сервером происходит через стандартные HTTP + JSON-RPC для запросов и Server-Sent Events (SSE) для асинхронщины и стриминга. Это позволяет серверу, например, отправлять обновления или прогресс выполнения задачи в реальном времени. Дополнительно, MCP берет на себя стандартные задачи вроде управления соединением, аутентификации, обработки ошибок и валидации данных, избавляя нас от реализации этой рутины.

Строительные блоки контекста в MCP

Протокол четко определяет взаимодействие между компонентами. Вот основные элементы:

  1. Messages: Основа основ в нашем протоколе – диалог.

    MCP структурирует его как последовательность сообщений с четкими ролями: user (это мы), assistant (наш ИИ), system (всевозможные системные инструкции) и tool (результат работы внешних сервисов, которые MCP Server). Каждое сообщение содержит текст и опциональные метаданные (время, язык, приоритет и тд). Системные сообщения задают тон и правила игры для модели ("Отвечай, как будто ты – вежливый помощник...", "Отвечай только на основе данных из предоставленных документов...").

    Это помогает управлять поведением модели и защищаться от атак вроде prompt-injection (но надо понимать, что почти всегда можно все обойти, когда речь идет про ИИ - так что на сто процентов нельзя быть уверенным, что модель будет следовать этой инструкции).

    Модель также может добавлять свои "мысли вслух" или план действий в метаданные ассистентских сообщений (chain of thoughts - цепочка рассуждений)

  2. Tools: Ну, собственно, это и есть наши внешние сервисы и функции, которые модель может вызывать.

    Каждый инструмент описывается сервером: имя, понятное описание (чтобы модель знала, когда его использовать) и схема параметров. То есть, я могу создать инструмент с названием "база экономических данных Японии за 2000-2025 годы" и описать ее так: "Обращайся к этому инструменту, если тебе нужны какие-либо данные про экономику Японии за последние 25 лет". И мне нужно описать, что данный инструмент умеет отвечать на запросы с такими-то параметрами. Модель, получив список доступных инструментов, сама определяет, какой из них применить для ответа на запрос пользователя. Вызов происходит так: модель генерирует ответ типа "Я хочу вызвать инструмент X с параметрами Y". MCP-клиент перехватывает такой запрос, передает его нужному MCP-серверу, тот выполняет нужное действие и возвращает результат. Результат (например, данные из API или из БД) вставляется обратно в диалог как сообщение от роли tool. После этого модель продолжает диалог, уже зная результат.

    MCP стандартизирует весь цикл: объявление, вызов, обработка ошибок, получение результата. Это позволяет строить сложные цепочки действий: модель может последовательно вызывать несколько инструментов, а протокол гарантирует корректную передачу данных между шагами. За счет того, что модель вызывает инструменты по своему усмотрению, а не по жесткому скрипту, система получается гибкой и "умной"

  3. Memory: Мы же хотим, чтобы ассистент помнил важные вещи между сессиями? MCP предлагает решение через так называемые серверы памяти.

    Это могут быть сервисы, хранящие заметки, факты или векторные представления данных для семантического поиска по ним. На гитхабе уже есть примеры таких серверов от Anthropic и не только (всякие Memory Bank, Memory Box и тд). Модель знает, что может использовать инструменты этих серверов, чтобы запомнить что-то важное (вызвав метод save_memory) или "вспомнить" (вызвав метод search_memory). Так LLM обретает долговременную память: разные пользовательские предпочтения, какие-то детали прошлых проектов, важные факты - не теряются. Сами данные хранятся на стороне сервера, что важно для конфиденциальности.

    MCP помогает управлять и краткосрочной памятью: если диалог становится слишком длинным, Context Manager может сжимать или суммировать историю, сохраняя самое важное в пределах контекстного окна модели

  4. Files & Resources: Помимо активных инструментов, модели часто нужен доступ к данным – файлам, записям в базах данных, результатам API-запросов, логам. В контексте MCP это называется ресурсы. Сервер объявляет доступные ресурсы, используя URI-схемы (например, file:///path/doc.txt или database://customers/123. Я выше для облегчения понимания писал про то, что БД может быть инструментом - это так, если поверх нее есть какое-то API. Но может быть и ресурсом в зависимости от удобства применения). Модель может запросить содержимое ресурса, как бы делая GET-запрос. В отличие от инструментов, ресурсы обычно предназначены только для чтения (у инструментов можно вызывать любые описанные функции, и они могут изменять состояние инструмента как угодно). Файловая система – типичный пример ресурса. Anthropic выпустила готовый Filesystem MCP-сервер, позволяющий Claude безопасно работать с файлами на компьютере пользователя

  5. Prompts: Кроме базовой системной инструкции, в MCP есть понятие Prompts – это предопределенные шаблоны взаимодействия для каких-то стандартных задач. Эти шаблоны могут комбинироваться, создавая сложные рабочие процессы (workflows). Например, шаблон "анализа лога" может включать шаги поиска по логу (в инструменте, например в elasticsearch), суммирование найденного (уже сама модель), выдача заключения по шаблону. MCP позволяет явно объявлять такие последовательности

В итоге - MCP специфицирует язык общения между LLM и внешним миром. Он структурирует всё: от формата сообщений до параметров вызова функций и доступа к данным. Это позволяет разным моделям, библиотекам и сервисам легко понимать друг друга, если они поддерживают протокол.

MCP в действии

Когда я впервые запустил Claude Desktop с поддержкой MCP, ощущения были... другие. Это уже не просто чат-бот, куда ты копипастишь тонны текста, а полноценный напарник или ассистент.

Anthropic сразу выкатили готовые MCP-серверы для популярных инструментов. Хороший пример - это Google Drive и GitHub. Раньше как было? Чтобы спросить что-то по документу из Google Drive, надо было его открыть, скопировать нужный кусок текст (а то и весь документ), вставить в чат. Или, если файл находится в GitHub, нужно найти его, скопировать код... В общем, суть понятна.

Но с поддержкой MCP - все иначе. Просто пишем:

* Открой мой документ gdrive://МойДиск/Проекты/Отчет_Q3.gdoc, сделай саммари раздела про расходы на рекрутинг

* Или: Объясни функцию process_user_data в файле github://мой_логин/мой_репо/main.py#L50-L85

И он реально открывает и читает! Не нужно ничего копировать, вставлять - никаких доп действий. Он может сравнить версии, найти информацию по нескольким файлам в папке, посмотреть историю коммитов в репозитории.

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

Разбор конкретного примера

Объяснение примера ниже для визуалов
Объяснение примера ниже для визуалов

Давайте разберем на конкретном примере, как работает MCP. Представьте, что вы спросили у Claude: "Какой был рост ВВП Японии в 2024 году?"

Вот что происходит под капотом:

[
  {"role": "system", "content": "Ты – полезный ассистент, отвечай точно и цитируй источники."},
  {"role": "user", "content": "Каков был рост ВВП Японии в 2024 году?"},
  {
    "role": "assistant",
    "content": "Секунду, сейчас поищу актуальные данные...",
    "tool_calls": [{
      "id": "tool_call_123",
      "type": "function",
      "function": {
        "name": "web_search",
        "arguments": "{"query": "Japan 2024 GDP growth official figure"}"
      }
    }]
  },
  {
    "role": "tool",
    "tool_call_id": "tool_call_123",
    "content": "{"result": "По данным правительства Японии, рост ВВП в 2024 году составил 1,9%.", "source": "cabinet.go.jp"}"
  },
  {"role": "assistant", "content": "Согласно официальным данным правительства Японии, ВВП страны вырос на 1,9% в 2024 году."}
]

По шагам:

  1. Запрос пользователя: Все начинается с вопроса пользователя к модели (если надо, можно задать доп инструкцию, как на 2 строчке нашего json, но не обязательно)

  2. Обращение хоста к LLM: Возьми, пожалуйста, промпт пользователя, и сгенерируй ответ

  3. Ответ ИИ: Модель понимает, что ей не хватает данных, и просит доп инфу из источника данных про японию. Тут важно: модель не сама лезет в источник, а сигнализирует хосту, что хочет использовать инструмент web_search с конкретным запросом arguments (и параметр query в функции)

  4. Хост вызывает нужный MCP-server

  5. Запрос нужных данных

  6. Получение данных

  7. Ответ данных из сервера хосту

  8. Передача дополнительных данных в LLM

  9. Генерация финального ответа на основе дополнительных данных

  10. Отдача финального ответа пользователю

То есть, модель делегирует выполнение задачи внешнему инструменту через стандартизированный механизм tool_calls, а MCP-инфраструктура берет на себя всю работу по вызову и получению результата.

Минутку, а как же безопасность? Клод же увидит мои данные?

Это важный вопрос, который тоже хочу отдельно подсветить, особенно если речь идет о корпоративных или чувствительных данных (как будто другие бывают).

Когда вы используете MCP с облачной моделью вроде стандартного Claude (веб/десктоп - неважно), происходит следующее:

  1. Вы просите Клода что-то сделать с вашим файлом

  2. MCP-хост обращается к соответствующему MCP-серверу

  3. Сервер читает содержимое файла

  4. Эти данные возвращаются хосту и включаются в контекст (промпт), который отправляется на серверы Anthropic для обработки моделью Claude.

То есть, в стандартном облачном сценарии ваши данные передаются вендору LLM. Да, обработка происходит на сервере, но финальный результат все равно отдается в облако. Для личных заметок это может быть приемлемо, но для конфиденциальной корпоративной информации – точно нет, особенно в госсекторе или финтехе. Для таких данных - только онпрем развернутая LLM. Это единственный надежный вариант, не рекомендую надеяться на политики безопасности облачных провайдеров. Да, вряд ли они будут воровать as is что-то у вас. Но... в самый неподходящий момент - стрельнет.

Вывод: Сам по себе MCP – это просто протокол для взаимодействия и передачи данных и команд. Он не решает проблемы безопасности. Безопасность всей системы зависит от того, где развернута LLM и как реализованы конкретные MCP-серверы, работающие с вашими данными.

Итого

MCP - это не просто технический стандарт – это ключ к созданию действительно умных и полезных помощников, которые смогут бесшовно работать с данными и инструментами.

MCP не просто имеет все шансы стать универсальным стандартом для ИИ-агентов, он де-факто уже является стандартом: поддержка со стороны ключевых игроков индустрии (в марте OpenAI объявили о поддержке MCP во всех своих моделях), растущее сообщество разработчиков – подтверждение этому.


Пару слов от автора

Я люблю не просто писать понятным языком, а делать это так, чтобы было еще и интересно и супер понятно. Помимо этой статьи, я веду телеграм-блог That's IT, в котором выкладываю ежедневные самые крутые новости мира ИИ и технологий в коротком формате под утренний кофе, делюсь своими мыслями про тренды и веяния, и мы вместе с подписчиками рассуждаем, например, про то, когда же уже ИИ уничтожит человечество. У нас интересно и очень уютно - заходите!

Теги:
Хабы:
+15
Комментарии4

Публикации

Ближайшие события