An MCP server that provides Agent-to-Agent (A2A) communication tools for the XYZ platform, enabling agents to call other agents by URL or agent ID with conversation context management.
Four tools with basic schemas and descriptions, but significant gaps in parameter documentation and output structure. Tool names follow verb_noun convention (get_*, call_*), which is good. However, descriptions lack actionable guidance for LLM selection, parameter descriptions are minimal or missing, and output schemas are not formally documented. Error handling is absent. The server exposes internal agent IDs and URLs directly to the LLM without abstraction, violating the chat-data-model pattern. No pagination, no result limits, no recovery guidance.
Sends a message to an internal XYZ Agent using its Agent ID, including conversation context, via the A2A protocol. This tool facilitates communication between Agents within the XYZ internal network. It automatically retrieves the existing conversation history between the `from_agent_id` (acting as user) and the `to_agent_id`. The new `message` is appended to this history, and the entire context is sent to the target agent. Both the sent message and the received response are then saved back into the conversation history. Args: from_agent_id: The ID of the agent making the request (e.g., an agent acting on behalf of a user). message: The current message to send to the `to_agent_id`. to_agent_id: The ID of the internal XYZ Agent that should receive the message. Returns: A string containing the response from the target Agent-server.
Sends a message to an external Agent-server using its specific URL via the A2A (Agent-to-Agent) protocol. This tool is intended for communication with Agent-servers that are addressable via a direct URL and are considered external to the XYZ internal agent network. It performs a straightforward message transmission without including conversational context from the XYZ system. Args: url: The fully qualified URL of the external Agent-server (e.g., 'https://example-agent.com'). message: The textual message to be delivered to the Agent-server at the specified URL. Returns: A string containing the response from the target Agent-server.
Retrieves the IdCard (AgentCard) for a specified agent. Args: agent_id (int): The unique identifier of the agent whose IdCard is being requested. Returns: dict: A dictionary containing the agent's metadata and capabilities. Example Response: { "name": "XyzAgent: 1036", "version": "1.0.0", "url": "http://127.0.0.1:5000/1036", "capabilities": { "streaming": true }, "defaultInputModes": [ "text/plain" ], "defaultOutputModes": [ "text/plain" ], "skills": [], "description": "Agent description..." }
Output schemas not documented. Tool descriptions include example JSON responses but no formal schema definition for LLM parsing. LLMs cannot reliably extract fields or plan downstream calls without knowing the response structure.
Parameter descriptions are minimal or absent. 'url' param in get_agent_card_by_url has only 'Agent Server URL', no format guidance, no examples of valid vs invalid input, no constraint on path components. LLMs cannot validate input before calling.
No error handling or recovery guidance. Tools lack descriptions of failure modes, retryability, or what the LLM should do if a call fails. E.g., 'call_agent_by_agent_id' does not document what happens if to_agent_id does not exist or if the conversation history is corrupted.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Get AgentCard by server base url. Args: url (str): Agent-serve url. Returns: dict: A dictionary containing the agent's metadata and capabilities. Example Response: { "name": "XyzAgent: 1036", "version": "1.0.0", "url": "http://127.0.0.1:5000/1036", "capabilities": { "streaming": true }, "defaultInputModes": [ "text/plain" ], "defaultOutputModes": [ "text/plain" ], "skills": [], "description": "Agent description..." } Important: - URL only supports BASE_URL, such as http://127.0.0.1:8000 or http://127.0.0.1:8000/ - If the URL has a path part, you should call `get_agent_card_by_agent_id` to get the AgentCard instead of this tool
Tool descriptions lack WHEN-to-use guidance. The distinction between call_agent_by_agent_url and call_agent_by_agent_id is buried in prose; LLMs must parse English to decide which to call. A clear decision tree in each description would reduce confusion.
No input validation constraints. 'message' parameter in call_agent_by_agent_url accepts any string with no length limit, encoding guidance, or content restrictions. Unbounded strings can cause timeouts or injection attacks.