# tableau/tableau-mcp architecture

> Architecture diagram of the GitHub repository tableau/tableau-mcp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tableau/tableau-mcp
- Repository: https://github.com/tableau/tableau-mcp

## Overview

Tableau MCP exposes Tableau operations to AI clients through MCP servers, with hosted/self-hosted web and local Desktop variants. The principal web workflow is client request → MCP tool execution → authenticated Tableau API access → returned data or content. Major capabilities include datasource querying, content exploration, views, administration, Knowledge, Pulse, flows, workbooks, and user/content management. Desktop mode instead discovers a local Tableau instance and executes workbook tools through its Agent API. Edges are limited to README statements and shown source/index references; several domain tool implementations and server registrations were not sampled.

Main entry points: [`src/restApiInstance.ts`](https://github.com/tableau/tableau-mcp/blob/main/src/restApiInstance.ts) (REST API instance), [`src/server.web.ts`](https://github.com/tableau/tableau-mcp/blob/main/src/server.web.ts) (Web server), [`src/desktop/sessionManager.ts`](https://github.com/tableau/tableau-mcp/blob/main/src/desktop/sessionManager.ts) (Desktop sessions), [`src/tools/web/queryDatasource/queryDatasource.ts`](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/queryDatasource/queryDatasource.ts) (Datasource queries)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["MCP entrypoints"]
  node_webserver["Web server<br/>[server.web.ts]"]
  node_mcpserver["MCP server core<br/>[server.ts]"]
  node_toolruntime["Tool runtime<br/>[tool.ts]"]
  node_prompts["Prompt primitives<br/>[index.ts]"]
  node_desktopserver["Desktop server<br/>[server.desktop.ts]"]
end

subgraph group_webtools["Tableau web tools"]
  node_query["Datasource queries<br/>[queryDatasource.ts]"]
  node_exploration["Content exploration<br/>[searchContent.ts]"]
  node_views["Views and data<br/>[getViewData.ts]"]
  node_knowledge["Knowledge context"]
  node_admin["Admin insights"]
  node_pulse["Pulse insights"]
  node_flows["Flow operations<br/>[runFlow.ts]"]
  node_workbooks["Workbook operations<br/>[getWorkbook.ts]"]
  node_users["User management<br/>[listUsers.ts]"]
end

subgraph group_tableau["Tableau access"]
  node_restinstance["REST API instance<br/>[restApiInstance.ts]"]
  node_restapi["Tableau REST SDK<br/>[restApi.ts]"]
  node_vizql["VizQL data API"]
end

subgraph group_identity["Identity and sessions"]
  node_oauth["OAuth endpoints<br/>[authorize.ts]"]
  node_sessionstore[("Session store")]
end

subgraph group_desktop["Desktop integration"]
  node_desktoptools["Desktop tools<br/>[tools.ts]"]
  node_sessionmanager["Desktop sessions<br/>[sessionManager.ts]"]
  node_discoverer["Instance discovery"]
  node_agent["Desktop Agent API<br/>[client.ts]"]
end

node_client(("AI client"))
node_tableaucloud{{"Tableau Cloud or Server"}}
node_localtableau{{"Tableau Desktop"}}

node_client -->|"sends MCP requests"| node_webserver
node_webserver -->|"uses server core"| node_mcpserver
node_client -->|"signs in"| node_oauth
node_webserver -->|"creates API access"| node_restinstance
node_toolruntime -->|"invokes API access"| node_restinstance
node_query -.->|"queries Tableau"| node_restinstance
node_exploration -.->|"searches Tableau"| node_restinstance
node_views -.->|"retrieves view data"| node_restinstance
node_knowledge -->|"queries Knowledge"| node_restinstance
node_admin -->|"runs admin queries"| node_restinstance
node_restinstance -->|"constructs client"| node_restapi
node_restapi -->|"calls Tableau APIs"| node_tableaucloud
node_query -.->|"queries datasource"| node_vizql
node_client -.->|"starts local server"| node_desktopserver
node_desktopserver -->|"registers tools"| node_desktoptools
node_desktoptools -.->|"requests executor"| node_sessionmanager
node_sessionmanager -->|"discovers instance"| node_discoverer
node_sessionmanager -->|"starts executor"| node_agent
node_agent -->|"calls local agent"| node_localtableau

click node_webserver "https://github.com/tableau/tableau-mcp/blob/main/src/server.web.ts"
click node_mcpserver "https://github.com/tableau/tableau-mcp/blob/main/src/server.ts"
click node_toolruntime "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/tool.ts"
click node_prompts "https://github.com/tableau/tableau-mcp/blob/main/src/prompts/index.ts"
click node_query "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/queryDatasource/queryDatasource.ts"
click node_exploration "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/contentExploration/searchContent.ts"
click node_views "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/views/getViewData.ts"
click node_knowledge "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/knowledge/queryKnowledgeContext.ts"
click node_admin "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/adminInsights/queryAdminInsights.ts"
click node_pulse "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/pulse/insights/runInsightBundle.ts"
click node_flows "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/flows/runFlow/runFlow.ts"
click node_workbooks "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/workbooks/getWorkbook.ts"
click node_users "https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/users/listUsers.ts"
click node_restinstance "https://github.com/tableau/tableau-mcp/blob/main/src/restApiInstance.ts"
click node_restapi "https://github.com/tableau/tableau-mcp/blob/main/src/sdks/tableau/restApi.ts"
click node_vizql "https://github.com/tableau/tableau-mcp/blob/main/src/sdks/tableau/apis/vizqlDataServiceApi.ts"
click node_oauth "https://github.com/tableau/tableau-mcp/blob/main/src/server/oauth/authorize.ts"
click node_sessionstore "https://github.com/tableau/tableau-mcp/blob/main/src/sessionStore/inMemorySessionStore.ts"
click node_desktopserver "https://github.com/tableau/tableau-mcp/blob/main/src/server.desktop.ts"
click node_desktoptools "https://github.com/tableau/tableau-mcp/blob/main/src/tools/desktop/tools.ts"
click node_sessionmanager "https://github.com/tableau/tableau-mcp/blob/main/src/desktop/sessionManager.ts"
click node_discoverer "https://github.com/tableau/tableau-mcp/blob/main/src/desktop/desktopDiscoverer.ts"
click node_agent "https://github.com/tableau/tableau-mcp/blob/main/src/sdks/desktop/agentApi/client.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_webserver,node_mcpserver,node_toolruntime,node_prompts,node_desktopserver,node_client toneBlue
class node_query,node_exploration,node_views,node_knowledge,node_admin,node_pulse,node_flows,node_workbooks,node_users toneAmber
class node_restinstance,node_restapi,node_vizql,node_tableaucloud toneMint
class node_oauth,node_sessionstore toneRose
class node_desktoptools,node_sessionmanager,node_discoverer,node_agent,node_localtableau toneIndigo
```

## Components

### MCP entrypoints

- [Web server](https://github.com/tableau/tableau-mcp/blob/main/src/server.web.ts): `src/server.web.ts`
- [MCP server core](https://github.com/tableau/tableau-mcp/blob/main/src/server.ts): `src/server.ts`
- [Tool runtime](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/tool.ts): `src/tools/web/tool.ts`
- [Prompt primitives](https://github.com/tableau/tableau-mcp/blob/main/src/prompts/index.ts): `src/prompts/index.ts`
- [Desktop server](https://github.com/tableau/tableau-mcp/blob/main/src/server.desktop.ts): `src/server.desktop.ts`

### Tableau web tools

- [Datasource queries](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/queryDatasource/queryDatasource.ts): `src/tools/web/queryDatasource/queryDatasource.ts`
- [Content exploration](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/contentExploration/searchContent.ts): `src/tools/web/contentExploration/searchContent.ts`
- [Views and data](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/views/getViewData.ts): `src/tools/web/views/getViewData.ts`
- [Knowledge context](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/knowledge/queryKnowledgeContext.ts): `src/tools/web/knowledge/queryKnowledgeContext.ts`
- [Admin insights](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/adminInsights/queryAdminInsights.ts): `src/tools/web/adminInsights/queryAdminInsights.ts`
- [Pulse insights](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/pulse/insights/runInsightBundle.ts): `src/tools/web/pulse/insights/runInsightBundle.ts`
- [Flow operations](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/flows/runFlow/runFlow.ts): `src/tools/web/flows/runFlow/runFlow.ts`
- [Workbook operations](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/workbooks/getWorkbook.ts): `src/tools/web/workbooks/getWorkbook.ts`
- [User management](https://github.com/tableau/tableau-mcp/blob/main/src/tools/web/users/listUsers.ts): `src/tools/web/users/listUsers.ts`

### Tableau access

- [REST API instance](https://github.com/tableau/tableau-mcp/blob/main/src/restApiInstance.ts): `src/restApiInstance.ts`
- [Tableau REST SDK](https://github.com/tableau/tableau-mcp/blob/main/src/sdks/tableau/restApi.ts): `src/sdks/tableau/restApi.ts`
- [VizQL data API](https://github.com/tableau/tableau-mcp/blob/main/src/sdks/tableau/apis/vizqlDataServiceApi.ts): `src/sdks/tableau/apis/vizqlDataServiceApi.ts`

### Identity and sessions

- [OAuth endpoints](https://github.com/tableau/tableau-mcp/blob/main/src/server/oauth/authorize.ts): `src/server/oauth/authorize.ts`
- [Session store](https://github.com/tableau/tableau-mcp/blob/main/src/sessionStore/inMemorySessionStore.ts): `src/sessionStore/inMemorySessionStore.ts`

### Desktop integration

- [Desktop tools](https://github.com/tableau/tableau-mcp/blob/main/src/tools/desktop/tools.ts): `src/tools/desktop/tools.ts`
- [Desktop sessions](https://github.com/tableau/tableau-mcp/blob/main/src/desktop/sessionManager.ts): `src/desktop/sessionManager.ts`
- [Instance discovery](https://github.com/tableau/tableau-mcp/blob/main/src/desktop/desktopDiscoverer.ts): `src/desktop/desktopDiscoverer.ts`
- [Desktop Agent API](https://github.com/tableau/tableau-mcp/blob/main/src/sdks/desktop/agentApi/client.ts): `src/sdks/desktop/agentApi/client.ts`

### Other components

- **AI client**
- **Tableau Cloud or Server**
- **Tableau Desktop**

## Connections

- AI client → Web server: sends MCP requests (evidence: `README.md`)
- Web server → MCP server core: uses server core (evidence: `src/server.web.ts`)
- AI client → OAuth endpoints: signs in (evidence: `README.md`)
- Web server → REST API instance: creates API access (evidence: `src/restApiInstance.ts`)
- Tool runtime → REST API instance: invokes API access (evidence: `src/tools/web/knowledge/queryKnowledgeContext.ts`)
- Datasource queries → REST API instance: queries Tableau
- Content exploration → REST API instance: searches Tableau
- Views and data → REST API instance: retrieves view data
- Knowledge context → REST API instance: queries Knowledge (evidence: `src/tools/web/knowledge/queryKnowledgeContext.ts`)
- Admin insights → REST API instance: runs admin queries (evidence: `src/tools/web/adminInsights/queryAdminInsights.ts`)
- REST API instance → Tableau REST SDK: constructs client (evidence: `src/restApiInstance.ts`)
- Tableau REST SDK → Tableau Cloud or Server: calls Tableau APIs (evidence: `README.md`)
- Datasource queries → VizQL data API: queries datasource
- AI client → Desktop server: starts local server
- Desktop server → Desktop tools: registers tools (evidence: `src/server.desktop.ts`)
- Desktop tools → Desktop sessions: requests executor
- Desktop sessions → Instance discovery: discovers instance (evidence: `src/desktop/sessionManager.ts`)
- Desktop sessions → Desktop Agent API: starts executor (evidence: `src/desktop/sessionManager.ts`)
- Desktop Agent API → Tableau Desktop: calls local agent
