The asynchronous shape is the design decision worth knowing: sending a message returns a task identifier rather than waiting, so a long-running agent does not stall the chat and its answer can be collected later. Streaming responses and task cancellation are on the roadmap rather than in the tool list.
A gateway between the Model Context Protocol and the Agent-to-Agent protocol. MCP clients register A2A agents with it, send them messages, and track the resulting tasks.
- register_agent adds an A2A agent by URL, list_agents shows what is registered, unregister_agent removes one
- send_message hands a message to a registered agent and returns a task identifier immediately, so the client is not blocked while the agent works
- get_task_result fetches a task's result by that identifier, and get_task_list shows every task with its status
- The gateway keeps track of which agent is handling which task
- It runs over stdio for desktop clients, or streamable HTTP or server-sent events for network clients
- Agent and task state persists to a data directory you choose
Python, run straight from the published package with uvx or from a checkout. Each A2A agent you want to reach must be running and reachable at its own URL, locally or deployed. No account or key for the gateway itself.
One command — uvx mcp-a2a-gateway
