Введение в Model Context Protocol

Глубокое погружение в Model Context Protocol (MCP)

Спецификация протокола40 мин чтения

Обзор протокола

Model Context Protocol (MCP) — это открытый стандарт, который стандартизирует способ предоставления контекста приложениями большим языковым моделям (LLM). Думайте о MCP как о USB-C порте для ИИ-приложений—предоставляющем стандартизированный способ подключения ИИ-моделей к различным источникам данных и инструментам.

Ключевые преимущества

  • Стандартизированный интерфейс связи
  • Безопасная передача данных
  • Расширяемый дизайн архитектуры
  • Кроссплатформенная совместимость
  • Синхронизация контекста в реальном времени
  • Поддержка расширений на основе плагинов

Случаи использования

  • Анализ и понимание кода
  • Генерация и поддержка документации
  • Интеграция управления проектами
  • Запросы и операции с базами данных
  • Интеграция API-сервисов
  • Автоматизация рабочих процессов

Дизайн архитектуры

Слоистая архитектура протокола MCP и обзор компонентов

MCP хост

ИИ-приложение

ИИ-приложение, которое координирует и управляет одним или несколькими MCP-клиентами

Основные обязанности:

  • Координировать несколько MCP-клиентов
  • Управлять взаимодействиями ИИ-модели
  • Обрабатывать ответы сервера
  • Обрабатывать состояние сессии

MCP клиент

Менеджер соединений

Компонент, который поддерживает соединение с MCP-сервером и получает контекст от MCP-сервера для использования MCP-хостом

Основные обязанности:

  • Поддерживать соединение сервер один-к-одному
  • Отправлять контекстные запросы
  • Обрабатывать ответы сервера
  • Управлять жизненным циклом соединения

MCP сервер

Поставщик контекста

Программа, которая предоставляет контекст MCP-клиентам через инструменты, ресурсы и подсказки

Основные обязанности:

  • Принимать клиентские соединения
  • Обрабатывать контекстные запросы
  • Возвращать структурированные данные
  • Поддерживать состояние ресурсов

Транспортный слой

Канал связи

Управляет каналами связи и аутентификацией между клиентами и серверами

Основные обязанности:

  • STDIO транспорт для локальных процессов
  • HTTP транспорт для удаленных серверов
  • Фреймирование и сериализация сообщений
  • Аутентификация и безопасность

Слой данных

Определение протокола

Определяет протокол на основе JSON-RPC для связи клиент-сервер

Основные обязанности:

  • Формат сообщений JSON-RPC 2.0
  • Управление жизненным циклом
  • Определения примитивов (инструменты, ресурсы, подсказки)
  • Система уведомлений

Примитивы MCP

Основные примитивы, которые определяют, что клиенты и серверы могут предложить друг другу

Инструменты

Исполняемые функции, которые ИИ-приложения могут вызывать для выполнения действий

Примеры:

  • Файловые операции (чтение, запись, создание)
  • API-вызовы к внешним сервисам
  • Запросы и операции с базой данных
  • Анализ и компиляция кода
  • Выполнение системных команд

Доступные методы:

tools/listtools/call

Ресурсы

Источники данных, которые предоставляют контекстную информацию ИИ-приложениям

Примеры:

  • Содержимое файлов и метаданные
  • Записи и схемы базы данных
  • API-ответы и документация
  • Информация Git-репозитория
  • Файлы конфигурации

Доступные методы:

resources/listresources/read

Подсказки

Многоразовые шаблоны, которые помогают структурировать взаимодействие с языковыми моделями

Примеры:

  • Системные подсказки для конкретных задач
  • Few-shot примеры для обучения
  • Шаблоны обзора кода
  • Подсказки генерации документации
  • Шаблоны анализа и резюме

Доступные методы:

prompts/listprompts/get

Транспортный слой

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

STDIO транспорт

Использует стандартные потоки ввода/вывода для прямой связи процессов

Случаи использования:

  • Локальные MCP-серверы на той же машине
  • Прямая связь процессов
  • Оптимальная производительность без сетевых накладных расходов
  • Простая настройка и конфигурация

Пример:

npx @modelcontextprotocol/server-filesystem /path/to/files

Запустить файловый сервер через STDIO

HTTP транспорт

Использует HTTP POST для сообщений клиент-сервер с дополнительными Server-Sent Events

Случаи использования:

  • Удаленные MCP-серверы
  • Облачные сервисы
  • Аутентификация с bearer токенами
  • Масштабируемые развертывания серверов

Пример:

https://api.example.com/mcp

Подключиться к удаленному MCP-серверу через HTTP

Типы сообщений

Типы сообщений на основе JSON-RPC 2.0, поддерживаемые протоколом MCP

initialize

Инициализировать соединение и согласовать версию протокола и возможности

Клиент → Сервер

Пример сообщения:

{
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "tools": {},
      "resources": {}
    },
    "clientInfo": {
      "name": "gemini-cli",
      "version": "1.0.0"
    }
  }
}

tools/list

Обнаружить доступные инструменты на сервере

Клиент → Сервер

Пример сообщения:

{
  "method": "tools/list",
  "params": {}
}

tools/call

Выполнить конкретный инструмент с предоставленными аргументами

Клиент → Сервер

Пример сообщения:

{
  "method": "tools/call",
  "params": {
    "name": "com.example.weather/current",
    "arguments": {
      "location": "San Francisco",
      "units": "imperial"
    }
  }
}

resources/list

Получить список доступных ресурсов

Клиент → Сервер

Пример сообщения:

{
  "method": "resources/list",
  "params": {}
}

resources/read

Читать содержимое конкретного ресурса

Клиент → Сервер

Пример сообщения:

{
  "method": "resources/read",
  "params": {
    "uri": "file:///path/to/file.ts"
  }
}

prompts/list

Получить доступные шаблоны подсказок

Клиент → Сервер

Пример сообщения:

{
  "method": "prompts/list",
  "params": {}
}

notifications/tools/list_changed

Уведомить клиента при изменении доступных инструментов

Сервер → Клиент

Пример сообщения:

{
  "method": "notifications/tools/list_changed"
}

Пример определения инструмента

Пример того, как инструменты определяются в протоколе MCP

Определение инструмента погоды

Этот пример показывает, как определяется инструмент погоды с правильной валидацией входной схемы и документацией.

// MCP 工具定义示例
{
  "name": "com.example.weather/current",
  "title": "Get Current Weather",
  "description": "Get current weather information for a specified location",
  "inputSchema": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string",
        "description": "The location to get weather for"
      },
      "units": {
        "type": "string",
        "enum": ["metric", "imperial"],
        "description": "Temperature units",
        "default": "metric"
      },
      "include_forecast": {
        "type": "boolean",
        "description": "Whether to include forecast data",
        "default": false
      }
    },
    "required": ["location"]
  }
}

Ключевые компоненты:

  • name: Уникальный идентификатор инструмента
  • title: Человекочитаемое отображаемое имя
  • description: Подробное объяснение функциональности
  • inputSchema: JSON Schema для валидации ввода

Лучшие практики:

  • Используйте имена инструментов с пространством имен (например, com.example.weather/current)
  • Предоставить четкую, описательную документацию
  • Определить комплексные схемы ввода
  • Включать значения по умолчанию где уместно

Поток связи

Полный поток связи между MCP-клиентами и серверами

1

Инициализация соединения

Клиент устанавливает соединение и согласовывает возможности с сервером

Подробные шаги:

  • Клиент отправляет запрос инициализации с версией протокола
  • Сервер отвечает поддерживаемыми возможностями
  • Обе стороны согласовывают параметры связи
  • Соединение установлено с согласованной версией протокола
2

Обнаружение возможностей

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

Подробные шаги:

  • Запросить список доступных инструментов (tools/list)
  • Запросить доступные ресурсы (resources/list)
  • Запросить доступные подсказки (prompts/list)
  • Кэшировать информацию о возможностях для эффективного доступа
3

Обмен контекстом

Клиент запрашивает и получает контекстные данные от ресурсов

Подробные шаги:

  • Отправить запросы чтения ресурсов (resources/read)
  • Получить структурированные данные в различных форматах
  • Обработать преобразование формата данных по мере необходимости
  • Обновить локальный контекст полученной информацией
4

Выполнение инструментов

Клиент вызывает серверные инструменты для выполнения действий

Подробные шаги:

  • Создать запросы вызова инструментов (tools/call)
  • Передать необходимые параметры с правильной валидацией
  • Ждать результатов выполнения от сервера
  • Обработать возвращенные данные и обработать ошибки
5

Обновления в реальном времени

Поддерживать синхронизацию через уведомления

Подробные шаги:

  • Слушать уведомления об изменении ресурсов
  • Динамически обрабатывать обновления списка инструментов
  • Изящно обрабатывать прерывания соединения
  • Переустанавливать соединения при необходимости

Функции безопасности

Механизмы безопасности и защитные меры в протоколе MCP

Аутентификация

Поддерживается несколько механизмов аутентификации

Поддерживаемые методы:

  • Аутентификация по API-ключу
  • OAuth 2.0 потоки
  • Bearer токены
  • Пользовательские заголовки аутентификации

Авторизация

Детальное управление разрешениями

Поддерживаемые методы:

  • Разрешения на уровне ресурсов
  • Ограничения типа операций
  • Временной контроль доступа
  • Ограничение скорости и квоты

Защита данных

Сквозная безопасность данных

Поддерживаемые методы:

  • TLS/SSL шифрование транспорта
  • Шифрование содержимого сообщений
  • Маскирование чувствительных данных
  • Безопасное управление ключами

Аудит и мониторинг

Комплексное отслеживание операций

Поддерживаемые методы:

  • Логирование запросов/ответов
  • Записи проверки разрешений
  • Отслеживание ошибок и исключений
  • Сбор метрик производительности