tableau-lineage-mcp
Tableau Workbook Auditor
Найдите, что не так с любым рабочим файлом Tableau (.twbx), и постройте карту всех зависимостей внутри него, полностью в вашем браузере. Неиспользуемые поля, дублирующиеся вычисления, проблемы производительности, полная цепочка вычисляемых полей, фильтры, панели мониторинга и сохранённый SQL. Ничего не загружается, не сохраняется и не отправляется никуда.
🔗 Сайт: https://tableau-lineage.com
📦 MCP-сервер: tableau-lineage-mcp
Зачем
Когда вы наследуете чужой рабочий файл Tableau, приходится вручную восстанавливать десятки вычисляемых полей, чтобы ответить на один вопрос: откуда берётся это число и что сломается, если я его изменю?
Ещё два вопроса возникают не реже, и на них нет бесплатного ответа:
Что здесь мёртвое? В Tableau нет встроенного способа перечислить неиспользуемые поля; запрос на эту функцию висит на форуме сообщества с 2015 года.
Почему это медленно? Workbook Optimizer в Tableau требует лицензию Creator, а Catalog — Data Management на Server или Cloud.
Этот инструмент читает сам файл рабочей книги и отвечает на все три вопроса бесплатно, без лицензии и без учётной записи. Поскольку рабочие книги часто содержат чувствительные данные, всё выполняется локально: .twbx никогда не покидает ваш компьютер — это свойство архитектуры, а не обещание (сервера, куда его можно было бы отправить, просто нет).
Related MCP server: Tableau MCP
Возможности
Аудит
Мёртвый груз: каждое поле, параметр и вычисление, которые никто не использует, с оценкой уверенности (
unused,likely-unused,referenced-in-comment) и объяснением причины. Они указываются как кандидаты, а не как факты, потому что файл рабочей книги не может доказать, что поле нигде не используется.Дублирующиеся вычисления: одинаковые формулы под разными именами, а также более опасный случай — одно и то же имя с разными формулами.
Проверка производительности: 15 статических правил по фактическому содержимому файла. Тяжёлые и вложенные LOD, длинные вычисления, интенсивная работа со строками, слишком много быстрых фильтров, отсутствующие фильтры контекста, живые подключения, нефиксированные размеры панелей мониторинга, плотные панели, лишние листы.
Связи (Lineage)
Интерактивный граф зависимостей (vis-network): вычисляемые поля, исходные поля, параметры и листы как узлы; рёбра показывают, что чем питается. Группировка по источникам данных, поиск, подсветка цепочек, масштабирование и панорамирование.
Поисковый словарь данных: каждая формула, сгруппированная по источнику данных, плюс раздел листов.
Семь кликабельных метрик: источники данных, вычисляемые поля, исходные поля, параметры, LOD-вычисления, табличные вычисления, фильтры.
Структура
Фильтры, расшифрованные: каждый фильтр, дедуплицированный по листам, с его типом (категориальный / количественный / относительная дата), статусом фильтра контекста, сохранёнными выбранными значениями и диапазонами, а также разбивкой по листам. Фильтры источников данных выделяются отдельно.
Панели мониторинга: какие листы размещает каждая панель, её фиксированный размер и макеты для устройств, а также листы, не входящие ни в одну панель, и скрытые листы.
Происхождение данных: извлечение или живое подключение, класс соединения / база данных / сервер, опубликованные (
sqlproxy) источники и история обновлений, если рабочая книга её записывает.Сохранённый SQL: каждый пользовательский SQL-запрос (полный текст), оператор Initial SQL, ссылка на хранимую процедуру с параметрами и вычисления
RAWSQL_*, каждое из которых сопоставлено с целевым соединением. Запросы, генерируемые во время выполнения для живых подключений, не хранятся в файлах рабочих книг, поэтому они явно выходят за рамки.
Сравнение версий
Загрузите до пяти версий одной и той же панели мониторинга и получите семантический diff: какие вычисления были добавлены, удалены, переименованы или изменены, и для каждого изменения — какие нижестоящие поля оно может сломать, плюс изменённые параметры, фильтры, листы, панели, источники данных и SQL. Переформатирование вычисления не считается изменением, а поле, которое исчезает, когда идентичная формула появляется под новым именем, считается переименованием.
Git-diff двух файлов .twbx не может этого сделать: рабочая книга — это один большой XML-блоб, где координаты макета и перегенерированные идентификаторы淹没 горстку реальных изменений.
Экспорт
Всё генерируется в браузере из той же разобранной модели:
Интерактивный HTML-отчёт: автономный и готовый к работе офлайн (vis-network встроен), с водяным знаком инструмента и автора.
Markdown-документ для передачи: описание рабочей книги (метрики, аудит, панели, источники данных, параметры, фильтры, каждая формула, сохранённый SQL) для тикета, вики или README. Это также формат, который LLM лучше всего читает, когда позже кто-то спрашивает о рабочей книге.
CSV-инвентаризация полей (включая то, какие листы используют каждое поле) и JSON полной модели, включая аудит.
Всё остальное
Приватность по архитектуре: разбор
.twbx(распаковка + XML) происходит на стороне клиента. Никакого бэкенда, загрузок или куки. Аналитика — это анонимный агрегированный счётчик просмотров страниц.Рабочие книги до 500 МБ: распаковывается только XML рабочей книги; упакованный извлечённый набор данных не затрагивается.
Доступность: навигация с клавиатуры, управление фокусом, контраст AA, поддержка reduced-motion и текстовый словарь как эквивалент графа на холсте.
Семь языков интерфейса для основных строк (кнопки, метки, сообщения о статусе) с английским запасным вариантом. Более длинные пояснительные тексты — только на английском.
Как это работает
.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 МБ — это нормально, и инструмент в принципе не может увидеть ваши строки.
Примечания о корректности
Аналитическое ядро — это порт оригинального Python-сервиса на TypeScript, с исправлениями, каждое из которых существует потому, что наивная версия ошибалась на реальной рабочей книге:
Ссылки на параметры по подписи. Формулы ссылаются на параметры по подписи (
[Parameters].[Survival Target (Months)]), в то время как внутреннее имя отличается ([Survival Benchmark]). Оригинал утекал фантомную зависимостьParameters.Определение табличных вычислений по токену, а не по подстроке.
TOTALвнутри[total_views]помечал обычные поля как табличные вычисления. Теперь сопоставление выполняется как целые вызовы функций; определение LOD привязано к фигурным скобкам.Комментарии и строковые литералы удаляются перед сканированием зависимостей. Имя поля, упомянутое в комментарии
//, не является зависимостью, и его учёт делал неиспользуемые поля выглядящими используемыми.Узлы ключуются по источнику данных, а не только по имени. Два источника данных могут оба определять
[Sales]; их слияние смешивало несвязанные цепочки в один узел.Подписи разрешаются по всему документу. Рабочие книги, построенные на опубликованных источниках данных, хранят подписи только в заглушках зависимостей листов, поэтому фильтры и поля листов показывали сырые ключи вроде
Calculation_5431234567890123.Блок
<datasources>реален только в корне рабочей книги. Каждый лист несёт список ссылок той же формы, из-за чего один источник данных считался тринадцать раз на книге из двенадцати листов.
Всё покрыто тестами (npm test, npm run test:core).
Технологический стек
Vite · React 19 · TypeScript · Tailwind CSS · fflate (распаковка) · нативный DOMParser (XML) · vis-network (граф). Без бэкенда.
MCP-сервер (для ИИ-ассистентов)
Тот же движок поставляется как 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 static assets)
Это статический сайт; папку dist/ можно разместить на любом статическом хостинге. Живой сайт работает на Cloudflare Workers static assets, настроенном через wrangler.jsonc в этом репозитории:
{ "name": "tableau-lineage", "assets": { "directory": "./dist" } }Запушьте этот репозиторий на GitHub.
Панель Cloudflare → Workers & Pages → Create → Import a repository → выберите репозиторий. Cloudflare читает
wrangler.jsoncи обслуживаетdist/как статические ресурсы.Настройки сборки:
Build command:
npm run buildDeploy command:
npx wrangler deploy
Каждый пуш в
mainавтоматически собирает и развёртывает сайт.Пользовательский домен: Worker → Settings → Domains & Routes → добавьте
tableau-lineage.com(оставьте поле поддомена пустым для корневого домена).www— это проксируемый CNAME на корневой домен плюс правило перенаправления. Перевод неймсерверов домена на Cloudflare даёт автоматический HTTPS.
Примечание: это Workers, а не Pages. Проект Pages, собранный из того же репозитория, развернул бы вторую параллельную копию сайта.
public/_headers содержит базовый уровень безопасности и Content-Security-Policy, которая ограничивает исходящие соединения только этим доменом и аналитикой Cloudflare — именно это делает обещание «ваши данные никогда не покидают браузер» выполнимым.
Аналитика (без куки)
Счётчики посетителей поступают из Cloudflare Web Analytics: без куки, без персональных данных.
Панель Cloudflare → Web Analytics → Add a site → введите имя хоста.
Скопируйте токен маячка и вставьте его в закомментированный
<script>вindex.html.Смотрите цифры в панели Cloudflare → Web Analytics.
Этот единственный маячок просмотра страницы — единственные собираемые данные.
Демонстрационная рабочая книга
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