EvidenceBound DataHub Gate
This MCP server provides fail-closed governance for DataHub data agents by implementing a Read Context → Restricted AST Gate → Tamper-Evident Proof Pack → Native DataHub Write-Back loop. It verifies dataset identity, schema, and lineage evidence against candidate contracts, binds claims to evidence, and appends VERIFIED or BLOCKED receipts back to DataHub through the official native update_description MCP mutation.
README
EvidenceBound DataHub Gate
Fail-Closed Read → Verify → Write-Back Governance for Data Agents.
This repository is the newly authored DataHub hackathon vertical slice of the broader EvidenceBound design. It is intentionally independent of SignalReview production, private enterprise workers, customer code, billing, authentication, and proprietary sports logic.
Reproduce the complete DataHub MCP loop
Prerequisites: Linux/WSL, Docker, Python 3.11+, network access for the first install, and sufficient Docker memory.
git clone https://github.com/moneyparking/evidencebound-datahub-gate.git
cd evidencebound-datahub-gate
python3 -m venv .venv
source .venv/bin/activate
./scripts/run-local-datahub-smoke.sh
The first run downloads and starts DataHub containers, so completion time depends on network speed and available system resources. No fixed clean-install duration is claimed.
The problem
Agents can read metadata and still take unsafe actions when generated code is bound to a stale schema, incomplete lineage, or unsupported claims. A successful tool call is not proof that the intended action is safe.
What it does
Read Context → Restricted AST Gate → Tamper-Evident Proof Pack → Native DataHub Write-Back
DataHub MCP
├─ dataset identity
├─ schema fields
└─ bounded one-hop lineage edge
↓
EvidenceBound deterministic gate
├─ dataset identity binding
├─ schema + lineage digests
├─ Restricted AST Policy
├─ Fail-Closed Bounded Interpreter
├─ claim-to-evidence binding
└─ VERIFIED / BLOCKED receipt
↓
Tamper-Evident Content-Addressed Proof Pack
↓
Native DataHub Description Receipt
↓
Mandatory Human Review
Two paths are mandatory:
- VERIFIED — current schema and the bounded lineage evidence match the candidate contract.
- BLOCKED — a stale schema digest fails closed before runtime interpretation.
Both outcomes are appended to the same DataHub dataset through the official native update_description MCP mutation. The write-back is metadata evidence, not production approval, transaction authorization, or permission to deploy.
Why native description write-back
The hackathon criterion rewards contributing knowledge back to the graph. update_description is an official DataHub MCP mutation, visible in DataHub OSS, and requires no custom schema registration. This project does not claim a custom DataHub badge or aspect.
Quick controlled proof without Docker
python3 -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
./scripts/validate.sh
This generates two controlled Proof Packs under evidence/ and reproduces both.
You can also reproduce the retained packs directly:
evidencebound-datahub verify-pack evidence/controlled-verified
evidencebound-datahub verify-pack evidence/controlled-blocked
Live local DataHub acceptance
The live script:
- installs DataHub and the official DataHub MCP server;
- runs
datahub docker quickstart; - loads the Apache-2.0 showcase ecommerce datapack;
- discovers a dataset through MCP;
- reads the dataset entity, schema, and a bounded one-hop lineage edge through DataHub MCP;
- runs the current-context
VERIFIEDcandidate and stale-schemaBLOCKEDcandidate; - appends both Native DataHub Description Receipts through MCP
update_description; - reproduces each Proof Pack;
- prints
DATAHUB_MCP_READ_WRITE_ACCEPTANCE=PASSonly when every required gate passes.
The accepted live dataset was:
urn:li:dataset:(urn:li:dataPlatform:dbt,b2fd91.ORDER_ENTRY_DB.analytics.order_history,PROD)
The read is deliberately bounded to one hop and at most five results. The adapter checks upstream first and skips the opposite direction after a visible lineage edge is found. Missing lineage still blocks verification.
Stop condition
If the live smoke cannot prove all four states, preserve the logs and fail closed:
- MCP read: PASS
- current-context path: VERIFIED
- stale-schema path: BLOCKED
- MCP description write-back: PASS
A controlled fixture is never presented as live DataHub acceptance.
Proof Pack
Each path contains:
candidate.json
datahub-context.json
gate-receipt.json
mcp-read.json
mcp-write.json
manifest.json
SHA256SUMS
evidence_root_sha256 deterministically binds the candidate, DataHub context, receipt, and MCP read evidence. manifest_body_sha256 additionally binds the MCP write result.
Reproduction rejects modified artifacts, non-canonical JSON, symlinks, missing files, and unexpected files. The retained test mutates gate-receipt.json by one byte and requires ARTIFACT_TAMPERING_DETECTED.
The Proof Pack is tamper-evident and content-addressed. This repository does not claim a digital signature.
How it was built
Built with the official DataHub MCP server via FastMCP, the DataHub SDK, a restricted AST policy, a bounded no-exec interpreter, and a Python standard-library verification core. The public repository is Apache-2.0 licensed.
Validation uses pytest, Ruff, Mypy, and GitHub Actions.
Claim boundary
VERIFIED means only that the exact candidate matched the observed DataHub context, passed the Restricted AST Policy, executed in the Fail-Closed Bounded Interpreter, and bound every material claim to schema or lineage evidence.
It does not mean production approval, production authorization, data truth, regulatory certification, model accuracy, financial safety, customer acceptance, or permission to deploy. promotion_authorized is always false; Mandatory Human Review always remains required.
No LLM integration is claimed in this repository.
Hackathon positioning
- Track: Agents That Do Real Work
- DataHub technologies: DataHub OSS + official DataHub MCP server
- Judge-visible loop: Read Context → Restricted AST Gate → Tamper-Evident Proof Pack → Native DataHub Write-Back
- Public repository and deterministic GitHub Actions gates
- Submission disclosure: the EvidenceBound concept and earlier private/open-core work predate this hackathon; this DataHub adapter, bounded demo runtime, MCP workflow, and shared evidence pack were newly authored during the submission period.
Grant synchronization
grant-sync/claim-map.json is the single claim boundary for Startup EDGE and Microsoft for Startups materials. It distinguishes controlled evidence, live MCP acceptance, and prohibited claims. A hackathon demo alone does not establish TRL level, funding, certification, production readiness, or customer acceptance.
License
Apache License 2.0 applies to this published repository. It does not automatically relicense all transitive dependencies. See LICENSE and dependency licenses.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。