Введение в 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/list
tools/call
Ресурсы
Источники данных, которые предоставляют контекстную информацию ИИ-приложениям
Примеры:
- Содержимое файлов и метаданные
- Записи и схемы базы данных
- API-ответы и документация
- Информация Git-репозитория
- Файлы конфигурации
Доступные методы:
resources/list
resources/read
Подсказки
Многоразовые шаблоны, которые помогают структурировать взаимодействие с языковыми моделями
Примеры:
- Системные подсказки для конкретных задач
- Few-shot примеры для обучения
- Шаблоны обзора кода
- Подсказки генерации документации
- Шаблоны анализа и резюме
Доступные методы:
prompts/list
prompts/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? Изучите эти ресурсы