A2A MCP Server provides three tools with visible schemas and descriptions, but suffers from moderate definition quality issues. All tools have descriptions and input schemas, but descriptions are generic and lack depth. Parameter descriptions are minimal. Tool names follow action-verb conventions (list_, call_) but one name ('a2a_server_registry') is compound and unclear about what resource is being managed. Schemas use proper JSON Schema with types and enums, but descriptions don't explain when to use each tool or what the LLM should expect in responses. Error handling is present but minimal, responses include status/message, but no recovery guidance for LLMs. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present.
Add or remove an A2A server URL.
Call an agent with a prompt.
List available agents with their agent cards.
Compound tool name 'a2a_server_registry' lacks clarity. Does it read, write, or both? The 'action' parameter delegates the actual operation. Consider renaming to 'add_a2a_server' and 'remove_a2a_server' as separate tools for single responsibility.
Tool descriptions are bare-minimum. 'List available agents with their agent cards' (47 chars) lacks context about when to call it, what an 'agent card' contains, or what the response structure includes. Descriptions should be 50-200 chars with WHAT, WHEN, and WHAT_RETURNS.
Parameter descriptions are missing or trivial. 'name' in a2a_server_registry says 'Name of the server' but doesn't explain if this is a unique key, how it's used in lookup calls, or constraints (length, charset). 'agent_name' in call_agent provides no context. Descriptions must state format, constraints, and purpose.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 50 | - | v1 |
No error recovery guidance. a2a_server_registry returns {'status': 'error', 'message': 'Server not found'} but does not tell the LLM what to do (e.g., 'Call list_agents to see available servers'). call_agent fails similarly. Errors must guide the agent toward recovery.
Output schema for call_agent is undocumented. Response appears to be a dict with 'status' and agent response data, but LLMs cannot infer the structure of the agent's response or what fields are present. Document the exact return schema.
No tool annotations present. None of the three tools declare readOnlyHint, destructiveHint, or idempotentHint. 'a2a_server_registry' with action='remove' is clearly destructive but unmarked. 'list_agents' is read-only but unmarked. Tool annotations are now part of the current MCP spec and guide agent reasoning.
list_agents has no pagination support. If many agents are registered, the response could be very large. Baseline pattern recommends limit and offset parameters with a total count, capping results at 50 or fewer by default.
call_agent accepts free-form 'prompt' string with no constraints or examples in description. No guidance on format (JSON, markdown, plain text?), length limits, or special characters. Description should include examples or format guidance.
No idempotency or retry semantics documented. a2a_server_registry with action='add' and call_agent both modify state, but it's unclear if they're idempotent. If called twice with identical params, will the second call fail, succeed silently, or produce duplicates? This must be specified.