Tableau MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Tableau MCP ServerList all workbooks in the Finance project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Tableau MCP Server
A production-grade Model Context Protocol server that exposes Tableau Server/Cloud to Claude (Desktop, Code, and any other MCP-compatible client) as a real business-intelligence platform: projects, workbooks, worksheets/dashboards, published data sources, users and groups, background jobs and refresh schedules, Metadata API (GraphQL) lineage, Pulse metrics/insights, and CSV/PNG/PDF/Hyper exports — all constrained by the signed-in identity's actual Tableau site role and content permissions.
What this is (and isn't)
This is a deliberately-scoped core build: every tool listed below is a
real, working implementation against tableauserverclient and Tableau's
Metadata API — nothing is a stub that returns fake data. What's not
included yet is documented explicitly in Roadmap below, rather
than shipped as a half-finished tool that looks complete but isn't.
Related MCP server: tableau-mcp-navi
Quick start
python -m venv .venv
.venv/Scripts/activate # .venv/bin/activate on macOS/Linux
pip install -e ".[dev]" # add ",hyper" to also enable Hyper-extract tools
cp .env.example .env
python scripts/generate_keys.py # paste FERNET_KEY / JWT_SECRET into .env
# then set TABLEAU_SERVER_URL, TABLEAU_SITE_NAME, TABLEAU_PAT_NAME, TABLEAU_PAT_SECRET
pytest # run the test suite
python -m src.server # start over stdio (for Claude Desktop/Code)Point Claude Desktop / Claude Code at it
A ready-to-use .mcp.json is already in the repo root for Claude Code
(auto-discovered on open). For Claude Desktop, or to adapt the config for a
different machine, see docs/CLAUDE_SETUP.md for
copy-paste-ready configs and how to verify the connection.
Connecting to Tableau Cloud specifically
Works the same as Tableau Server, with two things to get right — both
covered in docs/CONFIGURATION.md:
TABLEAU_SITE_NAMEmust be your site's actual content URL — Cloud has no"Default"site (the server logs a warning at connect time if this looks misconfigured).Use a PAT (
TABLEAU_PAT_NAME/TABLEAU_PAT_SECRET), not username/password — Cloud's MFA/SSO enforcement breaks password sign-in for automation.
TABLEAU_API_VERSION should also be left blank (the default) so the server
auto-negotiates against Cloud's continuously-updating REST API version
instead of drifting out of date against a pinned one.
Docker
docker compose up --buildRuns over HTTP (MCP_TRANSPORT=http) behind bearer-JWT auth, with a Redis
sidecar for shared caching. See docs/SECURITY.md for how to issue tokens.
Documentation
docs/ARCHITECTURE.md— layering, request flow, async model, cachingdocs/TOKEN_OPTIMIZATION.md— the token optimizer: strategies, budgets, cost reporting, how to extend itdocs/TOOLS_REFERENCE.md— every MCP tool, resource, and prompt, with required Tableau roledocs/SECURITY.md— secrets, auth, authorization model, audit traildocs/CONFIGURATION.md— every environment variable, explaineddocs/TROUBLESHOOTING.md— common errors and what they mean
Design principles
Clean layering (
tools → services → repositories → tableau client), each layer only aware of the one below it — seedocs/ARCHITECTURE.md.Repository pattern:
tableauserverclient/tableauhyperapiare only ever imported insidesrc/repositories/andsrc/tableau/; everything above speaks in Pydantic domain models (src/models/).Provider-agnostic token optimization (
src/optimization/): every prompt is measured, deduplicated, compressed, and budget-checked before it reaches an LLM, and the savings are reported rather than assumed. New strategies plug in through a registry — seedocs/TOKEN_OPTIMIZATION.md.Manual dependency injection via a single composition root (
src/services/container.py) — explicit and easy to trace, not a framework.Defense in depth on authorization: Tableau's own REST API is always the final authority;
src/security/permissions.pyadds a fail-fast site-role check in front of it so a caller without the right role gets an immediate, clear error instead of an opaque Tableau 403.Every write is audited (
audit_log(...)) to a dedicated, structured log file, separate from general application logs.Every tool response is uniform:
{"success": true, "data": ...}or{"success": false, "error": ..., "error_type": ...}— raw tracebacks never reach an MCP client.Async-first: the blocking Tableau SDKs run on a bounded thread pool (
asyncio.to_thread/ThreadPoolExecutor) so the MCP event loop stays responsive under concurrent tool calls; the Metadata GraphQL client is nativeaiohttp.
Project structure
src/
config/ Pydantic Settings — every value from the environment, nothing hardcoded
security/ Fernet encryption, JWT issue/verify, Role→Permission matrix
logging_config/ loguru setup: redacted app logs + dedicated audit trail
cache/ In-memory or Redis-backed async cache, TTL + prefix invalidation
tableau/ Connection lifecycle (sign-in, re-auth, retry) + Metadata GraphQL client
models/ Pydantic domain models (framework-agnostic)
optimization/ Provider-agnostic token optimizer: tokenizer, pricing, pluggable strategies
repositories/ tableauserverclient/tableauhyperapi calls, translated to domain models
services/ Business logic: authorization, caching, audit logging, DI container
tools/ MCP @mcp.tool() functions — one module per Tableau resource type
resources/ MCP @mcp.resource() — read-only context (site config, project tree, identity)
prompts/ MCP @mcp.prompt() — reusable guided BI workflows
server.py FastMCP app assembly + stdio/HTTP transport entrypoint
tests/
unit/ Fast, mock-based tests (config, security, cache, services, tool_helpers)
integration/ TableauConnectionManager against a faked TSC.Server (no network needed)
docs/ Architecture, tools reference, security, configuration, troubleshooting
scripts/ generate_keys.py — FERNET_KEY / JWT_SECRET generationRoadmap
Deliberately deferred to a follow-up phase rather than included as thin/undertested stubs (see the "Deep core first" scoping decision this build made):
Hyper extract writing — building new
.hyperfiles from arbitrary data (tableauhyperapi.Inserter). Extract reading (list_hyper_tables,preview_hyper_extract) is implemented today.Statistical/ML analytics tools — forecasting, anomaly detection, clustering, regression, root-cause analysis.
pyproject.toml'sanalyticsextra already pins the libraries (scipy,statsmodels,scikit-learn,polars,duckdb) these would build on.Additional export formats — PowerPoint, Parquet, JSON (CSV, PNG, PDF, and Hyper are implemented).
Kubernetes manifests — Docker + docker-compose are provided; a Helm chart / raw manifests are not yet.
SSO/OIDC-federated Tableau auth flows beyond PAT and username/password (the
auth_settingfield oncreate_usersupports federated site configuration, but this server doesn't itself broker an OIDC/SAML login).
License
Proprietary — internal enterprise use.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityFmaintenanceA production-ready MCP server that transforms natural language into safe, executable SQL queries with multi-database support and intelligent schema analysis.Last updated1
- AlicenseAqualityCmaintenanceA Model Context Protocol (MCP) server for Tableau Server. Enables AI assistants to interact with Tableau workbooks, views, datasources, and metadata.Last updated24MIT
- Flicense-quality-maintenancePersonal MCP server for Snowflake and Tableau integration, enabling SQL queries and database/table listing as well as Tableau workbook, view, datasource management.Last updated
- FlicenseAqualityBmaintenanceMCP server that automates the publishing and validation of Tableau workbooks and data sources on Tableau Server or Tableau Cloud, enabling an AI agent to discover, build, validate, and publish content without human intervention.Last updated10
Related MCP Connectors
GibsonAI MCP server: manage your databases with natural language
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Rajvardhan-singh-26/mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server