MCP: продвинутые темы

Аутентификация, ресурсы, prompts, sampling и архитектура production-серверов.

18 уроков, первые 3 бесплатно. Полный доступ: 1490 руб.

Уроки курса

  1. Let's get started!
  2. Sampling
  3. Sampling walkthrough
  4. Log and progress notifications
  5. Notifications walkthrough
  6. Roots
  7. Roots walkthrough
  8. Survey
  9. JSON message types
  10. The STDIO transport
  11. The StreamableHTTP transport
  12. StreamableHTTP in depth
  13. State and the StreamableHTTP transport
  14. Assessment on MCP concepts
  15. Wrapping up
  16. What you'll learn
  17. What you'll learn
  18. Course Quiz

Транспорт STDIO: Основы взаимодействия в Model Context Protocol

В мире искусственного интеллекта и больших языковых моделей (LLM), таких как Claude, эффективное взаимодействие между различными компонентами системы имеет решающее значение. Model Context Protocol (MCP) — это протокол, который позволяет клиентам и серверам обмениваться сообщениями, обычно в формате JSON, для управления контекстом, выполнения запросов и получения ответов. Но как эти сообщения фактически передаются по сети или внутри одной машины? Здесь на сцену выходит концепция транспорта.

Транспорт — это канал связи, используемый для передачи сообщений MCP. Существует множество способов реализации транспорта: от стандартных HTTP-запросов и WebSockets до более экзотических методов. Для начальной разработки и тестирования серверов или клиентов MCP наиболее часто используется простой и интуитивно понятный подход, известный как Stdio Transport.

Как работает Stdio Transport

Stdio Transport (от "Standard Input/Output") — это метод связи, при котором клиент запускает MCP-сервер как дочерний процесс и взаимодействует с ним через стандартные потоки ввода и вывода операционной системы. Это означает, что клиент отправляет сообщения серверу, записывая их в стандартный ввод сервера (stdin), а сервер отвечает, записывая свои сообщения в стандартный вывод клиента (stdout).

Вот основные принципы его работы:

Вы можете представить это как диалог в командной строке: вы вводите команду (сообщение клиента), и программа выводит ответ (сообщение сервера). Для тестирования MCP-сервера вы даже можете напрямую вставлять JSON-сообщения в терминал, и сервер будет отвечать в том же окне, демонстрируя полный обмен сообщениями.

Последовательность подключения MCP

Каждое соединение MCP должно начинаться с определенного трехэтапного "рукопожатия" для установления связи и обмена начальной информацией. Только после успешного завершения этой последовательности можно отправлять другие запросы, такие как вызовы инструментов или запросы на получение списка промптов:

  1. Initialize Request: Клиент отправляет это первое сообщение, чтобы инициировать соединение и сообщить серверу о своих возможностях.
  2. Initialize Result: Сервер отвечает на запрос инициализации, подтверждая свои собственные возможности и готовность к работе.
  3. Initialized Notification: Клиент подтверждает получение результата инициализации сервера. Это уведомление не требует ответа от сервера.

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

Типы сообщений и потоки данных

MCP поддерживает различные типы сообщений, которые могут передаваться в обоих направлениях между клиентом и сервером. Ключевое различие заключается в том, что некоторые сообщения требуют ответа (это запросы, которые ожидают результатов), в то время как другие не требуют ответа (это уведомления).

Благодаря простоте Stdio Transport, обе стороны могут инициировать связь в любое время, используя два основных канала (stdin и stdout). Это позволяет реализовать четыре основных сценария коммуникации:

Эта гибкость делает Stdio Transport идеальным для демонстрации полного спектра возможностей MCP, где обе стороны могут быть как инициаторами, так и получателями сообщений.

Почему Stdio Transport важен

Понимание Stdio Transport имеет решающее значение, поскольку он представляет собой "идеальный" случай, когда двунаправленная связь является бесшовной и не имеет ограничений. Его простота делает его отличным инструментом для следующих целей:

Хотя Stdio Transport превосходен для разработки и тестирования, для производственных развертываний, где клиент и сервер должны работать на разных машинах или в распределенных системах, вам потребуется рассмотреть другие варианты транспорта с их собственными компромиссами и особенностями. Однако, освоив Stdio Transport, вы заложите прочный фундамент для понимания более сложных механизмов взаимодействия в MCP.