Tableau MCP

Query Tableau data sources, explore workbooks and views, and read Pulse metrics from an assistant

Official · Tableau TypeScript Remote (hosted) · Streamable HTTPLocal · stdio Data and analytics

79 popularity score ★ 368 ↓ 18k/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude Codeterminal
claude mcp add --transport http Tableau https://mcp.tableau.com
Claude (desktop and web)Settings → Connectors → Add custom connector
https://mcp.tableau.com
ChatGPTSettings → Apps → Advanced → Developer mode, then Create app
https://mcp.tableau.com
Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs SERVER, SITE_NAME, PAT_NAME, PAT_VALUE. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add tableau -e SERVER=<SERVER> -e SITE_NAME=<SITE_NAME> -e PAT_NAME=<PAT_NAME> -e PAT_VALUE=<PAT_VALUE> -- npx -y @tableau/mcp-server@latest
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "tableau": {
      "command": "npx",
      "args": [
        "-y",
        "@tableau/mcp-server@latest"
      ],
      "env": {
        "SERVER": "<SERVER>",
        "SITE_NAME": "<SITE_NAME>",
        "PAT_NAME": "<PAT_NAME>",
        "PAT_VALUE": "<PAT_VALUE>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "tableau": {
      "command": "npx",
      "args": [
        "-y",
        "@tableau/mcp-server@latest"
      ],
      "env": {
        "SERVER": "<SERVER>",
        "SITE_NAME": "<SITE_NAME>",
        "PAT_NAME": "<PAT_NAME>",
        "PAT_VALUE": "<PAT_VALUE>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "tableau": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@tableau/mcp-server@latest"
      ],
      "env": {
        "SERVER": "<SERVER>",
        "SITE_NAME": "<SITE_NAME>",
        "PAT_NAME": "<PAT_NAME>",
        "PAT_VALUE": "<PAT_VALUE>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.tableau]
command = "npx"
args = ["-y", "@tableau/mcp-server@latest"]

[mcp_servers.tableau.env]
SERVER = "<SERVER>"
SITE_NAME = "<SITE_NAME>"
PAT_NAME = "<PAT_NAME>"
PAT_VALUE = "<PAT_VALUE>"
Gemini CLITerminal
gemini mcp add --scope user -e SERVER=<SERVER> -e SITE_NAME=<SITE_NAME> -e PAT_NAME=<PAT_NAME> -e PAT_VALUE=<PAT_VALUE> tableau npx -- -y @tableau/mcp-server@latest
Local (container)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs SERVER, SITE_NAME, PAT_NAME, PAT_VALUE. Replace each <NAME> with your value.

FirstTerminal
git clone https://github.com/tableau/tableau-mcp.git
cd tableau-mcp
npm install
npm run build:docker
Claude CodeTerminal
claude mcp add tableau -e SERVER=<SERVER> -e SITE_NAME=<SITE_NAME> -e PAT_NAME=<PAT_NAME> -e PAT_VALUE=<PAT_VALUE> -- docker run -i --rm -e SERVER -e SITE_NAME -e PAT_NAME -e PAT_VALUE tableau-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "tableau": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "SERVER",
        "-e",
        "SITE_NAME",
        "-e",
        "PAT_NAME",
        "-e",
        "PAT_VALUE",
        "tableau-mcp"
      ],
      "env": {
        "SERVER": "<SERVER>",
        "SITE_NAME": "<SITE_NAME>",
        "PAT_NAME": "<PAT_NAME>",
        "PAT_VALUE": "<PAT_VALUE>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "tableau": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "SERVER",
        "-e",
        "SITE_NAME",
        "-e",
        "PAT_NAME",
        "-e",
        "PAT_VALUE",
        "tableau-mcp"
      ],
      "env": {
        "SERVER": "<SERVER>",
        "SITE_NAME": "<SITE_NAME>",
        "PAT_NAME": "<PAT_NAME>",
        "PAT_VALUE": "<PAT_VALUE>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "tableau": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "SERVER",
        "-e",
        "SITE_NAME",
        "-e",
        "PAT_NAME",
        "-e",
        "PAT_VALUE",
        "tableau-mcp"
      ],
      "env": {
        "SERVER": "<SERVER>",
        "SITE_NAME": "<SITE_NAME>",
        "PAT_NAME": "<PAT_NAME>",
        "PAT_VALUE": "<PAT_VALUE>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.tableau]
command = "docker"
args = ["run", "-i", "--rm", "-e", "SERVER", "-e", "SITE_NAME", "-e", "PAT_NAME", "-e", "PAT_VALUE", "tableau-mcp"]

[mcp_servers.tableau.env]
SERVER = "<SERVER>"
SITE_NAME = "<SITE_NAME>"
PAT_NAME = "<PAT_NAME>"
PAT_VALUE = "<PAT_VALUE>"
Gemini CLITerminal
gemini mcp add --scope user -e SERVER=<SERVER> -e SITE_NAME=<SITE_NAME> -e PAT_NAME=<PAT_NAME> -e PAT_VALUE=<PAT_VALUE> tableau docker -- run -i --rm -e SERVER -e SITE_NAME -e PAT_NAME -e PAT_VALUE tableau-mcp
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs SERVER, SITE_NAME, PAT_NAME, PAT_VALUE. Replace each <NAME> with your value.

FirstTerminal
git clone https://github.com/tableau/tableau-mcp.git
cd tableau-mcp
npm install
npm run build
Claude CodeTerminal
claude mcp add tableau -e SERVER=<SERVER> -e SITE_NAME=<SITE_NAME> -e PAT_NAME=<PAT_NAME> -e PAT_VALUE=<PAT_VALUE> -- node '<ABSOLUTE_PATH_TO_CLONE>/build/index.js'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "tableau": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/build/index.js"
      ],
      "env": {
        "SERVER": "<SERVER>",
        "SITE_NAME": "<SITE_NAME>",
        "PAT_NAME": "<PAT_NAME>",
        "PAT_VALUE": "<PAT_VALUE>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "tableau": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/build/index.js"
      ],
      "env": {
        "SERVER": "<SERVER>",
        "SITE_NAME": "<SITE_NAME>",
        "PAT_NAME": "<PAT_NAME>",
        "PAT_VALUE": "<PAT_VALUE>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "tableau": {
      "type": "stdio",
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/build/index.js"
      ],
      "env": {
        "SERVER": "<SERVER>",
        "SITE_NAME": "<SITE_NAME>",
        "PAT_NAME": "<PAT_NAME>",
        "PAT_VALUE": "<PAT_VALUE>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.tableau]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/build/index.js"]

[mcp_servers.tableau.env]
SERVER = "<SERVER>"
SITE_NAME = "<SITE_NAME>"
PAT_NAME = "<PAT_NAME>"
PAT_VALUE = "<PAT_VALUE>"
Gemini CLITerminal
gemini mcp add --scope user -e SERVER=<SERVER> -e SITE_NAME=<SITE_NAME> -e PAT_NAME=<PAT_NAME> -e PAT_VALUE=<PAT_VALUE> tableau node -- '<ABSOLUTE_PATH_TO_CLONE>/build/index.js'

Settings 12

SERVER Required: URL of the Tableau Server, or the Cloud pod (e.g. https://prod-useast-c.online.tableau.com).
SITE_NAME Required: Content URL of the site. It may be blank on Tableau Server for the default site.
AUTH Optional: pat, uat, direct-trust, oauth or passthrough. Each mode other than pat needs its own settings. Default pat.
INCLUDE_TOOLS Optional: Comma-separated tools or groups to offer. All are offered by default. EXCLUDE_TOOLS hides tools instead, and the two cannot be set together.
ADMIN_TOOLS_ENABLED Optional: true turns on the admin-only tools. Default false. For admin tools.
FLOW_WRITE_TOOLS_ENABLED Optional: false hides run-flow, run-flow-task and cancel-flow-run. When unset the flow-write-tools flag (on) decides. FLOW_READ_TOOLS_ENABLED does the same for the read-only flow tools. For run-flow, run-flow-task, cancel-flow-run.
KNOWLEDGE_TOOLS_ENABLED Optional: true registers the knowledge read tools on sites that have Tableau Knowledge. When unset the knowledge-tools flag (off) decides. For query-knowledge-context, inspect-knowledge-context.
KNOWLEDGE_WRITE_TOOLS_ENABLED Optional: true registers manage-knowledge-context, but only when KNOWLEDGE_TOOLS_ENABLED is true too. When unset the knowledge-write-tools flag (off) decides. For manage-knowledge-context.
INSIGHTS_TOOLS_ENABLED Optional: true registers generate-insight-cards. Default false. For generate-insight-cards.
PRODUCT_TELEMETRY_ENABLED Optional: Sends a usage event to Tableau on each tool call. Only the value false stops it. Default true.
Set together: pat
PAT_NAME Required: Name of the personal access token (not your username).
PAT_VALUE secret Required: Secret value of the personal access token.

In a container, a setting goes in with -e NAME=value after docker run.

What it does

Tableau MCP is Tableau's own server for working with a Tableau Cloud or Tableau Server site from an assistant. It can list published data sources, read their fields and run queries against them through the VizQL Data Service. Workbooks and views can be found, downloaded and exported as data or images. It also searches site content and reads Pulse metrics. Some tools change things. Publishing a workbook or running a Prep flow are examples, and with admin tools switched on it can also change user roles or delete content after a preview.

You can use it two ways. Tableau hosts a copy at https://mcp.tableau.com for Tableau Cloud, where each person signs in with OAuth under their own permissions. The other way is to run the npm package yourself, with npx or from a clone or as a Docker image you build. That works against Cloud or Server and signs in with a personal access token unless AUTH says otherwise. The repo can also build a standalone executable that needs no Node install. The npm package carries the Web server only, so the Tableau Desktop authoring tools come from a separate build of the same repo.

The tool list in src/tools/web/toolName.ts has 55 tools, though not all of them show up by default. features.json turns the Prep flow tools on, run-flow included, and leaves the knowledge and MCP app tools off along with data apps. The knowledge tools now have their own switches: KNOWLEDGE_TOOLS_ENABLED for the two read tools, and KNOWLEDGE_WRITE_TOOLS_ENABLED for manage-knowledge-context, which also needs the read switch on. Admin tools stay hidden until ADMIN_TOOLS_ENABLED=true. Insight cards wait for INSIGHTS_TOOLS_ENABLED=true. The same file now turns role and registration checks on by default, so a user whose site role is too low, or a site that lacks a feature, may see fewer tools than the list holds.

What it needs

To run it yourselfNode.js 22.7.5+
Runs onmacOS, Windows, Linux
Tableau Cloud or Tableau ServerPaid planA user with API access and a personal access token. Admin tools need a site or server administrator role.

Create a personal access token under your Tableau account settings. Pass its name and secret as PAT_NAME and PAT_VALUE, next to SERVER and SITE_NAME. Pulse needs Tableau Cloud. Insight Brief and the knowledge tools need Tableau+, and flow runs need Data Management with Prep Conductor. For the hosted way you need a Tableau Cloud account, and in Claude Code you run /mcp and choose Authenticate.

Limits

  • Limit Tableau personal access tokens expire after 15 days unused by default, so a local PAT setup may need a fresh token now and then
  • Limit The Getting Started page says Node 18 is enough, but package.json engines asks for Node 22.7.5 or later
  • Not covered The npm package holds the Web server only; the Tableau Desktop authoring server has to be built from source (npm run build:desktop)
  • Limit There is no published Docker image; you build the tableau-mcp image from a clone with npm run build:docker
  • Size cap MAX_RESULT_LIMIT is unset by default, so list tools return everything unless it or MAX_RESULT_LIMITS is set
  • Not covered The hosted endpoint is for Tableau Cloud; Tableau Server sites need the self-hosted package
  • Limit Knowledge, MCP app and data app tools ship switched off; knowledge needs KNOWLEDGE_TOOLS_ENABLED=true, insight cards INSIGHTS_TOOLS_ENABLED=true
  • Limit features.json turns on enforce-role-requirements and enforce-registration-conditions, so tools the user's site role or the site cannot use are left out
  • Limit Setting both INCLUDE_TOOLS and EXCLUDE_TOOLS makes the server throw an error

Who it suits

It suits Tableau customers who want an assistant to answer questions from published data sources or to find and export workbooks and views. On Tableau Cloud the hosted endpoint spares you a token and a Node install, and each user only sees what their own permissions allow. Tableau Server sites, or teams that want the admin tools under their own control, should run the package themselves. Flow runs are on by default there, so set FLOW_WRITE_TOOLS_ENABLED=false or use INCLUDE_TOOLS if the assistant should only read. It needs a Tableau site to do anything.

Tools 55

37 only read, 15 change things, 3 can delete or overwrite.

list-datasources
Lists the published data sources on the site
get-datasource-metadata
Returns a data source's fields, types, calculations and relationships
query-datasource
Runs a VizQL Data Service query on a published data source and returns rows
list-workbooks
Lists the workbooks on the site
get-workbook
Returns details of one workbook
download-workbook
Fetches a workbook as TWB or TWBX
move-workbook changes
Moves a workbook to another project
request-workbook-upload changes
Starts an upload of a workbook file for publishing
publish-workbook changes
Publishes an uploaded workbook to the site
request-datasource-upload changes
Starts an upload of a data source file for publishing
publish-datasource changes
Publishes an uploaded data source to the site
list-projects
Lists the projects on the site
list-views
Lists the views on the site
list-custom-views
Lists the saved custom views of a workbook
get-view
Returns details of one view
get-view-data
Exports the data behind a view
get-view-image
Renders a view as an image
get-custom-view-data
Exports a custom view's data
get-custom-view-image
Renders a saved custom view as an image
search-content
Searches site content through Tableau's search API
list-flows
Lists Tableau Prep flows
get-flow
Returns one Prep flow with its outputs and recent runs
describe-flow
Summarises a Prep flow's inputs, outputs, steps and lineage
list-flow-runs
Lists the run history of Prep flows
list-flow-tasks
Lists scheduled Prep flow tasks
get-flow-task
Returns one scheduled flow task
run-flow changes
Runs a Prep flow now after a confirmed preview; can overwrite flow outputs
run-flow-task changes
Runs a scheduled flow task now after a confirmed preview
cancel-flow-run changes
Asks Tableau to cancel a queued or running flow run
list-all-pulse-metric-definitions
Lists every Pulse metric definition on a Tableau Cloud site
list-pulse-metric-definitions-from-definition-ids
Returns Pulse metric definitions by id
list-pulse-metrics-from-metric-definition-id
Lists the Pulse metrics under one definition
list-pulse-metrics-from-metric-ids
Returns Pulse metrics by metric id
list-pulse-metric-subscriptions
Lists the current user's Pulse metric subscriptions
generate-pulse-metric-value-insight-bundle
Builds Pulse insights for a metric, such as period change and top contributors
generate-pulse-insight-brief
Produces a Pulse Insight Brief; needs Tableau+
generate-insight-cards
Generates insight cards; off unless INSIGHTS_TOOLS_ENABLED is true
list-extract-refresh-tasks
Admin: lists the site's extract refresh tasks
update-cloud-extract-refresh-task changes
Admin: previews a change to an extract refresh schedule on Tableau Cloud
confirm-update-cloud-extract-refresh-task changes
Admin: applies a previewed schedule change
list-jobs
Admin: lists background jobs on the site
list-users
Admin: lists the site's users
update-user changes
Admin: changes a user's site role after confirmation
query-admin-insights
Admin: queries Admin Insights, for example for stale content
delete-content deletes
Admin: previews deleting a workbook, data source or extract refresh task
confirm-delete-content deletes
Admin: carries out a previewed delete
query-knowledge-context
Reads governed definitions, lineage and impact from the knowledge graph; off by default
inspect-knowledge-context
Checks the knowledge graph's status and health; off by default
manage-knowledge-context deletes
Creates, edits or deletes governed semantic context; off by default
get-embed-token
Issues a token for embedding Tableau content in an MCP app; off by default
render-interactive-viz
Shows an interactive visualisation in clients that support MCP apps; off by default
record-event changes
Sends an event from an embedded MCP app to Tableau telemetry; off by default
revoke-access-token changes
Revokes an access token
reset-consent changes
Clears a user's stored OAuth consent
scaffold-data-app changes
Creates a starter Tableau data app workspace; off by default

Similar servers