Можно ли построить межагентное взаимодействие (Agent-to-Agent) на MCP? Да!

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

Из этой статьи вы узнаете:
  • Как организовать агентное взаимодействие Agent-to-Agent (A2A) с помощью возможностей MCP, где и хосты, и инструменты выступают в роли интеллектуальных агентов.
  • Какие ключевые функции делают инструменты MCP по-настоящему «агентными»: потоковая передача данных, возобновляемость, устойчивость и многошаговое взаимодействие.
  • Как реализовать долгоработающих и устойчивых ии-агентов на Python — полный пример MCP-сервера с агентом путешествий и агентами-исследователями, которые передают обновления в реальном времени, запрашивают ввод и поддерживают возобновление работы доступен на GitHub.
Спецификация MCP теперь поддерживает «агентные» возможности: возобновляемые потоки (для сохранения непрерывности сессии), elicitation (запрос пользовательского ввода), sampling (обращение за помощью к ИИ) и уведомления о прогрессе (для обновлений в реальном времени). Эти функции можно сочетать, чтобы создавать сложные Agent-to-Agent системы.

Миф об «Агентах» и «Инструментах»

Многие разработчики, изучающие инструменты с «агентным» поведением, считают, что MCP непригоден для построения межагентного взаимодействия. Так как первые примеры использования Model Context Protocol были построены по простой схеме запрос–ответ.
Однако это представление устарело. За последние месяцы спецификация MCP получила важные улучшения, которые значительно расширили её возможности для создания долгоработающих агентов:
  • Потоковая передача и частичные результаты — обновления о ходе выполнения в реальном времени с возможностью отправки промежуточных результатов.
  • Возобновляемость — возможность для клиентов переподключаться и продолжать работу после разрыва соединения.
  • Устойчивость — сохранение результатов после перезапуска сервера. Инструменты теперь возвращают Resource Links, которые клиенты могут использовать для опроса или подписки.
  • Многошаговость — интерактивный ввод в процессе выполнения через механизм elicitation (запрос пользовательских данных) и sampling (запрос к LLM для генерации ответа от имени клиента или хоста).
Эти возможности можно комбинировать, создавая сложные «агентные» и многоагентные системы — все они работают по протоколу MCP.
В этой статье, для простоты, мы будем называть «агентом» инструмент, обладающий расширенными возможностями, без введения какого-либо нового термина. Такие агенты представляют собой инструменты, доступные на MCP-серверах, которые можно вызывать из хост-приложений через стандартные клиентские подключения MCP.
Важно, что и сами хост-приложения тоже являются агентами: они координируют задачи, хранят состояние и принимают интеллектуальные решения о маршрутизации. Это и создаёт настоящую модель «агент–агент»: оркестраторы (хосты) взаимодействуют с узкоспециализированными агентами (инструментами).
Главная особенность таких инструментов, делающая их «агентными», — способность удовлетворять инфраструктурные требования, которые мы рассмотрим ниже.

Что делает инструмент MCP «агентным»?

Мы определяем агента как сущность, способную работать автономно в течение длительного времени, выполняя сложные задачи, которые могут требовать нескольких взаимодействий или корректировок на основе обратной связи.
Чтобы поддерживать такое поведение, инструментам MCP необходимы четыре ключевые инфраструктурные возможности. Ниже мы разберём каждую из них, приведём примеры использования и покажем, как MCP их реализует.

1. Потоковая передача и частичные результаты

Агентам нужны механизмы для информирования пользователей о прогрессе (для наблюдаемости, отладки и укрепления доверия), а также возможность отправлять промежуточные результаты, чтобы реагировать и корректировать выполнение на основе частичных данных.
MCP поддерживает эти возможности и передает статус в реальном времени; при этом рассматриваются предложения по расширению возможностей потоковой передачи частичных результатов и улучшению механизма уведомлений о прогрессе.
Инструменты MCP могут передавать хост-приложению уведомления о ходе выполнения долгих задач в реальном времени, чтобы пользователь отслеживал процесс прямо во время исполнения. В настоящее время в тело таких уведомлений можно «встраивать» частичные результаты, однако в спецификации MCP уже есть несколько открытых предложений по улучшению механизма работы с частичными результатами.

2. Возобновляемость

Для долгоживущих агентов важно сохранять непрерывность выполнения задач при сетевых сбоях, чтобы клиенты могли переподключаться и продолжать работу с того же места, а не терять прогресс или запускать сложные операции заново. На данный момент механизм передачи данных MCP StreamableHTTP поддерживает возобновление сессий и повторную доставку сообщений.
Примечание по реализации
Для возобновления сессий серверы должны реализовать EventStore, чтобы воспроизводить события при повторном подключении клиента. Сообщество также обсуждает внедрение независимых от протокола передачи данных потоков возобновления, чтобы расширить эту возможность за пределы StreamableHTTP.
Механизм передачи данных MCP StreamableHTTP и хранилище событий позволяют без потерь возобновлять сессии: если клиент отключается, он может переподключиться, передать данные сессии (идентификатор сессии и последний идентификатор события), и сервер воспроизведёт пропущенные события, продолжив выполнение задачи без потери прогресса.

3. Устойчивость

Долгоработающим агентам необходимо сохранять состояние, которое переживает перезапуск сервера и позволяет проверять статус или результаты вне основной сессии. Это дает возможность отслеживать прогресс между сессиями. В MCP протоколе такая функциональность реализуется через Resource Links: в ответ на вызов инструмента он может создать ресурс, сразу вернуть ссылку на него и продолжить обработку в фоновом режиме, обновляя связанный ресурс. Клиенты могут опрашивать этот ресурс или подписываться на него, чтобы получать обновления о статусе и результатах.
Вопрос масштабируемости
Постоянный опрос ресурсов или подписка на обновления при больших объёмах данных может приводить к значительным затратам. В сообществе MCP обсуждается использование механизмов webhooks и триггеров, которые позволят серверам самостоятельно уведомлять клиентов об изменениях, снижая нагрузку в сценариях с высоким трафиком.
Инструменты MCP теперь могут возвращать Resource Links, которые клиент может опрашивать или на которые может подписаться, чтобы получать уведомления. Это обеспечивает стабильный доступ к результатам работы инструментов.

4. Многошаговое взаимодействие

Агентам нередко требуется дополнительный ввод во время выполнения задачи — уточнение или подтверждение от человека при принятии важных решений, а также сгенерированный ИИ-контент или ответы для сложных подзадач. Model Context Protocol поддерживает такие сценарии через механизмы elicitation (запрос пользовательского ввода) и sampling (запрос генерации ответов LLM через клиента), что позволяет агентам динамически получать нужную информацию в процессе выполнения вызова инструмента.

Реализация долгоработающих агентов на MCP — обзор кода

В этой статье мы подготовили репозиторий с полной реализацией долгоработающих агентов на основе MCP Python SDK с использованием механизма StreamableHTTP для возобновления сессий и повторной доставки сообщений. Эта реализация демонстрирует, как возможности MCP можно комбинировать, чтобы создавать сложное поведение, характерное для «агентов».
Наш пример кода демонстрирует, как хост-приложение может подключаться к серверу с несколькими инструментами. В нём реализованы два основных агента:
  • Агент путешествий — имитация сервиса бронирования, где подтверждение цены выполняется через механизм elicitation.
  • Агент-исследователь — решение исследовательских задач с ИИ-поддержкой и генерацией сводок при помощи sampling.
Оба агента показывают обновления прогресса в реальном времени, поддерживают интерактивные подтверждения и позволяют возобновлять сессии.
Структура проекта:
  • server/server.py — возобновляемый MCP-сервер с агентом путешествий и агентами-исследователями, демонстрирующими работу elicitation, sampling и обновления прогресса.
  • client/client.py — интерактивное хост-приложение с поддержкой возобновления, обработчиками обратных вызовов и управлением токенами.
  • server/event_store.py — реализация хранилища событий для возобновления сессий и повторной доставки сообщений.

Расширение до многоагентного взаимодействия на MCP

Архитектурная заметка
Наша реализация уже демонстрирует межагентное взаимодействие. Хост-приложение выступает в роли агента-оркестратора, который взаимодействует с пользователями и направляет запросы специализированным агентам (агенту по бронированию путешествий, агенту-исследователю) на MCP сервере.
В нашем примере для упрощения используется подключение только к одному серверу, однако тот же агент-оркестратор может координировать задачи на нескольких MCP-серверах, каждый из которых предоставляет собственных специализированных агентов.
Чтобы масштабировать работу хост-агента (оркестратора) в схему взаимодействия с удалёнными агентами MCP на нескольких серверах, его можно дополнить следующими возможностями:
  • Интеллектуальная декомпозиция задач — анализировать сложные пользовательские запросы и разбивать их на подзадачи для разных специализированных агентов.
  • Координация нескольких серверов — поддерживать соединения с несколькими MCP-серверами, каждый из которых предоставляет уникальные возможности агентов.
  • Управление состоянием задач — отслеживать прогресс выполнения нескольких параллельных задач агентов, управлять зависимостями и обрабатывать активные запросы.
  • Сохранение пользовательского контекста — поддерживать контекст взаимодействия при работе с разными специализированными агентами.
  • Отказоустойчивость и повторные попытки — обрабатывать сбои, реализовывать логику повторных попыток и перенаправлять задачи при недоступности агентов.
  • Синтез результатов — объединять ответы от нескольких агентов в связный итоговый результат.
Обладая такими возможностями, один агент-оркестратор сможет координировать работу множества специализированных агентов на разных серверах, используя те же примитивы MCP протокола, что и в нашем примере с одним сервером.

Заключение

Расширенные возможности MCP протокола — уведомления о прогрессе, механизмы elicitation/sampling, возобновляемые потоки и постоянные ресурсы — позволяют реализовывать надёжные многоагентные системы и сложное агентное взаимодействие.