
](https://github.com/txn2/mcp-data-platform/blob/main/LICENSE)     
你的AI助手可以运行SQL。但它不知道 cust_id 包含PII,该表上个月已被弃用,或者在出现问题时该问谁。
mcp数据平台解决了这个问题。它将AI助手连接到您的数据基础设施,并从语义层添加业务上下文。查询一个表,并在同一响应中获取其含义、所有者、质量分数和弃用警告。
唯一的要求是 数据中心 作为你的语义层。添加 特里诺 对于SQL查询和 第3页 当您准备就绪时,用于对象存储。 了解此堆栈的原因→
MCP数据平台生态系统
mcp数据平台是一套更广泛的开源mcp服务器的编排层,旨在作为一个可组合的数据平台协同工作。每个组件都可以独立运行,也可以通过mcp数据平台组合运行,以便通过交叉丰富、身份验证和角色进行统一访问。
- txn2/mcp-数据中心 --DataHub元数据目录:搜索、沿袭、术语表术语、域、标签和所有权
- txn2/mcp-3 --S3对象存储:列出bucket、浏览前缀、读取对象、生成预签名URL
- txn2/mcp trino --Trino分布式SQL:查询Trino连接的任何数据源,具有可配置的超时和行限制
该平台还包括 网关工具包 通过平台的身份验证、角色和审计管道重新公开任何行为良好的第三方MCP服务器。操作员通过管理门户添加连接(数据库支持的加密凭据);工具表面 __可选的声明性交叉富集规则将代理响应与Trino查询或DataHub查找连接起来,因此供应商MCP可以在一次调用中返回自己的数据和仓库上下文。
对于不是MCP服务器的REST/HTTP API API网关工具包 (kind: api)通过同一管道代理Salesforce、Google API、GitHub和Stripe等上游。三个工具(api_invoke_endpoint, api_list_endpoints, api_get_endpoint_schema)覆盖每个上游的每个操作。身份验证模式包括承载、API密钥、OAuth 2.1客户端凭据和带有浏览器登录的OAuth 2.1authorization_code。 static_headers 在auth标头旁边添加操作员提供的每次调用标头,因此需要OAuth承载和项目/订阅标头的API(谷歌的 x-goog-user-project 对于配额计费、供应商订阅密钥),无需更改代码即可工作。
OpenAPI规范存储在版本 API目录:全球拥有的组件规格包,任何数量的连接都可以参考。一个Google Workspace目录(drive.yaml、calendar.yaml、gmail.yaml)支持部署中的每个Google Workspace连接;运行Salesforce沙箱的组织和Salesforce生产组织将这两个连接指向一个Salesforce目录。通过粘贴、文件上传或HTTPS URL(具有严格的SSRF保护)摄取规范;突变会扇出到活动连接中,而无需重新启动进程。
______________________________________________________________________
为什么选择mcp数据平台?
问题:人工智能助手在查询数据方面很强大,但它们是盲目工作的。当Claude问“订单表中有什么?”时,它会得到列名和类型。它不知道:
- 这
customer_id列包含需要特殊处理的PII - 该表已弃用,取而代之的是
orders_v2 - 上周数据质量得分下降
- 当事情看起来不对劲时,应该联系谁
解决方案:mcp数据平台在协议级别注入语义上下文。你的人工智能助手会自动获得商业意义——甚至在它问之前。
无vs有
# Without mcp-data-platform
─────────────────────────────────────────────────────────────────────
User: "Describe the orders table"
AI: Queries Trino → gets columns and types
User: "Who owns this data?"
AI: Queries DataHub → finds owners
User: "Is this table still active?"
AI: Queries DataHub again → finds deprecation status
User: "What does customer_id actually mean?"
AI: Queries DataHub again → finds column descriptions
─────────────────────────────────────────────────────────────────────
4 round trips. Context scattered across conversations. Easy to miss warnings.# With mcp-data-platform
─────────────────────────────────────────────────────────────────────
User: "Describe the orders table"
AI: Gets everything in one response:
→ Schema: columns and types
→ ⚠️ DEPRECATED: Use orders_v2 instead
→ Owners: Data Platform Team
→ Tags: pii, financial
→ Quality Score: 87%
→ Column meanings and business definitions
─────────────────────────────────────────────────────────────────────
1 call. Complete context. Warnings front and center.______________________________________________________________________
运作原理
sequenceDiagram
participant AI as AI Assistant
participant P as mcp-data-platform
participant T as Trino
participant D as DataHub
AI->>P: trino_describe_table "orders"
P->>T: DESCRIBE orders
T-->>P: columns, types
P->>D: Get semantic context
D-->>P: description, owners, tags, quality, deprecation
P-->>AI: Schema + Full Business Context该平台拦截工具响应,并用语义元数据丰富它们。这 交叉富集 模式意味着:
- 三 → DataHub:查询结果包括所有者、标签、术语表术语、弃用警告、质量分数
- 数据中心 → Trino:搜索结果包括查询可用性(可以查询此数据集吗?SQL是什么?)
- S3 → 数据中心:对象列表包括匹配的数据集元数据
- 数据中心 → S3:数据集搜索显示存储可用性
______________________________________________________________________
特性
语义优先数据访问
每个数据查询都包括来自DataHub的业务上下文。表描述、列含义、数据质量分数和所有权信息流自动生成。你的人工智能助手理解数据的含义,而不仅仅是它所包含的内容。
双向交叉富集
上下文在服务之间自动流动。Trino的结果丰富了DataHub元数据。DataHub搜索显示哪些数据集可以在Trino中查询。不需要手动查找或单独的API调用。
工作流门控
LLM代理倾向于跳过DataHub发现,直接跳到SQL。会话感知工作流门控检测到这一点,并在没有发现时用警告注释查询结果。多次违规后,警告升级。内置描述覆盖 trino_query 和 trino_execute 还指导客服拨打电话 datahub_search 第一。请参阅 中间件参考 了解详情。
企业安全
用a建造 故障关闭 安全模型。缺少凭据会拒绝访问,切勿绕过。HTTP传输的TLS强制、提示注入保护和敏感环境的只读模式强制。看 MCP防御:人工智能安全案例研究 了解安全架构的基本原理。
OAuth 2.1身份验证
对OIDC提供程序(Keycapt、Auth0、Okta)的本机支持、服务帐户的API密钥、公共客户端的PKCE和动态客户端注册。Claude Desktop可以通过您现有的身份提供者进行身份验证。出站网关连接发送 oauth_scope 到IdP逐字记录--运算符添加 offline_access (钥匙斗篷/Auth0/Okta)或 refresh_token (Salesforce)自己获得刷新令牌,使其在IdP的交互式SSO会话超时后平台重新启动。
实时工具清单更新
当网关上游重新进行身份验证或添加/删除连接时,下游代理(Claude.ai、Claude Desktop)会收到 notifications/tools/list_changed 事件发生在长期SSE通道上——不需要断开连接/重新连接。通过postgres在无状态流式HTTP模式(多副本部署形状)下工作 LISTEN/NOTIFY 广播员;对于单副本部署,又回到了内存扇出模式。
基于角色的人物
定义谁可以使用哪些工具。分析师可以读取查询和搜索。管理员得到一切。工具过滤使用从身份提供者角色映射的通配符模式(允许/拒绝规则)。
全面的审计日志记录
每次工具调用都会记录用户身份、角色、请求详细信息和时间。PostgreSQL支持查询和合规性。知道谁问了什么,什么时候问,为什么问。
持久内存
代理在会话中积累知识:偏好、更正、领域背景和制度事实。PostgreSQL支持pgvector进行语义搜索。这 memory_manage 该工具提供CRUD操作, memory_recall 提供多策略检索(实体查找、向量相似性、DataHub沿袭遍历)。内存通过交叉富集中间件自动注入工具包响应中。当引用的DataHub实体发生变化时,陈旧性监视器会标记内存。按用户和角色进行范围划分,并记录完整的审计日志。请参阅 内存层文档 了解详情。
知识获取
人工智能会话生成有价值的领域知识:列含义、数据质量问题、业务规则。这 capture_insight 该工具在会话期间记录这些观察结果(现在由具有向量嵌入的内存层支持),以及 apply_knowledge 为管理员提供结构化的审核工作流。经批准的见解将通过完整的变更集跟踪和回滚写回DataHub。一 管理员REST API 支持与现有治理工具的集成。请参阅 知识捕获文档 了解详情。
资源模板
使用RFC 6570 URI模板将平台数据作为参数化MCP资源浏览。三个内置模板公开表模式(schema://catalog.schema/table),术语表(glossary://term),以及数据可用性(availability://catalog.schema/table)无需调用工具。
管理资源
人类上传的参考资料(样本、剧本、模板、参考文献)通过MCP直接呈现给人工智能助手 resources/list 和 resources/read资源的范围分为三个可见性级别:全局(对所有经过身份验证的用户可见)、角色(对特定角色中的用户可见的)和用户(仅对所有者可见的)。元数据存储在PostgreSQL中;文件blob存储在S3中。上的REST API /api/v1/resources 提供CRUD操作,管理门户包括一个专用的资源页面,用于上传、浏览和管理资源。数据库可用时自动启用。
进度通知
长时间运行的Trino查询向MCP客户端发送细粒度的进度更新(执行、格式化、完成)。客户提供 _meta.progressToken 接收实时状态。禁用时开销为零。
客户端日志记录
服务器到客户端的日志消息使AI代理能够了解平台决策(应用的丰富、时间)。使用MCP logging/setLevel 协议——如果客户端没有选择加入,则开销为零。
可扩展中间件架构
添加自定义身份验证、速率限制或日志记录。交换提供者以集成不同的语义层或查询引擎。Go库公开了一切——构建组织所需的平台。
______________________________________________________________________
管理门户
一个内置的web仪表板,用于监控、审计和管理平台。启用 portal.enabled: true.
仪表板 --实时活动时间线、顶级工具/用户、性能百分位数、错误监控、知识洞察摘要和连接健康状况。
工具 --完整工具库存的主细节表面。按连接或种类搜索和分组;深入任何工具,查看其路由、人物角色允许/拒绝矩阵、24小时审计聚合和交叉丰富规则。编辑每个工具的描述覆盖,与自动生成的表单内联运行工具,并切换全局可见性(tools.deny)不离开页面。
请参阅 管理门户文档 查看完整的视觉指南。
______________________________________________________________________
用例
企业数据治理
- 合规就绪审计跟踪:每个查询都记录了用户身份和业务理由
- PII保护:基于标签的警告确保AI助手确认敏感数据处理要求
- 访问控制:Persona系统强制谁可以查询从您的IdP映射的内容
- 废止强制执行:在AI助手使用过时数据之前,弃用的表会显示警告
数据民主化
- 自助服务分析:商业用户通过人工智能探索数据,否则他们需要向工程师询问
- 跨团队发现:搜索通过统一的元数据在所有系统中查找数据集
- 车载加速:新团队成员立即了解数据资产——包括含义、所有者、质量和沿袭
- 词汇驱动的探索:业务术语会自动连接到实际的表和列
AI/ML工作流程
- 自主数据探索:AI代理在没有人类指导的情况下发现和理解数据集
- 功能发现:使用质量分数和谱系查找和评估潜在的机器学习特征
- 管道理解:跟踪数据沿袭以了解特征来源
- 质量门:数据质量分数帮助AI代理避免有问题的数据集
______________________________________________________________________
建筑
graph LR
subgraph "MCP Data Platform"
DataHub[DataHub
Semantic Metadata]
Platform[Platform
Bridge]
Trino[Trino
Query Engine]
S3[S3
Object Storage]
DataHub |"enrichment"| Platform
Platform |"enrichment"| Trino
Platform |"enrichment"| S3
end
Client([MCP Client]) --> Platform
Platform --> Client______________________________________________________________________
安全
mcp数据平台实现了 故障关闭 为企业部署设计的安全模型。看 MCP防御:人工智能安全案例研究 了解安全架构的基本原理。
| 特性 | 描述 |
|---|---|
| 关闭身份验证失败 | 缺少或无效的凭据拒绝访问(从不绕过) |
| 所需JWT索赔 | 令牌必须包括 sub 和 exp 索赔 |
| HTTP传输的TLS | 可配置的TLS,带有明文连接警告 |
| 快速注射保护 | 元数据净化可防止注入攻击 |
| 只读模式 | Trino和S3工具包支持强制只读访问 |
| 默认拒绝角色 | 没有明确角色分配的用户没有工具访问权限 |
| 加密请求ID | 请求跟踪使用安全的随机标识符 |
运输安全
| 传输 | 身份验证 | TLS |
|---|---|---|
| 标准 | 不需要(本地执行) | N/A |
| 超文本传输协议 | 必需(承载令牌或API密钥) | 强烈建议 |
______________________________________________________________________
安装
去安装
go install github.com/txn2/mcp-data-platform/cmd/mcp-data-platform@latest来源
git clone https://github.com/txn2/mcp-data-platform.git
cd mcp-data-platform
go build -o mcp-data-platform ./cmd/mcp-data-platform______________________________________________________________________
快速开始
独立服务器
# Run with stdio transport (default)
./mcp-data-platform
# Run with configuration file
./mcp-data-platform --config configs/platform.yaml
# Run with HTTP transport (serves both SSE and Streamable HTTP)
./mcp-data-platform --transport http --address :8080Claude 代码命令行工具
claude mcp add mcp-data-platform -- mcp-data-platform克劳德桌面(本地)
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"mcp-data-platform": {
"command": "mcp-data-platform",
"args": ["--config", "/path/to/platform.yaml"]
}
}
}Claude桌面(使用OAuth远程)
要使用Keycloak身份验证将Claude Desktop连接到远程MCP服务器:
- 配置MCP服务器 使用OAuth和上游IdP:
server:
transport: http
address: ":8080"
oauth:
enabled: true
issuer: "https://mcp.example.com"
clients:
- id: "claude-desktop"
secret: "${CLAUDE_CLIENT_SECRET}"
redirect_uris:
- "http://localhost"
- "http://127.0.0.1"
upstream:
issuer: "https://keycloak.example.com/realms/your-realm"
client_id: "mcp-data-platform"
client_secret: "${KEYCLOAK_CLIENT_SECRET}"
redirect_uri: "https://mcp.example.com/oauth/callback"- 在克劳德桌面,使用OAuth凭据添加服务器:
- 统一资源定位符: https://mcp.example.com - 客户端ID: claude-desktop - 客户端密钥:(您配置的密钥)
当您连接时,Claude Desktop将打开您的浏览器进行Keycloak登录,然后自动完成OAuth流程。
看 OAuth 2.1服务器文档 有关完整的设置说明。
______________________________________________________________________
配置
创建一个 platform.yaml 配置文件:
server:
name: mcp-data-platform
transport: stdio
auth:
oidc:
enabled: true
issuer: "https://auth.example.com/realms/platform"
client_id: "mcp-data-platform"
api_keys:
enabled: true
keys:
- key: "${API_KEY_ADMIN}"
name: "admin"
roles: ["admin"]
personas:
definitions:
analyst:
display_name: "Data Analyst"
roles: ["analyst"]
tools:
allow: ["trino_*", "datahub_*"]
deny: ["*_delete_*"]
admin:
display_name: "Administrator"
roles: ["admin"]
tools:
allow: ["*"]
default_persona: analyst
semantic:
provider: datahub
cache:
enabled: true
ttl: 5m
injection:
trino_semantic_enrichment: true
datahub_query_enrichment: true
column_context_filtering: true # Only enrich columns referenced in SQL (default: true)
audit:
enabled: true
log_tool_calls: true
retention_days: 90
database:
dsn: "${DATABASE_URL}"管理资源
resources:
managed:
enabled: true # auto-enabled when database is available
uri_scheme: "mcp" # URI prefix (default: "mcp")
s3_connection: "primary" # name of S3 toolkit instance for blob storage
s3_bucket: "resources" # S3 bucket for uploaded files环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
DATABASE_URL | 审计日志的PostgreSQL连接字符串 | - |
API_KEY_ADMIN | 管理员API密钥(如果使用API密钥身份验证) | - |
______________________________________________________________________
核心包
| 包装 | 描述 |
|---|---|
pkg/platform | 主平台立面及配置 |
pkg/auth | OIDC和API密钥认证 |
pkg/oauth | 具有DCR和PKCE的OAuth 2.1服务器 |
pkg/persona | 基于角色的人物角色和工具过滤 |
pkg/semantic | 语义元数据提供者抽象 |
pkg/query | 查询执行提供程序抽象 |
pkg/middleware | 请求/响应中间件链 |
pkg/mcpcontext | MCP会话/进度上下文助手 |
pkg/registry | 工具包注册和管理 |
pkg/audit | 使用PostgreSQL存储进行审核日志记录 |
pkg/tuning | 提示、提示和操作规则 |
pkg/storage | S3兼容存储提供程序抽象 |
pkg/portal | AI生成工件的资产门户类型、存储和S3客户端 |
pkg/resource | 托管资源:作用域文件上传、REST API、MCP集成 |
pkg/toolkits | 工具包实现(Trino、DataHub、S3、知识、内存、门户、网关) |
pkg/admin | 管理REST API,用于工具、人物角色、配置、审核、知识、内存、连接、网关、OAuth和资源 |
pkg/client | 平台客户端实用程序 |
______________________________________________________________________
图书馆使用情况
该平台可以导入并用作库:
import (
"github.com/txn2/mcp-data-platform/pkg/platform"
)
// Load configuration
cfg, err := platform.LoadConfig("platform.yaml")
if err != nil {
log.Fatal(err)
}
// Create platform
p, err := platform.New(platform.WithConfig(cfg))
if err != nil {
log.Fatal(err)
}
defer p.Close()
// Start the platform
if err := p.Start(ctx); err != nil {
log.Fatal(err)
}
// Access the MCP server
mcpServer := p.MCPServer()______________________________________________________________________
发展
# Run tests with race detection
go test -race ./...
# Run linter
golangci-lint run ./...
# Run security scan
gosec ./...
# Run SAST (Semgrep + CodeQL)
make sast
# Build
go build -o mcp-data-platform ./cmd/mcp-data-platform______________________________________________________________________
文档
完整文档可在 mcp数据平台.tzn2.com.
______________________________________________________________________
贡献
我们欢迎为bug修复、测试和文档做出贡献。请确保:
- 所有测试均通过(
go test -race ./...) - 代码已格式化(
gofmt) - 林特尔传球(
golangci-lint run ./...) - 安全扫描通过(
gosec ./...) - SAST通过(
make sast--Semgrep+CodeQL)
______________________________________________________________________
许可证
______________________________________________________________________
开源by 克雷格·约翰斯顿,由赞助 Deasil Works,股份有限公司。
