Tableau MCPCAUTION
Tableau's official MCP Server. Helping agents see and understand data.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://www.tableau.com/support-levels-it-and-developer-tools)
[](https://github.com/tableau/tableau-mcp/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/@tableau/mcp-server)
Overview
Tableau MCP is a suite of developer primitives, including tools, resources and prompts, that will make it easier for developers to build AI applications that integrate with Tableau.
Official Documentation
https://tableau.github.io/tableau-mcp/
Getting Started
Hosted Tableau MCP (Recommended for Tableau Cloud)
Tableau MCP is available as a managed service at `https://mcp.tableau.com`. It uses OAuth 2.1 so every user signs in with their own Tableau Cloud identity, and all existing per-user permissions are enforced automatically.
Point any MCP-compatible client at https://mcp.tableau.com and complete the OAuth sign-in flow when prompted.
See Popular Client Integrations for step-by-step setup instructions for Slack, Claude, ChatGPT, and other common AI clients.
Tableau Server customers and Cloud customers who require self-hosted infrastructure should see the Enterprise Deployment and Self-Hosted Getting Started guides.
Self-Hosted / Local (npx)
The quickest way to run Tableau MCP locally. Requires Node.js 22.7.5 or later — no cloning or building needed. Configure your AI tool (MCP client) with:
{
"mcpServers": {
"tableau": {
"command": "npx",
"args": ["-y", "@tableau/mcp-server@latest"],
"env": {
"SERVER":4f9cfb82edf3OBSERVED · 2026-10-12Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add mcp-server --env AUTH=${AUTH} --env OAUTH_DISABLE_SCOPES=${OAUTH_DISABLE_SCOPES} --env OAUTH_EMBEDDED_AUTHZ_SERVER=${OAUTH_EMBEDDED_AUTHZ_SERVER} --env OAUTH_ISSUER=${OAUTH_ISSUER} -- npx -y @tableau/[email protected]{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"-y",
"@tableau/[email protected]"
],
"env": {
"AUTH": "${AUTH}",
"OAUTH_DISABLE_SCOPES": "${OAUTH_DISABLE_SCOPES}",
"OAUTH_EMBEDDED_AUTHZ_SERVER": "${OAUTH_EMBEDDED_AUTHZ_SERVER}",
"OAUTH_ISSUER": "${OAUTH_ISSUER}"
}
}
}
}Exposed tools (9)
6 read · 3 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
Default | read | The default project that was automatically created by Tableau. |
Primary | read | |
Samples | read | Sample content shipped with Tableau. |
extract-optimization-apply | write | Tableau Cloud admin workflow (destructive Apply phase): take the recommendations from the |
job-optimization-inform | read | Tableau Cloud admin workflow: analyze Admin Insights job performance and surface optimization |
stale-content-cleanup-apply | write | Tableau Cloud admin workflow (destructive Apply phase): find stale workbooks and published |
stale-content-cleanup-inform | read | Tableau Cloud admin workflow: identify stale workbooks and published datasources by |
user-license-reclamation-apply | write | Tableau Cloud admin workflow (destructive Apply phase): identify inactive licensed users |
user-license-reclamation-inform | read | Tableau Cloud admin workflow: identify inactive licensed users who are candidates for |
Trust audit
CAUTIONgrade C · trust 70/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (2 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (23)
token: 'fake-mcp-access-token',
token: 'test-bearer-token-12345',
.send({ token: 'unknown-token-that-does-not-exist' });-----BEGIN RSA PRIVATE KEY-----\nMIIE...HZ3Q==\n-----END RSA PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----\nMIIE...HZ3Q==\n-----END RSA PRIVATE KEY-----
#OAUTH_JWE_PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY-----\nMIIE...HZ3Q==\n-----END RSA PRIVATE KEY-----
badtwbx.twbx
.mcpbignore
.nojekyll
import { LocalExecutor } from '../../toolExecutor/localToolExecutor.js';vi.mock('../../toolExecutor/localToolExecutor.js');} from '../../toolExecutor/toolExecutor.js';
import { LocalExecutor } from '../../toolExecutor/localToolExecutor.js';vi.mock('../../toolExecutor/localToolExecutor.js');OAUTH_ISSUER: http://127.0.0.1:3927
- Example: `http://127.0.0.1:3927` (for local testing) or `https://tableau-mcp.example.com` (for
- Default: `http://127.0.0.1:3927`
- Example: `http://127.0.0.1:3927` (for local testing) or `https://tableau-mcp.example.com` (for
request (e.g. from the web browser) to http://127.0.0.1:3927/tableau-mcp, you'll see a message like:
@docusaurus/core, @docusaurus/faster, @docusaurus/plugin-content-docs, @docusaurus/preset-classic, @docusaurus/theme-mermaid, @mdx-js/react, clsx, prism-react-renderer
@aws-sdk/client-s3, @aws-sdk/s3-request-presigner, @mjackson/multipart-parser, @modelcontextprotocol/ext-apps, @modelcontextprotocol/sdk, @xmldom/xmldom, @zodios/core, cookie-parser
tests/e2e/fixtures/workbooks/forecast.twbx
Never read or modify: `.env*`, `env.list`, `env.example.list` real values, PAT/UAT/Connected-App credentials, OAuth secrets, tokens, private keys. Logging masks PATs/tokens — do not disable masking (`
Gates applied: no_behavioural_pass.
4f9cfb82edf3full audit observations/trust-audit/mcp-server/tableau__tableau-mcp.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-12 | 4f9cfb82edf3 | CAUTION | C | 70 | first audit |
Questions
What is the @tableau/mcp-server MCP server?
Tableau's official MCP Server. Helping agents see and understand data.
What tools does @tableau/mcp-server expose?
9 in total: 6 read-only, 3 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is @tableau/mcp-server safe to connect to an agent?
With care. The audit graded it C (70/100) and found 23 things worth knowing before you trust this server, listed below with the exact line each was found on.
What credentials does @tableau/mcp-server need?
It reads AUTH, OAUTH_DISABLE_SCOPES, OAUTH_EMBEDDED_AUTHZ_SERVER, OAUTH_ISSUER and OAUTH_REFRESH_TOKEN_TIMEOUT_MS from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does @tableau/mcp-server run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @tableau/mcp-server at 4.22.3.
How current is this page?
The grade is for one exact copy of the source (4f9cfb82edf3), read on 2026-10-12. The repository is watched and re-audited when it changes.