Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
c160092
Make server non-singleton
anyoung-tableau Jun 13, 2025
39a133b
Make config non-singleton
anyoung-tableau Jun 13, 2025
00a8080
Parameterize transport
anyoung-tableau Jun 13, 2025
41cb5c0
Add streamable http transport layer
anyoung-tableau Jun 13, 2025
5280635
Wire up relatedRequestId
anyoung-tableau Jun 18, 2025
3372525
Add start:http script
anyoung-tableau Jun 18, 2025
f1f0b81
Add signOut API
anyoung-tableau Jun 18, 2025
b72e16c
Add useRestApi
anyoung-tableau Jun 18, 2025
259ade8
Add procfile
anyoung-tableau Jun 18, 2025
a175f29
Change start scripts
anyoung-tableau Jun 18, 2025
0f30937
Rename HTTP_PORT to PORT
anyoung-tableau Jun 18, 2025
1a2d3d6
Fix script name
anyoung-tableau Jun 18, 2025
991b53d
Merge remote-tracking branch 'origin/main' into anyoung/stateless
anyoung-tableau Jun 20, 2025
c58bb59
Merge remote-tracking branch 'origin/main' into anyoung/transport
anyoung-tableau Jun 20, 2025
5e03cc1
Merge remote-tracking branch 'origin/main' into anyoung/heroku
anyoung-tableau Jun 20, 2025
8350669
Move server to its own folder
anyoung-tableau Jul 7, 2025
dbefeeb
[in progress] Add OAuth
anyoung-tableau Jul 8, 2025
14e0fcc
Use a signed JWT instead of Tableau access token directly
anyoung-tableau Jul 9, 2025
383bfa9
Use Date.now() instead
anyoung-tableau Jul 9, 2025
6d0ab3e
Use Tableau user id as JWT sub claim
anyoung-tableau Jul 10, 2025
963050c
Merge remote-tracking branch 'origin/main' into anyoung/stateless
anyoung-tableau Jul 10, 2025
ba98f63
Merge remote-tracking branch 'origin/main' into anyoung/stateless
anyoung-tableau Jul 10, 2025
6a0f94f
Bump version
anyoung-tableau Jul 10, 2025
a9294aa
Fix lint errors
anyoung-tableau Jul 10, 2025
f256e52
Merge remote-tracking branch 'origin/anyoung/stateless' into anyoung/…
anyoung-tableau Jul 10, 2025
666bbb8
Fix lint error
anyoung-tableau Jul 10, 2025
452e259
Address CVE CVE-2025-49596
anyoung-tableau Jul 11, 2025
0b8db08
Move authZ code exchange to OAuth callback
anyoung-tableau Jul 11, 2025
bebbce1
Remove multiple links to spec
anyoung-tableau Jul 11, 2025
577bb90
Organize file
anyoung-tableau Jul 11, 2025
b3a5684
Merge remote-tracking branch 'origin/anyoung/transport' into anyoung/…
anyoung-tableau Jul 11, 2025
f2367e2
Merge remote-tracking branch 'origin/anyoung/heroku' into anyoung/oauth
anyoung-tableau Jul 11, 2025
63b0477
Delete orig files
anyoung-tableau Jul 11, 2025
1f0991e
Fix site id parsing
anyoung-tableau Jul 11, 2025
efe2a2d
Only sign out for PAT auth
anyoung-tableau Jul 11, 2025
eda7ada
Merge remote-tracking branch 'origin/main' into anyoung/oauth
anyoung-tableau Jul 21, 2025
964cb01
Clean up after merge
anyoung-tableau Jul 21, 2025
9aef8e8
Address vulnerabilities
anyoung-tableau Jul 21, 2025
ea5a0b0
Add provider
anyoung-tableau Jul 22, 2025
076f630
Move types
anyoung-tableau Jul 22, 2025
0000f2a
Add schema for /oauth/authorize
anyoung-tableau Jul 22, 2025
bff7f3c
Add additional schemas
anyoung-tableau Jul 22, 2025
c0b28d7
Make state optional for /authorize
anyoung-tableau Jul 22, 2025
bef6190
Add build:inspect:http script
anyoung-tableau Jul 22, 2025
2bd83a3
Fix error
anyoung-tableau Jul 22, 2025
dd49be4
Fix bad merge
anyoung-tableau Jul 22, 2025
f07b223
Add device id guid
anyoung-tableau Jul 22, 2025
f1ae240
Parameterize timeouts
anyoung-tableau Jul 22, 2025
8c6183f
Add schema for MCP token
anyoung-tableau Jul 22, 2025
c3d7780
Remove commented code
anyoung-tableau Jul 22, 2025
071aeca
Allow for alternative auth when OAuth is enabled
anyoung-tableau Jul 22, 2025
24465ef
Add getTableauAuthInfo
anyoung-tableau Jul 22, 2025
849ddd2
Move token API to SDKs folder
anyoung-tableau Jul 23, 2025
b3489ee
Remove stray changes to readme
anyoung-tableau Jul 23, 2025
2fa40ee
Add config tests
anyoung-tableau Jul 23, 2025
1a9e9e1
s/oauth2/oauth
anyoung-tableau Jul 23, 2025
5130334
Mention that OAUTH_ISSUER is required when AUTH is oauth
anyoung-tableau Jul 23, 2025
b51f35c
Validate auth info
anyoung-tableau Jul 23, 2025
bb9827f
Cherry-pick changes from mcp-token-refresh
anyoung-tableau Jul 24, 2025
41a91d7
Cherry-pick fixes from tableau-token-refresh
anyoung-tableau Jul 24, 2025
7f3c4b1
Add target_site
anyoung-tableau Jul 24, 2025
8a59920
Fix redirectUri default
anyoung-tableau Jul 24, 2025
e2ec30b
Fix config test
anyoung-tableau Jul 24, 2025
029e784
Add quotes eslint rule
anyoung-tableau Jul 24, 2025
e243357
Merge remote-tracking branch 'origin/main' into anyoung/oauth
anyoung-tableau Jul 24, 2025
f17406c
Clean up dynamic registration a bit
anyoung-tableau Jul 24, 2025
06f9c5b
Remove interceptor
anyoung-tableau Jul 24, 2025
e6177b6
Validate transport when OAuth is enabled
anyoung-tableau Jul 24, 2025
6272f64
Update auth section in readme
anyoung-tableau Jul 24, 2025
8e558b7
Make SITE_NAME required for non-OAuth auth
anyoung-tableau Jul 25, 2025
48ac213
Relay 401s from getCurrentServerSession
anyoung-tableau Jul 25, 2025
bd4ecae
Implement MCP access token refresh (#72)
anyoung-tableau Jul 28, 2025
fa3aad5
Generate client id and device id at runtime
anyoung-tableau Jul 28, 2025
e1d2401
Replace uuid with randomUUID
anyoung-tableau Jul 28, 2025
750664a
Remove accessToken from AuthConfig
anyoung-tableau Jul 29, 2025
41a5d9e
Add TSM setting
anyoung-tableau Aug 7, 2025
1ac1e22
Clarify a few env vars
anyoung-tableau Aug 7, 2025
ea359a8
Merge remote-tracking branch 'origin/main' into anyoung/oauth
anyoung-tableau Aug 8, 2025
66af838
Add Connected App JWT support (OAuth) (#76)
anyoung-tableau Aug 8, 2025
b599938
Merge remote-tracking branch 'origin/main' into anyoung/oauth
anyoung-tableau Aug 28, 2025
1ed24e1
Use encrypted JWE instead of non-encrypted JWT for MCP access token (…
anyoung-tableau Aug 29, 2025
b928bc0
Merge remote-tracking branch 'origin/main' into anyoung/oauth
anyoung-tableau Sep 2, 2025
b24b0cf
Merge remote-tracking branch 'origin/main' into anyoung/oauth
anyoung-tableau Sep 4, 2025
040da8e
Add docs for OAuth
anyoung-tableau Sep 4, 2025
3746b3a
Make OAuth the defualt behavior for http transport
anyoung-tableau Sep 4, 2025
6774155
Upload docs to artifacts
anyoung-tableau Sep 4, 2025
b42c929
Fix http transport test
anyoung-tableau Sep 4, 2025
6133f34
Link to DISABLE_OAUTH section
anyoung-tableau Sep 5, 2025
f9a4ad2
Default auth to oauth when OAuth is enabled
anyoung-tableau Sep 5, 2025
d0a0510
Add env file generator
anyoung-tableau Sep 5, 2025
4b22e0a
Fix state issue
anyoung-tableau Sep 5, 2025
6f80d9e
Open links in new tab
anyoung-tableau Sep 5, 2025
bc1a241
Add commas to vs code config
anyoung-tableau Sep 5, 2025
94ea897
Make SERVER and SITE_NAME optional when AUTH is oauth (#101)
anyoung-tableau Sep 9, 2025
e34656b
Add OAuth sequence diagram
anyoung-tableau Sep 9, 2025
f1c65d1
Gen private key
anyoung-tableau Sep 9, 2025
2764614
Add Claude redirect URIs
anyoung-tableau Sep 9, 2025
c618981
Revert that, unnecessary
anyoung-tableau Sep 9, 2025
8c5465c
Delete refresh token after timeout
anyoung-tableau Sep 10, 2025
c78b278
Add OAUTH_JWE_PRIVATE_KEY
anyoung-tableau Sep 11, 2025
975db31
Don't get private key
anyoung-tableau Sep 11, 2025
f80a6a4
Merge remote-tracking branch 'origin/main' into anyoung/oauth
anyoung-tableau Sep 22, 2025
0b58e47
Fix lint errors
anyoung-tableau Sep 22, 2025
f391d8c
Fix doc links
anyoung-tableau Sep 22, 2025
dbad79e
Refactor into individual files
anyoung-tableau Sep 23, 2025
bcee110
Merge remote-tracking branch 'origin/main' into anyoung/oauth
anyoung-tableau Oct 2, 2025
6c5c515
Merge remote-tracking branch 'origin/main' into anyoung/oauth
anyoung-tableau Oct 16, 2025
5d2fa24
Prompt when OAuth is disabled
anyoung-tableau Oct 16, 2025
c4aa66c
Update docs
anyoung-tableau Oct 16, 2025
d976547
Log username for tool calls
anyoung-tableau Oct 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/test-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,10 @@ jobs:
run: npm ci
- name: Test build website
run: npm run build
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts
if-no-files-found: error
path: |
docs/build/
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ There are a couple different ways to authenticate to Tableau.

1. Provide your Tableau [Personal Access Token](pat.md) (PAT).
2. Use Tableau [Connected Apps](direct-trust.md).
3. Use Tableau OAuth.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"label": "Authentication",
"position": 4
"position": 2
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
---
sidebar_position: 3
title: Direct Trust
sidebar_position: 2
---

# Direct Trust
Expand All @@ -22,6 +21,8 @@ it internally calls into VizQL Data Service, the JWT will only have the

The username for the `sub` claim of the JWT.

- Can either be a hard-coded username, or the OAuth username by setting it to `{OAUTH_USERNAME}`.

<hr />

### `CONNECTED_APP_CLIENT_ID`
Expand Down Expand Up @@ -53,12 +54,13 @@ code where it could accidentally be revealed.

### `JWT_ADDITIONAL_PAYLOAD`

A JSON string that includes any additional user attributes to include on the JWT.
A JSON string that includes any additional user attributes to include on the JWT. It also supports
dynamically including the OAuth username.

Example:

```json
{ "region": "West" }
{ "username": "{OAUTH_USERNAME}", "region": "West" }
```

[direct-trust]: https://help.tableau.com/current/online/en-us/connected_apps.htm#direct-trust
Expand Down
22 changes: 22 additions & 0 deletions docs/docs/configuration/mcp-config/authentication/oauth.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
sidebar_position: 3
---

# OAuth

:::warning

Tableau Server 2025.3+ only. Tableau Cloud is not supported yet but is coming soon ETA Q2 2026.

Otherwise, you can still test by running the MCP server locally.

:::

When `AUTH` is `oauth`, the MCP server will use a Tableau session initiated by the Tableau OAuth
flow to authenticate to the Tableau REST APIs.

:::info

See [Enabling OAuth](../oauth.md) for details on how to configure the MCP server to use OAuth.

:::
2 changes: 1 addition & 1 deletion docs/docs/configuration/mcp-config/authentication/pat.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
sidebar_position: 2
sidebar_position: 1
title: PAT
---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,29 @@
---
sidebar_position: 2
sidebar_position: 1
---

# Optional Environment Variables
# Environment Variables

Values for the following environment variables are optional.
Values for the following environment variables can be provided to configure the Tableau MCP server.

## `SERVER`

The URL of the Tableau server.

- For Tableau Cloud, specify your site's specific pod e.g.
`https://prod-useast-c.online.tableau.com`
- Required unless [`AUTH`](#auth) is `oauth`.

<hr />

## `SITE_NAME`

The name of the Tableau site to use.

- For Tableau Cloud, specify your site name.
- For Tableau Server, you may leave this value blank to use the default site.

<hr />

## `TRANSPORT`

Expand All @@ -19,10 +38,10 @@ The MCP transport type to use for the server.

## `AUTH`

The Tableau authentication method to use by the server.
The method the MCP server uses to authenticate to the Tableau REST APIs.

- Default: `pat`
- Possible values: `pat` or `direct-trust`
- Possible values: `pat`, `direct-trust`, or `oauth`
- See [Authentication](authentication) for additional required variables depending on the desired
method.

Expand All @@ -43,6 +62,8 @@ APIs.
- Each line in the log file is a JSON object with the following properties:

- `timestamp`: The timestamp of the log message in UTC time.
- `username`: For tool calls, the username of the user who made the call. This is only present
when OAuth is enabled.
- `level`: The logging level of the log message.
- `logger`: The logger of the log message. This is typically `rest-api` for HTTP traces or
`tableau-mcp` for tool calls.
Expand Down
Loading
Loading