关于 tableau-graphql-mcp
tableau-graphql-mcp 将 Tableau Metadata API 查询提供给 MCP 客户端,用于以自然语言调查数据血缘。工具涵盖多跳影响分析、查询示例和覆盖范围报告,支持 Tableau Server 与 Cloud。
主要功能
- 01执行只读 GraphQL 查询
- 02检查实时 Schema
- 03浏览精选查询模板
- 04解析字段和表的使用情况
- 05追踪多跳影响及负责人
- 06搜索内容并报告覆盖范围
适用场景
- 01查找依赖某列的工作簿
- 02更改字段前追踪仪表板影响
- 03确定表变更前需通知的负责人
- 04按名称搜索 Tableau 内容
MCP 相关
该 MCP 服务通过 stdio 与客户端通信,并通过 HTTPS 将只读查询转发至 Tableau Metadata API。它提供查询、Schema 检查、血缘、影响分析、内容搜索和连接检查等七种工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx tableau-graphql-mcpTABLEAU_SERVERhttps://tableau.company.com (Server) or https://<pod>.online.tableau.com (Cloud)TABLEAU_SITE_CONTENT_URLSite content-url slug; empty = Default site (Server only)TABLEAU_PAT_NAMEPersonal Access Token nameTABLEAU_PAT_SECRET密钥Personal Access Token secret (the whole string)TABLEAU_LOG_LEVELDEBUG, INFO (default), WARNING or ERROR; DEBUG logs each HTTP call (method + URL) to stderr本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
tableau-graphql-mcp
通过 Tableau Metadata API,在任意 MCP 客户端中询问任何 Tableau 血缘问题。
tableau-graphql-mcp 将 Tableau 站点的 Metadata API 转化为一组 MCP 工具,让 AI 助手(Claude、Cursor、Cline 等)能够用通俗语言回答血缘问题:
- “如果我删除
SALES列,哪些工作簿会出问题?” - “Sales Overview 工作簿依赖哪些表?”
- “哪些计算字段引用了
Profit,以及它们出现在哪些仪表板上?” - “更改
DIM_CUSTOMER表之前,我应该通知谁?”
它提供 七种精选工具:通用 GraphQL 透传、实时模式内省、内置的正确查询模板库、可靠的 where_used 解析器、多跳 impact_analysis、子字符串内容搜索,以及连接探测工具。它们结合起来,能让模型回答任何血缘问题,而不仅仅是固定选项中的问题。
与众不同之处
- 任何问题,都能妥善解决。
graphql_query可执行任意只读 GraphQL 查询;introspect_schema、内置速查表和 28 个完整示例可确保模型的查询正确无误。 - 真正的影响分析(多跳)。
impact_analysis会追踪整个依赖链(基于计算字段构建的计算字段,以及基于它构建的列,都会纳入分析),并返回完整的影响范围,以及去重后的待通知负责人,而不只是直接引用项。 - 随处可用。 支持 Tableau Server 和 Cloud。REST API 版本和 GraphQL 端点(
/api/metadata/graphql,并以/relationship-service-war/graphql作为回退)会自动检测。 - 无需 Catalog,也能可靠追踪数据沿袭。
where_used通过核心沿袭关系(referencedByFields -> sheets -> workbook)解析工作簿,因此即使 Data Management 附加组件的downstreamWorkbooks为空,也能正常工作。 - 不会悄悄截断结果。 如果查询达到节点上限,
graphql_query会标记partial_results;search_content会报告scanned/total覆盖情况,确保不会把截断后的答案误认为完整结果。 - 轻巧且安全。 只读、仅使用 stdio(不开放入站端口)、密钥仅从环境变量读取,并且除 MCP SDK 外没有其他依赖(HTTP 使用标准库
urllib)。
快速开始
你需要 uv(curl -LsSf https://astral.sh/uv/install.sh | sh)和 Tableau 个人访问令牌。
Claude Code,一行命令:
claude mcp add tableau-graphql \
-e TABLEAU_SERVER=https://10ax.online.tableau.com \
-e TABLEAU_SITE_CONTENT_URL=YourSite \
-e TABLEAU_PAT_NAME=my-token \
-e TABLEAU_PAT_SECRET=the-full-secret \
-- uvx tableau-graphql-mcp
就这么简单。uvx 会从 PyPI 获取软件包,并在隔离环境中运行;无需克隆或安装(也不需要 git)。然后向 Claude 提出有关数据沿袭的问题。
配置
所有配置均通过环境变量完成(在客户端的 env 块中设置,切勿在命令行中设置)。
| 环境变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
TABLEAU_SERVER | 是 | n/a | https://tableau.company.com(Server)或 https://<pod>.online.tableau.com(Cloud)。 |
TABLEAU_SITE_CONTENT_URL | 否 | "" | 站点别名(即 /#/site/ 后面的部分)。留空 = Default 站点(仅限 Server);Cloud 始终有一个站点。 |
TABLEAU_PAT_NAME | 是¹ | n/a | Personal Access Token 名称。 |
TABLEAU_PAT_SECRET | 是¹ | n/a | PAT 密钥:填写完整字符串,不要按 : 拆分。 |
TABLEAU_TIMEOUT | 否 | 60 | 单次请求超时时间(秒)。 |
TABLEAU_API_VERSION | 否 | 自动 | REST API 版本;否则从 /api/serverinfo 读取。 |
TABLEAU_METADATA_PATH | 否 | 自动 | 覆盖 GraphQL 路径;否则自动检测。 |
TABLEAU_ALLOW_HTTP | 否 | 关闭 | 设置为 1,即可允许在受信任的内部网络中使用纯 http:// 服务。否则仅接受 HTTPS(或环回地址),确保凭据不会以未加密的方式传输。 |
TABLEAU_LOG_LEVEL | 否 | INFO | DEBUG 会将每次 HTTP 调用(方法 + URL;绝不记录标头、正文或密钥)记录到 stderr。 |
TABLEAU_AUTH_TOKEN | 否 | n/a | 高级选项:预先获取的 X-Tableau-Auth 令牌(适用于禁用 PAT 的 SSO 租户)。 |
TABLEAU_COOKIE | 否 | n/a | 高级选项:浏览器会话 Cookie(SSO 备用方式)。 |
¹ 请提供 PAT(TABLEAU_PAT_NAME + TABLEAU_PAT_SECRET)或高级选项 TABLEAU_AUTH_TOKEN / TABLEAU_COOKIE。
Claude Desktop
编辑 claude_desktop_config.json(macOS:~/Library/Application Support/Claude/,Windows:%APPDATA%\Claude\):
{
"mcpServers": {
"tableau-graphql": {
"command": "uvx",
"args": ["tableau-graphql-mcp"],
"env": {
"TABLEAU_SERVER": "https://10ax.online.tableau.com",
"TABLEAU_SITE_CONTENT_URL": "YourSite",
"TABLEAU_PAT_NAME": "my-token",
"TABLEAU_PAT_SECRET": "the-full-secret"
}
}
}
}
完全退出并重新打开 Claude Desktop,然后检查工具菜单。
Cursor · Cline · Windsurf
所有客户端都使用上文所示的相同 mcpServers 架构。将相同的代码块添加到:
- Cursor:
~/.cursor/mcp.json(全局)或.cursor/mcp.json(项目)。 - Cline:打开 MCP Servers 面板,然后选择 Configure,并将内容写入
cline_mcp_settings.json。 - Windsurf:
~/.codeium/windsurf/mcp_config.json。
在 Windows 上,如果 GUI 应用找不到 uvx,请使用其绝对路径(例如 %USERPROFILE%\.local\bin\uvx.exe)。
工具
| 工具 | 功能 | 关键参数 |
|---|---|---|
graphql_query | 执行任意只读 Metadata API GraphQL 查询。用于回答各种数据沿袭问题的通用工具。 | query、variables |
introspect_schema | 实时检查架构:列出入口点,或列出某个类型的确切字段。 | type_name |
lineage_examples | 架构速查表,以及 28 个精选的“问题到 GraphQL”模板(8 个类别)。 | category |
where_used | 查找使用给定列名/字段名/表名的工作簿或数据源(稳健的一跳核心沿袭解析)。 | names |
impact_analysis | 分析某个列/字段/表的完整传递性多跳影响范围:所有依赖字段,以及受影响的工作表、仪表板、工作簿和需要通知的所有者。 | name |
search_content | 查找名称包含指定词条的内容(不区分大小写的子字符串匹配),涵盖工作簿、数据源、表(以及可选的字段/列),并显示覆盖范围数据。 | term、types |
server_info | 已连接的服务、站点、版本、端点、身份验证方式,以及 Catalog 沿袭是否可用。 | 无 |
所有工具均为只读。Metadata API 不支持任何变更操作。
示例提示词
连接后,试试:
- "使用 server_info 确认当前连接的对象。"
- "搜索名称中包含 'revenue' 的所有内容。"
- "哪些工作簿使用了 SALES、PROFIT 和 DISCOUNT 列?按所有者分组。"
- "显示 'Sales Overview' 工作簿的字段到源列映射。"
- "列出该工作簿中的所有计算字段及其公式。"
- "哪些已发布数据源为 Analytics 项目中的工作簿提供数据?哪些未经认证?"
- "对 'Profit Ratio' 字段运行 impact_analysis:列出所有依赖的工作表、仪表板、工作簿,以及需要通知的所有者。"
- "删除 DIM_CUSTOMER 表会造成多大影响:涉及哪些工作簿、工作表,以及需要通知的所有者?"
架构
该服务通过 stdio 使用 MCP 与客户端通信,并通过 HTTPS 连接 Tableau:它使用你的 PAT 登录以获取 X-Tableau-Auth 令牌(过期时自动刷新),自动检测 REST API 版本和 GraphQL 端点,然后将查询转发到 Metadata API。不会存储任何内容;每个答案都是实时获取的。
安全性
- 强制只读。 仅允许 GraphQL 查询:不写入、不执行 shell。
graphql_query会拒绝mutation/subscription操作,而 Metadata API 本身也只能用于查询。 - 声明为只读。 每个工具都带有 MCP
readOnlyHint注解,客户端无需阅读代码即可验证。 - 仅限本地和 stdio。 不会开放任何入站网络端口。
- 密钥仅从环境变量读取。 绝不会作为工具参数传入,不会记录日志,也不会在输出中返回。
- 凭据仅发送到你的 Tableau 主机。 必须使用 HTTPS、验证证书,并拒绝重定向。
- 最小权限。 PAT 继承你的 Tableau 权限;API 只会返回你有权查看的内容。
- 可验证的发布版本。 每个 GitHub 发布版本都附带 Sigstore 签名和 CycloneDX SBOM,PyPI 上传则使用 Trusted Publishing。
- 在生产环境中固定版本:
uvx tableau-graphql-mcp==0.2.0。
有关威胁模型、数据处理、披露政策以及如何验证发布版本,请参阅 SECURITY.md。
故障排除
| 症状 | 解决方法 |
|---|---|
| 未显示服务 | 完全退出并重新启动客户端;检查配置路径和 JSON 格式是否有效。 |
spawn uvx ENOENT | 安装 uv,或使用 uvx 的绝对路径。 |
| 登录失败(401) | 检查 PAT 名称/密钥和 TABLEAU_SITE_CONTENT_URL。在使用 SSO 的租户中,PAT 可能已禁用;请使用 TABLEAU_AUTH_TOKEN/TABLEAU_COOKIE。 |
| "无法连接到 Metadata API" | 在 Tableau Server 上,管理员必须启用该功能:tsm maintenance metadata-services enable。在 Cloud 上则始终启用。 |
downstreamWorkbooks 为空 | 如果没有 Data Management 附加组件,这是预期行为;请使用 where_used 工具,它会通过核心沿袭关系解析。 |
使用 MCP Inspector 直接检查服务:
npx @modelcontextprotocol/inspector uvx tableau-graphql-mcp
开发
git clone https://github.com/tdries/tableau-graphQL-mcp && cd tableau-graphQL-mcp
uv sync --all-extras
uv run tableau-graphql-mcp # run from source
uv run pytest --cov=tableau_graphql_mcp # tests + coverage (offline; no Tableau needed)
uv run ruff check . # lint
uv run ruff format --check . # format
CI 中会运行相同的检查(Linux/macOS/Windows,Python 3.10 到 3.13):ruff check、
ruff format --check、mypy --strict,以及设有覆盖率下限的 pytest。该软件包
附带 PEP 561 py.typed 标记,因此导入后,类型检查器即可获得完整类型信息。
CodeQL 会扫描每次推送;每周运行的模糊测试任务(fuzz/)会针对只读保护机制进行攻击测试。
欢迎贡献:请参阅 CONTRIBUTING.md 和行为准则。
路线图
已完成:已发布到 PyPI,并列入官方 MCP 注册表。接下来:
- 可选的 Data Management 路径:存在 Catalog 时提供更丰富的
downstreamWorkbooks信息 - 在
lineage_examples中添加更多精选查询模板 - 可选的响应缓存,用于缓存会话内重复的内省查询
欢迎在 讨论区分享想法和投票。
License
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。