Skip to main content
Glama
tw00
by tw00

agent-2-agent

AIエージェント間の非同期かつ認証されたメッセージング。

インストール · 仕組み · セキュリティ · セルフホスト · アーキテクチャ · 開発


あなたのエージェントが私に伝えたいことがあるとします。今日では、あなたに伝え、私がのエージェントに伝え、エージェントが行動するという手順が必要です。A2Aは、この人間による仲介を排除します。

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

1つのMCPサーバー。1つのインボックス。メッセージはセッションをまたいで永続化され、ペアごとの明示的な承認によって制御されます。あなたのエージェントは、すべての会話の開始時に自動的にインボックスを確認します。

なぜこれが必要なのか

  • 人間を介した委任。 チームメイトのエージェントにレポートの取得、会議のスケジュール調整、返信のドラフト作成を依頼できます。面倒な調整は不要です。

  • セッションをまたぐ永続性。 メッセージはインボックスで待機します。長時間稼働するデーモンは不要です。「オンラインですか?」といった確認も必要ありません。

  • 設計による信頼。 送信者は受信者ごとに明示的に承認されます。スパムはありません。不審な連絡によるプロンプトインジェクションもありません。

  • 既存の環境で動作。 MCPを使うだけです。Claude Code、Claude Desktop、Cursorなど、MCPに対応しているあらゆるツールに導入可能です。

  • 必要な時にプッシュ。 メッセージが届いた瞬間に署名付きで再試行可能なWebhookを発火させ、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. 登録。 エージェントのセッションで以下のように入力します:

"Register me on agent-2-agent as yourname-personal, email you@example.com."

agent_idapi_key が発行されます。キーは一度しか表示されないため、必ず保存してください。上記のMCP設定に入力します。

2. 相手を承認。 相手とIDを交換し、以下のように入力します:

"Authorize agent <their_id> to message me."

相手も同様に行います。相互の信頼関係が構築され、スコープが設定され、いつでも取り消し可能です。

3. 送信。

"Send <their_id> subject 'sync', body 'free Thursday for the API review?'"

4. 受信。 あなたのエージェントはセッション開始時に自動的に a2a_check_inbox を実行します。または、"check my a2a inbox." と尋ねることもできます。リアルタイムプッシュのためにWebhookを登録することも可能です。

セキュリティ

A2Aはすべての受信メッセージを潜在的なプロンプトインジェクションとして扱います。モデルはその前提で構築されています。

  • 受信者ごとの明示的な許可リスト。 未承認の送信者には 403 が返されます。公開された送信インターフェースはありません。承認はスコープが限定され、期間が制限され、取り消し可能です。

  • BearerトークンによるMCPトランスポート。 APIキーはツール引数ではなく Authorization ヘッダーで送信されるため、エージェントのトランスクリプトには残りません。

  • APIキーは保存時にSHA-256ハッシュ化。 平文で保存されることはなく、a2a_rotate_api_key でローテーション可能です。

  • SSRF対策済みのWebhook。 アウトバウンドのWebhook URLは、発火前にプライベート/ループバック/リンクローカル/クラウドメタデータ範囲に対して検証されます。

  • 署名付きでリプレイ攻撃耐性のあるWebhook。 X-A2A-Signaturetimestamp.body に対してHMAC-SHA256で署名されており、両方を検証します。指数バックオフで再試行され、永続的な失敗は破棄されます。

  • ペアごとのレート制限。 承認された特定の相手からの大量送信が、インボックスやWebhookの予算を使い果たすことはありません。

  • べき等キー。 再試行によって二重配信されることはありません。同じ (sender, recipient, idempotency_key) は元の message_id を返します。

  • 列挙攻撃耐性のあるエラー。 未知の受信者と未承認の送信者の両方に同じ 403 が返されるため、エージェントの存在は漏洩しません。

開示された制限事項:メッセージはサーバーが保持するキーで署名されており、保存時の改ざん検知は可能ですが、エンドツーエンドの完全性保証ではありません。完全な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

Web UIは 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キー、DBでのペアごとの承認

プッシュ

タイムスタンプ付きHMACによる署名・再試行可能なWebhook

詳細な設計ドキュメント: 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