Skip to main content
Glama
andey0Saikiran

tableau-lineage-mcp

Tableau Workbook Auditor

모든 Tableau 워크북(.twbx)에서 문제를 찾고, 내부의 모든 의존성을 매핑합니다. 전적으로 브라우저에서 처리됩니다. 사용하지 않는 필드, 중복 계산, 성능 문제, 전체 계산 필드 계보(lineage), 필터, 대시보드, 저장된 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

기능

감사(Audit)

  • 죽은 코드(Dead weight): 아무도 사용하지 않는 모든 필드, 매개변수, 계산을 신뢰도(unused, likely-unused, referenced-in-comment)로 등급을 매기고 이유를 명시합니다. 워크북 파일은 필드가 어디에서도 참조되지 않음을 증명할 수 없으므로 확정이 아닌 후보로 보고됩니다.

  • 중복 계산: 다른 이름 아래 동일한 수식, 그리고 더 위험한 경우인 동일한 이름이 다른 수식을 담고 있는 경우.

  • 성능 린트: 파일이 실제로 포함하는 내용에 대한 15가지 정적 규칙. 무겁고 중첩된 LOD, 긴 계산, 문자열 중심 작업, 너무 많은 빠른 필터, 누락된 컨텍스트 필터, 라이브 연결, 고정되지 않은 대시보드 크기, 밀집된 대시보드, 고아 워크시트.

계보(Lineage)

  • 대화형 의존성 그래프 (vis-network): 계산 필드, 원시 필드, 매개변수, 워크시트가 노드로 표시되고, 엣지는 무엇이 무엇을 공급하는지 보여줍니다. 데이터 소스별 클러스터링, 검색, 체인 강조, 확대/축소 및 이동.

  • 검색 가능한 데이터 사전: 데이터 소스별로 그룹화된 모든 수식과 워크시트 섹션.

  • 일곱 가지 클릭 가능한 지표: 데이터 소스, 계산 필드, 원시 필드, 매개변수, LOD 계산, 테이블 계산, 필터.

구조

  • 필터, 해독됨: 워크시트 전체에서 중복 제거된 모든 필터와 그 종류(범주형 / 정량적 / 상대 날짜), 컨텍스트 필터 상태, 저장된 멤버 선택 및 범위, 워크시트별 분석. 데이터 소스 필터는 별도로 구분됩니다.

  • 대시보드: 각 대시보드가 배치하는 워크시트, 고정 크기 및 기기 레이아웃, 어떤 대시보드에도 없는 시트와 숨겨진 시트.

  • 데이터 출처: 추출 또는 라이브, 연결 클래스 / 데이터베이스 / 서버, 게시된(sqlproxy) 소스, 워크북이 기록하는 경우 새로고침 기록.

  • 저장된 SQL: 모든 Custom SQL 쿼리(전체 텍스트), Initial SQL 문, 매개변수가 있는 저장 프로시저 참조, RAWSQL_* 계산을 각각 대상 연결에 매핑합니다. 런타임에 생성되는 라이브 연결 쿼리는 워크북 파일에 저장되지 않으므로 명시적으로 범위에서 제외됩니다.

버전 비교

동일한 대시보드의 최대 5개 버전을 넣고 의미론적 diff를 얻으세요: 추가, 제거, 이름 변경 또는 편집된 계산과 각 편집이 깨뜨릴 수 있는 다운스트림 필드, 변경된 매개변수, 필터, 워크시트, 대시보드, 데이터 소스 및 SQL. 계산의 서식 변경은 변경으로 보고되지 않으며, 동일한 수식이 새 이름으로 나타나면서 필드가 사라지면 이름 변경으로 보고됩니다.

.twbx 파일의 git diff로는 이 작업을 할 수 없습니다: 워크북은 하나의 거대한 XML 블롭(blob)으로, 레이아웃 좌표와 재생성된 ID가 소수의 실제 변경 사항을 압도합니다.

내보내기

모두 동일한 파싱 모델에서 브라우저 내에서 생성됩니다:

  • 대화형 HTML 보고서: 자체 포함(self-contained)이며 오프라인 준비(vis-network 인라인), 도구와 작성자가 워터마크로 표시됩니다.

  • Markdown 인계 문서: 워크북을 정리한 문서(지표, 감사, 대시보드, 데이터 소스, 매개변수, 필터, 모든 수식, 저장된 SQL)로 티켓, 위키 또는 README용. 나중에 누군가 워크북에 대해 물을 때 LLM이 가장 잘 읽는 형식이기도 합니다.

  • CSV 필드 인벤토리(각 필드를 사용하는 워크시트 포함) 및 JSON 전체 모델(감사 포함).

그 외 모든 것

  • 아키텍처상 프라이빗: .twbx 파싱(unzip + XML)은 클라이언트 측에서 발생합니다. 백엔드 없음, 업로드 없음, 쿠키 없음. 분석은 익명의 집계 페이지 뷰 수입니다.

  • 최대 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 워크북도 문제없고, 원리적으로도 도구가 사용자의 행(row)을 볼 수 없습니다.

정확성 노트

분석 코어는 원래 Python 서비스의 TypeScript 포트이며, 각각 실제 워크북에서 순진한 버전이 틀렸기 때문에 존재하는 수정 사항이 있습니다:

  1. 캡션에 의한 매개변수 참조. 수식은 캡션으로 매개변수를 참조합니다([Parameters].[Survival Target (Months)]) 반면 내부 이름은 다릅니다([Survival Benchmark]). 원본은 유령 Parameters 의존성을 누출했습니다.

  2. 토큰 기반 테이블 계산 감지, 부분 문자열 아님. [total_views] 안의 TOTAL이 일반 필드를 테이블 계산으로 잘못 표시했습니다. 이제 전체 함수 호출로 매칭되며 LOD 감지는 중괄호로 앵커링됩니다.

  3. 의존성 스캔 전에 주석과 문자열 리터럴이 제거됩니다. // 주석에 언급된 필드 이름은 의존성이 아니며, 이를 의존성으로 취급하면 사용하지 않는 필드가 사용되는 것처럼 보였습니다.

  4. 노드는 이름만이 아닌 데이터 소스로 키가 지정됩니다. 두 데이터 소스가 모두 [Sales]를 정의할 수 있으며, 병합하면 관련 없는 계보가 하나의 노드로 융합되었습니다.

  5. 캡션은 문서 전체에서 해석됩니다. 게시된 데이터 소스로 빌드된 워크북은 캡션을 워크시트 의존성 스텁에만 유지하므로 필터와 워크시트 필드가 Calculation_5431234567890123 같은 원시 키를 표면화했습니다.

  6. <datasources> 블록은 워크북 루트에서만 실제입니다. 모든 워크시트는 동일한 형태의 참조 목록을 가지며, 12개 시트 워크북에서 데이터 소스 하나가 13번 계산되었습니다.

모두 테스트로 검증됩니다(npm test, npm run test:core).

기술 스택

Vite · React 19 · TypeScript · Tailwind CSS · fflate (unzip) · 네이티브 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-lineage

Cursor 및 기타 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/ 폴더는 어떤 정적 호스트에도 올릴 수 있습니다. 라이브 사이트는 이 저장소의 wrangler.jsonc로 구성된 Cloudflare Workers 정적 자산에서 실행됩니다:

{ "name": "tableau-lineage", "assets": { "directory": "./dist" } }
  1. 이 저장소를 GitHub에 푸시합니다.

  2. Cloudflare 대시보드 → Workers & Pages → Create → Import a repository → 저장소를 선택합니다. Cloudflare가 wrangler.jsonc를 읽고 dist/를 정적 자산으로 제공합니다.

  3. 빌드 설정:

    • 빌드 명령: npm run build

    • 배포 명령: npx wrangler deploy

  4. main에 대한 모든 푸시는 자동으로 빌드 및 배포됩니다.

  5. 사용자 정의 도메인: Worker → Settings → Domains & Routes → tableau-lineage.com 추가(에이펙스(apex)의 경우 하위 도메인 필드는 비워 둡니다). www는 에이펙스에 대한 프록시 CNAME과 리디렉션 규칙입니다. 도메인의 네임서버를 Cloudflare로 이동하면 자동 HTTPS가 제공됩니다.

참고: 이것은 Workers이지 Pages가 아닙니다. 동일한 저장소에서 빌드된 Pages 프로젝트는 사이트의 두 번째 병렬 복사본을 배포합니다.

public/_headers는 보안 기준선과 이 출처 및 Cloudflare 분석에만 아웃바운드 연결을 제한하는 Content-Security-Policy를 제공합니다. 이것이 "데이터가 브라우저를 떠나지 않는다"는 약속을 집행 가능하게 만드는 것입니다.

분석 (쿠키리스)

방문자 수는 Cloudflare Web Analytics에서 제공됩니다: 쿠키리스, 개인 데이터 없음.

  1. Cloudflare 대시보드 → Web Analytics → Add a site → 호스트 이름을 입력합니다.

  2. 비콘 토큰을 복사하여 index.html의 주석 처리된 <script>에 붙여넣습니다.

  3. Cloudflare 대시보드 → Web Analytics에서 숫자를 확인합니다.

수집되는 유일한 데이터는 이 단일 페이지 뷰 비콘입니다.

데모 워크북

public/demo.twbx는 "샘플 워크북 사용해보기" 버튼을 지원합니다. 기본 예제로 소개하고 싶은 .twbx로 교체하세요.

라이선스

MIT © 2026 Sai Kiran Andey

Sai Kiran Andey가 제작했습니다.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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,642
    323
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI applications to interact with Tableau through tools for querying data, exploring content, and retrieving views.
    10,642
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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