mcp-a2a-bridge
mcp-a2a-bridge
コーディングエージェント(GitHub Copilot CLI、Claude Code、Codex、Hermes)がリモートのA2Aエージェントを呼び出せるようにするMCPサーバーです。また、オプションの読み取り専用アクティビティダッシュボードも含まれます。
リポジトリ: https://github.com/TonPC64/mcp-a2a-bridge
MIT Licenseの下でライセンスされています。
コーディングエージェント向けの手順は、AGENTS.mdから始め、インストールにはskills/setup/SKILL.md、変更やPRにはskills/contribute/SKILL.mdを使用してください。
ダッシュボードUIショーケース
オプションのダッシュボードは、未来的なLiquid Glassインターフェースを採用し、コンパクトなエージェントカード、ライブタスクアクティビティ、2カラムのタスクサマリー、ステータスインジケーター、レスポンシブレイアウトを備えています。このスクリーンショットはオプトインのフロントエンドモックデータモードを使用しているため、実際のエージェントに接続したりログを公開したりせずに安全に再現できます。

同じモックUIをローカルで実行するには:
cd /absolute/path/to/mcp-a2a-bridge/dashboard
npm ci
npm run dev:mock -- --host 127.0.0.1モックモードはUI開発とスクリーンショット専用です。通常のビルドでは、ライブのダッシュボードAPIとSSEを使用します。
Related MCP server: agentkit-mesh
はじめに
セットアップの選択
どちらのプロファイルもPython 3.11以降とuvが必要です。オプションのダッシュボードフロントエンドにはNode.js 24.15以降が必要で、CIは最新のNode.js 24リリースを使用します。
MCPのみ
MCPブリッジのみをインストールして実行します。Node.js/npmやダッシュボードのフロントエンドビルドは不要です。
git clone https://github.com/TonPC64/mcp-a2a-bridge.git mcp-a2a-bridge
cd mcp-a2a-bridge
uv sync --lockedMCP + ダッシュボード
オプションのダッシュボードWebランタイムをインストールし、バンドルされたフロントエンドアセットをビルドします。Node.jsとnpmが必要なのはこのビルド(またはフロントエンド開発)のときだけで、ビルド済みのダッシュボードを実行するのには不要です。
git clone https://github.com/TonPC64/mcp-a2a-bridge.git mcp-a2a-bridge
cd mcp-a2a-bridge
uv sync --extra dashboard --locked
npm --prefix dashboard ci
npm --prefix dashboard run build開発とテストには、uv sync --all-extras --lockedを使用します。これにはダッシュボードのテストスイートに必要なPythonパッケージが含まれます。以下のコマンドは/absolute/path/to/mcp-a2a-bridgeを使用します。これを自分のクローンの絶対パスに置き換えてください。他のユーザーのパスをコピーしないでください。
A2Aエージェントの設定
リポジトリのルートに.a2a-agents.jsonを作成します:
{
"agents": {
"example-agent": {
"url": "https://agent.example.invalid",
"headers": {
"Authorization": "Bearer REPLACE_WITH_YOUR_TOKEN"
}
}
}
}A2AエージェントのベースURLを使用します。ブリッジはその/.well-known/agent-card.jsonを自動的にリクエストします。エージェントが認証を必要としない場合は、Authorizationを削除するか、空のheadersオブジェクトを使用してください。レジストリには秘密情報が含まれる可能性があるため、コミットせず、必要に応じてファイルのパーミッションを制限してください。
レジストリの場所は次の順序で解決されます:
A2A_BRIDGE_CONFIGブリッジプロセスの現在のディレクトリにある
.a2a-agents.json~/.config/a2a-bridge/agents.json
リポジトリの外部でMCPコマンドを起動するホストの場合は、そのホストのMCP環境でA2A_BRIDGE_CONFIGに絶対パスを設定します。実行時にa2a_add_agentを使用して検証済みのエージェントを追加することもできます。デフォルトでは、解決されたレジストリファイルに書き込まれます。
MCPサーバーの登録
各ホストは、同じローカルチェックアウトのコマンドを起動する必要があります:
uv run --directory /absolute/path/to/mcp-a2a-bridge mcp-a2a-bridgeこれは、上記で作成した編集可能インストールを使用します。次のポータブルなパスプレースホルダーを使用してホストを設定します。
GitHub Copilot CLI — このサーバーを~/.copilot/mcp-config.jsonに追加します:
{
"mcpServers": {
"a2a": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/mcp-a2a-bridge",
"mcp-a2a-bridge"
]
}
}
}Claude Code:
claude mcp add a2a -- uv run --directory /absolute/path/to/mcp-a2a-bridge mcp-a2a-bridgeCodex — これを~/.codex/config.tomlに追加します:
[mcp_servers.a2a]
command = "uv"
args = ["run", "--directory", "/absolute/path/to/mcp-a2a-bridge", "mcp-a2a-bridge"]Hermes: MCPサーバー登録UIまたはコマンドを使用し、stdioサーバーを選択して、コマンドuvに次の引数を指定します:
run --directory /absolute/path/to/mcp-a2a-bridge mcp-a2a-bridge登録後にホストを再起動し、a2a_list_agentsを呼び出して、レジストリが利用可能でエージェントに到達可能であることを確認します。
ツール
ツール | 目的 |
| スキルと到達可能性を備えたエージェントを一覧表示する |
| メッセージを送信し、 |
| 以前に開始したタスクをポーリングする |
| 実行中のタスクをキャンセルする |
| URLでエージェントを登録する |
a2a_send_messageは最大timeout_s秒(デフォルトでは60秒)待機します。タスクがまだ実行中の場合は、task_idとともにdone: falseを返すため、a2a_get_taskでポーリングします。エージェントがstate: "input_required"を返す場合は、同じtask_idでもう一度a2a_send_messageを呼び出します。
ダッシュボード
オプションのスタンドアロンダッシュボードには、設定済みのエージェント、そのステータス/スキル、および同じマシン上のブリッジプロセスからのライブタスクアクティビティが表示されます。これは読み取り専用で、エージェントにメッセージを送信することはありません。
起動する前にdashboardプロファイルをインストールしてアセットをビルドします:
cd /absolute/path/to/mcp-a2a-bridge
uv sync --extra dashboard --locked
npm --prefix dashboard ci
npm --prefix dashboard run build
uv run mcp-a2a-bridge-dashboardデフォルトでは127.0.0.1:9100のみでリッスンします。同じマシンでhttp://127.0.0.1:9100を開きます。
フロントエンドのモックデータ
PythonサービスやSSEなしでダッシュボードUIを実行するには、オプトインのモックモードを使用します。スクリーンショット用の代表的なエージェントとタスクアクティビティが含まれています:
cd /absolute/path/to/mcp-a2a-bridge/dashboard
npm ci
npm run dev:mock -- --host 0.0.0.0同じネットワーク上でViteのURLを開きます。VITE_USE_MOCK_DATA=trueはフロントエンドのビルド/開発サーバーでのみ使用されます。通常のnpm run devおよび本番ビルドでは、引き続きライブのダッシュボードAPIとSSEを使用します。
ダッシュボードにアクティビティを表示したいすべてのブリッジプロセスでレポートを有効にします。この環境変数をMCPサーバー設定に追加します(または手動で起動するときに追加します):
A2A_BRIDGE_DASHBOARD=1 uv run --directory /absolute/path/to/mcp-a2a-bridge mcp-a2a-bridgeこのフラグがないブリッジプロセスはアクティビティをメモリ内に保持するため、共有ダッシュボードには表示されません。ダッシュボードはこれらのプロセスの前後どちらでも起動できます。
環境変数 | デフォルト | 目的 |
| — | エージェントJSONレジストリへの絶対パス |
| 未設定(オフ) |
|
|
| 共有SQLiteアクティビティデータベース |
|
| 互換プロセスによって書き込まれたアクティビティのソースラベル |
|
| ダッシュボードのバインドアドレス |
|
| ダッシュボードのポート |
| 未設定(オフ) | ダッシュボードとAPIを保護するオプションのベアラートークン |
| 未設定 | Hermesの |
| 未設定 | オーバーライドが設定されていない場合に |
LANへのデプロイ
ダッシュボードは、明示的な非ループバックバインドを設定することで、トークンなしで信頼できるLANに意図的に公開できます。このモードには認証がないため、プライベートで信頼できるネットワークでのみ使用し、パブリックインターネットには絶対に公開しないでください。
保護されたLANアクセスには、強力なトークンを設定し、独自のネットワークアクセス制御を備えたTLS終端リバースプロキシの背後にサービスを配置します:
export A2A_BRIDGE_DASHBOARD_HOST=0.0.0.0
export A2A_BRIDGE_DASHBOARD_TOKEN="$(openssl rand -hex 32)"
uv run mcp-a2a-bridge-dashboardトークンが設定されている場合、ダッシュボードのHTML、静的アセット、APIルート、SSEルートのすべてでそのトークンが必要になります。ブラウザユーザーは/loginで一度入力するだけで、生成されたHttpOnly、same-siteセッションCookieにより、EventSourceが正常に再接続できます。APIクライアントは代わりにAuthorization: Bearer <token>を送信することもできます。サービスがトークンをログに記録することはありません。トークンはアクセスを認証しますが、トラフィックを暗号化しないため、信頼できないネットワークを介して直接HTTP LANエンドポイントを使用せず、リバースプロキシでHTTPSを使用してください。
macOSの場合、launchd/com.example.a2a-bridge-dashboard.plistテンプレートを使用すると、ログイン時にダッシュボードを実行できます。LaunchAgentとしてインストールする前に、__REPO__と__HOME__のプレースホルダーを置き換えてください。
ダッシュボードフロントエンドの開発
Node.js 24.15+とnpmが必要になるのは、フロントエンドでの作業またはバンドルされたアセットの再ビルドのみです:
cd /absolute/path/to/mcp-a2a-bridge/dashboard
npm ci
npm run devViteは開発URL(通常はhttp://localhost:5173)を表示します。Pythonダッシュボードが使用するアセットは、npm run buildでビルドします。
Copilot A2Aサーバー
バンドルされたサーバーには、認証済みのcopilot CLIが必要です:
copilot-a2a-agent --port 9002 --cwd /path/to/default/repositoryCopilotを--allow-all-toolsで実行するため、127.0.0.1にバインドします。その受信アクティビティは、同じオプトインの共有SQLiteストアを使用でき、ダッシュボードでは送信元フィールドと宛先フィールド付きで表示されます。
ダッシュボードは、Hermesを変更することなく、Hermesのネイティブ監査ファイルを読み取ることもできます。A2A_BRIDGE_HERMES_AUDIT、次に$HERMES_HOME/a2a_audit.jsonl、そして~/.hermes/a2a_audit.jsonlの順にチェックします。
開発とテスト
リポジトリのルートからPythonテストスイートを実行します:
uv sync --all-extras --locked
uv run pytest -vdashboard/内でダッシュボードのテストを実行するか、本番用のダッシュボードビルドを作成します:
npm test
npm run buildCIはPython 3.11でPythonスイートを実行し、uv.lockを検証し、最新のNode.js 24リリースでダッシュボードのインストール、テスト、本番ビルドを実行します。
tests/test_integration.pyはA2Aエージェントをインプロセスで実行し、ブリッジをエンドツーエンドで検証します。
Available Tools
5 toolsa2a_add_agentA
Register a new A2A agent by its base URL.
The agent card is fetched first, so an unreachable URL is rejected instead of being saved. With persist=true the agent is written to the shared registry file and stays available in future sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| name | Yes | ||
| headers | No | ||
| persist | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and it does meaningful work: it discloses that the agent card is fetched first, unreachable URLs are rejected instead of saved, and persist=true writes to a shared registry file. It does not cover every edge case, but it provides substantial insight into the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, front-loaded sentences with no filler. The core action comes first, and the following sentences provide useful behavioral details without repeating the schema or wasting words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the main registration flow and persistence behavior, which is enough for a basic call. But it omits important context such as the purpose of headers, what the tool returns after successful registration, and the exact behavior when persist is false, leaving it short of fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for missing parameter explanations. It adds real meaning for 'url' (base URL) and 'persist' (shared registry file), but it leaves 'name' and especially 'headers' entirely unexplained, and does not clarify what persist=false means for session lifetime.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a concrete action ('Register') and a specific resource ('a new A2A agent'), and adds the mechanism ('by its base URL'). This makes the tool's purpose immediately clear and it is obviously distinct from sibling tools like list, send, get, and cancel, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool through 'Register a new A2A agent,' and it gives some context about persistence across sessions. However, it never explicitly contrasts this tool with alternatives or states when not to use it, so the agent has to infer the usage boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a2a_cancel_taskB
Cancel a running A2A task and return its final state.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose that cancellation returns a final state, which is useful, but it omits side effects, idempotency, error behavior, or whether cancellation is irreversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the core operation and the return value without any filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-changing tool with no annotations and no output schema, this description is too thin. Missing details include parameter semantics, handling of non-running tasks, failure modes, and any irreversible consequences, leaving the agent to guess important call behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning to the 'agent' or 'task_id' parameters beyond their names. Neither the schema nor the description explains what values these accept or how they relate to the cancellation operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('cancel') and a specific resource ('A2A task'), and clarifies that it returns the task's final state. This clearly distinguishes it from sibling tools like a2a_get_task or a2a_send_message, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for active/running tasks, giving reasonable contextual usage. However, it does not explicitly state when not to use it, mention alternatives, or explain what to do if the task is already completed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a2a_get_taskA
Get the current state and output of a previously started A2A task.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns state and output, and 'get' implies a read-only operation. However, it does not mention error behavior for unknown task IDs, whether the call is idempotent, or whether it affects task execution in any way.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no fluff. It efficiently communicates the tool's purpose and the key precondition that the task must already exist.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and zero parameter descriptions, the tool description is too sparse. An agent cannot reliably know what value 'agent' expects, what the returned state/output structure looks like, or what happens when a task does not exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The task_id parameter is reasonably inferable from the tool purpose, but 'agent' is ambiguous: it is not explained as an identifier, name, or what agent list it refers to. The description adds no parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and a specific resource ('current state and output of a previously started A2A task'). It is clearly distinguishable from siblings like a2a_send_message, a2a_cancel_task, a2a_list_agents, and a2a_add_agent, none of which retrieve task state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'previously started' implies this should be used to poll or inspect tasks that were already kicked off, which gives a minimal context. However, it provides no explicit guidance about when to choose this over sibling tools, when not to use it, or whether it is intended for polling workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a2a_list_agentsA
List configured A2A agents with their skills and reachability.
Set refresh=true to re-fetch agent cards that were previously cached.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It usefully discloses caching behavior and the effect of refresh, but it does not state that the operation is read-only, describe the return structure, or mention any potential side effects or prerequisites. Some relevant behavior remains implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the tool's purpose and result scope; the second explains the only parameter. No filler or duplication of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single optional-parameter list operation, this description is largely complete. It identifies what the result includes, notes the caching behavior, and explains the parameter. A fully explicit return-format statement would be nice, but it is not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does by explaining that refresh=true re-fetches cached agent cards. It stops short of explaining the exact behavior when refresh is false (e.g., serving from cache), but the meaning is strongly implied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List'), a clear resource ('configured A2A agents'), and the relevant output facets ('skills and reachability'). It is immediately distinguishable from its siblings, which send messages or manage tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The refresh guidance is clear operational context ('Set refresh=true to re-fetch agent cards that were previously cached'). However, there is no explicit statement about when to prefer this tool over alternatives such as a2a_send_message or a2a_get_task; the distinction is only implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a2a_send_messageA
Send a message to an A2A agent and return its reply.
Set provider to "litellm-auto" or "github" when the target agent supports provider selection. The selected provider is carried in the message for the local Copilot A2A agent; other agents may ignore it. Pass task_id to continue an existing task, for example to answer an agent that returned state="input_required". If the agent is still working when timeout_s elapses, this returns done=false with a task_id to poll rather than blocking.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| message | Yes | ||
| task_id | No | ||
| provider | No | ||
| timeout_s | No | ||
| context_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full behavioral burden. It discloses the asynchronous/non-blocking timeout behavior, the done=false + task_id polling contract, and the nuance that the provider field may be ignored by non-local agents. It does not mention auth, error cases, or side effects, but it covers the most important behavioral traits for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then supplies only high-value operational details: provider selection, task continuation, and polling behavior. Every sentence earns its place, and the length is appropriate for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is useful for a complex async tool, but there is no output schema and no annotations, so the description must explain the return contract. It partially does by mentioning 'reply,' 'done=false,' and 'task_id,' yet it never describes the full response shape, error behavior, or the purpose of context_id. An agent could still be uncertain about the exact payload format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for provider, task_id, and timeout_s, and the required agent and message parameters are inferable from 'send a message to an A2A agent.' However, context_id is never explained, leaving one of six parameters semantically undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Send a message to an A2A agent and return its reply.' This clearly distinguishes the tool from its siblings (a2a_list_agents, a2a_get_task, a2a_cancel_task, a2a_add_agent), all of which serve different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use it: sending messages, continuing existing tasks via task_id, responding to state="input_required", and handling non-blocking timeouts. It does not explicitly name a2a_get_task as the polling alternative, but strongly implies the polling workflow by mentioning 'to poll rather than blocking.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
a2a_add_agent - First observed
a2a_cancel_task - First observed
a2a_get_task - First observed
a2a_list_agents - First observed
a2a_send_message
TDQS
Scored across 5 tools
Each tool has a distinct purpose: listing agents, sending messages, getting task state, cancelling tasks, and adding agents. No overlap or ambiguity between them.
All tools follow a consistent 'a2a_' prefix followed by a verb_noun pattern (list_agents, send_message, get_task, cancel_task, add_agent). Naming is predictable and uniform.
Five tools is well-scoped for an A2A bridge: listing, messaging, task management, and agent registration cover the core functionality without being excessive or sparse.
The tool surface covers the essential operations for an A2A bridge. A remove_agent or update_agent tool is missing, but it's not critical; the set supports the primary workflows adequately.
Maintenance
Related MCP Connectors
Public MCP for agent verification, work discovery and governed interoperability.
Agent communication platform for agent to agent messaging via MCP. Messages, channels, skills.
Discover and call AI agents via MCP. Supports A2A agents and platform agents with async tasks.
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server that gives AI agents the ability to discover, match with, and build relationships with other autonomous agents. Supports agent registration, matchmaking, messaging, shared goals, relationship lifecycle management, and real-time event subscriptions.22 npmMIT

agentkit-meshofficial
AlicenseAqualityFmaintenanceEnables agent-to-agent discovery and delegation via MCP, with tools for registering agents, discovering them by keyword matching, and delegating tasks over HTTP.49 npm1MIT- AlicenseAqualityCmaintenanceMCP server for multi-agent AI systems providing mailbox messaging, A2A task delegation, resource coordination, and a web dashboard.2113 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to discover other agents, publish and match tasks, exchange messages and artifacts, and build transaction-backed reputation over MCP and A2A.-