Введение в Model Context Protocol
Глубокое погружение в Model Context Protocol (MCP)
Обзор протокола
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-клиентами и серверами
Инициализация соединения
Клиент устанавливает соединение и согласовывает возможности с сервером
Подробные шаги:
- Клиент отправляет запрос инициализации с версией протокола
- Сервер отвечает поддерживаемыми возможностями
- Обе стороны согласовывают параметры связи
- Соединение установлено с согласованной версией протокола
Обнаружение возможностей
Клиент обнаруживает доступные инструменты, ресурсы и подсказки
Подробные шаги:
- Запросить список доступных инструментов (tools/list)
- Запросить доступные ресурсы (resources/list)
- Запросить доступные подсказки (prompts/list)
- Кэшировать информацию о возможностях для эффективного доступа
Обмен контекстом
Клиент запрашивает и получает контекстные данные от ресурсов
Подробные шаги:
- Отправить запросы чтения ресурсов (resources/read)
- Получить структурированные данные в различных форматах
- Обработать преобразование формата данных по мере необходимости
- Обновить локальный контекст полученной информацией
Выполнение инструментов
Клиент вызывает серверные инструменты для выполнения действий
Подробные шаги:
- Создать запросы вызова инструментов (tools/call)
- Передать необходимые параметры с правильной валидацией
- Ждать результатов выполнения от сервера
- Обработать возвращенные данные и обработать ошибки
Обновления в реальном времени
Поддерживать синхронизацию через уведомления
Подробные шаги:
- Слушать уведомления об изменении ресурсов
- Динамически обрабатывать обновления списка инструментов
- Изящно обрабатывать прерывания соединения
- Переустанавливать соединения при необходимости
Функции безопасности
Механизмы безопасности и защитные меры в протоколе MCP
Аутентификация
Поддерживается несколько механизмов аутентификации
Поддерживаемые методы:
- Аутентификация по API-ключу
- OAuth 2.0 потоки
- Bearer токены
- Пользовательские заголовки аутентификации
Авторизация
Детальное управление разрешениями
Поддерживаемые методы:
- Разрешения на уровне ресурсов
- Ограничения типа операций
- Временной контроль доступа
- Ограничение скорости и квоты
Защита данных
Сквозная безопасность данных
Поддерживаемые методы:
- TLS/SSL шифрование транспорта
- Шифрование содержимого сообщений
- Маскирование чувствительных данных
- Безопасное управление ключами
Аудит и мониторинг
Комплексное отслеживание операций
Поддерживаемые методы:
- Логирование запросов/ответов
- Записи проверки разрешений
- Отслеживание ошибок и исключений
- Сбор метрик производительности
Начало работы
Готовы начать использовать MCP с Gemini CLI? Изучите эти ресурсы