The Tableau connector exposes the full Tableau platform — REST API 3.x, Metadata GraphQL, VizQL Data Service and Pulse — both as App-mode automations (Documentation Index
Fetch the complete documentation index at: https://docs.prisme.ai/llms.txt
Use this file to discover all available pages before exploring further.
Tableau.<operation>) and as MCP tools callable by AI agents. Authentication is handled via a Connected App (Direct Trust JWT), so no per-user OAuth flow is needed.
Content & Permissions
Browse, publish, download and govern projects, workbooks, views, datasources and Prep flows. Manage tags, permissions and revisions site-wide.
Pulse & Subscriptions
Manage Tableau Pulse metrics and definitions, retrieve BAN insights, and orchestrate email and Pulse subscriptions for end-users.
Metadata & VizQL Queries
Run arbitrary Metadata API GraphQL queries, search assets, walk workbook/datasource lineage and query published datasources via VizQL Data Service.
Prerequisites
- A Tableau Cloud site or a Tableau Server installation reachable from Prisme.ai
- A Tableau Connected App in Direct Trust mode, created from Settings → Connected Apps on the target site (you need its
clientId,secretIdandsecretValue) - The Tableau username (email) the Connected App will impersonate — this user must exist on the site and own the rights you want to expose
- The REST API version to target (defaults to
3.21; pin only if the Tableau Server release requires it) - Site
contentUrlif you are not using the Default site (the segment after/site/in the browser URL)
- Usage as App
- Usage as MCP
Installation
- Go to Apps in your workspace
- Search for Tableau and install it
- Open the app instance configuration and fill in the required fields
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
serverUrl | string | Yes | Full URL of the Tableau pod / Server (e.g. https://10ax.online.tableau.com). No trailing slash. |
siteContentUrl | string | No | Site identifier from the URL (after /site/). Leave empty for the Default site on Tableau Server. |
clientId | string | Yes | Connected App Client ID (Settings → Connected Apps → ID client). |
secretId | string | Yes | Connected App Secret ID (the ID line under the secret on the Connected App page). |
secretValue | string (secret) | Yes | Connected App Secret Value (HMAC key). Stored as a workspace secret. Shown only once at creation. |
username | string | Yes | Tableau username (email) used as the JWT sub claim. The user must exist on the site. |
apiVersion | string | No | REST API version. Defaults to 3.21. |
mcpEndpoint | string | Auto-populated on install | Endpoint URL of this app instance’s MCP server. |
mcpApiKey | string | Auto-populated on install | Signed key to pass as the mcp-api-key header to the MCP endpoint. |
MCP Endpoint and MCP API Key are generated automatically by the onInstall flow and are only needed to expose this instance as an MCP server (see the next tab).Available Instructions
Every instruction resolves credentials from the workspace configuration and reuses the cachedX-Tableau-Auth session token.Sites & Users
| Instruction | Arguments |
|---|---|
Tableau.listSites | pageNumber, pageSize |
Tableau.createSite | site* |
Tableau.getSite | key* |
Tableau.updateSite | site* |
Tableau.deleteSite | siteId |
Tableau.getRecentlyViewed | — |
Tableau.listUsers | fields, filter, pageNumber, pageSize, sort |
Tableau.getUser | userId* |
Tableau.addUserToSite | user* |
Tableau.updateUser | userId*, user* |
Tableau.removeUserFromSite | userId*, mapAssetsTo |
Tableau.getUserGroups | userId*, pageNumber, pageSize |
Tableau.listGroups | filter, pageNumber, pageSize, sort |
Tableau.createGroup | group*, asJob |
Tableau.updateGroup | groupId*, group*, asJob |
Tableau.deleteGroup | groupId* |
Tableau.addUserToGroup | groupId*, user* |
Tableau.removeUserFromGroup | groupId*, userId* |
Tableau.getGroupUsers | groupId*, pageNumber, pageSize |
Projects, Workbooks & Views
| Instruction | Arguments |
|---|---|
Tableau.listProjects | filter, pageNumber, pageSize, sort |
Tableau.createProject | project*, publishSamples |
Tableau.updateProject | projectId*, project*, publishSamples |
Tableau.deleteProject | projectId* |
Tableau.listWorkbooks | fields, filter, pageNumber, pageSize, sort |
Tableau.getWorkbook | workbookId* |
Tableau.publishWorkbook | tableau_workbook*, request_payload*, workbookType, overwrite, asJob, skipConnectionCheck |
Tableau.updateWorkbook | workbookId*, workbook* |
Tableau.updateWorkbookNow | workbookId* |
Tableau.deleteWorkbook | workbookId* |
Tableau.downloadWorkbook | workbookId*, includeExtract |
Tableau.downloadWorkbookPdf | workbookId*, type, orientation, maxAge |
Tableau.downloadWorkbookPreviewImage | workbookId* |
Tableau.downloadWorkbookPowerPoint | workbookId*, maxAge |
Tableau.downloadWorkbookRevision | workbookId*, revisionNumber*, includeExtract |
Tableau.getWorkbookRevisions | workbookId*, pageNumber, pageSize |
Tableau.queryViewsForWorkbook | workbookId*, includeUsageStatistics |
Tableau.getWorkbookConnections | workbookId* |
Tableau.updateWorkbookConnection | workbookId*, connectionId*, connection* |
Tableau.queryWorkbookPermissions | workbookId* |
Tableau.addWorkbookPermissions | workbookId*, permissions* |
Tableau.deleteWorkbookPermission | workbookId*, granteeType*, granteeId*, capabilityName*, capabilityMode* |
Tableau.addTagsToWorkbook | workbookId*, tags* |
Tableau.deleteTagFromWorkbook | workbookId*, tagName* |
Tableau.listViewsForSite | fields, filter, includeUsageStatistics, pageNumber, pageSize, sort |
Tableau.getView | viewId*, includeUsageStatistics |
Tableau.getViewByPath | viewUrl* |
Tableau.getViewImage | viewId*, resolution, maxAge |
Tableau.getViewPdf | viewId*, type, orientation, maxAge |
Tableau.getViewData | viewId*, maxAge |
Tableau.getViewCrosstabExcel | viewId*, maxAge |
Tableau.getViewSummaryData | viewId*, maxAge |
Tableau.queryViewPermissions | viewId* |
Tableau.addViewPermissions | viewId*, permissions* |
Tableau.deleteViewPermission | viewId*, granteeType*, granteeId*, capabilityName*, capabilityMode* |
Tableau.addTagsToView | viewId*, tags* |
Tableau.deleteTagFromView | viewId*, tagName* |
Datasources & Flows
| Instruction | Arguments |
|---|---|
Tableau.listDatasources | fields, filter, pageNumber, pageSize, sort |
Tableau.getDatasource | datasourceId* |
Tableau.publishDatasource | tableau_datasource*, request_payload*, datasourceType, overwrite, append, asJob |
Tableau.updateDatasource | datasourceId*, datasource* |
Tableau.updateDatasourceNow | datasourceId* |
Tableau.deleteDatasource | datasourceId* |
Tableau.downloadDatasource | datasourceId*, includeExtract |
Tableau.downloadDatasourceRevision | datasourceId*, revisionNumber*, includeExtract |
Tableau.getDatasourceRevisions | datasourceId*, pageNumber, pageSize |
Tableau.getDatasourceConnections | datasourceId* |
Tableau.updateDatasourceConnection | datasourceId*, connectionId*, connection* |
Tableau.queryDatasourcePermissions | datasourceId* |
Tableau.addDatasourcePermissions | datasourceId*, permissions* |
Tableau.deleteDatasourcePermission | datasourceId*, granteeType*, granteeId*, capabilityName*, capabilityMode* |
Tableau.addTagsToDatasource | datasourceId*, tags* |
Tableau.deleteTagFromDatasource | datasourceId*, tagName* |
Tableau.listFlows | filter, pageNumber, pageSize, sort |
Tableau.getFlow | flowId* |
Tableau.downloadFlow | flowId* |
Tableau.deleteFlow | flowId* |
Tableau.runFlow | flowId*, flowRunSpec |
Tableau.getFlowRunStatus | flowRunId* |
Tableau.listFlowRuns | filter, pageNumber, pageSize |
Tableau.getFlowConnections | flowId* |
Tableau.queryFlowPermissions | flowId* |
Tableau.addFlowPermissions | flowId*, permissions* |
Tableau.deleteFlowPermission | flowId*, granteeType*, granteeId*, capabilityName*, capabilityMode* |
Scheduling, Jobs & Refresh Tasks
| Instruction | Arguments |
|---|---|
Tableau.listSchedules | pageNumber, pageSize |
Tableau.getSchedule | scheduleId* |
Tableau.createSchedule | schedule* |
Tableau.updateSchedule | scheduleId*, schedule* |
Tableau.deleteSchedule | scheduleId* |
Tableau.addWorkbookToSchedule | scheduleId*, task* |
Tableau.addDatasourceToSchedule | scheduleId*, task* |
Tableau.addFlowTaskToSchedule | scheduleId*, task* |
Tableau.listJobs | filter, pageNumber, pageSize |
Tableau.getJob | jobId* |
Tableau.cancelJob | jobId* |
Tableau.listExtractRefreshTasks | pageNumber, pageSize |
Tableau.getExtractRefreshTask | taskId* |
Tableau.runExtractRefreshTask | taskId* |
Tableau.deleteExtractRefreshTask | taskId* |
Subscriptions, Webhooks & Favorites
| Instruction | Arguments |
|---|---|
Tableau.listSubscriptions | filter, pageNumber, pageSize |
Tableau.getSubscription | subscriptionId* |
Tableau.createSubscription | subscription* |
Tableau.updateSubscription | subscriptionId*, subscription* |
Tableau.deleteSubscription | subscriptionId* |
Tableau.listWebhooks | pageNumber, pageSize |
Tableau.getWebhook | webhookId* |
Tableau.createWebhook | webhook* |
Tableau.updateWebhook | webhookId*, webhook* |
Tableau.deleteWebhook | webhookId* |
Tableau.testWebhook | webhookId* |
Tableau.listFavoritesForUser | userId* |
Tableau.addFavorite | userId*, favorite* |
Tableau.deleteFavorite | userId*, contentType*, contentId* |
Tableau Pulse
| Instruction | Arguments |
|---|---|
Tableau.listMetrics | definition_id, page_size, page_token |
Tableau.getMetric | metricId* |
Tableau.createMetric | metric* |
Tableau.deleteMetric | metricId* |
Tableau.listMetricDefinitions | view, page_size, page_token |
Tableau.getMetricDefinition | definitionId*, view |
Tableau.createMetricDefinition | definition* |
Tableau.updateMetricDefinition | definitionId*, definition* |
Tableau.deleteMetricDefinition | definitionId* |
Tableau.getInsight | bundle_request* |
Tableau.listPulseSubscriptions | metric_id, user_id, page_size, page_token |
Tableau.createPulseSubscription | subscription* |
Tableau.deletePulseSubscription | subscriptionId* |
Metadata & VizQL Data Service
| Instruction | Arguments |
|---|---|
Tableau.metadataQuery | query*, variables |
Tableau.searchAssets | name*, first |
Tableau.getWorkbookLineage | workbookLuid* |
Tableau.getDatasourceLineage | datasourceLuid* |
Tableau.readMetadata | datasource*, options |
Tableau.queryDatasource | datasource*, query*, options |
Arguments flagged with
* are required.DSUL Examples
List the workbooks in a project
Trigger an immediate extract refresh on a datasource
Search assets and walk the workbook lineage
Query a published datasource via VizQL Data Service
Create a Pulse subscription for a user
Error Handling
| HTTP code | Meaning | Typical cause |
|---|---|---|
| 400 | Bad Request | Missing or malformed action, invalid filter, missing required parameter for the chosen action. |
| 401 | Unauthorized | The Connected App JWT was rejected. Check clientId / secretId / secretValue and that the username exists on the site. |
| 403 | Forbidden | The impersonated user lacks the right (or the action is Tableau Server-only and you are on Tableau Cloud, e.g. site CRUD). |
| 404 | Not Found | The targeted resource does not exist on this site, or siteContentUrl is wrong. |
| 409 | Conflict | Trying to publish over an existing asset without overwrite: true, or a name collision. |
| 429 | Too Many Requests | Tableau API rate limit hit. Retry with exponential backoff. |
| 500 | Internal Server Error | Transient Tableau Server error. Retry; if it persists, check the Tableau status page. |
Common Issues
“Not configured” — The app instance has no Connected App secret. Create a Connected App on your Tableau site (Settings → Connected Apps) and paste theclientId, secretId, secretValue and username in the app configuration.
“Invalid API key” (MCP) — The mcp-api-key header does not match the central app secret. Reinstall the app instance to regenerate a signed key.
“Credentials lookup failed” — The MCP endpoint could not reach the getConfig webhook of the installed app. Verify that the app instance is still installed in the expected workspace.
“Site not found” / wrong site — Check siteContentUrl. On Tableau Cloud it is the segment after /site/ in the browser URL; on Tableau Server’s Default site, leave it empty.
Tableau Server-only operation on Tableau Cloud — Several site- and schedule-management actions (sites.create, sites.update, schedules.create, …) are only available on Tableau Server and return 403 on Tableau Cloud. Check the Tableau REST API reference for the current allow-list.
External Resources
Tableau REST API Reference
Official documentation for the Tableau REST API 3.x, Metadata API, VizQL Data Service and Pulse.
Tool Agents
How to wire MCP tools into Prisme.ai agents and let them auto-discover capabilities.