Skip to main content
Glama

cwtwb

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 <imgwho@gmail.com>

Website · Source · Changelog

PyPI Downloads Website Source License Python

Star History

Star History Chart

Try the example workflow · Read the guide

Related MCP server: Tableau MCP

Quick Start

Install

pip install cwtwb

If you want the bundled Hyper-backed example too:

pip install "cwtwb[examples]"

If you want cloud validation (upload to Tableau Cloud/Server):

pip install "cwtwb[validate]"

Run As An MCP Server

uvx cwtwb

The short form above remains the simplest option and is the default config shown in this repository. cwtwb is a smart entrypoint: with no arguments in an interactive terminal it prints CLI help; when launched by an MCP client over stdio it starts the server.

Add the server to your MCP client with the same command. For example:

{
  "mcpServers": {
    "cwtwb": {
      "command": "uvx",
      "args": ["cwtwb"]
    }
  }
}

For Claude Code:

claude mcp add cwtwb -- uvx cwtwb

For VSCode, add cwtwb to your workspace or user mcp.json and use uvx cwtwb as the command.

If you prefer an explicit script name, these equivalent launch styles also work:

uvx cwtwb mcp
uvx --from cwtwb cwtwb-mcp
python -m cwtwb.mcp_server

Use As A CLI

The same package also exposes first-class command-line workflows for humans, scripts, CI, and agents that need direct file operations instead of MCP tool calls.

cwtwb --help
cwtwb doctor
cwtwb status --json
cwtwb inspect workbook.twb --json
cwtwb validate workbook.twb
cwtwb analyze workbook.twb --json
cwtwb run examples/specs/basic_cli.yaml

Common write commands require an explicit output path by default:

cwtwb create --out output/base.twb
cwtwb chart add output/base.twb --worksheet "Sales by Category" --mark Bar --rows Category --columns "SUM(Sales)" --out output/chart.twb
cwtwb dashboard add output/chart.twb --name Overview --worksheets "Sales by Category" --out output/dashboard.twb

Use --in-place only when you intentionally want to overwrite the input workbook, and --force only when replacing an existing output file.

Convert Workbooks Between Formats

convert detects TWB, TWBX, YAML, and JSON from file extensions. It does not require Gallery, a template, or an active editor session:

cwtwb convert input.twbx --out workbook.yaml
cwtwb convert workbook.yaml --out workbook.json
cwtwb convert workbook.json --out rebuilt.twbx
cwtwb convert input.twbx --out unpacked.twb

cwtwb export input.twb --out workbook.yaml is an alias. Native definitions also work with cwtwb run workbook.yaml --out rebuilt.twb. Existing automation specs keep their previous behavior. Outputs are not overwritten unless --force is supplied; conversion never overwrites its input.

Python: from cwtwb import convert_workbook, then convert_workbook("input.twbx", "workbook.yaml"). MCP exposes the same stateless convert_workbook(input_path, output_path, force=False) tool.

The versioned cwtwb-native format currently represents the native XML tree: document.root contains tag, attributes, text, ordered children, and tail; comments, processing instructions, namespaces, thumbnails, and unknown elements are retained. Edit formulas in calculation.attributes.formula and layout geometry in zone attributes. XML attribute values remain strings. This is a detailed structural format, not yet a simplified semantic workbook DSL; no claim is made that every Tableau feature is understood or safely editable. Conversion bypasses TWBEditor cleanup and does not inject generated comments. XML declaration spelling, CDATA spelling, namespace prefixes, and ZIP metadata are not promised byte-for-byte. Unknown nodes are retained, not interpreted.

Binary resources are copied to <output-name>.assets/, with relative paths and SHA-256 hashes in the definition. Keep the definition and this directory together. An unpacked TWB also has a <output-name>.resources.json companion to retain unreferenced package assets for later repacking. File references are relocated when needed; remote database connections remain remote. Standalone TWB discovery currently covers Hyper/CSV/Excel connections and bitmap zones; arbitrary external files referenced by custom extensions are not automatically discovered. TWBX conversion retains every bundled resource file, including unknown extensions.

Missing known external resources produce warnings for text output and block TWBX packaging. Duplicate keys, unknown document properties/versions, missing or changed resource files, unsafe archive paths, multiple-TWB archives, and DTD-bearing XML fail explicitly. After deliberately changing an asset, update its recorded hash. Resource directories are not garbage-collected when outputs are replaced.

Conversion checks XML syntax and resource integrity, not Tableau calculations, field-reference semantics, Desktop loading, rendering, or interactions. Use the existing validation commands and Tableau runtime checks separately. run --validate is intentionally rejected for native definitions rather than implying those checks ran during conversion.

MCP Client Stability

When cwtwb is connected as an MCP server, agents should call the exposed MCP tools directly through their client. They should not run shell commands such as mcp call cwtwb ..., mcp list-tools cwtwb, or gh api .../mcp/...; those commands are not part of cwtwb and are usually unavailable in normal Claude, Codex, Cursor, or VSCode environments.

If an agent cannot see tools such as create_workbook, add_worksheet, or save_workbook, restart or reconnect the MCP client and verify the server config. Clearing the uv cache only refreshes installed packages; it does not fix a stale client tool surface.

When using an existing .twb as a visual reference, agents must not copy Tableau XML column-instance tokens into chart inputs. Values such as [sum:Sales:qk], [none:Category:nk], [mn:Order Date:ok], or [federated.xxx].[sum:Profit:qk] are generated internals. Pass user-facing expressions such as Sales, SUM(Sales), Category, or MONTH(Order Date) instead.

Useful resources for agents:

cwtwb://tool-surface
cwtwb://skills/index
cwtwb://skills/data_quality
cwtwb://skills/design_advisor
cwtwb://skills/metric_blueprint
cwtwb://skills/dashboard_designer
cwtwb://skills/quality_review
cwtwb://skills/documentation
file://docs/tableau_all_functions.json

Compatibility aliases are also available for common guessed URIs such as cwtwb://docs/manual-editing, but new prompts should prefer cwtwb://tool-surface and cwtwb://skills/index.

For client-specific details and the full reference, see https://github.com/aidatacooper/cwtwb/blob/main/docs/guide.md.

Dashboard Layout Files

Custom dashboard layouts can now be authored as either JSON or YAML using the same declarative DSL. For agent workflows, generate a layout file first, then pass that file path into add_dashboard(layout=...).

generate_layout_json("output/layout.json", layout_tree, ascii_preview)
generate_layout_yaml("output/layout.yaml", layout_tree, ascii_preview)

Both formats support the same wrapper structure:

  • layout_schema: canonical dashboard layout tree

  • _ascii_layout_preview: optional human/agent review aid

cwtwb includes seven packaged Gallery templates for common analytical structures. Recommendations use explicit requirements and return their scores, matching reasons, and penalties; they do not inspect data or silently generate charts.

from cwtwb import DashboardRequirements, recommend_gallery_templates

recommendations = recommend_gallery_templates(
    DashboardRequirements(
        primary_intent="trend",
        has_temporal_data=True,
        kpi_count=2,
        chart_count=3,
        chart_types=("Line", "Bar"),
    )
)

After calling list_worksheets, bind exact worksheet names with materialize_gallery_layout(...) or the MCP generate_gallery_layout tool. The generated result uses the same canonical DSL accepted by add_dashboard.

Calculation Safety

add_calculated_field checks identifiers used as function calls against the packaged Tableau catalog before editing XML. For example, CHR(10) is rejected with a CHAR() suggestion. This is a lightweight function-name check, not a complete Tableau parser or substitute for Tableau Cloud semantic validation.

Use validate_formula=False only when targeting a newer Tableau function that is not yet in the packaged catalog. Existing workbooks can be reviewed with audit_calculated_fields(). Repairs are separate and default to dry_run=True.

Highlights

Area

What you get

Workbook authoring

Generate .twb / .twbx files from templates or from scratch; add hierarchies, sets, rich dynamic titles, and parameter placeholders

Chart building

Build bar, line, pie, map, KPI, dual-axis, layered, and ordered multi-column table workbooks

Table calculations

Author calculation addressing metadata, domain completion, subtotals, and nested table-calculation dependencies

Dashboard actions

Add filter, highlight, URL, navigation, parameter, and set actions through Python or MCP

Safety

Validate function names and calculated-field roles, then validate structure, Tableau XSD (2026.1/2026.2), and REST API semantics before publishing

Dashboard Gallery

Rank seven explainable layouts and bind exact worksheet names into the canonical DSL

Cloud validation

REST API syntactic/semantic validation + upload to Tableau Cloud/Server with optional screenshot

Migration

Repoint existing workbooks to new data sources with explicit steps

MCP support

Drive workbook workflows from Claude, Cursor, VSCode, or other MCP clients

See It In Action

This GIF shows the MCP tool flow that builds a dashboard step by step.

Architecture

                            Interfaces
  ┌───────────────────────────────────────────────────────────────┐
  │  ┌──────────────────────────┐  ┌───────────────────────────┐  │
  │  │        MCP Server        │  │      Python Library       │  │
  │  │  tools_workbook          │  │  from cwtwb.twb_editor    │  │
  │  │  tools_validate          │  │  import TWBEditor         │  │
  │  │                          │  │                           │  │
  │  │                          │  │  editor.add_...()         │  │
  │  │                          │  │  editor.configure_...()   │  │
  │  │                          │  │  editor.validate_schema() │  │
  │  │  (Claude / Cursor /      │  │  editor.save(...)         │  │
  │  │   VSCode / Claude Code)  │  │                           │  │
  │  └─────────────┬────────────┘  └──────────────┬────────────┘  │
  │                └──────────────┬────────────────┘               │
  └─────────────────────────────  ┼  ─────────────────────────────┘
                                  ▼
  ┌───────────────────────────────────────────────────────────────┐
  │                          TWBEditor                            │
  │       ParametersMixin  ·  ConnectionsMixin                    │
  │       ChartsMixin      ·  DashboardsMixin                     │
  │       validate_schema()  ·  save()                            │
  └──────────┬──────────────────┬──────────────────┬─────────────┘
             ▼                  ▼                  ▼
  ┌──────────────────┐  ┌──────────────┐  ┌──────────────────────┐
  │  Chart Builders  │  │  Dashboard   │  │  Analysis &          │
  │                  │  │  System      │  │  Migration           │
  │  Basic  DualAxis │  │              │  │                      │
  │  Pie    Text     │  │  layouts     │  │  migration.py        │
  │  Map    Recipes  │  │  actions     │  │  twb_analyzer.py     │
  │                  │  │  dependencies│  │  capability_registry │
  └────────┬─────────┘  └──────┬───────┘  └──────────┬───────────┘
           └───────────────────┼──────────────────────┘
                               ▼
  ┌───────────────────────────────────────────────────────────────┐
  │                    Packaged References                        │
  │    empty_template.twb  ·  Superstore XLS/Hyper                │
  │    tableau_all_functions.json  ·  dataset profiles            │
  │    vendored Tableau TWB XSD schemas (2026.1 / 2026.2)         │
  └───────────────────────────────┬───────────────────────────────┘
                                  ▼
  ┌───────────────────────────────────────────────────────────────┐
  │                     XML Engine  (lxml)                        │
  │    template.twb/.twbx  →  patch  →  validate  →  save        │
  └───────────────────────────────┬───────────────────────────────┘
                                  ▼
                      output.twb  /  output.twbx
                                  ▼
  ┌───────────────────────────────────────────────────────────────┐
  │               Cloud Validation (optional)                    │
  │    validate_workbook_api → REST API semantic validation      │
  │    upload_workbook       → Tableau Cloud/Server publish      │
  │    screenshot_workbook   → capture view for visual check     │
  └───────────────────────────────────────────────────────────────┘

Mermaid view:

flowchart TD
    subgraph Interfaces
        MCP["MCP Server<br/>tools_workbook<br/>tools_validate"]
        PY["Python Library<br/>TWBEditor API"]
    end

    subgraph Editor["Core Editor"]
        TWB["TWBEditor<br/>parameters · connections<br/>charts · dashboards<br/>validate_schema · save"]
    end

    subgraph Builders["Workbook Systems"]
        CHARTS["Chart Builders<br/>basic · dual-axis<br/>pie · text · map · recipes"]
        DASH["Dashboard System<br/>layouts · actions<br/>dependencies"]
        ANALYSIS["Analysis & Migration<br/>migration.py<br/>twb_analyzer.py<br/>capability_registry"]
    end

    subgraph References["Packaged References"]
        REFS["empty_template.twb<br/>Superstore XLS/Hyper<br/>Tableau functions<br/>TWB XSD schemas"]
    end

    subgraph Engine["XML Engine"]
        XML["lxml patch pipeline<br/>template.twb/.twbx → patch → validate → save"]
    end

    subgraph Outputs
        OUT["output.twb / output.twbx"]
        CLOUD["Cloud Validation<br/>REST semantic validation<br/>upload · screenshot"]
    end

    MCP --> TWB
    PY --> TWB
    TWB --> CHARTS
    TWB --> DASH
    TWB --> ANALYSIS
    CHARTS --> XML
    DASH --> XML
    ANALYSIS --> XML
    REFS --> TWB
    REFS --> XML
    XML --> OUT
    OUT --> CLOUD

The reference layer is packaged with the library so agents and scripts can start from known-good workbook assets, resolve Tableau calculation syntax, run Hyper-backed examples, and validate against local XSD schemas without relying on a checked-out repository.

Agent Architecture

cwtwb is designed for tool-using agents, not just direct Python calls. The MCP server gives agents a small, stateful workbook editing surface; skill resources give phase-specific Tableau guidance before each set of tool calls.

Human or agent prompt
        |
        v
MCP server instructions
        |
        v
Skill resources
data_quality -> governance -> synthetic_data -> design_advisor -> metric_blueprint
-> calculation_builder -> chart_builder -> dashboard_designer -> formatting
-> validation -> quality_review -> documentation
        |
        v
Workbook tools
create/open -> list_fields -> add/configure -> layout -> save -> validate/upload
        |
        v
TWB/TWBX artifact + validation evidence

Prompts explain what to build. Skills explain how to build it well. Tools make the workbook changes inspectable and repeatable.

The packaged skill architecture is documented in src/cwtwb/skills/README.md, including its workflow diagram and the boundary between guidance, explicit mutations, and validation evidence.

Capability Boundary

cwtwb keeps its public surface intentionally small:

Level

Meaning

Core

Stable primitives for normal SDK docs, examples, and MCP workflows

Advanced

Supported compositions and interaction patterns with more moving parts

Recipe

Showcase patterns exposed through configure_chart_recipe, not one tool per chart

Use list_capabilities or describe_capability when an agent needs to check whether a requested chart or workbook feature belongs in the stable surface.

Design Decisions

  • The MCP server uses a stateful session model: open or create a workbook, mutate it through explicit tools, then call save_workbook.

  • Skills are phase-specific operating guides, not generic prompt stuffing.

  • save_workbook, validate_workbook, validate_workbook_api, and upload_workbook have separate responsibilities so agents do not confuse writing, local checks, semantic validation, and publishing.

  • The capability registry keeps the product boundary explicit instead of letting showcase examples become accidental API promises.

Validation

cwtwb provides four levels of workbook validation:

Level

Description

Requires

1. Local XSD

Validate against the official Tableau TWB XSD schema (version-aware: 2026.1 or 2026.2)

None (built-in)

2. REST API Syntactic

Validate XML syntax via Tableau Cloud REST API

Tableau credentials + Tableau Cloud 2026.2+

3. REST API Semantic

Full semantic validation without publishing — default cloud check for .twb

Tableau credentials + Tableau Cloud 2026.2+

4. Upload + Screenshot

Publish to Tableau Cloud/Server and capture a view image

Tableau credentials + pip install "cwtwb[validate]"

# Level 1 — Local XSD (in-memory, no save required)
result = editor.validate_schema()
print(result.to_text())

# Level 3 — REST API semantic validation
from cwtwb.validate.uploader import TableauUploader
uploader = TableauUploader(env_path="project/.env")
result = uploader.validate("output.twb", validation_level="semantic")

# Save with local XSD validation; REST API semantic validation also runs when .env is configured
editor.save("output.twb")
# MCP tools
validate_workbook(file_path="output.twb")                                       # Local XSD validation
validate_workbook_api(twb_path="output.twb", validation_level="semantic")        # Default cloud semantic validation, no publish
validate_workbook_api(twb_path="output.twb", env_path="project/.env")            # Runtime credentials
upload_workbook(twb_path="output.twb")                                          # Publish/openability evidence or TWBX validation
screenshot_workbook(workbook_id="...", view_name="Sheet 1")                     # Visual check after upload_workbook

FAQ

What is the difference between .twb and .twbx?

.twb is the workbook XML. .twbx is the packaged version that bundles the workbook together with extracts and images.

Does validate_workbook save files?

No. validate_workbook() performs local XSD validation on the active in-memory workbook or an existing .twb / .twbx file. It does not write output. save_workbook() is the tool that writes files.

What validation does save() perform?

save() runs local XSD validation automatically before replacing the final output file. For .twb output, REST API semantic validation also runs when Tableau credentials are configured and the server supports it. Use validate_workbook_api(..., validation_level="semantic") when you want to request the Tableau Cloud/Server validation step directly.

What is upload_workbook for?

upload_workbook publishes a .twb or .twbx to Tableau Cloud/Server. Use it when you explicitly need publish/openability evidence, a workbook ID for screenshots, or .twbx package validation. For the default .twb cloud semantic check, prefer validate_workbook_api because it does not publish or store the workbook. Requires pip install "cwtwb[validate]" and Tableau credentials from environment variables, an explicit env_path, TABLEAU_ENV_FILE, or a .env file next to the workbook.

How do I set up Tableau Cloud/Server validation?

  1. Install: pip install "cwtwb[validate]"

  2. Copy .env.example to .env

  3. Fill in your Tableau Cloud/Server PAT credentials

  4. Call save_workbook to write the .twb or .twbx

  5. Call validate_workbook_api for the default REST API semantic validation, or upload_workbook only when you also want publish/openability evidence, screenshots, or .twbx validation

Credential lookup order is explicit env_path first, then environment variables, TABLEAU_ENV_FILE, the workbook sibling .env, the current working directory .env, the cwtwb project .env, and finally the user's home .env. Prefer env_path for one-off MCP calls instead of editing MCP server configuration and restarting the server.

If validation reports that tableauserverclient is missing, call get_mcp_status first. It reports the MCP process's Python executable, cwtwb version, and whether the Tableau client is importable without exposing credentials. An env_path change is runtime-scoped and does not require an MCP restart; installing dependencies into a different Python environment does not fix the running server, so install the validation extra into the interpreter reported by get_mcp_status and reconnect only when the runtime or tool schema changes.

When should I use uvx cwtwb versus python -m cwtwb.mcp_server?

Use uvx cwtwb for the normal MCP workflow. Use python -m cwtwb.mcp_server for local testing without uvx.

For backward compatibility, uvx --from cwtwb cwtwb-mcp, python -m cwtwb.server, and python -m cwtwb.mcp continue to work.

Where is the full guide?

See the online guide.

Documentation

Available Tools

84 tools
add_calculated_field

Add a calculated field to the datasource.

For formula syntax and best practices, read: read_resource('cwtwb://skills/calculation_builder')

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNo
formulaYes
datatypeNoreal
field_nameYes
field_typeNo
table_calcNo
internal_nameNo
default_formatNo
validate_formulaNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_combined_set

Union existing native sets at the same dimension grain.

ParametersJSON Schema
NameRequiredDescriptionDefault
set_nameYes
set_namesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_dashboard

Create a dashboard combining multiple worksheets.

Recommended workflow for complex dashboards:

  1. Call list_worksheets to lock worksheet names

  2. Design layout with the user (KPI row, main chart, detail views, filters)

  3. Call generate_layout_json to save the layout as a JSON or YAML file

  4. Call add_dashboard with layout=

Layout options:

  • str (file path): Path to JSON or YAML layout file (recommended for complex layouts)

  • dict: Custom declarative layout tree passed inline Native set control (mode dropdown or checkdropdown): {"type": "set_control", "field": "Set name", "worksheet": "View", "mode": "dropdown"}

  • "auto" (default): Simple vertical fallback — use layout dict or layout file for mixed layouts

  • "vertical": All worksheets stacked vertically

  • "horizontal": All worksheets side-by-side

  • "grid-2x2": 2x2 grid layout

For dashboard design best practices, read: read_resource('cwtwb://skills/dashboard_designer')

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNo
heightNo
layoutNoauto
dashboard_nameYes
worksheet_namesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_dashboard_action

Add a filter, highlight, URL, navigation, or parameter dashboard action.

For action_type="parameter", provide source_field, target_parameter, and a Tableau-serialized clear_value such as d:2026-02-12, i:0, or s:LROOT:All.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
fieldsNo
captionNo
event_typeNoon-select
action_typeYes
aggregationNoattr
clear_valueNo
source_fieldNo
source_sheetNo
target_sheetNo
source_sheetsNo
target_sheetsNo
clear_behaviorNokeep-current
dashboard_nameYes
field_mappingsNo
target_dashboardNo
target_parameterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_dashboard_extension

Add a native dashboard extension with structured manifest and settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
widthNo
heightNo
manifestYes
settingsNo
dashboard_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_dashboard_set_action

Add a Set Action (edit-group-action) to a dashboard.

The set fills with the marks under the pointer and clears when it leaves, enabling hover-driven labels and calculations.

ParametersJSON Schema
NameRequiredDescriptionDefault
captionNo
event_typeNoon-hover
target_setYes
clear_optionNoexclude-all
source_sheetYes
single_selectNo
dashboard_nameYes
selection_modeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_dashboard_toggle_button

Show/hide a dedicated dashboard sheet container with a native button.

ParametersJSON Schema
NameRequiredDescriptionDefault
positionNo
caption_shownNoHide
caption_hiddenNoShow
dashboard_nameYes
initially_hiddenNo
target_parametersNo
target_worksheetsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_group

Create a categorical dimension by grouping source-field members.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupsYes
field_nameYes
source_fieldYes
default_valueNoOther
internal_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_hierarchy

Create an ordered Tableau drill hierarchy from bare dimension fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
fieldsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_hyper_datasource

Add and activate another independent extracted data source.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
filepathYes
table_nameNoExtract

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_parameter

Add a parameter to the workbook.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
aliasNo
datatypeNoreal
max_valueNo
min_valueNo
domain_typeNorange
granularityNo
default_valueNo0
internal_nameNo
allowed_valuesNo
default_formatNo
allowed_aliasesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_percentage_band

Add a native percentage distribution band on an existing axis.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoper-pane
formulaNoaverage
symmetricNo
axis_fieldYes
fill_colorNo#00000000
pane_indexNo
percentageNo
probabilityNo95
value_fieldNo
worksheet_nameYes
reverse_paletteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_reference_band

Add a constant or field-backed native filled band on an existing axis.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoper-pane
axis_fieldYes
fill_colorNo#f5f5f5
pane_indexNo
lower_fieldNo
lower_labelNo
lower_valueNo
upper_fieldNo
upper_labelNo
upper_valueNo
lower_formulaNomin
upper_formulaNomax
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_reference_line

Add a field-backed reference line to a configured worksheet pane.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNo
scopeNoper-pane
formulaNoaverage
tooltipNoAverage = <Value>
axis_fieldYes
label_typeNovalue
pane_indexNo
probabilityNo95
value_fieldYes
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_set

Create a Tableau set (datasource filter-group) for membership logic.

Use basis_field + top_n to build a top-N set (e.g. Top Central ranked by SUM(Central - Qty)); omit both to create an empty set used as a Set Action target (e.g. Highlighted Manufacturer).

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
membersNo
use_allNo
set_nameYes
directionNoDESC
aggregationNoSum
basis_fieldNo
internal_nameNo
dimension_fieldYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
add_worksheetC

Add a new blank worksheet to the workbook.

ParametersJSON Schema
NameRequiredDescriptionDefault
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It states that a blank worksheet is added, but does not mention side effects (e.g., whether the worksheet becomes active, how it interacts with existing worksheets, or if it requires save). No annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words. It is appropriately concise for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter and an output schema (likely returns the worksheet ID or success), the description is minimal. It does not describe the return value or any constraints. For a simple add operation, this is adequate but not complete; the agent may need more context to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one required parameter ('worksheet_name') with 0% description coverage. The description does not explain what 'worksheet_name' means or any constraints (e.g., uniqueness, length). Since there is only one parameter, the baseline is 4, but the description adds no value beyond the schema, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add') and the resource ('a new blank worksheet to the workbook'). It distinguishes from sibling tools like 'clone_worksheet' or 'configure_chart', though it could be more specific about the context (e.g., that it adds to an existing workbook).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'clone_worksheet' or 'add_dashboard'. It does not specify prerequisites (e.g., workbook must be open) or exclusions. The context signals show no annotations, so the description carries the full burden.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_twb

Analyze an existing TWB/TWBX file against cwtwb's declared capabilities.

This tool requires a file_path that already exists on disk. It cannot analyze the active in-memory workbook directly and it does not save the current workbook. For a newly generated workbook, call save_workbook first, then pass that saved path to analyze_twb.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
apply_twb_migrationC

Apply a workbook migration and write a migrated TWB plus reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoworkbook
file_pathYes
output_pathYes
target_sourceYes
mapping_overridesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It indicates the tool is likely destructive (applying migrations, writing files) and does not mention idempotency or side effects. The description adds some behavioral context ('write a migrated TWB plus reports') but lacks details on error handling or state changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that states the core action. It is front-loaded and contains no filler, but could benefit from slightly more structure (e.g., listing key parameters).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters (3 required) and no annotation support, the description is incomplete. It does not explain return values despite having an output schema, nor does it cover migration scope or overrides. Sibling tools with similar purposes demand clearer differentiation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions 'file_path', 'target_source', 'output_path', and 'scope' implicitly via 'workbook migration', but provides no details on 'mapping_overrides'. The description does not explain parameter meaning or expected formats beyond what the schema minimally indicates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Apply a workbook migration and write a migrated TWB plus reports', which is a clear verb+resource combination. However, it does not differentiate from the sibling 'migrate_twb_guided' or 'preview_twb_migration', leaving ambiguity about when to use this tool versus those.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'migrate_twb_guided' or 'preview_twb_migration'. No context about prerequisites, typical workflow, or exclusions is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_worksheet_refactorB

Rewrite one worksheet to use replacement fields without touching others.

ParametersJSON Schema
NameRequiredDescriptionDefault
replacementsYes
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavior. It states 'rewrite ... using replacement fields' but doesn't mention mutability, whether operation is reversible, or if it requires prior preview. For a mutation tool with no annotations, more detail is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no fluff. It front-loads the action and scope. Could add a second sentence for when to use or behavior, but current is acceptable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (refactoring a worksheet), and no annotations or output schema description, the description is incomplete. It omits what 'replacements' are, whether it validates, and how errors are handled. Output schema exists but description doesn't leverage it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (no descriptions), but description mentions 'replacement fields', hinting at the 'replacements' parameter. However, it doesn't clarify the format or meaning of the replacement fields, leaving ambiguity. With 0 parameters described in schema, baseline is 3 but could be higher.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states action ('rewrite one worksheet'), resource ('worksheet'), and scope ('without touching others'). It distinguishes from siblings like 'preview_worksheet_refactor' or 'configure_worksheet_style', though not explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies use when needing to refactor a single worksheet without affecting others, but lacks explicit when-to-use vs alternatives, such as when to use 'apply_twb_migration' or 'preview_worksheet_refactor' first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_calculated_fields

Report calculated-field datatype/role contradictions without mutation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
clone_worksheetC

Clone an existing worksheet and its worksheet window.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_worksheetYes
target_worksheetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It does not disclose any behavioral traits such as side effects (e.g., whether cloning copies dependencies like calculated fields), authorization requirements, or impact on source worksheet. The description only states what the tool does, not how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one sentence) and directly states the purpose. It could be considered under-specified, but it is concise and front-loaded with the key action. However, it sacrifices necessary detail for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (cloning involves copying multiple elements), the description is incomplete. It does not mention what exactly is cloned (e.g., fields, formatting, filters). Although an output schema exists, the description lacks behavioral context needed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the schema provides no descriptions. The tool description does not add any meaning to the parameters 'source_worksheet' and 'target_worksheet'. It is unclear what format or identifiers are expected (e.g., worksheet names or IDs).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Clone an existing worksheet and its worksheet window', which clearly indicates the action (clone) and the resource (worksheet and its window). It distinguishes from siblings like 'add_worksheet' and 'configure_worksheet_style', though it doesn't explicitly differentiate from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention when to use 'clone_worksheet' instead of 'add_worksheet' or 'configure_worksheet_style'. There is no context on prerequisites or limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_chart

Configure chart type and field mappings for a worksheet.

For chart type selection and encoding best practices, read: read_resource('cwtwb://skills/chart_builder')

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
sizeNo
colorNo
labelNo
detailNo
columnsNo
filtersNo
tooltipNo
color_mapNo
mark_typeNoAutomatic
label_runsNo
map_fieldsNo
map_layersNo
sort_fieldNo
wedge_sizeNo
label_paramNo
text_formatNo
map_partitionNo
map_layer_modeNooverlay
measure_valuesNo
worksheet_nameYes
mark_sizing_offNo
sort_descendingNo
axis_fixed_rangeNo
customized_labelNo
geographic_fieldNo
separate_measure_domainsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_chart_recipe

Configure a showcase recipe chart through the shared recipe registry.

For recipe chart patterns, read: read_resource('cwtwb://skills/chart_builder')

ParametersJSON Schema
NameRequiredDescriptionDefault
recipe_argsNo
recipe_nameYes
worksheet_nameYes
auto_ensure_prerequisitesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_custom_label

Set rich literal/field mark labels while preserving pane calculation context.

ParametersJSON Schema
NameRequiredDescriptionDefault
runsYes
pane_indexNo
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_custom_tooltip

Set formatted text/field runs or embedded sheets with explicit filter_fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
runsYes
pane_indexNo
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_datasource_blend

Link independently aggregated sources in a worksheet without a join.

ParametersJSON Schema
NameRequiredDescriptionDefault
link_fieldsYes
worksheet_nameYes
secondary_fieldsYes
secondary_datasourceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_dual_axis

Configure a dual-axis chart composition.

For dual-axis chart patterns and best practices, read: read_resource('cwtwb://skills/chart_builder')

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
size_1No
size_2No
color_1No
color_2No
columnsNo
filtersNo
label_1No
label_2No
detail_1No
detail_2No
hide_axesNo
sort_fieldNo
color_map_1No
mark_type_1NoBar
mark_type_2NoLine
show_labelsNo
mark_color_1No
mark_color_2No
size_value_1No
size_value_2No
synchronizedNo
wedge_size_1No
wedge_size_2No
hide_zerolineNo
reverse_axis_1No
worksheet_nameYes
dual_axis_shelfNorows
mark_sizing_offNo
sort_descendingNo
table_calc_overridesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_layered_chart

Build layered panes with encodings, ordered values and native styles.

sort_mode='computed' orders dimension members before table calculations; 'shelf' explicitly selects shelf sorting, and 'auto' retains default routing. table_calc_context gives explicit overrides a local native instance identity, including map calculations whose dimensions live on mark detail shelves.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
panesNo
columnsNo
filtersNo
fold_axesNo
hide_axesNo
sort_modeNoauto
axis_shelfNorows
sort_fieldNo
synchronizedNo
worksheet_nameYes
sort_descendingNo
table_calc_contextNo
table_calc_overridesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_subtotals

Configure visual subtotals and per-dimension subtotal labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoAvg.
aggregationNoAverage
measure_fieldsYes
worksheet_nameYes
subtotal_fieldsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_worksheet_domain_range

Complete missing dates for discrete exact-date fields; [] disables completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYes
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_worksheet_style

Apply worksheet-level styling: background color, axis/grid/border visibility.

pane_mark_style accepts mark-labels-range-field as a public field expression and resolves its native qualified reference for min/max labels.

For formatting best practices, read: read_resource('cwtwb://skills/formatting')

ParametersJSON Schema
NameRequiredDescriptionDefault
hide_axesNo
map_styleNo
axis_styleNo
size_styleNo
color_styleNo
cell_formatsNo
hide_bordersNo
legend_styleNo
pane_formatsNo
hide_reflinesNo
hide_zerolineNo
label_formatsNo
table_formatsNo
gridline_styleNo
header_formatsNo
hide_droplinesNo
hide_gridlinesNo
worksheet_nameYes
disable_tooltipNo
hide_band_colorNo
pane_cell_styleNo
pane_mark_styleNo
background_colorNo
hide_sort_controlsNo
hide_table_dividersNo
pane_datalabel_styleNo
hide_col_field_labelsNo
hide_row_field_labelsNo
pane_trendline_hiddenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
configure_worksheet_time_series

Extend a continuous date domain and allow calculations on added periods.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldYes
periodsYes
period_typeNoyear
worksheet_nameYes
calculations_on_densified_marksNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
convert_workbook

Convert TWB, TWBX, YAML or JSON by output suffix without an editor session.

YAML/JSON contain an editable native XML tree, not a simplified chart DSL. Assets are copied alongside definitions; keep these files together. Unknown XML is retained. Only XML syntax is checked, not Tableau runtime behavior. The current editor session is not modified. Existing output requires force.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
input_pathYes
output_pathYes
copy_default_device_layout

Preserve default geometry in a custom Phone/Tablet layout with shared IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_nameNoPhone
dashboard_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
create_workbookC

Create a new workbook from a TWB or TWBX template file.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_pathNo
workbook_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It does not state whether the tool modifies existing files, requires specific permissions, or if the creation is reversible. The word 'create' implies a write operation, but no further details are given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that directly states the tool's purpose. It is concise and front-loaded, though it could benefit from additional context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and the relatively simple operation (creation from template), the description provides the core purpose. However, it lacks details on parameter behavior, error conditions, or what happens to existing workbooks. It is adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 2 parameters with 0% description coverage, meaning the description adds no detail beyond the schema. However, the parameter names ('template_path', 'workbook_name') are fairly self-explanatory. The description clarifies that the template is from a TWB/TWBX file, which adds context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the action ('create a new workbook') and the source material ('from a TWB or TWBX template file'). However, it does not differentiate from siblings like 'generate_workbook_from_run' or 'save_workbook', which could create ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lacks any guidance on when to use this tool versus alternatives (e.g., 'generate_workbook_from_run' or 'open_workbook'). It does not mention prerequisites, such as whether the template file must exist or be provided via a path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_capabilityB

Describe one declared capability and its support tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It accurately states the tool's behavior (describing one capability) but does not disclose side effects, permissions, or error conditions. The description is honest but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It is front-loaded with the key action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity is low (simple retrieval with 2 parameters and an output schema), the description is mostly adequate. However, the lack of parameter semantics and usage guidance reduces completeness for an agent without external knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain what 'kind' and 'name' refer to or how to obtain valid values. The description adds no meaning beyond the schema field titles, leaving the agent to guess.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a capability and its support tier, using a specific verb ('describe') and resource ('capability'). It distinguishes from sibling tools like 'list_capabilities' by focusing on a single capability, though it does not explicitly contrast them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., 'list_capabilities'). The description lacks context on prerequisites or appropriate usage scenarios, leaving the agent to infer from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diff_template_gapC

Summarize the non-core capability gap of a TWB template.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It does not mention if the tool is read-only, has side effects, requires authentication, or any constraints. The description only states the purpose but not the behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action, and contains no unnecessary words. It is appropriately concise for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (one parameter, no annotations, but an output schema exists), the description is too sparse. It does not explain the tool's purpose relative to siblings, the format of the summary, or prerequisites. The output schema may provide return structure, but the description should still set expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, meaning the input schema provides no description for the 'file_path' parameter. The description does not explain what 'file_path' should point to (e.g., a TWB file, a specific format). With only one parameter, the description should add context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Summarize the non-core capability gap of a TWB template', which is a specific verb ('Summarize') and resource ('non-core capability gap of a TWB template'). It is clear and distinct from sibling tools like 'profile_twb_for_migration' or 'analyze_twb'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'profile_twb_for_migration' or 'analyze_twb'. The description does not explain what constitutes a 'non-core capability gap' or in what context this is relevant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

enable_automatic_phone_layout

Derive a scrolling Phone layout from the default dashboard objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
dashboard_nameYes
worksheet_heightNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
enable_domain_completion

Add an INDEX() detail table calculation to trigger Tableau densification.

ParametersJSON Schema
NameRequiredDescriptionDefault
field_nameNoDomain Completion Index
ordering_typeNoRows
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
generate_layout_json

Generate and save a dashboard layout file.

Recommended workflow:

  1. Call list_worksheets to get available worksheet names

  2. Design the layout with the user (show ASCII preview for confirmation)

  3. Call this tool to save the layout as a JSON or YAML file

  4. Call add_dashboard with layout=

The layout_tree uses the declarative container DSL:

  • {"type": "container", "direction": "vertical"|"horizontal", "children": [...]}

  • {"type": "worksheet", "name": ""}

  • Use "fixed_size" (int, pixels) for KPI rows and filter sidebars

  • Use "weight" (int, relative) for main analytical areas

ParametersJSON Schema
NameRequiredDescriptionDefault
layout_treeYes
output_pathYes
ascii_previewYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
generate_layout_yaml

Generate and save a dashboard layout YAML file.

Recommended workflow:

  1. Call list_worksheets to get available worksheet names

  2. Design the layout with the user (show ASCII preview for confirmation)

  3. Call this tool to save the layout as a YAML file

  4. Call add_dashboard with layout=

The layout_tree uses the same declarative container DSL as generate_layout_json.

ParametersJSON Schema
NameRequiredDescriptionDefault
layout_treeYes
output_pathYes
ascii_previewYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
get_mcp_status

Report cwtwb MCP server version, workbook state, and safe usage guardrails.

Use this when an AI client seems stale, cannot see expected tools, or is about to edit MCP configuration to switch Tableau credentials. This tool never returns secret values.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

import_blended_field

Define a primary aggregate proxy for a secondary source field.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYes
fieldYes
secondary_datasourceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
initialize_dashboard_filter_action

Initialize an existing native filter action's targets with overridable members.

ParametersJSON Schema
NameRequiredDescriptionDefault
membersYes
action_nameYes
dashboard_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
inspect_excel_connection

Preview how an Excel workbook will be interpreted before connection setup.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
sheet_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
inspect_target_schemaB

Inspect the first-sheet schema of a target Excel datasource.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_sourceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. It discloses it inspects only the first sheet of Excel, but does not mention any side effects or permissions. With no annotations, this is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, 10 words, no filler. Front-loaded with verb and resource. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given only 1 parameter, no annotations, but with an output schema (which presumably explains return value), the description is nearly complete. Could add that it returns field names and types, but output schema likely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, yet description adds no meaning to the 'target_source' parameter. The description only mentions 'target Excel datasource' but does not explain what 'target_source' is or how to specify it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states verb 'inspect' and resource 'first-sheet schema of a target Excel datasource'. It clearly distinguishes from siblings like 'intake_datasource_schema' by specifying Excel and first-sheet scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. However, from context it's implied to inspect schema before using other datasource tools. No alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_capabilities

List cwtwb's declared capability boundary.

This reports what workbook features/charts are supported by cwtwb. It does not enumerate callable MCP tools and should not be used to infer whether a tool like add_dashboard or save_workbook exists.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
list_dashboardsA

List dashboards and their worksheet zones in the current workbook.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It describes the tool as listing dashboards and zones, implying a read-only operation, which is reasonable but lacks details on side effects or access requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no extraneous information. It is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with zero parameters and an output schema exists (not shown). The description is sufficient given the simplicity, though it could mention that it operates on the currently open workbook.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with zero parameters, so the description does not need to add parameter info. It correctly states the scope (current workbook) which adds context beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists dashboards and their worksheet zones in the current workbook, with a specific verb and resource. However, it does not differentiate from siblings like 'add_dashboard' or 'list_worksheets'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., 'add_dashboard' or 'list_worksheets'). The context of 'current workbook' is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_fieldsA

List all available fields in the current workbook datasource.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries the burden. It states the tool 'lists' fields, implying a read-only operation with no side effects. However, it does not clarify behavior like caching, pagination, or what 'available' means exactly (e.g., include hidden fields?). The description is minimally adequate but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loaded with the key action. Every word earns its place. No wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, presence of output schema, and low complexity, the description is nearly complete. It identifies the resource and scope. It could optionally mention that the output includes field names and types, but the output schema presumably covers that. Slight lack of detail on what 'available' means, but adequate for a zero-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the description does not need to add parameter details. The description correctly implies no configuration is needed. With 100% schema coverage (trivially), a baseline of 3 applies, but the description adds value by specifying the source ('current workbook datasource').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all available fields in the current workbook datasource. It specifies the resource ('fields') and scope ('current workbook datasource'). While it distinguishes from sibling tools like 'add_calculated_field' and 'remove_calculated_field', it does not explicitly differentiate from potential field-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage before other actions that require knowledge of available fields (e.g., adding calculated fields). However, it does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_worksheetsA

List worksheet names in the current workbook.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states it lists 'names', which is a non-destructive read operation. Since no annotations are provided, the description carries the full burden. It clearly indicates no side effects, though it doesn't mention what happens if the workbook is empty or if there are many worksheets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 5 words, perfectly concise and front-loaded. Every word is necessary and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema needed since output is presumably list of strings), the description is complete. It tells the agent exactly what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters, so there is nothing to explain. The description adds no parameter semantics, but this is acceptable since there are none. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists worksheet names in the current workbook, using a specific verb ('list') and resource ('worksheet names'). It is distinct from siblings like list_dashboards, list_fields, and add_worksheet, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need to know worksheet names, and it is clearly a read-only operation. However, it does not explicitly state when not to use it or compare to alternatives like list_fields or list_dashboards, which might be relevant if the agent needs other information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_workbookA

Open an existing workbook (.twb or .twbx) for in-place worksheet editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It states 'in-place worksheet editing', which implies the tool modifies the workbook directly. However, it does not disclose whether it requires specific permissions, locks the file, or how it handles unsaved changes. The behavioral transparency is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that clearly states the purpose. Every word is necessary, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is an output schema (not shown but present) and a single parameter, the description is minimally adequate. However, it lacks context about what happens after opening (e.g., if the workbook is loaded into memory, if subsequent tools operate on it) and does not mention prerequisites like file existence or format validity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but there is only one parameter (file_path). The description adds no additional meaning beyond the parameter name; it does not specify path format, allowed file extensions (though implied), or whether absolute/relative paths are accepted. With low coverage, the description should compensate but does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Open' and the resource 'existing workbook', specifying file types (.twb or .twbx) and the purpose 'for in-place worksheet editing'. It distinguishes this from sibling tools like 'create_workbook' or 'save_workbook' by focusing on opening an existing file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need to edit worksheets in an existing workbook, but it does not explicitly state when not to use it or provide alternatives. Among many sibling tools, it doesn't clarify that for creating new workbooks one should use 'create_workbook' or for saving use 'save_workbook'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_twb_migrationC

Preview a workbook migration onto a target datasource.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoworkbook
file_pathYes
target_sourceYes
mapping_overridesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It does not disclose whether the tool is read-only or destructive, what side effects occur (if any), or if it modifies any state. The term 'preview' suggests no mutation, but this is not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise. However, it is too terse and lacks necessary detail, making it underspecified rather than efficiently packed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 parameters, 0% schema coverage, no annotations, but has an output schema), the description is incomplete. It does not explain what the preview returns (despite output schema existing), nor does it provide context about when to use this tool in the migration workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it does not explain any parameter. The description mentions 'migration' and 'target datasource' vaguely, but does not elaborate on 'file_path', 'target_source', 'scope', or 'mapping_overrides'. The purpose of 'scope' with default 'workbook' and 'mapping_overrides' is not explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool 'Previews a workbook migration onto a target datasource.' The verb 'preview' and resource 'workbook migration' are clear, but the description is vague about what 'preview' entails (e.g., does it show potential issues, a diff, or a success/failure indicator?). It does not distinguish this from siblings like 'apply_twb_migration' or 'profile_twb_for_migration'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs. alternatives like 'apply_twb_migration' or 'migrate_twb_guided'. There is no mention of prerequisites (e.g., need to profile first) or conditions under which preview is useful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_worksheet_refactorB

Preview worksheet-scoped field rewrites without mutating the workbook.

ParametersJSON Schema
NameRequiredDescriptionDefault
replacementsYes
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description must convey behavior. It clearly states 'without mutating the workbook' (read-only preview). However, it does not disclose return value structure, whether changes are simulated, or any side effects. The output schema exists but is not described; without it, the agent may not know what the preview returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that concisely captures purpose and key constraint. No wasted words; front-loaded with action and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not detail return values. However, the tool has nested objects and 0% schema coverage, so the description should explain the replacements map. It partially compensates with 'worksheet-scoped field rewrites' but lacks detail on what constitutes a rewrite. Completeness is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does not describe the parameters 'worksheet_name' or 'replacements' beyond their names. The description mentions 'worksheet-scoped' hinting at worksheet_name, but does not explain that 'replacements' is a map from old field names to new names. The agent has no semantic guidance beyond the schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Preview worksheet-scoped field rewrites without mutating the workbook,' which clearly specifies the action (preview), scope (worksheet-scoped field rewrites), and key trait (non-mutating). It distinguishes from sibling tools like 'apply_worksheet_refactor' (which applies changes) and 'preview_twb_migration' (which is workbook-level). However, the term 'field rewrites' could be more explicit about what is being replaced.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when wanting to see the effect of field replacements before committing, contrasting with 'apply_worksheet_refactor'. No explicit when-not-to-use or alternative guidance is provided. The sibling list includes 'preview_twb_migration' and 'apply_worksheet_refactor', but the description does not directly compare.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

profile_twb_for_migrationB

Profile workbook datasources and worksheet scope before migration.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoworkbook
file_pathYes
target_sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool profiles datasources and worksheet scope, implying it is a read-only analysis tool. However, it does not disclose side effects, authentication needs, or whether it modifies the workbook. The term 'profile' suggests no destructive action, but this is implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (one sentence) and front-loaded with the verb and resource. It is appropriately sized, but could benefit from a brief mention of parameters or output without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, output schema exists, and multiple sibling tools), the description is minimally adequate. It covers the core purpose but lacks detail on parameters and usage context. The presence of an output schema somewhat mitigates the need to describe return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning no parameter descriptions exist in the schema. The description does not explain what 'file_path', 'scope', or 'target_source' mean or how they affect behavior. The parameter names are self-explanatory to some extent, but the description fails to add semantic value beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Profile workbook datasources and worksheet scope before migration' clearly identifies the tool's purpose with a specific verb ('profile') and resource ('workbook datasources and worksheet scope'). It distinguishes from sibling tools like 'analyze_twb' and 'migrate_twb_guided' by focusing on pre-migration profiling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'analyze_twb' or 'preview_twb_migration'. It does not mention prerequisites or conditions that would trigger its use, leaving the agent to infer from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_field_mappingC

Scan source and target schema and propose a field mapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoworkbook
file_pathYes
target_sourceYes
mapping_overridesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only says 'Scan source and target schema.' It does not disclose if this is a read-only operation, whether it modifies state, what permissions are needed, or how long it might take. The output schema exists but the description doesn't hint at what it returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 8 words, which is very concise. However, it is too minimal; it sacrifices clarity and completeness for brevity. Still, it avoids unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is an output schema, the description does not need to explain return values, but it still lacks context on tool behavior, prerequisites, and how to use parameters. The tool has 4 parameters with 0% schema description coverage, so more detail in the description is warranted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, meaning the description adds no parameter details. The description does not explain the meaning of 'file_path,' 'target_source,' 'scope,' or 'mapping_overrides.' The schema provides some hints (e.g., 'scope' defaults to 'workbook'), but the description fails to clarify how these parameters affect the mapping proposal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Scan' and the resource 'source and target schema' to 'propose a field mapping.' It distinguishes itself from siblings like 'inspect_target_schema' and 'migrate_twb_guided' by focusing on proposing a mapping rather than just inspecting or executing migration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'inspect_target_schema' or 'migrate_twb_guided.' There is no mention of prerequisites (e.g., schema must be available), nor any exclusion criteria (e.g., when not to use).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_calculated_fieldA

Remove a previously added calculated field.

ParametersJSON Schema
NameRequiredDescriptionDefault
field_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the removal action, which implies a destructive operation (deletion). However, it does not clarify whether the field is permanently deleted or can be recovered, nor does it mention any prerequisites (e.g., field must exist). The description is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the action. Every word is necessary and there is no extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one parameter, no annotations, and an output schema exists. Given the simplicity, the description is reasonably complete but could mention that the field must exist and that the operation may affect formulas depending on it. The output schema likely covers return values, so that is not a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one required parameter 'field_name' with 0% schema description coverage. The description adds meaning by specifying it's a 'previously added calculated field', clarifying that the field must exist. This provides context beyond the parameter name alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'Remove' and the resource 'calculated field', clearly stating the action and object. It distinguishes from sibling tools like 'add_calculated_field' by implying the inverse operation. However, it could be more specific about the scope (e.g., from the active worksheet or workbook).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for removing a calculated field that was previously added. It does not provide explicit when-to-use or when-not-to-use guidance, nor does it reference alternatives. The sibling 'add_calculated_field' is the obvious counterpart, but no explicit comparison is made.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repair_calculated_field_issues

Preview or explicitly apply selected calculated-field metadata repairs.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
field_namesNo
issue_codesNo
datasource_namesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
save_workbook

Save the active workbook as a .twb or .twbx file. Use a .twbx extension to produce a packaged workbook (ZIP) that bundles the XML with any data extracts and images carried over from the source .twbx.

This is the only default MCP tool that writes the active in-memory workbook to disk. After create_workbook/open_workbook plus worksheet/chart/dashboard edits, call save_workbook with the desired output_path to create the final .twb or .twbx file. validate_workbook and analyze_twb do not save files.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
screenshot_workbook

Screenshot a published workbook's view for human review.

Use after upload_workbook to capture a visual snapshot. The screenshot is saved locally for human inspection.

Args: workbook_id: The workbook ID returned by upload_workbook. output_dir: Directory to save screenshot (default: output/validation). view_index: Index of the view to screenshot (default: 0). view_name: Name of the view to screenshot (overrides view_index). env_path: Optional path to a .env file with Tableau credentials. Explicit env_path takes priority over process environment variables.

Returns: {success, path, view_name, view_id, size_kb, error}

ParametersJSON Schema
NameRequiredDescriptionDefault
env_pathNo
view_nameNo
output_dirNooutput/validation
view_indexNo
workbook_idYes
select_datasource

Select the source for subsequent field and worksheet authoring.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_compound_color_palette

Map ordered categorical tuples to colors, including Measure Names.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYes
mappingsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_csv_connection

Configure the workbook datasource to use a local CSV connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo
charsetNoutf-8-sig
filepathYes
delimiterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_date_options

Set datasource weekday origin for date-part headers and week calculations.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_of_weekNosunday

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_excel_connectionC

Configure the workbook datasource to use a local Excel connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo
filepathYes
sheet_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It does not explain whether the connection replaces an existing one, what happens to existing data, or any side effects. It also doesn't mention permission requirements or file accessibility. The output schema exists but isn't referenced in the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 9 words, efficient and front-loaded. It uses active voice and clear terminology. However, it could be slightly improved by adding a brief note about parameters or behavior without significant bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters, 0% schema coverage, no annotations, and a task that likely involves file I/O and connection configuration, the description is incomplete. It lacks information about return values (output schema exists but not described), error conditions, and parameter details. The output schema existence suggests richer behavior, but the description doesn't leverage it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only mentions 'local Excel connection' but doesn't describe individual parameters like filepath, sheet_name, or fields. The schema provides names, but the description adds no additional meaning, missing an opportunity to clarify the purpose of sheet_name (e.g., which sheet to use) or fields (e.g., column mapping).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool configures a workbook datasource to use a local Excel connection, specifying the action (configure), resource (workbook datasource), and target type (local Excel connection). It distinguishes itself from sibling tools like set_hyper_connection or set_mysql_connection, which target different datasource types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., set_hyper_connection for Hyper files). It doesn't mention prerequisites like whether a workbook must already be open or if the Excel file must exist. Sibling tools suggest different datasource types, but the description provides no comparative context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_field_fiscal_year_start

Set the native fiscal year starting month on a date field and dependencies.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldYes
monthYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_field_format

Set or clear a field's default Tableau display format.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldYes
default_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_field_geographic_role

Assign or clear a field's geographic role.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldYes
geographic_roleYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_geocoding_context

Set geographic lookup context for generated map coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNo
countryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_hyper_connection

Configure the workbook datasource to use a local Hyper extract connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
tablesNo
filepathYes
table_nameNoExtract
relationshipsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_measure_name_aliases

Alias actual Measure Names members, including table calculation measures.

ParametersJSON Schema
NameRequiredDescriptionDefault
mappingYes
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_mysql_connectionC

Configure the workbook datasource to use a local MySQL connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNo3306
dbnameYes
serverYes
usernameYes
table_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so description must fully disclose behavior. It does not state whether the tool modifies the workbook immediately, requires an open workbook, or what happens on failure. No mention of side effects or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no wasted words. But lacks structure; could benefit from a note about required vs optional parameters or order of operations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters (4 required), no output schema info (though output schema exists, its content is not described), and no annotations, the description is too sparse to ensure correct invocation. Missing details like whether the connection is persistent or temporary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning no descriptions for parameters. The description adds no parameter-level semantics; it just names the tool. Parameters like 'server', 'dbname' are self-explanatory but 'table_name' could be confused with a table to create or select. No hint about how 'port' default is used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it configures a workbook datasource for a local MySQL connection, which is clear. However, 'local' may be confusing as parameters include a 'server' field. It distinguishes from sibling connection tools (set_excel_connection, etc.) but not explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this vs other connection tools (set_excel_connection, set_hyper_connection, etc.). No prerequisites or alternative suggestions provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_shape_palette

Embed local shape assets and map categorical members to the native palette.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldYes
shapesYes
paletteNoCustom

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_tableauserver_connection

Configure the workbook datasource to use a Tableau Server connection.

This edits the workbook datasource connection only. It does not configure Tableau REST API/PAT credentials for validate_workbook_api, upload_workbook, or screenshot_workbook; pass env_path to those validation tools instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNo82
dbnameYes
serverYes
usernameYes
directoryNo/dataserver
table_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
set_worksheet_captionB

Set or clear a plain-text worksheet caption.

ParametersJSON Schema
NameRequiredDescriptionDefault
captionYes
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so description must carry behavioral information. It states the tool sets or clears a caption, implying a mutation. However, it does not disclose if the operation is reversible, if it requires permissions, or what the output schema indicates (return value).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that efficiently communicates the core functionality with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 2 required parameters and no nested objects, the description is reasonably complete. However, it lacks details about return value (output schema exists but description doesn't mention it) and edge cases like clearing caption behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning. It explains that the caption is 'plain-text' and that the tool can 'clear' (likely by empty string). This adds value beyond the schema, which only lists names and types. However, it does not detail what 'clear' means in terms of input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sets or clears a plain-text worksheet caption, using the verb 'set' and specifying the resource (worksheet caption). It distinguishes from siblings like 'set_worksheet_hidden' by focusing on caption content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. For instance, there is no mention that to clear a caption one can pass an empty string, nor when to use this over other worksheet modification tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_worksheet_hiddenB

Hide or unhide a worksheet tab by updating worksheet window metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
hiddenNo
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the action (hide/unhide) and the metadata context, but does not mention if there are side effects (e.g., impacts on other sheets or workbook structure) or prerequisites (e.g., worksheet must exist).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and front-loaded. However, it could be slightly more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, output schema exists but not described), the description is adequate but not thorough. It omits explanation of the output schema and potential constraints (e.g., cannot hide the only visible worksheet).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only mentions 'worksheet window metadata' without detailing the two parameters. The schema itself defines worksheet_name (string) and hidden (boolean with default true), but the description adds no additional meaning beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool hides or unhides a worksheet tab, specifying the verb (hide/unhide) and resource (worksheet tab). It distinguishes from siblings like add_worksheet or clone_worksheet by focusing on visibility rather than creation or duplication.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. For example, when to use set_worksheet_hidden versus set_worksheet_caption or other worksheet configuration tools is not addressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_worksheet_title

Set or clear the visible plain-text worksheet title.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
worksheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
upload_workbook

Publish a .twb/.twbx to Tableau Cloud for openability or screenshots.

Prefer validate_workbook_api for the default cloud semantic validation path because it does not publish or store the workbook. Use upload_workbook only when you explicitly need a published workbook_id, visual screenshot, TWBX packaging validation, or publish/openability evidence.

Args: twb_path: Path to .twb or .twbx file. data_path: Optional data file (.xlsx/.xls/.hyper) to package. name: Workbook name on Tableau Cloud (defaults to filename stem). overwrite: Whether to overwrite existing workbook with same name. env_path: Optional path to a .env file with Tableau credentials. Explicit env_path takes priority over process environment variables.

Returns: {success, workbook_id, workbook_url, views, twbx_path, twbx_size_kb, error}

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
env_pathNo
twb_pathYes
data_pathNo
overwriteNo
validate_formula

Check Tableau function names without mutating the active workbook.

ParametersJSON Schema
NameRequiredDescriptionDefault
formulaYes
field_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
validate_workbook

Validate a workbook against the official Tableau TWB XSD schema.

Checks whether the generated XML conforms to Tableau's published schema. This tool does not save or export the active workbook. If file_path is omitted, it validates the current in-memory workbook before save; if file_path is provided, it validates an existing .twb/.twbx file on disk. Call save_workbook when you need to write the workbook to a file.

Args: file_path: Path to a .twb or .twbx file to validate. If omitted, validates the currently open workbook (in memory, before save).

Returns: PASS/FAIL summary with error details.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
validate_workbook_api

Validate a .twb file via Tableau Cloud REST API (no publish).

This performs semantic validation that checks whether the workbook will actually open in Tableau — beyond what local XSD schema validation can detect (calculated field formulas, field references, data source connectivity, etc.). The file is NOT stored on the server.

Only .twb files are supported. For .twbx files, use upload_workbook.

Requires Tableau Cloud June 2026+ / Server 2026.2+ (API version 3.29+).

Args: twb_path: Path to .twb file. validation_level: "syntactic" (XSD only) or "semantic" (full, default). env_path: Optional path to a .env file with Tableau credentials. Explicit env_path takes priority over process environment variables.

Returns: {success, validation_level, valid, errors, warnings, error}

ParametersJSON Schema
NameRequiredDescriptionDefault
env_pathNo
twb_pathYes
validation_levelNosemantic

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 76 tool updatesv0.28.0
    • Changedadd_calculated_field3 fields changed
      • addedInput schema / properties / internal_name
        Added value: +{
        +  "default": "",
        +  "title": "Internal Name",
        +  "type": "string"
        +}
      • addedInput schema / properties / table_calc
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Table Calc"
        +}
      • addedInput schema / properties / validate_formula
        Added value: +{
        +  "default": true,
        +  "title": "Validate Formula",
        +  "type": "boolean"
        +}
    • Addedadd_combined_set
    • Changedadd_dashboard1 field changed
      • changedInput schema / properties / layout / default
        Previous value: -"vertical"New value: +"auto"
    • Changedadd_dashboard_action11 fields changed
      • addedInput schema / properties / aggregation
        Added value: +{
        +  "default": "attr",
        +  "title": "Aggregation",
        +  "type": "string"
        +}
      • addedInput schema / properties / clear_behavior
        Added value: +{
        +  "default": "keep-current",
        +  "title": "Clear Behavior",
        +  "type": "string"
        +}
      • addedInput schema / properties / clear_value
        Added value: +{
        +  "default": "",
        +  "title": "Clear Value",
        +  "type": "string"
        +}
      • addedInput schema / properties / field_mappings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Field Mappings"
        +}
      • addedInput schema / properties / source_field
        Added value: +{
        +  "default": "",
        +  "title": "Source Field",
        +  "type": "string"
        +}
      • addedInput schema / properties / source_sheet / default
        Added value: +""
      • addedInput schema / properties / source_sheets
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Source Sheets"
        +}
      • addedInput schema / properties / target_dashboard
        Added value: +{
        +  "default": "",
        +  "title": "Target Dashboard",
        +  "type": "string"
        +}
      • addedInput schema / properties / target_parameter
        Added value: +{
        +  "default": "",
        +  "title": "Target Parameter",
        +  "type": "string"
        +}
      • addedInput schema / properties / target_sheets
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Target Sheets"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "dashboard_name",
        -  "action_type",
        -  "source_sheet"
        -]New value: +[
        +  "dashboard_name",
        +  "action_type"
        +]
    • Addedadd_dashboard_extension
    • Addedadd_dashboard_set_action
    • Addedadd_dashboard_toggle_button
    • Addedadd_group
    • Addedadd_hierarchy
    • Addedadd_hyper_datasource
    • Changedadd_parameter3 fields changed
      • addedInput schema / properties / alias
        Added value: +{
        +  "default": "",
        +  "title": "Alias",
        +  "type": "string"
        +}
      • addedInput schema / properties / allowed_aliases
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Allowed Aliases"
        +}
      • addedInput schema / properties / internal_name
        Added value: +{
        +  "default": "",
        +  "title": "Internal Name",
        +  "type": "string"
        +}
    • Addedadd_percentage_band
    • Addedadd_reference_band
    • Addedadd_reference_line
    • Addedadd_set
    • Addedaudit_calculated_fields
    • Removedbuild_analysis_brief
    • Removedbuild_execution_plan
    • Removedbuild_wireframe
    • Changedconfigure_chart4 fields changed
      • addedInput schema / properties / map_layer_mode
        Added value: +{
        +  "default": "overlay",
        +  "title": "Map Layer Mode",
        +  "type": "string"
        +}
      • addedInput schema / properties / map_partition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Map Partition"
        +}
      • addedInput schema / properties / separate_measure_domains
        Added value: +{
        +  "default": false,
        +  "title": "Separate Measure Domains",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / sort_field
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Sort Field"
        +}
    • Addedconfigure_custom_label
    • Addedconfigure_custom_tooltip
    • Addedconfigure_datasource_blend
    • Changedconfigure_dual_axis2 fields changed
      • addedInput schema / properties / sort_field
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Sort Field"
        +}
      • addedInput schema / properties / table_calc_overrides
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "items": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Table Calc Overrides"
        +}
    • Addedconfigure_layered_chart
    • Addedconfigure_subtotals
    • Addedconfigure_worksheet_domain_range
    • Changedconfigure_worksheet_style8 fields changed
      • addedInput schema / properties / color_style
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Color Style"
        +}
      • addedInput schema / properties / gridline_style
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Gridline Style"
        +}
      • addedInput schema / properties / hide_sort_controls
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Hide Sort Controls"
        +}
      • addedInput schema / properties / legend_style
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Legend Style"
        +}
      • addedInput schema / properties / map_style
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Map Style"
        +}
      • addedInput schema / properties / pane_formats
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Pane Formats"
        +}
      • addedInput schema / properties / size_style
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Size Style"
        +}
      • addedInput schema / properties / table_formats
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Table Formats"
        +}
    • Addedconfigure_worksheet_time_series
    • Removedconfirm_authoring_stage
    • Addedconvert_workbook
    • Addedcopy_default_device_layout
    • Removeddraft_authoring_contract
    • Addedenable_automatic_phone_layout
    • Addedenable_domain_completion
    • Removedfinalize_analysis_brief
    • Removedfinalize_authoring_contract
    • Removedfinalize_wireframe
    • Addedgenerate_gallery_layout
    • Addedgenerate_layout_yaml
    • Removedgenerate_workbook_from_run
    • Removedget_client_interaction_capabilities
    • Addedget_mcp_status
    • Removedget_run_status
    • Addedimport_blended_field
    • Addedinitialize_dashboard_filter_action
    • Addedinspect_excel_connection
    • Removedintake_datasource_schema
    • Removedinteractive_stage_confirmation
    • Addedlink_worksheet_filters
    • Removedlist_authoring_runs
    • Addedlist_gallery_templates
    • Removedmigrate_twb_guided
    • Addedrecommend_gallery_templates
    • Removedreopen_authoring_stage
    • Addedrepair_calculated_field_issues
    • Removedresume_authoring_run
    • Removedreview_authoring_contract
    • Removedreview_authoring_contract_for_run
    • Addedscreenshot_workbook
    • Addedselect_datasource
    • Addedset_compound_color_palette
    • Addedset_csv_connection
    • Addedset_date_options
    • Addedset_field_fiscal_year_start
    • Addedset_field_format
    • Addedset_field_geographic_role
    • Addedset_geocoding_context
    • Changedset_hyper_connection1 field changed
      • addedInput schema / properties / relationships
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Relationships"
        +}
    • Addedset_measure_name_aliases
    • Addedset_shape_palette
    • Addedset_worksheet_title
    • Removedstart_authoring_run
    • Addedupload_workbook
    • Addedvalidate_formula
    • Addedvalidate_workbook_api
  2. 56 tool updatesv0.18.1
    • First observedadd_calculated_field
    • First observedadd_dashboard
    • First observedadd_dashboard_action
    • First observedadd_parameter
    • First observedadd_worksheet
    • First observedanalyze_twb
    • First observedapply_twb_migration
    • First observedapply_worksheet_refactor
    • First observedbuild_analysis_brief
    • First observedbuild_execution_plan
    • First observedbuild_wireframe
    • First observedclone_worksheet
    • First observedconfigure_chart
    • First observedconfigure_chart_recipe
    • First observedconfigure_dual_axis
    • First observedconfigure_worksheet_style
    • First observedconfirm_authoring_stage
    • First observedcreate_workbook
    • First observeddescribe_capability
    • First observeddiff_template_gap
    • First observeddraft_authoring_contract
    • First observedfinalize_analysis_brief
    • First observedfinalize_authoring_contract
    • First observedfinalize_wireframe
    • First observedgenerate_layout_json
    • First observedgenerate_workbook_from_run
    • First observedget_client_interaction_capabilities
    • First observedget_run_status
    • First observedinspect_target_schema
    • First observedintake_datasource_schema
    • First observedinteractive_stage_confirmation
    • First observedlist_authoring_runs
    • First observedlist_capabilities
    • First observedlist_dashboards
    • First observedlist_fields
    • First observedlist_worksheets
    • First observedmigrate_twb_guided
    • First observedopen_workbook
    • First observedpreview_twb_migration
    • First observedpreview_worksheet_refactor
    • First observedprofile_twb_for_migration
    • First observedpropose_field_mapping
    • First observedremove_calculated_field
    • First observedreopen_authoring_stage
    • First observedresume_authoring_run
    • First observedreview_authoring_contract
    • First observedreview_authoring_contract_for_run
    • First observedsave_workbook
    • First observedset_excel_connection
    • First observedset_hyper_connection
    • First observedset_mysql_connection
    • First observedset_tableauserver_connection
    • First observedset_worksheet_caption
    • First observedset_worksheet_hidden
    • First observedstart_authoring_run
    • First observedvalidate_workbook

TDQS

C2.7/5.0

Scored across 56 tools

Disambiguation4/5

Most tools target distinct actions like adding fields, configuring charts, or managing authoring runs. However, tools like 'build_analysis_brief' and 'finalize_analysis_brief' could be confused, and 'review_authoring_contract' vs 'review_authoring_contract_for_run' have overlapping purposes.

Naming Consistency3/5

Tools predominantly use verb_noun pattern (e.g., add_calculated_field, open_workbook), but there are inconsistencies like 'interactive_stage_confirmation' (adjective_noun) and 'profile_twb_for_migration' (verb_noun_preposition). The naming is readable but not fully consistent.

Tool Count2/5

With 56 tools, the server is overly large for a focused authoring assistant. Many tools are specialized for guided workflows, making the surface feel bloated. A smaller, more focused set would be more coherent.

Completeness4/5

The tool set covers a broad range of workbook operations: creation, editing, validation, migration, and connection management. Minor gaps exist, such as lacking direct tool for deleting worksheets or dashboards, but the overall lifecycle is well-covered.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI applications to integrate with Tableau through tools, resources, and prompts for querying data, exploring content, and retrieving visualizations from Tableau workbooks and datasources.
    15,494 npm
    351
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables integration with Tableau to query data, explore workbook content, and retrieve visualization images through natural language. It provides developer primitives for building AI applications that interact seamlessly with Tableau servers.
    15,494 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI applications to interact with Tableau through tools for querying data, exploring content, and retrieving views.
    15,494 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI applications to interact with Tableau for querying data, exploring content, and retrieving views through natural language.
    15,494 npm
    Apache 2.0