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 Serversearch for sales dashboards from last quarter"
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 Model Context Protocol (MCP) server for Tableau Cloud that provides dashboard access, data querying, and export capabilities through Cursor IDE.
Features
π Discovery & Search - Find workbooks, views, and data sources
π Data Access - Query view data with filters as CSV or JSON
π€ Export - Export dashboards as PDF, PNG, or PowerPoint
π Data Refresh - Trigger extract refreshes for data sources
Prerequisites
Node.js 18.x or later
Google Cloud Platform account with:
Cloud Run enabled
Secret Manager enabled
Cloud Storage bucket for exports
Tableau Cloud/Server with:
Personal Access Token (PAT) credentials
API access enabled
Quick Start
1. Clone and Install
cd tableau-mcp
npm install2. Configure Environment Variables
Create a .env file (or set environment variables):
# Tableau Configuration
TABLEAU_SERVER_URL=https://prod-apnortheast-a.online.tableau.com
TABLEAU_SITE_ID=your-site-content-url
TABLEAU_PAT_NAME=your-pat-name
TABLEAU_PAT_SECRET=your-pat-secret
# MCP Server
MCP_API_KEY=your-secure-api-key
# Google Cloud
GCS_EXPORT_BUCKET=tableau-mcp-exports
GCP_PROJECT_ID=your-project-id3. Run Locally
npm startThe server starts on http://localhost:8080:
Health check:
GET /healthSSE endpoint:
GET /sseandPOST /sse
4. Configure Cursor
Add to your .cursor/mcp.json:
{
"mcpServers": {
"tableau": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://tableau-mcp-400124661305.australia-southeast1.run.app/sse",
"--header",
"X-API-Key: <your-api-key>"
]
}
}
}Note: Replace
<your-api-key>with your actual API key from Secret Manager (tableau-mcp-api-key).
Available Tools
Utility Tools
Tool | Description |
| Get guidance on using Tableau MCP tools |
| Search content across Tableau |
Dashboard Tools
Tool | Description |
| List all accessible workbooks |
| Get workbook details |
| List views in a workbook |
| Get available filters for a view |
| Store filters for query/export |
Data Tools
Tool | Description |
| Export view data as CSV/JSON |
| List published data sources |
| Trigger extract refresh |
Export Tools
Tool | Description |
| Export view as PDF |
| Export view as PNG |
| Export view as PowerPoint |
Usage Examples
Find and Export a Dashboard
1. Search for dashboards:
tableau_search({ query: "sales" })
2. List views in a workbook:
tableau_list_views({ workbookId: "abc123" })
3. Export as PDF:
tableau_export_pdf({ viewId: "xyz789" })Query Filtered Data
1. Get available filters:
tableau_get_filters({ viewId: "xyz789" })
2. Query with filters:
tableau_query_view({
viewId: "xyz789",
format: "json",
filters: { "Region": "West" }
})Deployment
Cloud Run Deployment
Create GCS Bucket
gsutil mb -l australia-southeast1 gs://tableau-mcp-exportsCreate Secrets in Secret Manager
echo -n "your-pat-name" | gcloud secrets create tableau-pat-name --data-file=- echo -n "your-pat-secret" | gcloud secrets create tableau-pat-secret --data-file=- echo -n "your-api-key" | gcloud secrets create tableau-mcp-api-key --data-file=-Grant Service Account Permissions
# Secret Manager access gcloud secrets add-iam-policy-binding tableau-pat-secret \ --member="serviceAccount:YOUR_SA@PROJECT.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" # GCS access gsutil iam ch serviceAccount:YOUR_SA@PROJECT.iam.gserviceaccount.com:objectCreator,objectViewer \ gs://tableau-mcp-exportsConfigure Cloud Build Trigger
Source: Your GitHub repository
Event: Push to
mainbranchConfiguration:
cloudbuild.yamlSubstitution variables:
_TABLEAU_SERVER_URL: Your Tableau Cloud URL_TABLEAU_SITE_ID: Your site content URL_GCS_EXPORT_BUCKET: Your export bucket name
Deploy Push to
mainbranch to trigger automatic deployment.
Manual Deployment
gcloud run deploy tableau-mcp \
--source . \
--region australia-southeast1 \
--memory 1Gi \
--timeout 300s \
--min-instances 1 \
--allow-unauthenticatedConfiguration Reference
Environment Variables
Variable | Required | Description |
| β | Tableau Cloud/Server URL |
| β | Site content URL |
| β | Personal Access Token name |
| β | Personal Access Token secret |
| β | API key for MCP authentication |
| β | GCS bucket for exports |
| β | Google Cloud project ID |
| β | Server port (default: 8080) |
| β | API version (default: 3.21) |
Cloud Run Settings
Setting | Value |
Region | australia-southeast1 |
Memory | 1Gi |
CPU | 1 |
Timeout | 300s |
Min instances | 1 |
Max instances | 10 |
Concurrency | 80 |
Limitations
Filters: Cannot apply filters to live dashboard views - only at query/export time
PPTX Export: Generated from PNG images, not native Tableau export
Data Query: Maximum 100,000 rows per request
Export URLs: Valid for 1 hour only
Rate Limits: Throttled to 10 requests/second to Tableau API
Project Structure
tableau-mcp/
βββ mcp-http-server.js # Main Express HTTP server
βββ mcp-handler.js # MCP protocol handler
βββ mcp_tools.json # Tool definitions
βββ config.js # Configuration management
βββ package.json # Dependencies
βββ Dockerfile # Container configuration
βββ cloudbuild.yaml # CI/CD configuration
βββ lib/
β βββ tableau-client.js # Tableau REST API client
β βββ gcs-client.js # GCS upload/signing
β βββ logger.js # Structured logging
βββ 00-utility-tools/tools/
β βββ get-instructions.js
β βββ search.js
βββ 01-dashboard-tools/tools/
β βββ list-workbooks.js
β βββ get-workbook.js
β βββ list-views.js
β βββ get-filters.js
β βββ apply-filter.js
βββ 02-data-tools/tools/
β βββ query-view-data.js
β βββ list-datasources.js
β βββ refresh-datasource.js
βββ 03-export-tools/tools/
βββ export-pdf.js
βββ export-image.js
βββ export-pptx.jsTroubleshooting
Authentication Errors
Verify PAT credentials are correct
Check that PAT has not expired
Ensure site ID matches the site content URL (not the site name)
Export Failures
Check GCS bucket exists and is accessible
Verify service account has
objectCreatorandobjectViewerrolesLarge exports may timeout - try smaller views or increase Cloud Run timeout
Rate Limiting
The server throttles to 10 requests/second
Batch operations may be slower due to throttling
Consider increasing throttle limit for Tableau Server (not Cloud)
License
MIT
Author
Agile Market Intelligence