Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
MCP server for DataHub data catalogs. Discover datasets, explore lineage, and access metadata.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
链接指向作者自己的文件;我们不托管也不重新打包它。打开文件后,Claude Desktop 会进行安装。
在终端中运行这条命令
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 txn2 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(1.15.1)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 MCPB。
同一分类中有:Spec Driven Development, Remote Desktop Commander, MCP Server Autocad Lisp Helper
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
High-precision static analysis and debug server for AutoCAD AutoLISP (.lsp) files.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
An MCP server and composable Go library that connects AI assistants to DataHub metadata catalogs. Search datasets, explore schemas, trace lineage, and access glossary terms and domains.
[mcp-datahub.txn2.com](https://mcp-datahub.txn2.com) | [Installation](https://mcp-datahub.txn2.com/server/installation/) | [Library Docs](https://mcp-datahub.txn2.com/library/)
mcp-datahub is part of a broader suite of open-source MCP servers designed to work together as a composable data platform. Each component can run standalone or be combined to give AI assistants unified access to storage, query engines, and metadata catalogs.
Install and connect to Claude Desktop, Cursor, or any MCP client:
Claude Desktop (Easiest) - Download the .mcpb bundle from releases and double-click to install:
mcp-datahub_X.X.X_darwin_arm64.mcpbmcp-datahub_X.X.X_darwin_amd64.mcpbmcp-datahub_X.X.X_windows_amd64.mcpbOther Installation Methods:
# Homebrew (macOS)
brew install txn2/tap/mcp-datahub
go install github.com/txn2/mcp-datahub/cmd/mcp-datahub@latest
Manual Claude Desktop Configuration (if not using MCPB):
{
"mcpServers": { "datahub": { "command": "/opt/homebrew/bin/mcp-datahub", "env": { "DATAHUB_URL": "https://datahub.example.com", "DATAHUB_TOKEN": "your_token" } } } }
Connect to multiple DataHub instances simultaneously:
# Primary server
export DATAHUB_URL=https://prod.datahub.example.com/api/graphql export DATAHUB_TOKEN=prod-token export DATAHUB_CONNECTION_NAME=prod
export DATAHUB_ADDITIONAL_SERVERS='{"staging":{"url":"https://staging.datahub.example.com/api/graphql","token":"staging-token"}}'
Use datahub_list_connections to discover available connections, then pass the connection parameter to any tool.
Import into your own MCP server for custom authentication, tenant isolation, and audit logging:
import (
"github.com/txn2/mcp-datahub/pkg/client" "github.com/txn2/mcp-datahub/pkg/tools" )
// Create client and register tools with your MCP server datahubClient, _ := client.NewFromEnv() defer datahubClient.Close()
toolkit := tools.NewToolkit(datahubClient, tools.Config{}) toolkit.RegisterAll(yourMCPServer)
Override tool descriptions to match your deployment:
toolkit := tools.NewToolkit(datahubClient, tools.Config{},
tools.WithDescriptions(map[tools.ToolName]string{ tools.ToolSearch: "Search our internal data catalog for datasets and dashboards", }), )
Override MCP tool annotations (behavior hints for AI clients):
toolkit := tools.NewToolkit(datahubClient, tools.Config{},
tools.WithAnnotations(map[tools.ToolName]*mcp.ToolAnnotations{ tools.ToolSearch: {ReadOnlyHint: true, OpenWorldHint: boolPtr(true)}, }), )
All 12 tools ship with default annotations: read tools are marked ReadOnlyHint: true; datahub_create is non-destructive and non-idempotent; datahub_update is non-destructive and idempotent; datahub_delete is destructive and idempotent.
Enable optional middleware via the extensions package:
import "github.com/txn2/mcp-datahub/pkg/extensions"
// Load from environment variables (MCP_DATAHUB_EXT_*) cfg := extensions.FromEnv() opts := extensions.BuildToolkitOptions(cfg) toolkit := tools.NewToolkit(datahubClient, toolsCfg, opts...)
// Or load from a YAML/JSON config file serverCfg, _ := extensions.LoadConfig("config.yaml")
See the library documentation for middleware, selective tool registration, and enterprise patterns.
Build a unified data platform MCP server by combining DataHub metadata with Trino query execution:
import (
datahubClient "github.com/txn2/mcp-datahub/pkg/client" datahubTools "github.com/txn2/mcp-datahub/pkg/tools" trinoClient "github.com/txn2/mcp-trino/pkg/client" trinoTools "github.com/txn2/mcp-trino/pkg/tools" )
// Add DataHub tools (search, lineage, schema, glossary) dh, _ := datahubClient.NewFromEnv() datahubTools.NewToolkit(dh, datahubTools.Config{}).RegisterAll(server)
// Add Trino tools (query execution, catalog browsing) tr, _ := trinoClient.NewFromEnv() trinoTools.NewToolkit(tr, trinoTools.Config{}).RegisterAll(server)
// AI assistants can now: // - Search DataHub for tables -> Get schema -> Query via Trino // - Explore lineage -> Understand data flow -> Run validation queries
See txn2/mcp-trino for the companion library.
The library supports bidirectional context injection. While mcp-trino can pull semantic context from DataHub, mcp-datahub can receive query execution context back from a query engine:
import (
datahubTools "github.com/txn2/mcp-datahub/pkg/tools" "github.com/txn2/mcp-datahub/pkg/integration" )
// QueryProvider enables query engines to inject context into DataHub tools type myQueryProvider struct { trinoClient *trino.Client }
func (p *myQueryProvider) Name() string { return "trino" }
func (p *myQueryProvider) ResolveTable(ctx context.Context, urn string) (*integration.TableIdentifier, error) { // Map DataHub URN to Trino table (catalog.schema.table) return &integration.TableIdentifier{ Catalog: "hive", Schema: "production", Table: "users", }, nil }
func (p *myQueryProvider) GetTableAvailability(ctx context.Context, urn string) (*integration.TableAvailability, error) { // Check if table is queryable return &integration.TableAvailability{Available: true}, nil }
func (p *myQueryProvider) GetQueryExamples(ctx context.Context, urn string) ([]integration.QueryExample, error) { // Return sample queries for this entity return []integration.QueryExample{ {Name: "sample", SQL: "SELECT * FROM hive.production.users LIMIT 10"}, }, nil }
// Wire it up toolkit := datahubTools.NewToolkit(datahubClient, config, datahubTools.WithQueryProvider(&myQueryProvider{trinoClient: trino}), )
When a QueryProvider is configured, tool responses are enriched:
query_context with table availabilityquery_table, query_examples, query_availabilityquery_table for immediate SQL usageexecution_context mapping URNs to tablesEnterprise features like access control and audit logging are enabled through middleware adapters:
import (
datahubTools "github.com/txn2/mcp-datahub/pkg/tools" "github.com/txn2/mcp-datahub/pkg/integration" )
// Access control - filter entities by user permissions type myAccessFilter struct{} func (f *myAccessFilter) CanAccess(ctx context.Context, urn string) (bool, error) { /* ... */ } func (f *myAccessFilter) FilterURNs(ctx context.Context, urns []string) ([]string, error) { /* ... */ }
// Audit logging - track all tool invocations type myAuditLogger struct{} func (l *myAuditLogger) LogToolCall(ctx context.Context, tool string, params map[string]any, userID string) error { /* ... */ }
// Wire up with multiple integration options toolkit := datahubTools.NewToolkit(datahubClient, config, datahubTools.WithAccessFilter(&myAccessFilter{}), datahubTools.WithAuditLogger(&myAuditLogger{}, func(ctx context.Context) string { return ctx.Value("user_id").(string) }), datahubTools.WithURNResolver(&myURNResolver{}), // Map external IDs to URNs datahubTools.WithMetadataEnricher(&myEnricher{}), // Add custom metadata )
See the library documentation for complete integration patterns.
| Tool | Description |
|---|---|
datahub_search | Search for datasets, dashboards, pipelines by query and entity type |
datahub_get_entity | Get entity metadata by URN (description, owners, tags, domain) |
datahub_get_schema | Get dataset schema with field types and descriptions |
datahub_get_lineage | Get upstream/downstream lineage (supports level=column for column-level) |
datahub_get_queries | Get SQL queries associated with a dataset |
datahub_browse | Browse catalog: list tags, domains, or data products |
datahub_get_glossary_term | Get glossary term definition and properties |
datahub_get_data_product | Get data product details (owners, domain, properties) |
datahub_list_connections | List configured DataHub server connections (multi-server mode) |
DATAHUB_WRITE_ENABLED=true)3 CRUD tools using the what discriminator pattern — 37 operations total:
| Tool | Operations | Description |
|---|---|---|
datahub_create | 10 | Create tags, domains, glossary terms, data products, documents, applications, queries, incidents, structured properties, data contracts |
datahub_update | 19 | Update descriptions (including tag/glossaryTerm descriptions), tags, glossary terms, links, owners, domains, structured properties, custom properties, incidents, queries, documents, data contracts |
datahub_delete | 8 | Delete queries, tags, domains, glossary entities, data products, applications, documents, structured properties |
Write tools are disabled by default for safety.
Minimum: DataHub 1.3.x. Full feature set: DataHub 1.4.x.
| DataHub Version | Features |
|---|---|
| 1.3.x+ (minimum) | All read tools, all write operations except documents (tags, domains, glossary, data products, queries, owners, links, descriptions, incidents, applications, structured properties incl. delete, data contracts) |
| 1.4.x+ (full) | + Documents (create/update/delete) |
The client gracefully handles version differences — read queries return empty results (not errors) when a feature is unavailable on older versions.
See the tools reference for detailed documentation.
| Variable | Description | Default |
|---|---|---|
DATAHUB_URL | DataHub GraphQL API URL | (required) |
DATAHUB_TOKEN | API token | (required) |
DATAHUB_TIMEOUT | Request timeout (seconds) | 30 |
DATAHUB_DEFAULT_LIMIT | Default search limit | 10 |
DATAHUB_MAX_LIMIT | Maximum limit | 100 |
| DATAHUB_CONNECTION_NAME | Display name for primary connection | `dat
只显示了开头部分;其余内容请在仓库中阅读