Протокол MCP
MCP (Model Context Protocol) — это открытый протокол, разработанный для обеспечения бесшовной интеграции между приложениями больших языковых моделей (LLM) и внешними источниками данных, инструментами и сервисами, подобно протоколу HTTP в сетях или протоколу SMTP в электронной почте.
Протокол MCP повышает функциональность, гибкость и масштабируемость приложений LLM за счёт стандартизации способа взаимодействия моделей с внешними ресурсами.


MCP предоставляет разработчикам унифицированную, эффективную и интероперабельную среду разработки путём стандартизации правил взаимодействия в экосистеме AI-приложений.
Основные концепции MCP
В основе MCP лежитконтекст модели, то есть вся внешняя информация и инструменты, необходимые LLM во время работы.
MCP позволяет LLM динамически получать доступ к следующему содержимому и интегрировать его путём определения стандартизированных интерфейсов и протоколов:
- Внешние источники данных: например, базы данных, API, библиотеки документов и т. д., предоставляющие LLM данные в реальном времени или исторические данные.
- Инструменты и сервисы: например, вычислительные инструменты, поисковые системы, сторонние сервисы и т. д., расширяющие возможности LLM.
- Управление контекстом: динамическое поддержание контекста диалога LLM для обеспечения связности и согласованности.
Архитектура MCP
Архитектура MCP состоит из четырёх ключевых частей:
- Хост: Хост — это ИИ-приложение, которое предполагает получать данные от серверов, например интегрированная среда разработки (IDE), чат-бот и т. д. Хост отвечает за инициализацию и управление клиентами, обработку авторизации пользователя, управление агрегацией контекста и многое другое.
- Клиент: Клиент — это мост между хостом и сервером. Он поддерживает соединение один к одному с сервером и отвечает за маршрутизацию сообщений, управление возможностями, согласование протокола, управление подписками и многое другое. Клиент обеспечивает четкую, безопасную и эффективную связь между хостом и сервером.
- Сервер: Сервер — это компонент, который предоставляет внешние данные и инструменты. Он предоставляет дополнительный контекст и функциональность для больших языковых моделей через инструменты, ресурсы и шаблоны промптов. Например, сервер может предоставлять вызовы API к внешним сервисам, таким как Gmail и Slack.
- Базовый протокол: Базовый протокол определяет, как взаимодействуют хосты, клиенты и серверы. Он включает форматы сообщений, управление жизненным циклом, механизмы транспорта и многое другое.
MCP похож на USB-C, позволяя разным устройствам подключаться друг к другу через один и тот же интерфейс.

Как работает MCP
MCP обеспечивает взаимодействие между LLM и внешними ресурсами, определяя стандартизированные форматы данных и протоколы связи.
MCP использует JSON-RPC 2.0 в качестве формата сообщений, осуществляя связь через стандартные сообщения запроса, ответа и уведомления.
MCP поддерживает несколько механизмов транспорта, включая локальный стандартный ввод-вывод (Stdio) и Server-Sent Events (SSE) на основе HTTP.
Жизненный цикл MCP включает три фазы: инициализацию, работу и завершение, гарантируя, что установление соединения, обмен данными и прекращение работы соответствуют спецификации протокола.
Ниже описан его рабочий процесс:
1. Запрос контекста
LLM-приложение отправляет запрос контекста внешнему ресурсу, включая требуемые данные или тип сервиса.

- LLM-приложение отправляет запрос внешнему ресурсу на основе требований задачи.
- Внешний ресурс возвращает требуемые данные или результаты сервиса.
2. Интеграция контекста
LLM-приложение интегрирует данные контекста, возвращённые внешним ресурсом, в модель для генерации ответов или выполнения задач.

- LLM-приложение объединяет внешние данные с внутренними знаниями модели для генерации более точных или более содержательных ответов.
3. Управление контекстом
MCP поддерживает динамическое управление контекстом разговора LLM, обеспечивая связность в многоходовых диалогах.

- Менеджер контекста поддерживает историю и состояние разговора.
- LLM-приложение генерирует связные ответы на основе контекста.
Ключевая часть протокола — сообщения
В основе MCP лежит использование JSON-RPC 2.0 в качестве формата сообщений, что обеспечивает стандартизированный способ связи между клиентами и серверами.
Базовый протокол определяет три основных типа сообщений: Запросы, Ответы и Уведомления.
Ниже приведено подробное описание этих трех типов сообщений:1. Запросы
Сообщения-запросы используются для инициирования операций от клиента к серверу или от сервера к клиенту.
Структура сообщения-запроса выглядит следующим образом:
{
"jsonrpc": "2.0",
"id": "string | number",
"method": "string",
"params": {
"[key: string]": "unknown"
}
}jsonrpc: версия протокола, фиксированная как"2.0"。id: уникальный идентификатор запроса, который может быть строкой или числом.method: имя вызываемого метода, которое является строкой.params: параметры метода, необязательный объект пар ключ-значение, где ключи являются строками, а значения могут быть любого типа.
2. Ответы
Сообщения-ответы — это ответы на запросы, отправляемые от сервера к клиенту или от клиента к серверу.
Структура сообщения-ответа выглядит следующим образом:
{
"jsonrpc": "2.0",
"id": "string | number",
"result": {
"[key: string]": "unknown"
},
"error": {
"code": "number",
"message": "string",
"data": "unknown"
}
}
jsonrpc: версия протокола, фиксированная как"2.0"。id: соответствующий запросуidid, используемый для идентификации запроса, которому соответствует ответ.result: если запрос выполнен успешно,resultполе содержит результат операции, который является объектом из пар ключ-значение.error: если запрос завершается неудачно,errorполе содержит информацию об ошибке, где:code: код ошибки, который является числом.message: описание ошибки, которое является строкой.data: необязательная дополнительная информация об ошибке, которая может быть любого типа.
3. Уведомления
Сообщения-уведомления — это однонаправленные сообщения, не требующие ответа от получателя.
Структура сообщения-уведомления выглядит следующим образом:
{
"jsonrpc": "2.0",
"method": "string",
"params": {
"[key: string]": "unknown"
}
}jsonrpc: версия протокола, фиксированная как"2.0"。method: имя вызываемого метода, которое является строкой.params: параметры метода, необязательный объект пар ключ-значение, где ключи являются строками, а значения могут быть любого типа.
Примечания
- Запросы и ответы: запросы и ответы взаимно однозначны; после того как клиент отправляет запрос, сервер возвращает ответ.
idПоле используется для связи запросов и ответов. - Уведомления: Уведомления являются односторонними; отправителю не нужно ждать ответа от получателя. Уведомления обычно используются в таких сценариях, как отправка событий или обновления статуса.
- Обработка ошибок: Если запрос завершается неудачно, ответ будет содержать
errorполе, содержащее коды ошибок и описания, помогающие разработчикам быстро находить проблемы.
Ключевые особенности MCP
- Стандартизированный интерфейс: Определяйте единые интерфейсы и протоколы для обеспечения совместимости между LLM и внешними ресурсами.
- Динамическая интеграция: Поддержка LLM в динамическом доступе к внешним источникам данных и инструментам и их интеграции.
- Контекстная осведомлённость: Поддержка динамического управления контекстом беседы для повышения связности в многоходовых диалогах.
- Открытость и расширяемость: Поддержка сторонних разработчиков в расширении функций и ресурсов для приложений LLM.
Сценарии применения MCP
MCP широко используется в следующих сценариях:
- Улучшенные системы вопросов и ответов: Предоставляют ответы в реальном времени и с высокой точностью за счёт интеграции внешних источников данных.
- Интеллектуальные ассистенты: Выполняют сложные задачи (такие как бронирование, вычисления, поиск и т. д.) за счёт интеграции инструментов и сервисов.
- Управление знаниями: Обеспечивает поддержку профессиональных знаний в предметной области за счёт интеграции библиотек документов и баз данных.
- Многоходовые диалоги: Обеспечивают согласованные многоходовые диалоги за счёт управления контекстом.
Плюсы и минусы MCP
Преимущества:
- Расширение функциональности: Значительно расширяет возможности приложений LLM за счёт интеграции внешних ресурсов.
- Гибкость: Поддерживает динамический доступ и интеграцию множества источников данных и инструментов.
- Открытость: Стандартизированные протоколы поддерживают стороннюю разработку и интеграцию.
Недостатки:
- Сложность: Требует проектирования и поддержки логики взаимодействия с внешними ресурсами.
- Накладные расходы на производительность: Доступ к внешним ресурсам может приводить к дополнительной задержке.
Альтернативы MCP
В некоторых сценариях можно использовать следующие альтернативы:
- Пользовательский API: Пользовательские интерфейсы API, разработанные для приложений LLM.
- Механизм плагинов: Используйте механизм плагинов для расширения функциональности приложений LLM.
- Граф знаний: Интегрируйте внешние знания через графы знаний.