{
"mcpServers": {
"a2a": {
"command": "uvx",
"args": [
"a2a-mcp-server"
]
}
}
}
🚀 A2A MCP Server
このサーバーは、Model Context Protocol (MCP) と Agent-to-Agent (A2A) プロトコルを橋渡しするMCPサーバーです。MCP互換のAIアシスタント(Claudeなど)がA2Aエージェントとシームレスにやり取りできるようになります。
🚀 クイックスタート
このプロジェクトは、2つの最先端のAIエージェントプロトコル間の統合層として機能します。
- Model Context Protocol (MCP):Anthropicによって開発されたMCPは、AIアシスタントが外部のツールやデータソースに接続できるようにします。これは、AIアプリケーションと大規模言語モデルが外部リソースに安全かつ構成可能な方法で接続する方法を標準化します。
- Agent-to-Agent Protocol (A2A):Googleによって開発されたA2Aは、標準化されたJSON-RPCインターフェイスを通じて、異なるAIエージェント間の通信と相互運用性を可能にします。
これらのプロトコルを橋渡しすることで、このサーバーはMCPクライアント(Claudeなど)が統一されたインターフェイスを通じてA2Aエージェントを発見、登録、通信、タスク管理できるようにします。
デモ
1, A2Aサンプルで通貨エージェントを実行する
クラウドデプロイされたエージェントもサポートします
2, Claudeを使用して通貨エージェントを登録する
3, Claudeを使用して通貨エージェントにタスクを送信し、結果を取得する
✨ 主な機能
-
エージェント管理
- ブリッジサーバーにA2Aエージェントを登録する
- 登録されたすべてのエージェントをリストする
- 不要になったエージェントを登録解除する
-
通信
- A2Aエージェントにメッセージを送信し、応答を受信する
- A2Aエージェントからの応答をリアルタイムでストリーミングする
-
タスク管理
- どのA2Aエージェントがどのタスクを処理しているかを追跡する
- タスクIDを使用してタスク結果を取得する
- 実行中のタスクをキャンセルする
-
トランスポートサポート
- 複数のトランスポートタイプ:stdio、streamable-http、SSE
- MCP_TRANSPORT環境変数を使用してトランスポートタイプを構成する
📦 インストール
Smitheryを介したインストール
Smitheryを介してClaude Desktop用のA2A Bridge Serverを自動的にインストールするには、次のコマンドを実行します。
npx -y @smithery/cli install @GongRzhe/A2A-MCP-Server --client claude
オプション1: PyPIからのインストール
pip install a2a-mcp-server
オプション2: ローカルインストール
- リポジトリをクローンします。
git clone https://github.com/GongRzhe/A2A-MCP-Server.git
cd A2A-MCP-Server
- 仮想環境をセットアップします。
python -m venv .venv
source .venv/bin/activate # Windowsの場合: .venv\Scripts\activate
- 依存関係をインストールします。
pip install -r requirements.txt
設定
環境変数
次の環境変数を使用して、MCPサーバーの実行方法を構成します。
# トランスポートタイプ: stdio、streamable-http、またはsse
export MCP_TRANSPORT="streamable-http"
# MCPサーバーのホスト
export MCP_HOST="0.0.0.0"
# MCPサーバーのポート(HTTPトランスポートを使用する場合)
export MCP_PORT="8000"
# MCPサーバーエンドポイントのパス(HTTPトランスポートを使用する場合)
export MCP_PATH="/mcp"
# SSEエンドポイントのパス(SSEトランスポートを使用する場合)
export MCP_SSE_PATH="/sse"
# デバッグログを有効にする
export MCP_DEBUG="true"
トランスポートタイプ
A2A MCP Serverは複数のトランスポートタイプをサポートしています。
-
stdio (デフォルト): 標準入出力を使用した通信
- コマンドラインでの使用やテストに最適
- HTTPサーバーは起動されません
- Claude Desktopに必要
-
streamable-http (Webクライアントに推奨): ストリーミングをサポートするHTTPトランスポート
- 本番環境でのデプロイに推奨
- MCPリクエストを処理するHTTPサーバーを起動します
- 大きな応答のストリーミングを可能にします
-
sse: Server-Sent Eventsトランスポート
- リアルタイムイベントストリーミングを提供します
- リアルタイム更新に便利
トランスポートタイプを指定するには、次のようにします。
# 環境変数を使用する
export MCP_TRANSPORT="streamable-http"
uvx a2a-mcp-server
# またはコマンドで直接指定する
MCP_TRANSPORT=streamable-http uvx a2a-mcp-server
サーバーの実行
コマンドラインから
# デフォルト設定(stdioトランスポート)を使用する
uvx a2a-mcp-server
# 特定のホストとポートでHTTPトランスポートを使用する
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8080 uvx a2a-mcp-server
Claude Desktopでの設定
Claude Desktopでは、claude_desktop_config.json
ファイルでMCPサーバーを構成できます。このファイルは通常、次の場所にあります。
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
方法1: PyPIインストール(推奨)
claude_desktop_config.json
のmcpServers
セクションに次の内容を追加します。
"a2a": {
"command": "uvx",
"args": [
"a2a-mcp-server"
]
}
Claude Desktopの場合、ClaudeがMCPサーバーとstdio通信を必要とするため、"MCP_TRANSPORT": "stdio"
を使用する必要があります。
方法2: ローカルインストール
リポジトリをクローンし、ローカルインストールからサーバーを実行する場合は、次のようにします。
"a2a": {
"command": "C:\\path\\to\\python.exe",
"args": [
"C:\\path\\to\\A2A-MCP-Server\\a2a_mcp_server.py"
],
"env": {
"MCP_TRANSPORT": "stdio",
"PYTHONPATH": "C:\\path\\to\\A2A-MCP-Server"
}
}
C:\\path\\to\\
をシステム上の実際のパスに置き換えてください。
設定作成スクリプトの使用
このリポジトリには、設定を生成するのに役立つconfig_creator.py
スクリプトが含まれています。
# ローカルインストールを使用する場合
python config_creator.py
このスクリプトは次のことを行います。
- 可能な場合は、Python、スクリプト、およびリポジトリのパスを自動的に検出します。
- Claude Desktopに必要なstdioトランスポートを構成します。
- 必要に応じて、追加の環境変数を追加できます。
- Claude Desktopの設定ファイルを作成または更新します。
完全な例
以下は、A2A-MCP-Serverが構成された完全なclaude_desktop_config.json
ファイルの例です。
{
"mcpServers": {
"a2a": {
"command": "uvx",
"args": [
"a2a-mcp-server"
]
}
}
}
MCPクライアントとの使用
Claude
Claudeは、このサーバーが提供するMCPツールを通じてA2Aエージェントを使用できます。設定方法は次のとおりです。
- Claude Webの場合: streamable-httpトランスポートでMCPサーバーを起動します。
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-server
- Claude Webの場合: ClaudeのWebインターフェイスで、ツールメニューでMCP URL接続を有効にします。
- URLを使用します:
http://127.0.0.1:8000/mcp
-
Claude Desktopの場合: 上記のように
claude_desktop_config.json
ファイルに設定を追加します。最も簡単な方法は、提供されているconfig_creator.py
スクリプトを使用することで、パスを自動的に検出し、適切な設定を作成します。 -
Claudeでは、次の関数を使用できます。
A2Aエージェントを登録する
I need to register a new agent. Can you help me with that?
(Agent URL: http://localhost:41242)
エージェントにメッセージを送信する
Ask the agent at http://localhost:41242 what it can do.
タスク結果を取得する
Can you get the results for task ID: 550e8400-e29b-41d4-a716-446655440000?
Cursor IDE
Cursor IDEは、MCPサーバーに接続してAIアシスタントにツールを追加できます。
- streamable-httpトランスポートでA2A MCPサーバーを実行します。
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-server
- Cursor IDEで、設定 > AI > MCPサーバーに移動します。
- 新しいMCPサーバーを追加し、URLを使用します:
http://127.0.0.1:8000/mcp
- サーバーを有効にします。
- これで、CursorのAIアシスタント内からA2Aツールを使用できます。
Windsurf Browser
Windsurfは、組み込みのMCPサポートを備えたブラウザーです。
- streamable-httpトランスポートでA2A MCPサーバーを実行します。
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-server
- Windsurfブラウザーで、設定 > MCP接続に移動します。
- 新しいMCP接続を追加し、URLを使用します:
http://127.0.0.1:8000/mcp
- 接続を有効にします。
- これで、WindsurfのAIアシスタント内からA2Aツールを使用できます。
利用可能なMCPツール
サーバーは、ClaudeなどのLLMとの統合のために次のMCPツールを公開しています。
エージェント管理
- register_agent: ブリッジサーバーにA2Aエージェントを登録する
{
"name": "register_agent",
"arguments": {
"url": "http://localhost:41242"
}
}
- list_agents: 登録されたすべてのエージェントのリストを取得する
{
"name": "list_agents",
"arguments": {}
}
- unregister_agent: ブリッジサーバーからA2Aエージェントを削除する
{
"name": "unregister_agent",
"arguments": {
"url": "http://localhost:41242"
}
}
メッセージ処理
- send_message: エージェントにメッセージを送信し、応答のためのtask_idを取得する
{
"name": "send_message",
"arguments": {
"agent_url": "http://localhost:41242",
"message": "What's the exchange rate from USD to EUR?",
"session_id": "optional-session-id"
}
}
- send_message_stream: メッセージを送信し、応答をストリーミングする
{
"name": "send_message_stream",
"arguments": {
"agent_url": "http://localhost:41242",
"message": "Tell me a story about AI agents.",
"session_id": "optional-session-id"
}
}
タスク管理
- get_task_result: タスクIDを使用してタスクの結果を取得する
{
"name": "get_task_result",
"arguments": {
"task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1",
"history_length": null
}
}
- cancel_task: 実行中のタスクをキャンセルする
{
"name": "cancel_task",
"arguments": {
"task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1"
}
}
💻 使用例
基本的なワークフロー
1. クライアントがA2Aエージェントを登録する
↓
2. クライアントがエージェントにメッセージを送信する(task_idを取得する)
↓
3. クライアントがtask_idを使用してタスク結果を取得する
MCPクライアントとしてClaudeを使用する例
ユーザー: Register an agent at http://localhost:41242
Claudeは次を使用: register_agent(url="http://localhost:41242")
Claude: Successfully registered agent: ReimbursementAgent
ユーザー: Ask the agent what it can do
Claudeは次を使用: send_message(agent_url="http://localhost:41242", message="What can you do?")
Claude: I've sent your message. Here's the task_id: b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1
ユーザー: Get the answer to my question
Claudeは次を使用: get_task_result(task_id="b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1")
Claude: The agent replied: "I can help you process reimbursement requests. Just tell me what you need to be reimbursed for, including the date, amount, and purpose."
アーキテクチャ
A2A MCPサーバーは、いくつかの重要なコンポーネントで構成されています。
- FastMCP Server: MCPクライアントにツールを公開する
- A2A Client: 登録されたA2Aエージェントと通信する
- Task Manager: タスクの転送と管理を処理する
- Agent Card Fetcher: A2Aエージェントに関する情報を取得する
通信フロー
MCP Client → FastMCP Server → A2A Client → A2A Agent
↑ ↓
└──── Response ──┘
タスクID管理
A2Aエージェントにメッセージを送信すると、サーバーは次のことを行います。
- 一意の
task_id
を生成する - このIDを
task_agent_mapping
辞書内のエージェントのURLにマッピングする task_id
をMCPクライアントに返す- このマッピングを使用して、タスクの取得とキャンセル要求をルーティングする
エラーハンドリング
サーバーは、一般的な問題に対する詳細なエラーメッセージを提供します。
- エージェントが登録されていない
- タスクIDが見つからない
- エージェントへの接続エラー
- 応答の解析エラー
トラブルシューティング
エージェント登録の問題
エージェントを登録できない場合は、次のことを確認します。
- エージェントURLが正しく、アクセス可能であることを確認する
- エージェントが
/.well-known/agent.json
に適切なエージェントカードを持っていることを確認する
メッセージ配信の問題
メッセージが配信されない場合は、次のことを確認します。
- エージェントが登録されていることを確認する(
list_agents
を使用) - エージェントが実行中で、アクセス可能であることを確認する
タスク結果取得の問題
タスク結果を取得できない場合は、次のことを確認します。
- 正しいタスクIDを使用していることを確認する
- 時間が経過しすぎていないことを確認する(一部のエージェントは古いタスクを破棄する場合があります)
トランスポートの問題
特定のトランスポートタイプに問題がある場合は、次のことを確認します。
- stdioの問題: 入出力ストリームがリダイレクトまたは変更されていないことを確認する
- streamable-httpの問題: ポートが利用可能で、ファイアウォールによってブロックされていないことを確認する
- sseの問題: クライアントがServer-Sent Eventsをサポートしていることを確認する
Claude Desktopの設定問題
Claude DesktopがA2A-MCP-Serverを起動しない場合は、次のことを確認します。
claude_desktop_config.json
内のパスが正しいことを確認する"command": "python"
を使用する場合は、PythonがPATHに含まれていることを確認する- ローカルインストールの場合は、PYTHONPATHが正しいことを確認する
env
セクションでMCP_TRANSPORT
が"stdio"
に設定されていることを確認する- コマンドを手動で実行して、Claudeの外で動作するかどうかを確認する
- 自動パス検出と設定のために
config_creator.py
スクリプトを使用する
開発
新しいツールメソッドの追加
サーバーに新しい機能を追加するには、a2a_mcp_server.py
ファイルで@mcp.tool()
で装飾されたメソッドを追加します。
カスタムタスクマネージャー
サーバーは、InMemoryTaskManager
を拡張するカスタムA2AServerTaskManager
クラスを使用しています。このクラスを変更することで、その動作をカスタマイズできます。
プロジェクト構造
a2a-mcp-server/
├── a2a_mcp_server.py # メインサーバーの実装
├── common/ # A2Aプロトコルコード(google/A2Aから)
│ ├── client/ # A2Aクライアントの実装
│ ├── server/ # A2Aサーバーの実装
│ ├── types.py # 共通の型定義
│ └── utils/ # ユーティリティ関数
├── config_creator.py # Claude Desktop設定を作成するのに役立つスクリプト
├── .gitignore # Gitの無視ファイル
├── pyproject.toml # プロジェクトのメタデータと依存関係
├── README.md # このファイル
└── requirements.txt # プロジェクトの依存関係
📄 ライセンス
このプロジェクトは、Apache License, Version 2.0の下でライセンスされています。詳細については、LICENSEファイルを参照してください。
common/
ディレクトリ内のコードは、Google A2Aプロジェクトからのものであり、同じくApache License, Version 2.0の下でライセンスされています。
謝辞
- AnthropicのModel Context Protocol
- GoogleのAgent-to-Agent Protocol
- FastMCPライブラリの貢献者たち












