Skip to main content
Glama

twilize

再現可能なダッシュボードとワークブックエンジニアリングのためのTableauワークブック(.twb/.twbx)生成ツールキット 安定した分析プリミティブ、ダッシュボード構成、および組み込みの構造検証を使用して、Tableauワークブックをプログラムで作成します。

概要

twilizeは、コードやAI駆動のツール呼び出しからTableau Desktopワークブックファイル(.twb / .twbx)を生成するためのModel Context Protocol(MCP)サーバーおよびPythonツールキットです。

これは、対話型のデータ探索エージェントではなく、ワークブックエンジニアリングレイヤーとして設計されています。その目的は、ワークブックの生成を再現可能かつ検証可能にし、ローカルワークフロー、スクリプト、CIで安全に自動化できるようにすることです。

デフォルトのワークフローは以下の通りです:

  1. 既知のテンプレート(.twbまたは.twbx)または組み込みのゼロ構成テンプレートから開始する

  2. 計算フィールドとパラメータを追加する

  3. 安定したチャートプリミティブからワークシートを構築する

  4. ダッシュボードとインタラクションを組み立てる

  5. 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

  1. Cursor Settings -> Features -> MCPを開く

  2. Add New MCP Serverをクリック

  3. Typecommandに設定

  4. Nametwilizeに設定

  5. Commanduvx twilizeに設定

Claude Code

claude mcp add twilize -- uvx twilize

VSCode

ワークスペースの.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 inside

MCPツール

ツール

説明

create_workbook

.twbまたは.twbxテンプレートを読み込み、テンプレートからの再構築ワークスペースを初期化する

open_workbook

既存の.twbまたは.twbxを開き、編集用にワークシートとダッシュボードを保持する

list_fields

利用可能なすべてのディメンションとメジャーを一覧表示する

list_worksheets

アクティブなワークブック内のワークシート名を一覧表示する

list_dashboards

ダッシュボードとそれらが参照するワークシートゾーンを一覧表示する

add_parameter

What-if分析用のインタラクティブなパラメータを追加する

add_calculated_field

Tableau式を使用して計算フィールドを追加する

remove_calculated_field

以前に追加した計算フィールドを削除する

add_worksheet

新しい空のワークシートを追加する

configure_chart

チャートタイプとフィールドマッピングを構成する

configure_worksheet_style

ワークシートレベルのスタイル(背景色、軸/グリッド/境界線の表示など)を適用する

configure_dual_axis

二重軸チャート構成を構成する

configure_chart_recipe

lollipopdonutbutterflycalendarなどのショーケースレシピチャートを構成する

add_dashboard

ワークシートを組み合わせたダッシュボードを作成する

add_dashboard_action

ダッシュボードにフィルターまたはハイライトアクションを追加する

generate_layout_json

インタラクティブな構造化ダッシュボードのフレックスボックスレイアウトを構築する

list_capabilities

twilizeの宣言されたサポート範囲を表示する

describe_capability

チャートや機能がコア、高度、レシピ、または非サポートのいずれであるかを説明する

analyze_twb

機能カタログに対して.twbファイルを分析する。出力には完全な機能の内訳と機能ギャップのトリアージサマリーが含まれる

diff_template_gap

テンプレートの非コアギャップを要約する

validate_workbook

公式のTableau TWB XSDスキーマ(2026.1)に対してワークブックを検証する

migrate_twb_guided

組み込みのTWB移行ワークフローを実行し、必要な場合に警告確認のために一時停止する

set_mysql_connection

ローカルのMySQL接続を使用するようにデータソースを構成する

set_tableauserver_connection

オンラインのTableau Serverへの接続を構成する

set_hyper_connection

ローカルのHyper抽出接続を使用するようにデータソースを構成する

save_workbook

ワークブックを.twb(プレーンXML)または.twbx(抽出と画像がバンドルされたZIP)として保存する

機能モデル

コアプリミティブ

これらは、プロジェクトが継続的に保証すべき安定した構成要素です:

  • 棒グラフ

  • 折れ線グラフ

  • 面グラフ

  • 円グラフ

  • マップ

  • テキスト / KPIカード

  • パラメータと計算フィールド

  • 基本的なダッシュボード構成

高度なパターン

これらはサポートされていますが、デフォルトの表面積ではなく、より高レベルな構成やインタラクション機能です:

  • 散布図

  • ヒートマップ

  • ツリーマップ

  • バブルチャート

  • 二重軸mark_color_1/2color_map_1reverse_axis_1hide_zerolinesynchronized

  • 表計算add_calculated_field(table_calc="Rows")によるRANK_DENSERUNNING_SUMWINDOW_SUM

  • KPI差異バッジ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表面に属するかどうかわからない場合:

  1. list_capabilitiesを使用して宣言された境界を検査する

  2. describe_capabilityを使用して特定のチャート、エンコーディング、または機能をチェックする

  3. ショーケーステンプレートを追いかける前に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自体がスキーマから逸脱したワークブックを生成することがあります)。しかし、繰り返し発生するエラーは修正すべき構造的な問題を示唆しています。

ダッシュボードレイアウト

レイアウト

説明

vertical

ワークシートを上から下に積み重ねる

horizontal

ワークシートを横に並べる

grid-2x2

最大4つのワークシート用の2x2グリッドレイアウト

dictまたは.jsonパス

より複雑なダッシュボードのための宣言的なカスタムレイアウト

カスタムレイアウトは、ネストされた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 reports

migrate_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つのファイルが書き込まれます:

ファイル

内容

<output>.twb

フィールド参照が書き換えられた移行済みワークブック

migration_report.json

フィールドごとのステータス:マッピング済み / 警告 / ブロック

field_mapping.json

監査用の最終的なソース→ターゲットのフィールドマッピング

スコープパラメータ

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
twilize

MCPサーバーマニフェスト

twilizeには、Tableau拡張機能.trexファイルのMCP版である完全なMCPサーバーマニフェスト(mcp-server.json)が付属しています。以下を宣言します:

.trex相当

MCPフィールド

説明

拡張機能ID

id

com.twilize.mcp-server

バージョン

version

現在のパッケージバージョン

名前 / 説明

name, description

サーバーの識別情報

作成者

author

名前、メール、組織、URL

権限

permissions

file-read, file-write

ソースURL

command

uvx twilize

最小APIバージョン

minPythonVersion

3.10

さらに、マニフェストは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