Skip to content

v4.22.3

Choose a tag to compare

@jarhun88 jarhun88 released this 10 Oct 07:44
· 70 commits to main since this release
2a979d2
  • scaffold-data-app needs a new OAuth scope, tableau:packages:read (#988). Users with existing tokens must sign in again (reauthorize). If scope enforcement is on, a token without this scope gets HTTP 403 insufficient_scope. The Tableau Packages feature flag must also be on for the site.
  • publish-workbook scopes changed (#995). Connected Apps must grant tableau:projects:read. The unused tableau:content:read is no longer requested. The full required set is now tableau:workbooks:create, tableau:file_uploads:create and tableau:projects:read.
  • publish-workbook needs a projectId unless data-apps is on (#995). With data-apps off, calls without a projectId are rejected, even from clients holding an older cached tool schema.
  • Flag changes need a restart. Changes to file-based feature flags only take effect after a server restart, and clients must reconnect to see the updated tool schemas.

Data apps

  • Scaffolding is gated and returns allowed origins (#988). scaffold-data-app now requires Tableau 2026.3.1+, the data-apps flag and the Explorer (Can Publish) role. Each successful scaffold looks up the site's external allowed origins and returns them as allowedOrigins, so authors can set up outbound fetch and CSP targets. An empty list is a valid result. If the lookup fails, the tool call fails.
  • Dev-build version detection (#988). The shared version-gating helper now treats product version 0.0.0, or any build containing main, as a fresh development build. This applies to every tool gated by Tableau version.
  • Extensions API 1.19.0-pre.10 (#1009). The data app template now ships the minified Extensions API library (about 290 KB instead of about 2.1 MB), so the template zip is about 1.8 MB smaller.

Workbook authoring and publishing

  • Personal Space publishing fixed (#995). When data-apps is on, publish-workbook exposes a personalSpace option, which defaults to true. It publishes to the caller's Personal Space, which is looked up automatically and sent as a location rather than a project ID. An explicit projectId always wins. Setting personalSpace: false without a projectId returns an error. Read-only spaces and sites that don't support this report clear errors, and the tool checks that the published workbook actually landed in Personal Space.
  • Permission rules shown after publishing to a project (#990). After a successful publish to a project, the result includes the workbook's user and group permission rules as permissions. Reading them uses an optional tableau:permissions:read scope. If consent is missing or the read fails, the publish still succeeds and the result includes a permissionsNote instead. Personal Space publishes skip this step. The rules are returned as-is and don't tell you each viewer's actual access.
  • list-projects can filter by capability (#982). Pass capability: "Write" to list only the projects the user can publish to. The tool description tells the model to use this when picking a publish destination. This needs REST API 3.30+; on older servers the argument is hidden.
  • Slack access to authoring tools behind a flag (#1008). A new authoring-with-slack flag, off by default, replaces the hardcoded Slack block on download-workbook, publish-workbook and request-workbook-upload. Slack clients get these tools and their scopes only when both authoring-tools and authoring-with-slack are on.

Datasources and access control

  • query-datasource works without parent-project permissions (#984, #994). GET /datasources/{id} requires read access to the parent project even when the user has full access to the datasource. On that 403, the server now looks up the datasource's name through the Metadata API, then calls GET /datasources?filter=name:eq: and matches on the LUID. That returns both the tags and the parent project ID, so the INCLUDE_TAGS and INCLUDE_PROJECT_IDS allowlists both work. #994 replaces #984's earlier tags-only fallback.
  • get-datasource-metadata always reports datasourceType (#977). Embedded and published datasources are now labeled even when disableMetadataApiRequests is set or the Metadata API call fails. Embedded datasources are identified by parentType: "Workbook" or a missing project.
    • Operator note: with disableMetadataApiRequests on, labeling a datasource that isn't published now costs one extra REST call.
    • Project allowlists: a project allowlist now denies embedded datasources that have no project, with a clear message.

Skills over MCP

  • Skills registry (#974). The server now serves skills as MCP resources, following OpenAI's import-skills-from-MCP spec. Each skill file is available at a skill:/// URI, along with its SHA-256 digest, size and MIME type. For now the skills come from a bundled mock directory; reading from the public skills repo is tracked in W-24281166.

All changes

  • @W-24168905: Gate data-app scaffolding and require site allowed origins by @jarhun88 in #9
  • @W-24366731: Metadata API fallback for datasource tags on parent-project 403 by @williamyen0203 in #984
  • @W-24132504: Resolve datasourceType on all get-datasource-metadata paths by @ycath in #977
  • @W-24166645: Build skills registry by @llum602 in #974
  • @W-24431205: Fix Personal Space publishing scopes and feature gating by @jarhun88 in #995
  • @W-24388665: Add capability filter to list-projects by @patrickg2014 in #982
  • @W-24251472: Disclose workbook permission rules after publishing to a project by @jarhun88
  • @W-24464527: Update data app template to Extensions API 1.19.0-pre.10 (minified) by @patrickg2014 in #1009
  • @W-24429250: Parent-project-permission fallback for query-datasource with INCLUDE_PROJECT_#994
  • @W-24463896: Gate Slack access to authoring tools behind authoring-with-slack by @jarhun88 in #1008

Full Changelog: v4.18.1...v4.22.3