@wjsutton/tableau-powerpoint-tools
v0.3.0
Published
Companion MCP server for Tableau-to-PowerPoint workflows: resolve-view-url, get-dashboard-structure, and test-connection, alongside the official Tableau MCP server.
Maintainers
Readme
@wjsutton/tableau-powerpoint-tools
Companion MCP server for Tableau → PowerPoint workflows, designed to run alongside the official Tableau MCP server. It does not fork or wrap the official server — run both side by side and Claude (or any MCP client) sees one combined toolset.
Tools
resolve-view-url— turn a pasted Tableau view URL (Cloud or Server, any of the three URL shapes) into the LUIDs downstream calls need: view LUID, workbook LUID/name,isDashboard, plus anyfilter-<Field>=valueparams embedded in the URL. Replaces thelist-views+get-workbookdance.get-dashboard-structure— return a published view's complete structure: every sheet (with layoutzone+ normalisedzoneFraction), fields with shelves/aggregations, sheet filters, upstream datasource LUIDs, a resolvedchartTypeHint, and a pre-built, tieredfetchRecipeper sheet that you execute as-is against the official server'sget-view-dataorquery-datasource. Workbook calculated fields are recursively inlined as VizQL ad-hoc calculations.test-connection— sign in via REST and report{ serverUrl, siteName, serverVersion, authenticatedUser }, or a classified, user-directed error (not configured, unreachable server, wrong site name, expired/revoked PAT). Call it first whenever any Tableau call fails with an auth error.
All tools make their own authenticated Tableau REST calls and follow the
official server's AUTH contract — the same env vars configure both servers:
| AUTH | Variables |
|-----------------|-----------|
| pat (default) | PAT_NAME, PAT_VALUE |
| direct-trust | JWT_SUB_CLAIM, CONNECTED_APP_CLIENT_ID, CONNECTED_APP_SECRET_ID, CONNECTED_APP_SECRET_VALUE (+ optional JWT_ADDITIONAL_PAYLOAD) |
| uat | UAT_TENANT_ID, UAT_ISSUER, UAT_PRIVATE_KEY or UAT_PRIVATE_KEY_PATH (+ optional UAT_KEY_ID, UAT_USERNAME_CLAIM_NAME/UAT_USERNAME_CLAIM) |
Always required: SERVER (Tableau Cloud/Server URL); SITE_NAME may be empty
(the Default site). Each of SERVER/SITE_NAME/PAT_NAME/PAT_VALUE also
falls back to TABLEAU_* and then CLAUDE_PLUGIN_OPTION_TABLEAU_* variants —
so the Claude plugin's configuration dialog, a legacy TABLEAU_* env setup, or
an explicit MCP-config env block all work. Common server-URL mistakes
(trailing slash, a pasted full view URL) are normalized before failing, and
PAT_VALUE is redacted from every error and log line.
JWTs are signed with node:crypto (HS256 / RS256) using only the scopes this
server needs: tableau:content:read, tableau:workbooks:download.
TABLEAU_POWERPOINT_AUTH overrides AUTH for this server only (useful when the
official server runs hosted/OAuth). AUTH=oauth/passthrough are HTTP-deployment
methods of the official server and are rejected here with guidance.
PowerPoint generation itself lives in the plugin's skill (python-pptx /
PptxGenJS scripts) — see the
tableau-to-powerpoint plugin.
Run
npx -y @wjsutton/tableau-powerpoint-tools@^0.3.0Speaks MCP over stdio. Logs go to stderr only.
License
Apache-2.0
