Skip to main content
Glama

mcp-a2a-bridge

코딩 에이전트(GitHub Copilot CLI, Claude Code, Codex, Hermes)가 원격 A2A 에이전트를 호출할 수 있게 해주는 MCP 서버입니다. 또한 선적 읽기 전용 활동 대시보드를 포합합니다.

저장소: httpps://github.com/TonPC64/mcp-a2a-bridge

MIT 라이선스에 따라 사용이 허가됩니다.

코딩 에이전트 지침은 AGENTS.md부터 시작하고, 설치에는 skills/setup/SKILL.md를, 변경 사항 및 R에는 skills/contribute/SKILL.md를 사용하세요.

대시보드 UI 케이스

선적 대시보드는 컴팩트한 에이전트 카드, 실시간 작업 활동, 2열 작업 요약, 상태 표시기, 반응형 레이아웃을 갖춘 미래지향적 Liqud Glaas 인터페이스를 사용합니다. 이 스크린숏은 옵트인 프론트엔드 목 데이터 모드를 사용하므로 실제 에이전트에 연결하거나 로그를 노출하지 않고 재현해도 안전합니다.

A2A Bridge 대시보드 데스크톱 케이스

동일한 목 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 --locked

MCP + 대시보드

선적 대시보드 웹 런타임을 설치한 다윔 번들된 프론트엔드 에셋을 빌드하세요. 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 객체를 사용)하세요. 레지스트리는 비밀을 포할 수 있으므로 커밋하지 말고, 적절한 경우 파일 권한을 제한하세요.

레지스트리 위치는 다윔 순서로 확입니다:

  1. A2A_BRIDGE_CONFIG

  2. 브리지 프로세스의 현재 디렉터리에 있른 .a2a-agents.json

  3. ~/.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

위에서 만든 editable 설치를 사용합니다. 다음 휴대용 경로 자리 표시자로 호스트를 구성하세요.

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-bridge

Codex — 이것을 ~/.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_lis_agents를 호출하여 레지스트리를 사용할 수 있고 에이전트에 연결할 수 있는지 확인하세요.

도구

도구

용도

a2a_lis_agents

스킬 및 연결 가능 여부와 함께 에이전트 나열

a2a_send_message

메시지 전송, task_id로 작업 계속

a2a_get_task

이전에 시작한 작업 폴링

a2a_cancel_task

실행 중인 작업 취소

a2a_add_agent

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

해당 플래그가 없는 브리지 프로세스는 활동을 메모리에만 보관하며 공유 대시보드에 표시되지 않습니다. 대시보드는 이들보다 먼저 또는 나중에 시작할 수 있습니다.

환경 변수

기본값

용도

A2A_BRIDGE_CONFIG

—

에이전트 JSON 레지스트리의 절대 경로

A2A_BRIDGE_DASHBOARD

설정 안 됨(꺼짐)

1로 설정하면 이 브리지 프로세스의 활동을 유지

A2A_BRIDGE_ACTIVITY_DB

~/.config/a2a-bridge/activity.sqlite3

공유 SQLite 활동 데이터베이스

A2A_BRIDGE_ACTIVITY_SOURCE

remote

호환 프로세스가 기록한 활동의 소스 레이블

A2A_BRIDGE_DASHBOARD_HOST

127.0.0.1

대시보드 바인드 주소

A2A_BRIDGE_DASHBOARD_PORT

9100

대시보드 포트

A2A_BRIDGE_DASHBOARD_TOKEN

설정 안 됨(꺼짐)

대시보드와 API를 보호하는 선택적 베어러 토큰

A2A_BRIDGE_HERMES_AUDIT

설정 안 됨

Hermes의 a2a_audit.jsonl에 대한 읽기 전용 재정의

HERMES_HOME

설정 안 됨

재정의가 설정되지 않은 경우 $HERMES_HOME/a2a_audit.jsonl을 찾는 데 사용

LAN 배포

명시적 비루프백(non-loopback) 바인드를 설정하면 신뢰할 수 있는 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 세션 쿠키 덕분에 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 dev

Vite가 개발 URL(보통 http://localhost:5173)을 출력합니다. npm run build로 Python 대시보드가 사용하는 에셋을 빌드하세요.

Copilot A2A 서버

번들 서버에는 인증된 copilot CLI가 필요합니다:

copilot-a2a-agent --port 9002 --cwd /path/to/default/repository

--allow-all-tools로 Copilot을 실행하므로 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 -v

dashboard/에서 대시보드 테스트를 실행하거나 프로덕션 대시보드 빌드를 만드세요:

npm test
npm run build

CI는 Python 3.11에서 Python 스위트를 실행하고, uv.lock을 검증하며, 최신 Node.js 24 릴리스에서 대시보드 설치, 테스트, 프로덕션 빌드를 실행합니다.

tests/test_integration.py는 프로세스 내에서 A2A 에이전트를 실행하고 브리지를 엔드투엔드로 테스트합니다.

Available Tools

5 tools
a2a_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
nameYes
headersNo
persistNo

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYes
task_idYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYes
task_idYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYes
messageYes
task_idNo
providerNo
timeout_sNo
context_idNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv0.1.0
    • First observeda2a_add_agent
    • First observeda2a_cancel_task
    • First observeda2a_get_task
    • First observeda2a_list_agents
    • First observeda2a_send_message

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a distinct purpose: listing agents, sending messages, getting task state, cancelling tasks, and adding agents. No overlap or ambiguity between them.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP 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 npm
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    Enables agent-to-agent discovery and delegation via MCP, with tools for registering agents, discovering them by keyword matching, and delegating tasks over HTTP.
    4
    9 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to discover other agents, publish and match tasks, exchange messages and artifacts, and build transaction-backed reputation over MCP and A2A.
    -