Atlas / MCP servers / imgwho / Cwtwb

CwtwbBLOCK

mcp/imgwho/cwtwb

A Python-based engine that enables Text-to-Tableau twb dashboards generation.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
82 35r · 42w · 5d
Transport
stdio
License
AGPL-3.0
Stars
46
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Tableau workbook engineering for reproducible .twb / .twbx generation, validation, and migration.

cwtwb is a Python toolkit and Model Context Protocol (MCP) server for building Tableau Desktop workbooks from code or agent tool calls.

It is meant to be a workbook engineering layer, not a conversational analytics agent. The focus is reproducibility, inspectability, and safe automation in local workflows, scripts, and CI.

Design Workflow Reference

The agent design workflow and the design_advisor skill are informed by Adam Mico's adammico-lab Tableau workflow skills, especially Tableau Dashboard Blueprint's build-from-a-design-spec approach. cwtwb independently adapts those ideas to reproducible .twb / .twbx authoring; it does not depend on, bundle, or copy adammico-lab code or skill content. cwtwb is not affiliated with Adam Mico, Salesforce, or Tableau.

The cw in cwtwb comes from Cooper Wenhua.

Author: Cooper Wenhua <[email protected]>

Website · Source · Changelog

[](https://pepy.tech/projects/cwtwb) [](https://datacooper.com) [](https://github.com/aidatacooper/cwtwb) [![License](https://img.shie

Read from source at commit fc0d542c6f63OBSERVED · 2026-10-08
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add cwtwb -- uvx cwtwb
claude-desktop
{
  "mcpServers": {
    "cwtwb": {
      "command": "uvx",
      "args": [
        "cwtwb"
      ]
    }
  }
}
03

Exposed tools (82)

35 read · 42 write · 5 destructive. Blast radius: 5 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
add_calculated_fieldwriteAdd a calculated field to the datasource.
add_combined_setwriteUnion existing native sets at the same dimension grain.
add_dashboardwriteCreate a dashboard combining multiple worksheets.
add_dashboard_actionwriteAdd a filter, highlight, URL, navigation, or parameter dashboard action.
add_dashboard_extensionwriteAdd a native dashboard extension with structured manifest and settings.
add_dashboard_set_actionwriteAdd a Set Action (edit-group-action) to a dashboard.
add_dashboard_toggle_buttonwriteShow/hide a dedicated dashboard sheet container with a native button.
add_groupwriteCreate a categorical dimension by grouping source-field members.
add_hierarchywriteCreate an ordered Tableau drill hierarchy from bare dimension fields.
add_hyper_datasourcewriteAdd and activate another independent extracted data source.
add_parameterwriteAdd a parameter to the workbook.
add_reference_bandwriteAdd a constant or field-backed native filled band on an existing axis.
add_reference_linewriteAdd a field-backed reference line to a configured worksheet pane.
add_setwriteCreate a Tableau set (datasource filter-group) for membership logic.
add_worksheetwriteAdd a new blank worksheet to the workbook.
analyze_twbreadAnalyze an existing TWB/TWBX file against cwtwb
apply_twb_migrationwriteApply a workbook migration and write a migrated TWB plus reports.
apply_worksheet_refactorwriteRewrite one worksheet to use replacement fields without touching others.
audit_calculated_fieldsreadReport calculated-field datatype/role contradictions without mutation.
clone_worksheetreadClone an existing worksheet and its worksheet window.
configure_chartreadConfigure chart type and field mappings for a worksheet.
configure_chart_recipereadConfigure a showcase recipe chart through the shared recipe registry.
configure_custom_labelwriteSet rich literal/field mark labels while preserving pane calculation context.
configure_custom_tooltipwriteSet formatted text/field runs or embedded sheets with explicit filter_fields.
configure_datasource_blendreadLink independently aggregated sources in a worksheet without a join.
configure_dual_axisreadConfigure a dual-axis chart composition.
configure_layered_chartreadBuild layered panes with encodings, ordered values and native styles.
configure_subtotalsreadConfigure visual subtotals and per-dimension subtotal labels.
configure_worksheet_domain_rangereadComplete missing dates for discrete exact-date fields; [] disables completion.
configure_worksheet_stylewriteApply worksheet-level styling: background color, axis/grid/border visibility.
configure_worksheet_time_seriesreadExtend a continuous date domain and allow calculations on added periods.
copy_default_device_layoutreadPreserve default geometry in a custom Phone/Tablet layout with shared IDs.
create_workbookwriteCreate a new workbook from a TWB or TWBX template file.
describe_capabilityreadDescribe one declared capability and its support tier.
diff_template_gapreadSummarize the non-core capability gap of a TWB template.
enable_automatic_phone_layoutwriteDerive a scrolling Phone layout from the default dashboard objects.
enable_domain_completionwriteAdd an INDEX() detail table calculation to trigger Tableau densification.
generate_gallery_layoutreadBind exact worksheet names to a Gallery template and validate the layout DSL.
generate_layout_jsonwriteGenerate and save a dashboard layout file.
generate_layout_yamlwriteGenerate and save a dashboard layout YAML file.
get_mcp_statusreadReport cwtwb MCP server version, workbook state, and safe usage guardrails.
import_blended_fieldwriteDefine a primary aggregate proxy for a secondary source field.
initialize_dashboard_filter_actionreadInitialize an existing native filter action
inspect_excel_connectionreadPreview how an Excel workbook will be interpreted before connection setup.
inspect_target_schemareadInspect the first-sheet schema of a target Excel datasource.
link_worksheet_filtersreadLink matching categorical filters so one control filters all given sheets.
list_capabilitiesreadList cwtwb
list_dashboardsreadList dashboards and their worksheet zones in the current workbook.
list_fieldsreadList all available fields in the current workbook datasource.
list_gallery_templatesreadList packaged Gallery layouts and their explicit worksheet slots.
list_worksheetsreadList worksheet names in the current workbook.
open_workbookreadOpen an existing workbook (.twb or .twbx) for in-place worksheet editing.
preview_twb_migrationreadPreview a workbook migration onto a target datasource.
preview_worksheet_refactorreadPreview worksheet-scoped field rewrites without mutating the workbook.
profile_twb_for_migrationreadProfile workbook datasources and worksheet scope before migration.
propose_field_mappingreadScan source and target schema and propose a field mapping.
recommend_gallery_templatesreadRecommend compatible Gallery templates with scores and reasons.
remove_calculated_fielddestructiveRemove a previously added calculated field.
repair_calculated_field_issueswritePreview or explicitly apply selected calculated-field metadata repairs.
save_workbookwriteSave the active workbook as a .twb or .twbx file. Use a .twbx extension to produce a
screenshot_workbookreadScreenshot a published workbook
select_datasourcereadSelect the source for subsequent field and worksheet authoring.
set_compound_color_palettewriteMap ordered categorical tuples to colors, including Measure Names.
set_csv_connectionwriteConfigure the workbook datasource to use a local CSV connection.
set_date_optionswriteSet datasource weekday origin for date-part headers and week calculations.
set_excel_connectionwriteConfigure the workbook datasource to use a local Excel connection.
set_field_fiscal_year_startwriteSet the native fiscal year starting month on a date field and dependencies.
set_field_formatdestructiveSet or clear a field
set_field_geographic_roledestructiveAssign or clear a field
set_geocoding_contextwriteSet geographic lookup context for generated map coordinates.
set_hyper_connectionwriteConfigure the workbook datasource to use a local Hyper extract connection.
set_measure_name_aliaseswriteAlias actual Measure Names members, including table calculation measures.
set_mysql_connectionwriteConfigure the workbook datasource to use a local MySQL connection.
set_shape_palettewriteEmbed local shape assets and map categorical members to the native palette.
set_tableauserver_connectionwriteConfigure the workbook datasource to use a Tableau Server connection.
set_worksheet_captiondestructiveSet or clear a plain-text worksheet caption.
set_worksheet_hiddenwriteHide or unhide a worksheet tab by updating worksheet window metadata.
set_worksheet_titledestructiveSet or clear the visible plain-text worksheet title.
upload_workbookwritePublish a .twb/.twbx to Tableau Cloud for openability or screenshots.
validate_formulareadCheck Tableau function names without mutating the active workbook.
validate_workbookreadValidate a workbook against the official Tableau TWB XSD schema.
validate_workbook_apiwriteValidate a .twb file via Tableau Cloud REST API (no publish).
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (10 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (17)

HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/cwtwb/validate/uploader.py:586
url, headers=headers, files=files, verify=False
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/cwtwb/validate/uploader.py:651
url, headers=headers, files=files, verify=False
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/cwtwb/validate/uploader.py:696
url, headers=headers, params=params, verify=False
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMInventory / provenance · inv.binary · CWE-1104
src/cwtwb/references/Sample - EU Superstore.hyper
Sample - EU Superstore.hyper
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
src/cwtwb/references/Sample _ Superstore.hyper
Sample _ Superstore.hyper
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
remove_calculated_field, set_field_format, set_field_geographic_role, set_worksheet_caption, set_worksheet_title
Why it matters. 5 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/cwtwb/dashboard_extensions.py:94
base64.b64decode(icon, validate=True)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/cwtwb/shape_assets.py:77
if prior is not None and base64.b64decode(prior.text or "") != data:
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/test_shape_assets.py:46
base64.b64decode(n.text)
LOWPrompt injection · prompt.conditional_escalation · CWE-94, CWE-1427
src/cwtwb/skills/validation.md:73
Use this path only when the user explicitly asks for upload/publish evidence,
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
CHANGELOG.md:400
- **Runtime credential selection hardened**: explicit `env_path` now takes priority over MCP process environment variables for Tableau validation/upload/screenshot calls, preventing stale server confi
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
README.md:397
| **4. Upload + Screenshot** | Publish to Tableau Cloud/Server and capture a view image | Tableau credentials + `pip install "cwtwb[validate]"` |
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOInventory / provenance · inv.oversize · CWE-1104
docs/assets/readme/output_compressed.gif
docs/assets/readme/output_compressed.gif
Why it matters. 9772583 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
examples/migrate_workflow/Sample - Superstore.xls
examples/migrate_workflow/Sample - Superstore.xls
Why it matters. 3411968 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
examples/migrate_workflow/示例 - 超市.xls
examples/migrate_workflow/示例 - 超市.xls
Why it matters. 3282944 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
src/cwtwb/references/Sample _ Superstore (Simple).xls
src/cwtwb/references/Sample _ Superstore (Simple).xls
Why it matters. 1048064 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
tests/fixtures/Sample - Superstore.xls
tests/fixtures/Sample - Superstore.xls
Why it matters. 3422208 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha fc0d542c6f63full audit observations/trust-audit/mcp-server/imgwho__cwtwb.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-08fc0d542c6f63BLOCKD69first audit
06

Questions

What is the Cwtwb MCP server?

A Python-based engine that enables Text-to-Tableau twb dashboards generation.

What tools does Cwtwb expose?

82 in total: 35 read-only, 42 that write, and 5 that can delete or overwrite (remove_calculated_field, set_field_format, set_field_geographic_role, set_worksheet_caption, set_worksheet_title). Every one is listed on this page with its risk.

Is Cwtwb safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 5 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Cwtwb need?

No credential environment variables were found in its source, so it appears to need none.

How does Cwtwb run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as cwtwb.

How current is this page?

The grade is for one exact copy of the source (fc0d542c6f63), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement