A scoped, revocable access card system for DataHub that enforces budget limits, domain/platform/entity-type restrictions, and write-back scope. Implements an MCP server with per-card capability surfaces, ledger-based accounting, and OpenTelemetry instrumentation.
DataCards has 7 tools with clear naming (verb_noun pattern: search, get_*, list_*, save_*) and reasonable descriptions (50-200 chars). However, critical gaps exist: 3 of 7 tools (get_entities, get_lineage, list_schema_fields) lack visible input schemas in the provided source code, and parameter descriptions are missing for most tools. The search tool has good parameter documentation (query, count with constraints), but get_dataset_queries and save_document lack any visible schema details. Error handling is structured (RefusalError, EngineError with typed refusals) but output schemas are not documented. The card tool is well-described as a discovery/state tool, but downstream tools assume URN-based chaining without documenting the URN format or field mappings.
Your access card's live state: remaining budget this period, lifetime remaining, expiry, terms, recent access log, sub-cards. Call this first to learn what you can do.
Fetch real SQL queries referencing a dataset
Fetch detailed metadata by URN from DataHub catalog
Trace upstream/downstream lineage (depth capped by the card)
List a dataset's columns
On cards with write-back, persist findings back to DataHub's knowledge base so the next agent inherits them
5 of 7 tools lack visible input schemas in source code (get_entities, get_lineage, list_schema_fields, get_dataset_queries, save_document). Cannot verify parameter types, constraints, or required fields.
No documented output schemas for any tool. LLMs cannot infer what fields to expect (e.g., does get_entities return 'urn', 'metadata', 'tags'?). Breaks tool chaining and forces agents to guess field names.
Tool descriptions lack dependency hints and prerequisites. E.g., search says 'results filtered to card scope' but doesn't explain that card must be called first to understand scope. get_entities requires URN but doesn't explain URN format or how to obtain one.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Search DataHub for datasets, dashboards, charts, containers, glossary terms, and documents. Results are automatically filtered to this card's scope (domains, platforms, entity types, glossary terms). Use get_entities on the top result URNs to compare.
save_document description does not clarify what 'findings' means, what format is expected, or what 'write-back scope' entails. Agents cannot determine when this tool is safe to call or what data structure to pass.
Error handling returns structured RefusalError JSON (code, message) but descriptions do not document possible refusal codes (e.g., 'over_period_limit', 'frozen_card', 'unauthorized_entity_type'). Agents cannot anticipate or handle specific failures.