tableau-lineage-mcp
Tableau Workbook Auditor
找出任何 Tableau 工作簿(.twbx)中的问题,并映射其中的每一个依赖关系,完全在浏览器中完成。未使用的字段、重复的计算、性能问题、完整的计算字段血缘、筛选器、仪表板和存储的 SQL。没有任何内容被上传、存储或发送到任何地方。
🔗 在线访问: https://tableau-lineage.com
📦 MCP 服务器: tableau-lineage-mcp
为什么
接手别人的 Tableau 工作簿意味着要手动逆向工程几十个计算字段,只为回答一个问题:这个数字从哪里来,如果我改了它,什么会坏掉?
还有两个同样常见且没有免费答案的问题:
这里面什么是死代码? Tableau 没有内置的方法来列出未使用的字段;这个请求自 2015 年起就一直在社区论坛上挂着。
为什么这么慢? Tableau 的 Workbook Optimizer 需要 Creator 许可证,而 Catalog 需要 Server 或 Cloud 上的 Data Management。
这个工具直接读取工作簿文件本身,免费回答所有三个问题,无需许可证,无需账户。由于工作簿经常携带敏感数据,一切都在本地运行:.twbx 永远不会离开你的机器,这是架构本身的属性而非一句承诺(根本没有服务器可以发送它)。
Related MCP server: Tableau MCP
功能特性
审计
死重:没有任何东西使用的每个字段、参数和计算,按置信度分级(
unused、likely-unused、referenced-in-comment),并说明原因。以候选而非确定的形式报告,因为工作簿文件无法证明一个字段在所有地方都未被引用。重复计算:不同名称下的相同公式,以及更危险的情况——相同名称承载不同公式。
性能检查:针对文件实际内容的 15 条静态规则。重型嵌套 LOD、长计算、字符串密集型工作、过多的快速筛选器、缺少上下文筛选器、实时连接、非固定仪表板尺寸、密集仪表板、孤立工作表。
血缘
交互式依赖图(vis-network):计算字段、原始字段、参数和工作表作为节点;边显示什么喂养什么。按数据源聚类、搜索、高亮链路、缩放和平移。
可搜索的数据字典:每个公式按数据源分组,外加一个工作表部分。
七个可点击的指标:数据源、计算字段、原始字段、参数、LOD 计算、表计算、筛选器。
结构
筛选器,解码:每个筛选器跨工作表去重,包含其类型(分类 / 定量 / 相对日期)、上下文筛选器状态、存储的成员选择和范围,以及按工作表的细分。数据源筛选器单独标注。
仪表板:每个仪表板放置了哪些工作表、其固定尺寸和设备布局,以及不在任何仪表板上的工作表和隐藏的工作表。
数据来源:提取或实时、连接类 / 数据库 / 服务器、已发布(
sqlproxy)来源,以及工作簿记录中的刷新历史。存储的 SQL:每个 Custom SQL 查询(全文)、Initial SQL 语句、带参数的存储过程引用,以及
RAWSQL_*计算,每个都映射到其目标连接。运行时生成的实时连接查询不存储在工作簿文件中,因此明确不在范围内。
版本对比
放入同一仪表板的最多五个版本,获得语义差异:哪些计算被添加、删除、重命名或编辑,以及每个编辑可能破坏的下游字段,外加更改的参数、筛选器、工作表、仪表板、数据源和 SQL。重新格式化计算不会被报告为更改,而一个字段消失同时一个相同公式以新名称出现时,会被报告为重命名。
两个 .twbx 文件的 git diff 无法做到这一点:工作簿是一个巨大的 XML 块,其中布局坐标和重新生成的 id 淹没了少数真正的更改。
导出
全部在浏览器中生成,来自同一个解析模型:
交互式 HTML 报告:自包含且可离线使用(vis-network 内联),带有工具和作者的水印。
Markdown 交接文档:工作簿的完整书面记录(指标、审计、仪表板、数据源、参数、筛选器、每个公式、存储的 SQL),用于工单、wiki 或 README。这也是之后有人询问工作簿时 LLM 最容易读取的格式。
CSV 字段清单(包括每个字段被哪些工作表使用)和完整模型的 JSON,包括审计。
其他一切
架构上私有:
.twbx解析(解压 + XML)在客户端进行。没有后端,没有上传,没有 cookie。分析只是匿名的、聚合的页面浏览量计数。最大 500 MB 的工作簿:只解压工作簿 XML;打包的数据提取文件永远不会被触碰。
无障碍:键盘导航、焦点管理、AA 对比度、减少动态效果支持,以及作为画布图等效物的文本字典。
七种 UI 语言用于核心界面字符串(按钮、标签、状态消息),英文作为回退。较长的说明性文案仅提供英文。
工作原理
.twbx (a ZIP)
└─ fflate unzips ONLY the .twb entry ──► DOMParser reads the XML once
├─ extractor.ts lineage model: calcs, dependencies, params, stats
├─ filterExtractor.ts filters + per-worksheet usage
├─ sqlExtractor.ts Custom SQL, Initial SQL, stored procs, RAWSQL
├─ dashboardExtractor dashboards, hidden/orphan sheets, provenance
├─ audit.ts dead weight, duplicates, performance lint
└─ diff.ts semantic diff between two parsed workbooks
├─ in-app: a sandboxed <iframe srcdoc> report
└─ exports: HTML / Markdown / CSV / JSON, all from the same model.twbx 内打包的数据提取文件永远不会被解压,这就是为什么 500 MB 的工作簿也没问题,以及为什么这个工具即使在原则上也看不到你的数据行。
正确性说明
分析核心是原始 Python 服务的 TypeScript 移植版,每个修复都存在是因为朴素版本在真实工作簿上是错误的:
按标题引用参数。 公式按标题引用参数(
[Parameters].[Survival Target (Months)]),而内部名称不同([Survival Benchmark])。原始版本泄漏了一个幻影Parameters依赖。按标记而非子字符串检测表计算。
[total_views]中的TOTAL会把普通字段误标为表计算。现在按完整函数调用匹配;LOD 检测以花括号为锚点。在依赖扫描之前剥离注释和字符串字面量。
//注释中提到的字段名不是依赖,将其视为依赖会使未使用的字段看起来被使用了。节点按数据源而非仅按名称键控。 两个数据源都可以定义
[Sales];合并它们会把无关的血缘融合到一个节点中。标题在整个文档范围内解析。 基于已发布数据源构建的工作簿只在工作表依赖存根中保留标题,因此筛选器和工作表字段会暴露像
Calculation_5431234567890123这样的原始键。<datasources>块只有在工作簿根级别才是真实的。 每个工作表都携带一个相同形状的引用列表,这导致在十二个工作表的工作簿上,一个数据源被计数了十三次。
所有这些都有测试覆盖(npm test、npm run test:core)。
技术栈
Vite · React 19 · TypeScript · Tailwind CSS · fflate(解压)· 原生 DOMParser(XML)· vis-network(图)。无后端。
MCP 服务器(用于 AI 助手)
同一个引擎以 MCP 服务器的形式发布,因此 Claude、Cursor 和其他 MCP 客户端可以直接从你的磁盘读取和审计工作簿。仍然 100% 本地,不上传任何内容。
Claude Desktop: 下载扩展 并双击它。一键完成,无需终端,无需 Node 环境。
Claude Code(安装 MCP 以及一个知道何时使用它的技能):
/plugin marketplace add andey0Saikiran/tableau-lineage
/plugin install tableau-lineage@tableau-lineageCursor 和其他 MCP 客户端:
claude mcp add tableau-lineage -- npx -y tableau-lineage-mcp十一个工具:analyze_workbook、audit_workbook、diff_workbooks、list_calculated_fields、get_field、trace_dependencies、list_parameters、get_lineage_graph、list_sql_queries、list_filters、list_worksheets。完整文档在 mcp/ 中。
值得问它的事情:
"审计这个工作簿,告诉我什么可以安全删除。"
"这两个版本之间发生了什么变化,会破坏什么?"
"哪些工作表在 Region 上筛选,选择了哪些值?"
"为这个工作簿写一份数据字典。"
本地运行
npm install
npm run dev # http://localhost:5173其他脚本:
npm run build # typecheck + production build + pre-render to dist/
npm run preview # serve the production build
npm run typecheck # tsc --noEmit
npm test # Vitest: extractors, audit, diff, exports
npm run test:core # extractor parity + regression tests (Node)
npm run prerender # re-run the static pre-render over an existing dist/构建过程使用 react-dom/server 预渲染落地页,并将标记注入 dist/index.html,因此爬虫获得真实内容而不是空的 <div id="root">。它仍然是一个完全静态的站点:构建时和运行时都没有服务器。
部署(Cloudflare Workers 静态资源)
这是一个静态站点;dist/ 文件夹可以放在任何静态主机上。在线站点运行在 Cloudflare Workers 静态资源 上,由本仓库中的 wrangler.jsonc 配置:
{ "name": "tableau-lineage", "assets": { "directory": "./dist" } }将此仓库推送到 GitHub。
Cloudflare 仪表板 → Workers & Pages → Create → Import a repository → 选择该仓库。Cloudflare 读取
wrangler.jsonc并将dist/作为静态资源提供。构建设置:
构建命令:
npm run build部署命令:
npx wrangler deploy
每次推送到
main都会自动构建和部署。自定义域名: Worker → Settings → Domains & Routes → 添加
tableau-lineage.com(根域留空子域名字段)。www是到根域的代理 CNAME 加上一条重定向规则。将域名的名称服务器移到 Cloudflare 可获得自动 HTTPS。
注意:这是 Workers,不是 Pages。从同一仓库构建的 Pages 项目会部署站点的第二个并行副本。
public/_headers 附带安全基线和 Content-Security-Policy,将出站连接限制为仅此源和 Cloudflare 的分析,这正是"你的数据永远不会离开浏览器"这一承诺可执行的原因。
分析(无 cookie)
访客计数来自 Cloudflare Web Analytics:无 cookie,无个人数据。
Cloudflare 仪表板 → Web Analytics → Add a site → 输入主机名。
复制 beacon 令牌并粘贴到
index.html中注释掉的<script>中。在 Cloudflare 仪表板 → Web Analytics 中查看数字。
那个单页面浏览 beacon 是唯一收集的数据。
演示工作簿
public/demo.twbx 为"尝试示例工作簿"按钮提供支持。将其替换为你想要作为默认示例展示的任何 .twbx。
许可证
MIT © 2026 Sai Kiran Andey
由 Sai Kiran Andey 构建。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
AlicenseNot gradedqualityAmaintenanceEnables AI applications to integrate with Tableau through tools, resources, and prompts for querying data, exploring content, and retrieving visualizations from Tableau workbooks and datasources.10,642323Apache 2.0- AlicenseNot gradedqualityBmaintenanceEnables AI applications to interact with Tableau through tools for querying data, exploring content, and retrieving views.10,642Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to programmatically read, modify, and query Tableau workbook files (.twb and .twbx) on the local filesystem via 80 tools.5MIT
- AlicenseNot gradedqualityCmaintenanceA local MCP server that allows LLMs to inspect and safely edit Tableau Desktop workbooks (.twb) via XML, including creating native calculated fields using Tableau formula syntax.MIT
Related MCP Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
The grounded data layer for any LLM: governed SQL, metrics, lineage and catalog over your data.
Generate SBOMs, scan vulnerabilities, and analyze dependencies from local projects or Git repos.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/andey0Saikiran/tableau-lineage'
If you have feedback or need assistance with the MCP directory API, please join our Discord server