Tableau Workbook (.twb) Generation MCP Server
Project description
cwtwb
Tableau Workbook (.twb) Generation MCP Server
Programmatically create Tableau workbooks with calculated fields, multiple chart types, and dashboard layouts.
Overview
cwtwb is a Model Context Protocol (MCP) server that generates Tableau Desktop workbook files (.twb) from AI-driven tool calls. It provides atomic operations for building visualizations step by step:
- Load a TWB template with data connections
- Add calculated fields
- Create worksheets with various chart types
- Assemble dashboards with flexible layouts
- Save valid
.twbfiles that open directly in Tableau Desktop
Installation
pip install cwtwb
Requirements
Quick Start
As MCP Server (Recommended for AI Tools)
To allow your AI Assistant to build Tableau Dashboards automatically, you need to add cwtwb to your MCP client's configuration file.
The easiest and safest way to use cwtwb is via uvx (an isolated Python environment runner via uv). This requires zero installation.
1. Claude Desktop
Open ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows) and add:
{
"mcpServers": {
"cwtwb": {
"command": "uvx",
"args": ["cwtwb"]
}
}
}
2. Cursor IDE
- Open Cursor Settings -> Features -> MCP.
- Click Add New MCP Server.
- Set Type to
command. - Set Name to
cwtwb. - Set Command to
uvx cwtwb.
3. Claude Code (CLI)
Run the following command in your terminal to permanently add the server to your Claude Code workspace:
claude mcp add cwtwb -- uvx cwtwb
4. VSCode (via Cline / RooCode)
Open your MCP settings file (usually located at ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json or equivalent on Windows) and append:
{
"mcpServers": {
"cwtwb": {
"command": "uvx",
"args": ["cwtwb"]
}
}
}
As Python Library
from cwtwb.twb_editor import TWBEditor
editor = TWBEditor("templates/twb/superstore.twb")
editor.clear_worksheets()
# Add a calculated field
editor.add_calculated_field("Profit Ratio", "SUM([Profit])/SUM([Sales])")
# Create a bar chart
editor.add_worksheet("Sales by Category")
editor.configure_chart(
worksheet_name="Sales by Category",
mark_type="Bar",
rows=["Category"],
columns=["SUM(Sales)"],
)
# Create a pie chart
editor.add_worksheet("Segment Pie")
editor.configure_chart(
worksheet_name="Segment Pie",
mark_type="Pie",
color="Segment",
wedge_size="SUM(Sales)",
)
# Build a dashboard
editor.add_dashboard(
dashboard_name="Overview",
worksheet_names=["Sales by Category", "Segment Pie"],
layout="horizontal",
)
editor.save("output/my_workbook.twb")
MCP Tools
| Tool | Description |
|---|---|
create_workbook |
Load a TWB template and initialize the workspace |
list_fields |
List all available dimensions and measures |
add_calculated_field |
Add a calculated field with Tableau formula |
remove_calculated_field |
Remove a previously added calculated field |
add_worksheet |
Add a new blank worksheet |
configure_chart |
Configure chart type and field mappings |
add_dashboard |
Create a dashboard combining worksheets |
set_mysql_connection |
Configure the datasource to use a local MySQL connection |
set_tableauserver_connection |
Configure connection to an online Tableau Server |
save_workbook |
Save the final TWB file |
Supported Chart Types
- Bar — horizontal/vertical bar charts
- Line — line charts and trends
- Pie — pie charts with color and wedge-size encodings
- Area — area charts
- Circle / Square — shape marks
- Text — text tables
- Automatic — Tableau's automatic mark type
Dashboard Layouts
| Layout | Description |
|---|---|
vertical |
Stack worksheets top to bottom |
horizontal |
Place worksheets side by side |
grid-2x2 |
2×2 grid layout (up to 4 worksheets) |
dict (JSON) |
Declarative Custom Layouts: An infinitely nestable FlexBox-style JSON structure for enterprise dashboards. |
Custom layouts can be built programmatically using the TWBEditor API by passing a layout nested dictionary. See examples/scripts/demo_declarative_layout.py for a complete example of generating a side-bar executive dashboard.
Project Structure
cwtwb/
├── src/cwtwb/
│ ├── __init__.py # Package init
│ ├── field_registry.py # Field name ↔ TWB reference mapping
│ ├── twb_editor.py # Core TWB XML editor (lxml)
│ └── server.py # MCP server with FastMCP
├── tests/
│ ├── test_debug.py # Step-by-step debug tests
│ ├── test_e2e.py # End-to-end integration test
│ └── test_c2_replica.py # Full dashboard layout replica
├── templates/
│ ├── superstore.twb # Base TWB template with data connection
├── examples/ # Example scripts and prompts
│ ├── scripts/ # Python examples for SDK and workflow
│ ├── prompts/ # Natural language prompts for MCP LLM
│ └── layouts/ # JSON declarative layout definitions
├── docs/ # Design documents
├── pyproject.toml # Package configuration
└── README.md
Development
# Install in editable mode
pip install -e .
# Run test suite
pytest
# Test end-to-end workflow demo
python examples/scripts/demo_e2e_mcp_workflow.py
# Start MCP server
cwtwb
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cwtwb-0.4.0.tar.gz.
File metadata
- Download URL: cwtwb-0.4.0.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c7ff5940c59077fdc1f81107ab678079759176cd0fd928c3ed316487905a26a
|
|
| MD5 |
4cce8a9e536630259ccbfc84fe11f560
|
|
| BLAKE2b-256 |
e9700a6f2e0b8e61f72c843a0b12ee35f7e4f5077c6641aaf673bf0d5e7fcdef
|
File details
Details for the file cwtwb-0.4.0-py3-none-any.whl.
File metadata
- Download URL: cwtwb-0.4.0-py3-none-any.whl
- Upload date:
- Size: 40.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4eb11a41daafd4a95dc813ace3f981bae687da33d350557ccc2aef6887fabb2
|
|
| MD5 |
f307597153367bbfd180990e1a4aec2d
|
|
| BLAKE2b-256 |
d7a9bdb6f8d82a111196cc192fa701f4b82ffa249828fec1bb43890ea5c3f52a
|