Tableau Public 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 Public MCP ServerGet the profile and recent workbooks for user wjsutton"
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 Public MCP Server
A Model Context Protocol (MCP) server that enables AI applications to interact with Tableau Public content programmatically. This server provides 22 tools for accessing user profiles, workbooks, visualisations, social connections, discovery features, and workbook analysis through Tableau Public's REST APIs.
Features
22 Comprehensive Tools covering all major Tableau Public API endpoints and workbook analysis
No Authentication Required - all endpoints are public
Type-Safe - built with TypeScript and Zod schema validation
Well-Tested - comprehensive test coverage with Vitest
MCP Standard - follows Model Context Protocol specifications
Easy Integration - works with Claude Desktop and other MCP clients
TWBX Analysis - extract calculations, data profiles, and structure from downloaded workbooks
Related MCP server: Tableau MCP Server
Table of Contents
Installation
Prerequisites
Node.js 20 or higher (includes npm and npx)
Install via npm (Recommended)
No local setup needed — run directly with npx:
{
"mcpServers": {
"tableau-public": {
"command": "npx",
"args": ["-y", "@wjsutton/tableau-public-mcp-server@latest"]
}
}
}Add this to your MCP client configuration file (see Quick Start for file locations).
Install from Source
Alternatively, clone and build locally:
# Clone the repository
git clone https://github.com/wjsutton/tableau-public-mcp.git
cd tableau-public-mcp
# Install dependencies
npm install
# Build the project
npm run buildQuick Start
Video Setup Guide for Claude Desktop and VSCode (GitHub Copilot)
Configure Claude Desktop
Add the server to your Claude Desktop configuration file:
Location:
macOS:
~/Library/Application\ Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Configuration (npm):
{
"mcpServers": {
"tableau-public": {
"command": "npx",
"args": ["-y", "@wjsutton/tableau-public-mcp-server@latest"]
}
}
}Configuration (from source):
{
"mcpServers": {
"tableau-public": {
"command": "node",
"args": ["/absolute/path/to/tableau-public-mcp/build/index.js"]
}
}
}Available Tools
The server provides 22 tools organised into 6 categories:
User Profile Tools (3)
Tool | Description | API Reference |
| Returns comprehensive profile data including display name, location, bio, workbook counts, follower/following counts, favourites count, social media links, website URL, freelance status, and the user's last 21 workbooks with metadata | |
| Returns user-defined workbook categories with contained workbooks, view counts, favourites, and engagement metrics. Supports pagination (max 500 categories). Returns empty array if user hasn't configured categories | |
| Returns essential profile metadata in a lightweight format including profileName, displayName, and basic user information. Faster alternative when you only need core profile details without workbook history |
Workbook Tools (4)
Tool | Description | API Reference |
| Returns paginated array of workbooks including titles, URLs, view counts, publication dates, thumbnails, and sheet/dashboard counts. Supports pagination (max 50 per request) and visibility filtering (NON_HIDDEN or ALL) | |
| Returns detailed metadata for a single workbook including title, author, view count, favourite count, publication date, default view URL, allowDataAccess flag, and complete view listing | |
| Returns complete workbook structure with all sheets, dashboards, data sources, and detailed view information including descriptions, sheet types, and repository URLs | |
| Returns up to 20 recommended workbooks based on content similarity, including titles, authors, view counts, and thumbnails |
Social Tools (3)
Tool | Description | API Reference |
| Returns paginated array of followers with usernames, display names, bios, and their latest workbook details. Supports pagination (max 24 per request, index increments by count: 0, 24, 48...) | |
| Returns paginated array of accounts the user follows with usernames, display names, bios, and their latest workbook details. Supports pagination (max 24 per request) | |
| Returns array of workbook repository URLs that the user has favourited/bookmarked. Includes workbook metadata and URLs for accessing the visualisations |
Discovery Tools (3)
Tool | Description | API Reference |
| Returns ranked search results for visualisations or authors matching the query. Supports type filtering (vizzes/authors), pagination (max 20 per request), and returns titles, authors, view counts, thumbnails, and URLs | |
| Returns paginated list of Tableau Public's featured Viz of the Day winners with titles, authors, descriptions, publication dates, view counts, and workbook URLs. Supports pagination (max 12 per page) | |
| Returns list of featured authors (Hall of Fame Visionaries, Tableau Visionaries, or Ambassadors) with profile information, workbook counts, follower counts, and featured workbooks |
Media Tools (2)
Tool | Description | API Reference |
| Returns URL to full-size PNG screenshot of a visualisation. Requires workbookUrl (e.g., "username/workbook-name") and viewName (sheet/dashboard name). Image displays static visualisation without interactivity | |
| Returns URL to thumbnail-sized preview image of a visualisation. Requires workbookUrl and viewName. Smaller file size ideal for gallery views and previews |
TWBX Analysis Tools (7)
Tool | Description | API Reference |
| Downloads .twbx file to local temp directory. First verifies allowDataAccess flag, then downloads the workbook containing XML definition, data extracts, and embedded assets. Returns file path, size, and metadata | |
| Extracts contents from .twbx ZIP archive. Returns paths to main TWB file, data sources, and embedded files. Creates organised directory structure with workbook XML, data extracts, images, and other assets | Local processing |
| Parses TWB XML to extract calculated fields, parameters, and source fields. Returns formulas, data types, field roles, dependencies, and supports hidden field filtering. Includes dependency analysis showing root and leaf calculations | Local processing |
| Analyses workbook XML to return complete structure including worksheets, dashboards, data sources, connections, and sheet hierarchy. Shows workbook organisation and data source relationships | Local processing |
| Builds dependency graph of calculated fields showing which calculations depend on others. Returns dependency chains, orphaned calculations, and complexity metrics to understand calculation architecture | Local processing |
| Identifies and extracts Level of Detail (LOD) expressions (FIXED, INCLUDE, EXCLUDE) from calculated fields. Returns LOD type, formula, scope, aggregation, and affected dimensions for each expression | Local processing |
| Profiles embedded data files (CSV, Excel, JSON, images) extracting statistics, column info, data types, sample values, and data quality metrics. Returns row counts, column summaries, and data distributions | Local processing |
Usage Examples
Visit https://wjsutton.github.io/tableau-public-mcp-examples/ for:
Use Cases
Examples
Prompt Templates
Configuration
Environment Variables
No environment variables are needed by default. The server supports the following optional environment variables:
Variable | Description | Default |
| Maximum results for paginated queries |
|
| Logging verbosity (debug, info, warn, error) |
|
| Request timeout in milliseconds |
|
| Base URL for Tableau Public API |
|
Development
Project Structure
tableau-public-mcp/
├── src/
│ ├── index.ts # Entry point
│ ├── server.ts # MCP server setup
│ ├── config.ts # Configuration
│ ├── tools/
│ │ ├── tool.ts # Base Tool class
│ │ ├── toolName.ts # Tool name types
│ │ ├── tools.ts # Tool registry
│ │ ├── getUserProfile/ # Tool implementation
│ │ │ ├── getUserProfile.ts
│ │ │ └── getUserProfile.test.ts
│ │ └── ... # Other tools (16 total)
│ └── utils/
│ ├── apiClient.ts # HTTP client
│ ├── pagination.ts # Pagination helpers
│ └── errorHandling.ts # Error utilities
├── build/ # Compiled output
├── package.json
├── tsconfig.json
└── vitest.config.tsDevelopment Commands
# Install dependencies
npm install
# Build TypeScript
npm run build
# Watch mode (rebuild on changes)
npm run dev
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage
# Lint code
npm run lintTesting
The project uses Vitest for testing with comprehensive coverage:
# Run all tests
npm test
# Run with coverage report
npm run test:coverage
# Run in watch mode for development
npm run test:watchTest Structure
Each tool has its own test file that covers:
Metadata validation (name, description)
Successful API calls with mocked responses
Error handling (404, network errors, etc.)
Parameter validation with Zod schemas
Pagination support where applicable
Architecture
System Architecture
┌─────────────────────────────────────────────────────────────────┐
│ MCP Client │
│ (Claude Desktop, etc.) │
└───────────────────────────┬─────────────────────────────────────┘
│ stdio
│ MCP Protocol
┌───────────────────────────▼─────────────────────────────────────┐
│ Tableau Public MCP Server │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Server (server.ts) │ │
│ │ - MCP Protocol Handler │ │
│ │ - Tool Registration │ │
│ │ - Request/Response Management │ │
│ └─────────────────────┬───────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────▼───────────────────────────────────┐ │
│ │ Tool Registry (tools.ts) │ │
│ │ 22 Tool Factories │ │
│ └─────────┬──────────┬──────────┬──────────┬──────────────┘ │
│ │ │ │ │ │
│ ┌─────────▼──┐ ┌───▼────┐ ┌─▼─────┐ ┌─▼────────┐ ... │
│ │ User │ │Workbook│ │Social │ │Discovery │ │
│ │ Profile │ │ Tools │ │Tools │ │ Tools │ │
│ │ Tools (3) │ │ (4) │ │ (3) │ │ (3) │ │
│ └─────┬──────┘ └───┬────┘ └─┬─────┘ └─┬────────┘ │
│ │ │ │ │ │
│ ┌─────▼─────────────▼──────────▼──────────▼────────────────┐ │
│ │ Utilities Layer │ │
│ │ ┌──────────┐ ┌──────────┐ ┌─────────┐ ┌──────────┐ │ │
│ │ │ Cached │ │ Error │ │ URL │ │ Config │ │ │
│ │ │ API │ │ Handling │ │ Builder │ │ │ │ │
│ │ │ Client │ │ │ │ │ │ │ │ │
│ │ └─────┬────┘ └──────────┘ └─────────┘ └──────────┘ │ │
│ └────────┼───────────────────────────────────────────────────┘ │
└───────────┼──────────────────────────────────────────────────────┘
│ HTTPS
│
┌───────────▼──────────────────────────────────────────────────────┐
│ Tableau Public REST APIs │
│ │
│ /profile/api/* - User profiles and workbooks │
│ /public/apis/bff/* - Search and discovery │
│ /views/* - Workbook images and thumbnails │
└────────────────────────────────────────────────────────────────────┘Design Patterns
Factory Pattern: Each tool is created by a factory function
Type Safety: Full TypeScript typing with Zod schema validation
Error Handling: Consistent error responses with helpful messages
Modularity: Tools are independent and self-contained
Testability: Mocked API clients for unit testing
Technology Stack
Component | Technology | Purpose |
Runtime | Node.js 20+ | JavaScript runtime |
Language | TypeScript 5.7+ | Type safety and modern JS |
MCP SDK | @modelcontextprotocol/sdk | MCP protocol implementation |
Validation | Zod | Schema validation |
Testing | Vitest | Unit and integration tests |
HTTP Client | Axios | API requests |
Key Features
No Authentication: All Tableau Public APIs are public
Stdio Transport Only: Designed for local MCP client integration
Comprehensive Error Handling: Detailed error messages with suggestions
Pagination Support: Built-in helpers for multi-page results
Logging: Request/response logging to stderr (stdout reserved for MCP)
API Reference
All tools interact with Tableau Public REST APIs. Key endpoints:
Endpoint Category | Base Path | Documentation |
User Profiles |
| User metadata and workbooks |
Workbooks |
| Workbook listings and details |
Social |
| Followers, following, favourites |
Search |
| Content discovery |
Discovery |
| Featured content |
Images |
| Visualisation media |
Troubleshooting
Common Issues
Issue: Server fails to start
Solution: Ensure Node.js 20+ is installed and dependencies are up to date
Issue: Tools return 404 errors
Solution: Verify usernames and workbook URLs are correct and publicly accessible
Issue: Rate limiting errors
Solution: Reduce request frequency or implement delays between calls
Issue: TypeScript compilation errors
Solution: Run
npm installto ensure all types are installed
Logging
The server logs to stderr (stdout is reserved for MCP protocol). Set LOG_LEVEL=debug for detailed logging:
LOG_LEVEL=debug node ./build/index.js 2> server.logContributing
Contributions are welcome! Please follow these steps:
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Make your changes with tests
Run tests and linting (
npm test && npm run lint)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
Development Guidelines
Follow the existing code style and patterns
Write comprehensive tests for new features
Update documentation for API changes
Use meaningful commit messages
Ensure all tests pass before submitting PR
Related Resources
License
MIT License - see LICENSE file for details
Acknowledgments
Built following the architecture patterns from tableau/tableau-mcp
Tableau Public API documentation by @wjsutton
Model Context Protocol by Anthropic
Support
Enjoy this project? Support it in Tableau's Hackathon
For issues and questions:
Open an issue on GitHub Issues
Check existing issues for solutions
Provide detailed reproduction steps for bugs
Made with ❤️ for the Tableau Public and MCP communities
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-quality-maintenanceEnables interaction with Tableau Cloud and Tableau Server through the REST API, supporting workbook management, view queries, extract refreshes, and content search operations.Last updated
- Alicense-qualityDmaintenanceEnables AI applications to integrate with Tableau through developer primitives including tools, resources and prompts. Supports querying data from datasources, exploring content like workbooks and views, and retrieving visualizations using the Tableau REST API.Last updated10,093Apache 2.0
- Flicense-quality-maintenanceEnables discovery, querying, and exporting of Tableau Cloud dashboards and data sources. Supports searching workbooks, filtering data, and exporting views as PDF, PNG, PowerPoint, CSV, or JSON.Last updated
- Alicense-qualityDmaintenanceEnables AI assistants to programmatically read, modify, and query Tableau workbook files (.twb and .twbx) on the local filesystem via 80 tools.Last updated5MIT
Related MCP Connectors
Generate Tableau .twb/.twbx workbooks: 47 tools for charts, dashboards, rules, CSV pipelines.
Hosted MCP for X/Twitter and Reddit. 12 read-only tools, no API keys, free during beta.
34 production API tools over one hosted MCP endpoint.
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/datalabs89/tableau-public-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server