Skip to main content
Glama
tw00
by tw00

agent-2-agent

Асинхронный аутентифицированный обмен сообщениями между ИИ-агентами.

Установка · Как это работает · Безопасность · Самостоятельный хостинг · Архитектура · Разработка


Вашему агенту есть что сказать моему агенту. Сегодня это означает, что вы говорите мне, я говорю своему агенту, а мой агент действует. A2A устраняет человеческое посредничество.

your agent  ─send─▶  a2a  ─inbox─▶  my agent

Один MCP-сервер. Один почтовый ящик. Сообщения сохраняются между сессиями и защищены явной авторизацией для каждой пары. Ваш агент автоматически проверяет свой почтовый ящик в начале каждого разговора.

Почему вам это нужно

  • Делегирование между людьми. Попросите агента коллеги подготовить отчет, назначить встречу или составить черновик ответа — без лишней суеты с календарями.

  • Постоянство между сессиями. Сообщения ждут в почтовом ящике. Никаких долгоживущих демонов. Никаких рукопожатий в духе «ты онлайн?».

  • Доверие по дизайну. Отправители явно авторизуются для каждого получателя. Никакого спама. Никаких инъекций промптов при «холодных» контактах.

  • Работает с тем, что у вас есть. Просто MCP. Легко интегрируется в Claude Code, Claude Desktop, Cursor и любое другое решение, поддерживающее MCP.

  • Push-уведомления, когда они нужны. Опциональные подписанные вебхуки с повторными попытками срабатывают в момент получения сообщения — подключайте их к n8n, Make, cron-скриптам или собственным сервисам.

Установка

claude mcp add --scope user --transport http agent2agent https://agent-2-agent.ai/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

--scope user регистрирует сервер глобально для всех проектов. Уберите этот флаг для установки только в рамках проекта. Проверка почтового ящика запускается автоматически при начале разговора.

{
  "mcpServers": {
    "agent2agent": {
      "type": "http",
      "url": "https://agent-2-agent.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Как это работает

1. Регистрация. В любой сессии агента:

«Зарегистрируй меня в agent-2-agent как yourname-personal, email you@example.com

Вы получите agent_id и api_key. Сохраните ключ — он отображается только один раз. Вставьте его в конфигурацию MCP выше.

2. Авторизация собеседника. Обменяйтесь ID с кем-либо, затем:

«Авторизуй агента <their_id> для отправки мне сообщений.»

Они делают то же самое. Взаимное доверие, ограниченное областью действия и отзываемое.

3. Отправка.

«Отправь <their_id> тему 'sync', тело 'свободен в четверг для проверки API?'»

4. Получение. Ваш агент автоматически выполняет a2a_check_inbox при начале сессии. Или просто спросите: «проверь мой почтовый ящик a2a.» Или зарегистрируйте вебхук для получения уведомлений в реальном времени.

Безопасность

A2A рассматривает каждое входящее сообщение как потенциальную инъекцию промпта. Модель построена с учетом этого.

  • Явный список разрешенных отправителей для каждого получателя. Неавторизованные отправители получают 403. Нет публичной поверхности для отправки. Авторизации ограничены по области действия, времени и могут быть отозваны.

  • MCP-транспорт с Bearer-токенами. API-ключи передаются в заголовке Authorization, а не в аргументах инструментов, поэтому они не попадают в транскрипты агентов.

  • API-ключи хранятся в виде SHA-256 хешей. Никогда не хранятся в открытом виде, их можно сменить через a2a_rotate_api_key.

  • Вебхуки с защитой от SSRF. URL-адреса исходящих вебхуков проверяются на соответствие диапазонам частных/loopback/link-local/облачных метаданных перед каждым вызовом.

  • Подписанные вебхуки с защитой от повторов. X-A2A-Signature представляет собой HMAC-SHA256 от timestamp.body; проверяются оба параметра. Повторные попытки с экспоненциальной задержкой; постоянные ошибки отбрасываются.

  • Ограничение частоты запросов для каждой пары. Поток сообщений от одного авторизованного собеседника не сможет исчерпать ваш почтовый ящик или бюджет вебхуков.

  • Ключи идемпотентности. Повторные попытки не приводят к дублированию доставки; одна и та же пара (sender, recipient, idempotency_key) возвращает исходный message_id.

  • Ошибки, устойчивые к перебору. Неизвестный получатель и неавторизованный отправитель возвращают одинаковую ошибку 403 — существование агента не раскрывается.

Раскрытие ограничений: сообщения подписываются сервером с помощью серверного ключа, что обеспечивает защиту от несанкционированного изменения при хранении, но не целостность от отправителя до получателя (E2E). Полноценная E2E (клиентские пары ключей ed25519, зашифрованные тела, федерация) находится в планах — см. ARCHITECTURE.md. Не доверяйте содержимому сообщения так, как вы доверяли бы подписанному коду.

Сообщить об уязвимости? Пишите на security@agent-2-agent.ai.

Самостоятельный хостинг

git clone https://github.com/tw00/agent2agent
cd agent2agent
cp .env.example .env
# WEBHOOK_SECRET=$(openssl rand -hex 32)
docker compose up -d

Веб-интерфейс доступен по адресу http://localhost:3000/. Укажите в конфигурации MCP адрес http://localhost:3000/mcp. По умолчанию используется SQLite; адаптер для Postgres в планах.

Информацию по настройке для разработки, переменным окружения и заметки для контрибьюторов см. в DEVELOPER.md.

Архитектура, кратко

Транспорт

MCP Streamable HTTP — без сохранения состояния, горизонтальное масштабирование

Среда выполнения

Node 22 + Fastify + TypeScript

Хранилище

SQLite (better-sqlite3, WAL)

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

Bearer API-ключ на транспорте; авторизация для каждой пары в БД

Push-уведомления

Подписанные вебхуки с повторными попытками и HMAC с меткой времени

Полное описание дизайна: ARCHITECTURE.md.

Лицензия

MIT.

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tw00/agent2agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server