ИИ-агенты и MCP

Что такое MCP? Model Context Protocol простыми словами

Model Context Protocol (MCP) — открытый стандарт подключения ИИ-приложений к инструментам и данным. Как работает MCP, его строительные блоки и безопасность.

  • Автор: Vijayraj Palanisamy
  • Обновлено
  • 4 мин чтения

Перевод английского оригинала. Код, промпты и вывод моделей оставлены на английском.

Model Context Protocol (MCP) — это открытый стандарт, определяющий, как ИИ-приложения подключаются к внешним инструментам и источникам данных. Anthropic представила его в ноябре 2024 года, и с тех пор он принят в ИИ-ассистентах, инструментах для программирования и фреймворках агентов.

Проблема, которую решает MCP

Языковая модель сама по себе может только создавать текст. Чтобы быть полезной в реальной работе, ей нужно читать файлы, запрашивать базы данных, искать и вызывать API. До MCP каждое ИИ-приложение определяло собственный способ всё это подключать, поэтому инструмент, созданный для одного ассистента, приходилось переделывать для следующего.

MCP заменяет это одним протоколом. Поставщик инструментов пишет MCP-сервер один раз, и любое MCP-совместимое приложение может его использовать. Обычное сравнение — универсальный разъём: один стандартный штекер вместо своего кабеля для каждого устройства.

Как работает MCP

В MCP три роли.

  • Хост: ИИ-приложение, которым пользуется человек, например чат-приложение, IDE или агент.
  • Клиент: компонент внутри хоста, поддерживающий соединение с одним сервером.
  • Сервер: программа, предоставляющая хосту возможности.
Host application (assistant, IDE, agent)
   |  one MCP client per server
   v
MCP server  --->  files, databases, APIs, or pure computation

Сообщения — это JSON-RPC 2.0. Когда соединение открывается, клиент и сервер обмениваются своими возможностями, и клиент спрашивает сервер, что тот предлагает. Хост передаёт эти определения инструментов модели. Когда модель решает использовать инструмент, клиент отправляет вызов серверу и возвращает результат.

Строительные блоки

Серверы могут предлагать три вида возможностей.

Примитив Что это Кто решает его использовать
Инструменты (tools) Функции, которые может вызывать модель, с именем, описанием и схемой входных данных Модель
Ресурсы (resources) Данные только для чтения, идентифицируемые по URI, например файл или запись Приложение или пользователь
Промпты (prompts) Повторно используемые шаблоны промптов, предоставляемые сервером Пользователь

Чаще всего используются инструменты. Определение инструмента выглядит так:

{
  "name": "estimate_tokens",
  "description": "Count the tokens in a prompt for a given model.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "prompt": { "type": "string" },
      "model": { "type": "string" }
    },
    "required": ["prompt"]
  }
}

Описание и схему читает модель, поэтому они сами являются промптами. Чёткие описания инструментов — самый важный фактор того, правильно ли агент использует инструмент. См. промпты для ИИ-агентов.

Транспорты

MCP определяет, как передаются сообщения.

  • stdio: хост запускает сервер как локальный процесс и общается через стандартные ввод и вывод. Просто, и ничего не открывается в сети.
  • Потоковый HTTP (Streamable HTTP): сервер работает как веб-сервис, к которому клиенты обращаются по HTTP; это подходит для удалённых и общих серверов и вводит аутентификацию.

MCP, вызов функций и API

Это слои, а не конкуренты.

  • API — способ, которым программа общается с сервисом.
  • Вызов функций — способ, которым модель просит выполнить функцию.
  • MCP стандартизирует, как функции описываются, обнаруживаются и доставляются любому ИИ-приложению.

MCP-сервер часто оборачивает существующий API. Если вы обслуживаете только одно приложение, которое контролируете, достаточно обычного вызова функций. MCP оправдывает себя, когда вы хотите, чтобы инструмент работал со многими клиентами.

Настройка сервера

Хосты настраиваются списком серверов для запуска. Локальному серверу stdio нужны команда и её аргументы:

{
  "mcpServers": {
    "promptflow": {
      "command": "node",
      "args": ["/absolute/path/to/packages/mcp-server/dist/bin.js"]
    }
  }
}

Названия ключей немного различаются между хостами, но форма та же.

Соображения безопасности

Подключение модели к инструментам мощно и расширяет поверхность атаки.

Результаты инструментов — ненадёжный ввод. Сервер, который получает веб-страницы или читает заявки, возвращает текст, который мог написать злоумышленник. Модель может последовать содержащимся в нём инструкциям. См. инъекцию промптов.

Модель доверяет описаниям инструментов. Вредоносный сервер может вводящим в заблуждение образом описать инструмент, чтобы управлять моделью. Устанавливайте серверы только из доверенных источников и проверяйте, что они заявляют.

Сочетание возможностей умножает риск. Сеанс, который может читать приватные данные, читать ненадёжный контент и отправлять данные наружу, можно превратить в путь эксфильтрации. Не давайте одному сеансу все три.

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

Локальные серверы работают с вашими правами. Сервер stdio — это программа на вашем компьютере. Относитесь к его установке как к установке любого другого ПО.

Проектирование хорошего MCP-сервера

  • Предлагайте небольшое число хорошо названных инструментов с различным назначением.
  • Пишите описания, в которых сказано, когда использовать инструмент и что он возвращает.
  • Проверяйте каждый аргумент и возвращайте ошибки, на которые модель может отреагировать.
  • Делайте результаты компактными, потому что они расходуют контекст модели.
  • Помечайте инструменты, которые только читают, как доступные только для чтения, чтобы хосты могли обращаться с ними соответственно.
  • Никогда не возвращайте секреты в результатах и логах.

Пример: инструменты для промптов через MCP

MCP-сервер PromptFlowEngine — небольшая иллюстрация этих принципов. Он предоставляет движок промптов как инструменты для анализа, реструктуризации, оптимизации, сравнения и очистки промптов, а каталоги правил и моделей — как ресурсы. Он использует транспорт stdio, не делает сетевых вызовов и не имеет доступа к файлам и оболочке, поэтому каждый инструмент доступен только для чтения: он может обрабатывать лишь переданный ему текст.

Когда он подключён, агент может проверять собственную работу:

Use promptflow to restructure this before you start:
"fix login issue and make google login work and don't break anything"

Агент вызывает инструмент реструктуризации и получает разбитую на разделы спецификацию с требованиями, граничными случаями и критериями приёмки, которую затем реализует. Настройка описана в документации MCP-клиента.

Место MCP

MCP — слой подключения агентной системы. Цикл рассуждений, решающий, когда вызывать инструмент, описан в разделе о промптинге ReAct, а инструкции, которые им управляют, — в промптах для ИИ-агентов.

Применить на практике

Попробуйте: mcp

Подключите PromptFlowEngine к ИИ-агентам и MCP-совместимым процессам. Бесплатно, детерминированно и без аккаунта.

Связанные инструменты PromptFlowEngine

Ещё по теме «ии-агенты и mcp»

Все руководства по промпт-инжинирингу