From f2fe66e1dd7b8ee945c7e949992cd4f96ff4e8ef Mon Sep 17 00:00:00 2001 From: rusackas Date: Thu, 27 Aug 2026 22:59:23 -0700 Subject: [PATCH] docs(mcp): fix guest-tool config name to MCP_GUEST_ALLOWED_TOOLS The doc referenced a nonexistent MCP_GUEST_DENIED_TOOLS setting; guest tool access is actually governed by the default-deny MCP_GUEST_ALLOWED_TOOLS allow-list. Co-Authored-By: Claude Opus 4.8 --- docs/admin_docs/configuration/mcp-server.mdx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/admin_docs/configuration/mcp-server.mdx b/docs/admin_docs/configuration/mcp-server.mdx index e3d8be18041..4ccfb911474 100644 --- a/docs/admin_docs/configuration/mcp-server.mdx +++ b/docs/admin_docs/configuration/mcp-server.mdx @@ -278,11 +278,19 @@ curl -X POST http://localhost:5008/mcp \ - A dedicated guest-token verifier validates the token against the same `GUEST_TOKEN_JWT_SECRET` / `GUEST_TOKEN_JWT_ALGO` / `GUEST_TOKEN_JWT_AUDIENCE` config used by embedded dashboards, replays the embedded structural checks, and enforces revocation (global version bumps and per-dashboard `guest_token_revoked_before` cutoffs). It runs *before* the JWT verifier described above, since guest tokens are signed with a different key/algorithm and would otherwise be rejected at the transport. - A verified guest resolves to a Superset guest user as the highest-priority identity, so it's never downgraded to API-key / `MCP_DEV_USERNAME` / dev-mode resolution. Data access is scoped by the same checks (dataset allowlist, dashboard access, row-level security) that apply to embedded dashboard views. -- Sensitive enumeration tools (`find_users`, `get_instance_info` by default) are hidden and denied to guests via `MCP_GUEST_DENIED_TOOLS`, regardless of `MCP_RBAC_ENABLED`. +- Guests are restricted to a default-deny allow-list, `MCP_GUEST_ALLOWED_TOOLS`, regardless of `MCP_RBAC_ENABLED`. Sensitive enumeration tools like `find_users` and `get_instance_info` are denied simply by being absent from the default list. ```python # superset_config.py -MCP_GUEST_DENIED_TOOLS = {"find_users", "get_instance_info"} # default +MCP_GUEST_ALLOWED_TOOLS = { + "get_dashboard_info", + "get_dashboard_layout", + "list_dashboards", + "list_charts", + "get_chart_info", + "get_chart_data", + "get_chart_preview", +} # default ``` **Deployment requirements** @@ -567,7 +575,7 @@ All MCP settings go in `superset_config.py`. Defaults are defined in `superset/m | `MCP_AUTH_FACTORY` | `None` | Custom auth provider factory `(flask_app) -> auth_provider`. Takes precedence over built-in JWT | | `MCP_USER_RESOLVER` | `None` | Custom function `(app, access_token) -> username` to extract a Superset username from a validated JWT token. When `None`, the default resolver checks `preferred_username`, `username`, `email`, and `sub` claims in that order. | | `MCP_EMBEDDED_GUEST_AUTH_ENABLED` | `False` | Accept embedded [guest tokens](#embedded-guest-authentication) as Bearer auth. Also requires the `EMBEDDED_SUPERSET` feature flag. | -| `MCP_GUEST_DENIED_TOOLS` | `{"find_users", "get_instance_info"}` | Tool names hidden and denied to embedded guests, regardless of `MCP_RBAC_ENABLED`. | +| `MCP_GUEST_ALLOWED_TOOLS` | see [default list](#embedded-guest-authentication) | The only tool names callable by embedded guests (default-deny), regardless of `MCP_RBAC_ENABLED`. | ### Response Size Guard