Multi-agent crew with MCP and A2A — "Research Studio"
A supervisor plus specialists that share tools over MCP and coordinate through A2A messages.
After Phase 4. This project demonstrates the highest-paying skills in 2026: multi-agent orchestration, MCP servers, A2A protocol, deep agents.
What you ship
A research studio that, given a topic, produces a polished Markdown report (~2000 words) with citations and 1-2 charts.
- Multiple specialised agents collaborate.
- Tools are exposed via your own MCP server.
- The whole studio is itself an A2A agent other systems can call.
- A LangGraph deep agent drives planning, sub-agents, and a virtual filesystem.
Architecture (mermaid)
mermaid
flowchart LR
CLIENT[Caller agent (LangGraph chat)] -->|A2A tasks/sendSubscribe| A2A[A2A endpoint]
A2A --> RUNTIME[LangGraph Deep Agent]
RUNTIME --> PLAN[plan.md]
RUNTIME --> R[Researcher sub-agent]
RUNTIME --> AN[Analyst sub-agent]
RUNTIME --> WR[Writer sub-agent]
R --> MCP[MCP Server: web_search, fetch_url, save_file]
AN --> MCP
WR --> MCP
RUNTIME --> FS[(Virtual filesystem out/run-id/)]
RUNTIME -.->|stream| A2AStack
- LangGraph with
deepagentslibrary (or hand-built deep-agent pattern). - FastMCP server exposing:
web_search,fetch_url,summarise,save_file,read_file. a2a-sdkserver wrapping the deep agent.- Tavily for web search (free tier).
- Cohere rerank-3 to filter web search results.
- LangSmith for tracing.
- Streamlit companion app to invoke the A2A endpoint and watch progress.
Step-by-step
Day 1 — MCP server
- Build
tools_mcp.pywith FastMCP tools (web_search,fetch_url,read_file,write_file,summarise). - Test with
fastmcp dev tools_mcp.py. - Wire into Claude Desktop and Cursor as a sanity check.
Day 2 — Deep agent runtime
- LangGraph state with
goal,plan,files,step_index. plannernode (creates plan.md),step_runnernode (calls a sub-agent),reflectnode, conditional cycle.- Sub-agents (
researcher,analyst,writer) are themselvescreate_agentinstances with the MCP tools loaded vialangchain-mcp-adapters.
Day 3 — Virtual filesystem
out/{run_id}/directory per run.- Sub-agents write
notes.md,references.json,data.csv,report.md. - Reflection step inspects file presence + size to gauge progress.
Day 4 — A2A wrapper
- Build
producer.pythat wraps the deep agent in anA2AStarletteApplication. - Publish an Agent Card at
/.well-known/agent.json. - Stream progress events as A2A messages.
Day 5 — Caller agent
- Build a small LangGraph chat agent on Streamlit that calls the A2A endpoint with a topic.
- Show a live "Plan / Files / Status" panel populated from the A2A stream.
Day 6 — Eval and harden
- Build a 10-topic eval: each with a "perfect report" rubric (LLM-judged 0-1 on completeness, accuracy, structure, citations).
- Add cost meter (
tokens_in,tokens_outper sub-agent). - Add max-step and max-cost ceilings; agent stops gracefully on budget.
Day 7 — Polish
- Write the post explaining each protocol, why you used it, the failure modes you found.
- Demo video: paste a topic, watch the studio plan/research/write live.
- README with mermaid + sample report + cost analysis.
Acceptance checklist
- MCP server runs over stdio and HTTP.
- Agent Card returns valid JSON at
/.well-known/agent.json. - Deep agent successfully completes a 6-step plan with reflection.
- Caller streams progress (Plan, Files, current step) live.
- Cost stays under target (e.g., < $0.30 per report).
- LangSmith trace link.
- A failure mode (Tavily down) is handled gracefully.
What hiring managers love
- Three protocols stacked correctly (LangGraph + MCP + A2A) is rare.
- A virtual filesystem is the #1 indicator the engineer "gets" deep agents.
- Honest cost/quality table.
This project alone clears interviews at every "agent platform" company hiring in 2026.