twilize
twilize
재현 가능한 대시보드 및 통합 문서 엔지니어링을 위한 Tableau 통합 문서(.twb/.twbx) 생성 툴킷 안정적인 분석 기본 요소, 대시보드 구성 및 내장된 구조적 유효성 검사를 사용하여 프로그래밍 방식으로 Tableau 통합 문서를 생성합니다.
개요
twilize는 코드나 AI 기반 도구 호출을 통해 Tableau Desktop 통합 문서 파일(.twb / .twbx)을 생성하기 위한 Model Context Protocol(MCP) 서버이자 Python 툴킷입니다.
이 도구는 대화형 데이터 탐색 에이전트가 아닌 통합 문서 엔지니어링 계층으로 설계되었습니다. 목표는 로컬 워크플로우, 스크립트 및 CI에서 통합 문서 생성을 재현 가능하고, 검사 가능하며, 자동화하기에 안전하게 만드는 것입니다.
기본 워크플로우는 다음과 같습니다:
알려진 템플릿(
.twb또는.twbx) 또는 내장된 제로 구성 템플릿에서 시작계산된 필드 및 매개변수 추가
안정적인 차트 기본 요소로부터 워크시트 구축
대시보드 및 상호 작용 조립
Tableau Desktop에서 열리는
.twb또는.twbx저장 및 유효성 검사
Interfaces
┌───────────────────────────────────────────────────────────────┐
│ ┌──────────────────────────┐ ┌───────────────────────────┐ │
│ │ MCP Server │ │ Python Library │ │
│ │ tools_workbook │ │ from twilize.twb_editor │ │
│ │ tools_layout │ │ import TWBEditor │ │
│ │ tools_migration │ │ │ │
│ │ tools_support │ │ editor.add_...() │ │
│ │ │ │ editor.configure_...() │ │
│ │ (Claude / Cursor / │ │ editor.save(...) │ │
│ │ VSCode / Claude Code) │ │ │ │
│ └─────────────┬────────────┘ └──────────────┬────────────┘ │
│ └──────────────┬────────────────┘ │
└───────────────────────────── ┼ ─────────────────────────────┘
▼
┌───────────────────────────────────────────────────────────────┐
│ TWBEditor │
│ ParametersMixin · ConnectionsMixin │
│ ChartsMixin · DashboardsMixin │
└──────────┬──────────────────┬──────────────────┬─────────────┘
▼ ▼ ▼
┌──────────────────┐ ┌──────────────┐ ┌──────────────────────┐
│ Chart Builders │ │ Dashboard │ │ Analysis & │
│ │ │ System │ │ Migration │
│ Basic DualAxis │ │ │ │ │
│ Pie Text │ │ layouts │ │ migration.py │
│ Map Recipes │ │ actions │ │ twb_analyzer.py │
│ │ │ dependencies│ │ capability_registry │
└────────┬─────────┘ └──────┬───────┘ └──────────┬───────────┘
└───────────────────┼──────────────────────┘
▼
┌───────────────────────────────────────────────────────────────┐
│ XML Engine (lxml) │
│ template.twb/.twbx → patch → validate → save │
└───────────────────────────────┬───────────────────────────────┘
▼
output.twb / output.twbx설치
pip install twilize.hyper 파일을 검사하고 물리적 Orders_* 테이블을 자동으로 확인하는 번들된 Hyper 기반 예제를 실행하려면, 선택적 예제 종속성도 설치하십시오:
pip install "twilize[examples]"요구 사항
빠른 시작
MCP 서버로 사용
MCP 클라이언트가 Tableau 통합 문서를 자동으로 빌드하도록 하려면 해당 클라이언트의 MCP 구성에 twilize를 추가하십시오.
시작 명령은 클라이언트 전반에서 동일합니다:
uvx twilize각 클라이언트는 이 명령을 서로 다른 구성 형식으로 저장합니다. 아래의 일치하는 예제를 사용하십시오.
Claude Desktop
macOS의 경우 ~/Library/Application Support/Claude/claude_desktop_config.json을, Windows의 경우 %APPDATA%\Claude\claude_desktop_config.json을 열고 다음을 추가하십시오:
{
"mcpServers": {
"twilize": {
"command": "uvx",
"args": ["twilize"]
}
}
}Cursor IDE
Cursor 설정 -> 기능 -> MCP를 엽니다.
새 MCP 서버 추가를 클릭합니다.
유형을
command로 설정합니다.이름을
twilize로 설정합니다.명령을
uvx twilize로 설정합니다.
Claude Code
claude mcp add twilize -- uvx twilizeVSCode
작업 영역의 .vscode/mcp.json 파일 또는 사용자 프로필 mcp.json 파일을 열고 다음을 추가하십시오:
{
"servers": {
"twilize": {
"command": "uvx",
"args": ["twilize"]
}
}
}VSCode에서는 명령 팔레트에서 MCP: Open Workspace Folder Configuration 또는 MCP: Open User Configuration을 통해 이 파일들을 열 수 있습니다. 또한 MCP: Add Server를 사용하고 안내 흐름을 통해 동일한 uvx twilize 명령을 입력할 수도 있습니다.
Python 라이브러리로 사용
템플릿에서 시작하여 통합 문서 콘텐츠를 다시 빌드하려면 TWBEditor(...)를 사용하십시오. 기존 워크시트와 대시보드를 유지하면서 시트를 제자리에서 재구성하려면 TWBEditor.open_existing(...)을 사용하십시오.
from twilize.twb_editor import TWBEditor
editor = TWBEditor("") # "" uses the built-in Superstore template
editor.clear_worksheets()
editor.add_calculated_field("Profit Ratio", "SUM([Profit])/SUM([Sales])")
editor.add_worksheet("Sales by Category")
editor.configure_chart(
worksheet_name="Sales by Category",
mark_type="Bar",
rows=["Category"],
columns=["SUM(Sales)"],
)
editor.add_worksheet("Segment Pie")
editor.configure_chart(
worksheet_name="Segment Pie",
mark_type="Pie",
color="Segment",
wedge_size="SUM(Sales)",
)
editor.add_dashboard(
dashboard_name="Overview",
worksheet_names=["Sales by Category", "Segment Pie"],
layout="horizontal",
)
editor.save("output/my_workbook.twb")패키지 통합 문서(.twbx) 작업
.twbx 파일은 통합 문서 XML을 데이터 추출(.hyper) 및 이미지 자산과 함께 번들로 묶은 ZIP 아카이브입니다. twilize는 이를 투명하게 읽고 씁니다:
from twilize.twb_editor import TWBEditor
# Open a packaged workbook — extracts and images are preserved automatically
editor = TWBEditor.open_existing("templates/dashboard/MyDashboard.twbx")
# Make changes as usual
editor.add_calculated_field("Profit Ratio", "SUM([Profit])/SUM([Sales])")
# Save as .twbx — re-bundles the updated .twb with the original extracts/images
editor.save("output/MyDashboard_v2.twbx")
# Or extract just the XML when the packaged format isn't needed
editor.save("output/MyDashboard_v2.twb")일반 .twb도 패키지화할 수 있습니다:
editor = TWBEditor("templates/twb/superstore.twb")
# ...
editor.save("output/superstore.twbx") # produces a single-entry ZIP with the .twb insideMCP 도구
도구 | 설명 |
|
|
| 기존 |
| 사용 가능한 모든 차원과 측정값을 나열합니다 |
| 활성 통합 문서의 워크시트 이름을 나열합니다 |
| 대시보드와 참조하는 워크시트 영역을 나열합니다 |
| What-if 분석을 위한 대화형 매개변수를 추가합니다 |
| Tableau 수식으로 계산된 필드를 추가합니다 |
| 이전에 추가된 계산된 필드를 제거합니다 |
| 새 빈 워크시트를 추가합니다 |
| 차트 유형 및 필드 매핑을 구성합니다 |
| 워크시트 수준 스타일 지정(배경색, 축/격자/테두리 표시 여부)을 적용합니다 |
| 이중 축 차트 구성을 설정합니다 |
|
|
| 워크시트를 결합한 대시보드를 생성합니다 |
| 대시보드에 필터 또는 강조 동작을 추가합니다 |
| 대화형 구조화된 대시보드 flexbox 레이아웃을 빌드합니다 |
| twilize의 선언된 지원 범위를 표시합니다 |
| 차트나 기능이 핵심, 고급, 레시피 또는 지원되지 않는지 설명합니다 |
| 기능 카탈로그에 대해 |
| 템플릿의 비핵심 격차를 요약합니다 |
| 공식 Tableau TWB XSD 스키마(2026.1)에 대해 통합 문서의 유효성을 검사합니다 |
| 내장된 TWB 마이그레이션 워크플로우를 실행하고 필요할 때 경고 확인을 위해 일시 중지합니다 |
| 로컬 MySQL 연결을 사용하도록 데이터 소스를 구성합니다 |
| 온라인 Tableau Server에 대한 연결을 구성합니다 |
| 로컬 Hyper 추출 연결을 사용하도록 데이터 소스를 구성합니다 |
| 통합 문서를 |
기능 모델
핵심 기본 요소
이 프로젝트가 계속해서 보장해야 할 안정적인 빌딩 블록입니다:
막대
선
영역
파이
지도
텍스트 / KPI 카드
매개변수 및 계산된 필드
기본 대시보드 구성
고급 패턴
이 기능들은 지원되지만, 기본 표면 영역이라기보다는 더 높은 수준의 구성이나 상호 작용 기능입니다:
산점도
히트맵
트리 맵
버블 차트
이중 축 —
mark_color_1/2,color_map_1,reverse_axis_1,hide_zeroline,synchronized테이블 계산 —
add_calculated_field(table_calc="Rows")를 통한RANK_DENSE,RUNNING_SUM,WINDOW_SUMKPI 차이 배지 —
MIN(1)더미 축 +axis_fixed_range+color_map+customized_label도넛(extra_axes를 통해) —
configure_dual_axis(extra_axes=[...])를 사용하는 다중 창 파이 + 흰색 원;:Measure Names팔레트에 대한color_map지원서식 있는 텍스트 레이블 — 인라인 필드 값이 있는 다중 스타일 KPI 카드 및 동적 제목을 위한
configure_chart(label_runs=[...])고급 워크시트 스타일 지정 —
configure_worksheet_style은 창 수준 셀/데이터 레이블/마크 스타일, 필드별 레이블/셀/헤더 형식, 축 눈금 제어, 도구 설명 비활성화 및 모든 Tableau 시각적 노이즈 억제를 지원합니다행 차원 헤더 억제 —
configure_worksheet_style(hide_row_label="FieldName")필터 영역, 매개변수 컨트롤, 색상 범례
대시보드 필터 및 강조 동작
선언적 JSON 레이아웃 워크플로우
레이아웃 딕셔너리에서
show_title: false를 통한 대시보드 영역 제목 제어
레시피 및 쇼케이스 패턴
이들은 오늘날 생성될 수 있지만, 일급 약속이라기보다는 레시피나 예제로 취급되어야 합니다:
도넛
롤리팝
불릿
범프
버터플라이
달력
레시피 차트는 모든 쇼케이스 패턴에 대해 도구를 하나씩 늘리지 않도록 단일 configure_chart_recipe 도구를 통해 의도적으로 노출됩니다.
twilize는 차트 동물원이 되거나 Tableau 자체의 대화형 분석 도구와 경쟁하려는 것이 아니기 때문에 이러한 구분이 중요합니다. 이 프로젝트는 신뢰할 수 있고 자동화 가능한 통합 문서 생성 계층을 제공할 때 가장 강력합니다.
기능 우선 워크플로우
어떤 기능이 안정적인 SDK 표면에 속하는지 확실하지 않은 경우:
list_capabilities를 사용하여 선언된 경계를 검사하십시오.describe_capability를 사용하여 특정 차트, 인코딩 또는 기능을 확인하십시오.쇼케이스 템플릿을 찾기 전에
analyze_twb또는diff_template_gap을 사용하십시오.
이렇게 하면 새로운 기능 작업이 샘플 통합 문서에 나타나는 것이 아니라 프로젝트의 실제 제품 경계에 맞춰 유지됩니다.
내장된 유효성 검사
구조적 유효성 검사
save()는 쓰기 전에 TWB XML 구조를 자동으로 검사합니다:
<workbook>또는<datasources>누락과 같은 치명적인 오류는TWBValidationError를 발생시킵니다.<view>또는<panes>누락과 같은 경고는 기록되지만 저장을 차단하지는 않습니다.유효성 검사는
editor.save("output.twb", validate=False)또는editor.save("output.twbx", validate=False)로 비활성화할 수 있습니다.
XSD 스키마 유효성 검사
TWBEditor.validate_schema()는 vendor/tableau-document-schemas/에 공급된 공식 Tableau TWB XSD 스키마(2026.1)에 대해 통합 문서를 확인합니다:
result = editor.validate_schema()
print(result.to_text())
# PASS Workbook is valid against Tableau TWB XSD schema (2026.1)
# — or —
# FAIL Schema validation failed (2 error(s)):
# * Element 'workbook': Missing child element(s)...
result.valid # bool
result.errors # list[str] — lxml error messages
result.schema_available # False if the vendor submodule is not checked out동일한 검사를 MCP 도구로 사용할 수 있습니다:
validate_workbook() # validate current open workbook in memory
validate_workbook(file_path="out.twb") # validate a file on disk (.twb or .twbx)XSD 오류는 정보 제공용입니다(Tableau 자체도 가끔 스키마에서 벗어난 통합 문서를 생성함). 하지만 반복되는 오류는 수정할 가치가 있는 구조적 문제를 나타냅니다.
대시보드 레이아웃
레이아웃 | 설명 |
| 워크시트를 위에서 아래로 쌓습니다 |
| 워크시트를 나란히 배치합니다 |
| 최대 4개의 워크시트에 대한 2x2 격자 레이아웃 |
| 더 복잡한 대시보드를 위한 선언적 사용자 지정 레이아웃 |
사용자 지정 레이아웃은 중첩된 layout 딕셔너리를 사용하거나 MCP 워크플로우의 경우 generate_layout_json을 통해 프로그래밍 방식으로 빌드할 수 있습니다.
Hyper 기반 예제
examples/hyper_and_new_charts.py 예제는 패키지(src/twilize/references/)에 직접 번들된 Sample - EU Superstore.hyper 추출을 사용하며, 통합 문서 연결을 전환하기 전에 Tableau Hyper API를 통해 물리적 Orders_* 테이블을 확인합니다. 저장소 복제가 필요하지 않습니다. pip install "twilize[examples]"로 설치하고 직접 실행하십시오.
통합 문서 마이그레이션
twilize에는 기존 .twb를 새 데이터 소스로 전환하기 위한 마이그레이션 하위 시스템이 포함되어 있습니다. 예를 들어, 하나의 Excel 파일을 기반으로 빌드된 통합 문서를 다른 스키마를 가진 다른 Excel로 다시 지정하거나 동일한 데이터 세트의 언어 변형 간에 마이그레이션하는 경우입니다.
작동 방식
마이그레이션은 다단계 워크플로우입니다. 각 단계는 MCP 도구와 Python 함수로 모두 사용할 수 있습니다:
1. inspect_target_schema → Scan the target Excel and list its columns
2. profile_twb_for_migration → Inventory which fields the workbook uses
3. propose_field_mapping → Match source fields to target columns (fuzzy)
4. preview_twb_migration → Dry-run: show what would change, blockers/warnings
5. apply_twb_migration → Write the migrated .twb + JSON reportsmigrate_twb_guided는 2~5단계를 순차적으로 실행하고 신뢰도가 낮은 필드 일치만 남았을 때 자동으로 일시 중지하여 진행하기 전에 사람이 검토할 수 있도록 warning_review_bundle을 반환하는 편의 래퍼입니다.
Python 예제
from twilize.migration import migrate_twb_guided_json
import json
# One-call guided migration
result = migrate_twb_guided_json(
file_path="templates/SalesDashboard.twb",
target_source="data/new_data_source.xlsx",
output_path="output/SalesDashboard_migrated.twb",
)
bundle = json.loads(result)
if bundle["status"] == "warning_review_required":
# Inspect low-confidence matches and confirm or override them
print(bundle["warning_review_bundle"])
# Re-run with confirmed mappings
result = migrate_twb_guided_json(
file_path="templates/SalesDashboard.twb",
target_source="data/new_data_source.xlsx",
output_path="output/SalesDashboard_migrated.twb",
mapping_overrides={"Old Field Name": "New Column Name"},
)MCP 도구 예제
twilize를 MCP 서버로 사용할 때 AI 에이전트가 전체 워크플로우를 실행할 수 있습니다:
inspect_target_schema(target_source="data/new_data_source.xlsx")
→ returns column list and data types
migrate_twb_guided(
file_path="templates/SalesDashboard.twb",
target_source="data/new_data_source.xlsx",
output_path="output/SalesDashboard_migrated.twb"
)
→ returns status: "applied" or "warning_review_required"출력 파일
완료된 마이그레이션은 세 개의 파일을 작성합니다:
파일 | 내용 |
| 다시 작성된 필드 참조가 포함된 마이그레이션된 통합 문서 |
| 필드별 상태: 매핑됨 / 경고 / 차단됨 |
| 감사를 위한 최종 소스→대상 필드 매핑 |
범위 매개변수
scope="workbook"은 모든 워크시트를 마이그레이션합니다. 단일 시트로 마이그레이션을 제한하려면 워크시트 이름을 전달하십시오.
독립형 예제
examples/migrate_workflow/에는 템플릿 .twb, 원본 Superstore Excel, 대상 중국어 로캘 Superstore Excel 및 실행 가능한 스크립트가 포함되어 있습니다:
python examples/migrate_workflow/test_migration_workflow.py프로젝트 구조
twilize/
|-- src/twilize/
| |-- __init__.py
| |-- capability_registry.py
| |-- config.py
| |-- charts/
| |-- connections.py
| |-- dashboard_actions.py
| |-- dashboard_dependencies.py
| |-- dashboard_layouts.py
| |-- dashboards.py
| |-- field_registry.py
| |-- layout.py
| |-- layout_model.py
| |-- layout_rendering.py
| |-- mcp/
| |-- parameters.py
| |-- twb_analyzer.py
| |-- twb_editor.py
| |-- validator.py
| `-- server.py
|-- tests/
|-- examples/
|-- docs/
|-- pyproject.toml
`-- README.md개발
# Install in editable mode
pip install -e .
# Run test suite
pytest --basetemp=output/pytest_tmp
# Run the mixed showcase example
python examples/scripts/demo_all_supported_charts.py
# Run the advanced Hyper-backed example
python examples/scripts/demo_hyper_and_new_charts.py
# Run the guided migration example
python examples/migrate_workflow/test_migration_workflow.py
# Start MCP server
twilizeMCP 서버 매니페스트
twilize는 Tableau Extension .trex 파일의 MCP 버전인 전체 MCP 서버 매니페스트(mcp-server.json)와 함께 제공됩니다. 여기에는 다음이 선언되어 있습니다:
.trex 대응 항목 | MCP 필드 | 설명 |
확장 ID |
|
|
버전 |
| 현재 패키지 버전 |
이름 / 설명 |
| 서버 ID |
작성자 |
| 이름, 이메일, 조직, URL |
권한 |
|
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/subhatta123/twilize'
If you have feedback or need assistance with the MCP directory API, please join our Discord server