DataHub Steward Squad — agents that turn DataHub context into governed action
🧭 Inspiration
Data teams don't fail because they lack a catalog — they fail because nobody turns what the catalog knows into action. DataHub already stores what matters: who owns each dataset, what it feeds, which quality checks pass or fail, and where sensitive PII lives. But that context just sits there. I wanted an agent that reads it and does something a steward would actually approve.
🤖 What it does
DataHub Steward Squad is a multi-agent team that runs a full read → analyze → write back → verify loop over the Model Context Protocol (MCP) against real DataHub.
Five deterministic specialists do the detection, and a Chief Steward powered by Claude reasons over their grounded findings:
- Catalog Scout — selects relevant assets & coverage gaps
- Lineage Investigator — traces upstream/downstream blast radius
- Quality Sentinel — catches failing assertions & untagged PII
- Stewardship Writer — drafts approval-gated MCP writeback proposals
- Release Captain — packages SQL guardrails, a dashboard, and demo evidence
- Chief Steward (Claude) — reasons the findings into a prioritized action plan
Crucially, it doesn't just plan — it writes fixes back through the official mcp-server-datahub mutation tools and re-reads to prove they landed.
📊 Real results (from an actual run)
On the bundled Finance fixture (--query revenue):
- 4 assets inspected → 5 findings (1 critical, 4 high)
- Critical:
finance.fct_revenuefailing a negative-revenue assertion — 18 rows observed vs 0 expected ("refund adjustments arriving without offsetting credit memos") — feeding certified downstream (Executive Revenue KPI,churn_risk_model) customer_emailflagged as untagged PII- 2 approval-gated writebacks applied and verified:
customer_email.tags [] → ['PII']
Pointed at a real local DataHub over MCP, the same loop scales to 6 assets, 13 findings, 6 verified writebacks.
🛠️ How I built it
- Core in pure Python (standard library only) — the offline path has zero dependencies, so judges can run it in seconds.
- Real MCP loop: an MCP client launches the official
mcp-server-datahubviauvx, reconstructs the graph from realsearch/get_entities/get_lineagecalls, and applies approved fixes through realupdate_description/add_tags/save_documenttools. I inspected the real server's interface and wrote an adapter for its GraphQL-shaped responses — I do not reimplement DataHub. - Two reasoning engines: a Claude engine (real agentic reasoning, called over the stdlib — no SDK) with a deterministic fallback, so it always runs, key or no key.
- Zero-credential offline mode: a bundled DataHub-shaped mock MCP server speaks the same tool names as the official one, so the demo never breaks.
- Approval-gated by design: every mutation is a proposal until a human approves it.
- Generates a
dashboard.html, risk report, executive brief, SQL guardrails, and a machine-readable writeback plan.
🧩 Challenges I faced
- Driving the real MCP server, not a mock of my own imagination — I recorded real server responses (
tests/fixtures/live/) and wrote an adapter for its GraphQL shapes. - Keeping the LLM honest — Claude only reasons over findings the deterministic agents actually detected, so it can't invent risks.
- Live/offline parity — the mock and the real server share tool names so behavior matches.
- Verifiable mutations — re-reading through MCP to prove a change actually landed.
📚 What I learned
- MCP is a genuinely good read and write governance layer, not just a retrieval protocol.
- Grounding an LLM to a fixed set of detected facts makes agentic output trustworthy.
- You can test a live integration offline by checking parsers against recorded real-server responses — 29 tests, green, including the live adapter.
🚀 What's next
- More mutation tools (owners, glossary terms, domains) and more specialist agents.
- Contribute the stewardship pattern back as a DataHub Skill.
- Scale the same governed loop to any DataHub tenant.
▶️ Try it (zero credentials)
python -m datahub_steward_squad run --query revenue --focus-domain Finance
# offline MCP writeback loop:
python -m datahub_steward_squad mcp-demo --apply
# point it at real DataHub:
python -m datahub_steward_squad mcp-demo --live --apply
Sample outputs are in examples/outputs/latest/. Run the suite with python -m unittest discover -s tests (29 tests, green).
📝 Disclosure
New work for the Build with DataHub hackathon. Uses affaan-m/ECC as a design reference for multi-agent team structure only — no ECC source is copied. Licensed Apache-2.0.
Log in or sign up for Devpost to join the conversation.