Skip to main content
Glama
russelenriquez-agile

Tableau MCP Server

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 install

2. 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-id

3. Run Locally

npm start

The server starts on http://localhost:8080:

  • Health check: GET /health

  • SSE endpoint: GET /sse and POST /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

tableau_get_instructions

Get guidance on using Tableau MCP tools

tableau_search

Search content across Tableau

Dashboard Tools

Tool

Description

tableau_list_workbooks

List all accessible workbooks

tableau_get_workbook

Get workbook details

tableau_list_views

List views in a workbook

tableau_get_filters

Get available filters for a view

tableau_apply_filter

Store filters for query/export

Data Tools

Tool

Description

tableau_query_view

Export view data as CSV/JSON

tableau_list_datasources

List published data sources

tableau_refresh_datasource

Trigger extract refresh

Export Tools

Tool

Description

tableau_export_pdf

Export view as PDF

tableau_export_image

Export view as PNG

tableau_export_pptx

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

  1. Create GCS Bucket

    gsutil mb -l australia-southeast1 gs://tableau-mcp-exports
  2. Create 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=-
  3. 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-exports
  4. Configure Cloud Build Trigger

    • Source: Your GitHub repository

    • Event: Push to main branch

    • Configuration: cloudbuild.yaml

    • Substitution variables:

      • _TABLEAU_SERVER_URL: Your Tableau Cloud URL

      • _TABLEAU_SITE_ID: Your site content URL

      • _GCS_EXPORT_BUCKET: Your export bucket name

  5. Deploy Push to main branch to trigger automatic deployment.

Manual Deployment

gcloud run deploy tableau-mcp \
  --source . \
  --region australia-southeast1 \
  --memory 1Gi \
  --timeout 300s \
  --min-instances 1 \
  --allow-unauthenticated

Configuration Reference

Environment Variables

Variable

Required

Description

TABLEAU_SERVER_URL

βœ…

Tableau Cloud/Server URL

TABLEAU_SITE_ID

βœ…

Site content URL

TABLEAU_PAT_NAME

βœ…

Personal Access Token name

TABLEAU_PAT_SECRET

βœ…

Personal Access Token secret

MCP_API_KEY

βœ…

API key for MCP authentication

GCS_EXPORT_BUCKET

βœ…

GCS bucket for exports

GCP_PROJECT_ID

βœ…

Google Cloud project ID

PORT

❌

Server port (default: 8080)

TABLEAU_API_VERSION

❌

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.js

Troubleshooting

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 objectCreator and objectViewer roles

  • Large 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

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

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/russelenriquez-agile/tableau-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server