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 Settings -> Features -> MCPを開く
Add New MCP Serverをクリック
Typeを
commandに設定Nameを
twilizeに設定Commandを
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式を使用して計算フィールドを追加する |
| 以前に追加した計算フィールドを削除する |
| 新しい空のワークシートを追加する |
| チャートタイプとフィールドマッピングを構成する |
| ワークシートレベルのスタイル(背景色、軸/グリッド/境界線の表示など)を適用する |
| 二重軸チャート構成を構成する |
|
|
| ワークシートを組み合わせたダッシュボードを作成する |
| ダッシュボードにフィルターまたはハイライトアクションを追加する |
| インタラクティブな構造化ダッシュボードのフレックスボックスレイアウトを構築する |
| 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"出力ファイル
移行が完了すると、3つのファイルが書き込まれます:
ファイル | 内容 |
| フィールド参照が書き換えられた移行済みワークブック |
| フィールドごとのステータス:マッピング済み / 警告 / ブロック |
| 監査用の最終的なソース→ターゲットのフィールドマッピング |
スコープパラメータ
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拡張機能.trexファイルのMCP版である完全なMCPサーバーマニフェスト(mcp-server.json)が付属しています。以下を宣言します:
.trex相当 | MCPフィールド | 説明 |
拡張機能ID |
|
|
バージョン |
| 現在のパッケージバージョン |
名前 / 説明 |
| サーバーの識別情報 |
作成者 |
| 名前、メール、組織、URL |
権限 |
|
|
ソースURL |
|
|
最小APIバージョン |
|
|
さらに、マニフェストは40個のツール(カテゴリ付き)、6個のリソース、およびClaude Desktop、Cursor、VS Code、Claude Code用の事前構築済みクライアント設定を宣言します。
パラメータスキーマを含む完全なツールリファレンスについては、docs/MCP_SERVER.mdを参照してください。
公開
PyPI
pip install build twine
python -m build
twine upload dist/*Smithery MCPレジストリ
smithery.yamlファイルはSmitheryへの提出準備
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