A2A Protocol¶
Agent-to-Agent (A2A) is MeshFlow's HTTP wire protocol for inter-agent communication with full task lifecycle management.
AgentCard discovery¶
Every A2A server exposes /.well-known/agent-card:
from meshflow import AgentCard, A2AServer
card = AgentCard(
agent_id="researcher-01",
name="Research Agent",
description="Searches and summarizes information",
capabilities=["web_search", "summarize"],
endpoint="http://agent-host:9090",
)
server = A2AServer(agent=my_agent, port=9090, card=card)
server.start() # daemon thread
Send a task¶
from meshflow import A2AClient, A2AMessage, A2AResponse
client = A2AClient(base_url="http://agent-host:9090")
# Discover capabilities
card = await client.get_card()
print(card.capabilities)
# Send task
response: A2AResponse = await client.send(
task="Summarize the 2025 AI Safety Report",
context={"format": "bullet_points"},
)
print(response.result)
print(response.cost_usd)
Task lifecycle (SSE)¶
from meshflow import A2ATask, A2ATaskStore, TaskState, TaskEventQueue
task_store = A2ATaskStore("tasks.db")
event_queue = TaskEventQueue()
# Create task
task = A2ATask(task_id="t-001", input="summarize report")
task_store.save(task)
# Subscribe to events (SSE)
async for event in event_queue.subscribe("t-001"):
print(event.state, event.progress)
if event.state == TaskState.COMPLETED:
print(event.result)
break
TaskState machine¶
REST endpoints (auto-registered)¶
| Path | Description |
|---|---|
GET /.well-known/agent-card |
Agent capabilities discovery |
POST /tasks |
Submit a new task |
GET /tasks/{id} |
Get task status and result |
GET /tasks/{id}/events |
SSE task event stream |
DELETE /tasks/{id} |
Cancel a task |