The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the MCP Superset listing page.
A comprehensive Model Context Protocol (MCP) server for Apache Superset. Gives AI assistants (Claude, GPT, etc.) full control over your Superset instance — dashboards, charts, datasets, SQL Lab, users, roles, RLS, and more — through 137 tools.
| Feature | mcp-superset | superset-mcp | superset-mcp (Winding2020) | superset-mcp-server |
|---|---|---|---|---|
| Total tools | 137 | 60 | 31 | 4 |
| Language | Python | Python | TypeScript | TypeScript |
| Dashboard CRUD | 15 tools | 5 | 8 | - |
| Dashboard native filters | 5 tools | - | - | - |
| Chart CRUD | 11 tools | 5 | 7 | - |
| Database tools | 18 tools | 14 | 1 | 1 |
| Dataset tools | 11 tools | 3 | 7 | - |
| SQL Lab | 5 tools | 7 | 1 | 1 |
| Security (users/roles) | 26 tools | 2 | - | - |
| Row Level Security | 5 tools | - | - | - |
| Groups | 9 tools | - | - | - |
| Permissions audit | yes | - | - | - |
| Dashboard access grant/revoke | yes | - | - | - |
| Auto datasource_access sync | yes | - | - | - |
| Reports & annotations | 10 tools | - | - | - |
| Tags | 7 tools | 7 | - | - |
| Asset export/import | yes | - | - | - |
| Safety: confirmation flags | 14 types | - | - | - |
| Safety: DDL/DML blocking | yes | - | - | - |
| Safety: system role protection | yes | - | - | - |
| Transport | HTTP, SSE, stdio | stdio | stdio | stdio |
| Auth method | JWT + auto-refresh + CSRF | Username/password + token file | Username/password or token | LDAP |
| Superset versions | 6.0.1 | 4.1.1 | not specified | not specified |
| CLI with args | --host --port --transport | - | - | - |
| PyPI package | mcp-superset | superset-mcp | superset-mcp (npm) | - |
| uvx support | yes | - | - | - |
| License | MIT | MIT | - | Apache 2.0 |
| GitHub stars | new | 170 | 21 | 5 |
Key differentiators:
--host, --port, --transport, --env-file)Create a .env file in the current directory, or set environment variables:
When Superset is behind SSO (OAuth/OIDC/SAML), password login via the REST API is unavailable. Instead, supply a browser session cookie:
| Variable | Description |
|---|---|
SUPERSET_SESSION_COOKIE | Session cookie value copied from your browser. When set, this mode is used instead of username/password. |
SUPERSET_SESSION_COOKIE_NAME | Cookie name. Defaults to session. |
Copy the cookie from your browser's dev tools (Application → Cookies →
your Superset domain → session). The MCP server sends it on every request
and fetches CSRF tokens with it. The session cannot be renewed server-side,
so when it expires you must paste a fresh value and restart the server.
Two things worth checking before you use this mode:
session. Instances that set
SESSION_COOKIE_NAME in superset_config.py use a different name (s, for
example). Use the name shown in dev tools and set SUPERSET_SESSION_COOKIE_NAME
accordingly./api/v1/. Where the
REST API is configured for JWT only, requests carrying a valid session cookie
still return 401 {"msg": "Missing Authorization Header"} - refreshing the
cookie will not help, and JWT mode is the only option there.Treat the cookie as a credential: it grants full access to your Superset
account for the lifetime of the session. Keep it in .env (which is
gitignored), not in shell history or committed config.
| Option | Default | Env Variable | Description |
|---|---|---|---|
--host | 127.0.0.1 | SUPERSET_MCP_HOST | Server bind address |
--port | 8001 | SUPERSET_MCP_PORT | Server bind port |
--transport | streamable-http | SUPERSET_MCP_TRANSPORT | Transport: streamable-http, sse, stdio |
--env-file | auto-detect | — | Path to .env file |
--version | — | — | Show version and exit |
Add to your project's .mcp.json:
Then start the server: mcp-superset or uvx mcp-superset.
Add to claude_desktop_config.json:
Any MCP-compatible client can connect via:
http://<host>:<port>/mcphttp://<host>:<port>/ssemcp-superset --transport stdio| Tool | Description |
|---|---|
superset_dashboard_list | List dashboards with filtering and pagination |
superset_dashboard_get | Get dashboard details by ID |
superset_dashboard_create | Create a new dashboard |
superset_dashboard_update | Update dashboard properties |
superset_dashboard_delete | Delete a dashboard (requires confirmation) |
superset_dashboard_copy | Duplicate a dashboard |
superset_dashboard_publish | Publish a draft dashboard |
superset_dashboard_unpublish | Unpublish a dashboard |
superset_dashboard_charts | List charts in a dashboard |
superset_dashboard_datasets | List datasets used by a dashboard |
superset_dashboard_export | Export dashboard as ZIP (base64) |
superset_dashboard_import | Import dashboard from ZIP file |
superset_dashboard_embedded_get | Get embedded configuration |
superset_dashboard_embedded_set | Enable embedded mode with allowed domains |
superset_dashboard_embedded_delete | Disable embedded mode |
| Tool | Description |
|---|---|
superset_dashboard_filter_list | List native filters on a dashboard |
superset_dashboard_filter_add | Add a native filter (auto-generates correct ID format) |
superset_dashboard_filter_update | Update an existing native filter |
superset_dashboard_filter_delete | Remove a native filter (requires confirmation) |
superset_dashboard_filter_reset | Remove all filters (requires confirmation) |
| Tool | Description |
|---|---|
superset_chart_list | List charts with filtering and pagination |
superset_chart_get | Get chart details by ID |
superset_chart_create | Create a new chart |
superset_chart_update | Update chart properties |
superset_chart_delete | Delete a chart (requires confirmation) |
superset_chart_copy | Duplicate a chart |
superset_chart_data | Execute chart query and get data |
superset_chart_get_data | Get data from a saved chart |
superset_chart_export | Export chart as ZIP (base64) |
superset_chart_import | Import chart from ZIP file |
superset_chart_cache_warmup | Warm up chart cache |
| Tool | Description |
|---|---|
superset_database_list | List database connections |
superset_database_get | Get database details |
superset_database_create | Register a new database connection |
superset_database_update | Update database settings |
superset_database_delete | Remove a database (requires confirmation) |
superset_database_test_connection | Test database connectivity |
superset_database_schemas | List schemas in a database |
superset_database_tables | List tables in a schema |
superset_database_catalogs | List catalogs (for multi-catalog databases) |
superset_database_connection_info | Get connection string info |
superset_database_function_names | List available SQL functions |
superset_database_related_objects | Find charts/datasets using this database |
superset_database_validate_sql | Validate SQL syntax |
superset_database_validate_parameters | Validate connection parameters |
superset_database_select_star | Generate SELECT * query for a table |
superset_database_table_metadata | Get table column and index metadata |
superset_database_export | Export database config as ZIP |
superset_database_available_engines | List supported database engines |
| Tool | Description |
|---|---|
superset_dataset_list | List datasets with filtering |
superset_dataset_get | Get dataset details including columns and metrics |
superset_dataset_create | Create a dataset from a table or SQL query |
superset_dataset_update | Update dataset properties |
superset_dataset_delete | Delete a dataset (requires confirmation) |
superset_dataset_duplicate | Duplicate a dataset |
superset_dataset_refresh_schema | Refresh columns from source |
superset_dataset_related_objects | Find charts using this dataset |
superset_dataset_export | Export dataset as ZIP |
superset_dataset_import | Import dataset from ZIP |
superset_dataset_get_or_create | Get existing or create new dataset |
| Tool | Description |
|---|---|
superset_sqllab_execute | Execute a SQL query (SELECT only) |
superset_sqllab_format_sql | Format/beautify SQL |
superset_sqllab_results | Fetch results of a completed query |
superset_sqllab_estimate_cost | Estimate query execution cost |
superset_sqllab_export_csv | Export query results as CSV |
superset_query_list | List executed queries |
superset_query_get | Get query details and results |
superset_query_stop | Stop a running query |
superset_saved_query_list | List saved queries |
superset_saved_query_create | Save a new query |
superset_saved_query_get | Get saved query details |
superset_saved_query_update | Update a saved query |
superset_saved_query_delete | Delete a saved query (requires confirmation) |
| Tool | Description |
|---|---|
superset_get_current_user | Get current authenticated user info |
superset_get_current_user_roles | Get roles of current user |
superset_user_list | List users with filtering |
superset_user_get | Get user details |
superset_user_create | Create a new user |
superset_user_update | Update user properties |
superset_user_delete | Delete a user (requires confirmation) |
superset_role_list | List roles |
superset_role_get | Get role details |
superset_role_create | Create a new role |
superset_role_update | Update role name/description |
superset_role_delete | Delete a role (requires confirmation, blocks system roles) |
superset_permission_list | List all available permissions |
superset_role_permissions_get | Get permissions assigned to a role |
superset_role_permission_add | Set role permissions (full replacement, requires confirmation) |
superset_role_copy_permissions | Copy all permissions from one role to another |
superset_dashboard_grant_role_access | Grant a role access to dashboard and its datasets |
superset_dashboard_revoke_role_access | Revoke a role's access to dashboard datasets |
superset_bulk_user_role_add | Add a role to multiple users (by IDs or by current role) |
superset_bulk_user_role_remove | Remove a role from multiple users |
superset_bulk_user_role_replace | Replace one role with another for all matching users |
superset_rls_list | List Row Level Security rules |
superset_rls_get | Get RLS rule details |
superset_rls_create | Create an RLS rule |
superset_rls_update | Update an RLS rule (requires both roles and tables) |
superset_rls_delete | Delete an RLS rule (requires confirmation) |
| Tool | Description |
|---|---|
superset_group_list | List groups |
superset_group_get | Get group details with members and roles |
superset_group_create | Create a new group |
superset_group_update | Update group name |
superset_group_delete | Delete a group |
superset_group_add_users | Add users to a group |
superset_group_remove_users | Remove users from a group |
superset_group_add_roles | Add roles to a group |
superset_group_remove_roles | Remove roles from a group |
| Tool | Description |
|---|---|
superset_tag_list | List tags |
superset_tag_get | Get tag details |
superset_tag_create | Create a tag (optionally bind to objects) |
superset_tag_update | Update a tag |
superset_tag_delete | Delete a tag (requires confirmation) |
superset_tag_get_objects | List objects associated with a tag |
superset_tag_bulk_create | Create multiple tags at once |
| Tool | Description |
|---|---|
superset_report_list | List scheduled reports |
superset_report_get | Get report details |
superset_report_create | Create a scheduled report |
superset_report_update | Update a report |
superset_report_delete | Delete a report (requires confirmation) |
superset_annotation_layer_list | List annotation layers |
superset_annotation_layer_get | Get annotation layer details |
superset_annotation_layer_create | Create an annotation layer |
superset_annotation_layer_update | Update an annotation layer |
superset_annotation_layer_delete | Delete an annotation layer (requires confirmation) |
superset_annotation_list | List annotations in a layer |
superset_annotation_get | Get annotation details |
superset_annotation_create | Create an annotation |
superset_annotation_update | Update an annotation |
superset_annotation_delete | Delete an annotation (requires confirmation) |
superset_recent_activity | Get recent user activity |
superset_log_list | Get audit logs |
superset_get_menu | Get Superset menu structure |
superset_get_base_url | Get configured Superset base URL |
superset_assets_export | Export all Superset assets as ZIP |
superset_assets_import | Import assets from ZIP file |
| Tool | Description |
|---|---|
superset_permissions_audit | Generate comprehensive permissions matrix |
The server includes extensive built-in protections to prevent accidental data loss or misconfiguration.
Destructive operations require explicit confirmation parameters:
| Operation | Required Flag | What It Shows |
|---|---|---|
| Delete dashboard | confirm_delete=True | Dashboard name, slug, chart count |
| Delete chart | confirm_delete=True | Linked dashboards |
| Delete dataset | confirm_delete=True | Affected charts and dashboards |
| Delete database | confirm_delete=True | Affected datasets, charts |
| Delete RLS rule | confirm_delete=True | Clause, roles, datasets |
| Delete role | confirm_delete=True | Blocks system roles |
| Delete user | confirm_delete=True | Blocks service account deletion |
| Update chart params | confirm_params_replace=True | — |
| Update dataset columns | confirm_columns_replace=True | — |
| Update database URI | confirm_uri_change=True | Affected charts/dashboards |
| Update user roles | confirm_roles_replace=True | Current roles |
| Set role permissions | confirm_full_replace=True | — |
| Grant dashboard access | confirm_grant=True | Dry-run results |
| Revoke dashboard access | confirm_revoke=True | Dry-run results |
| Bulk add role to users | confirm=True | User count, sample list |
| Bulk remove role from users | confirm=True | User count, prevents last role removal |
| Bulk replace role | confirm=True | Old/new role names, user count |
| Copy role permissions | confirm=True | Source/target permission counts |
DROP, DELETE, UPDATE, INSERT, TRUNCATE, ALTER, CREATE, GRANT, REVOKE (SQL comments are stripped before checking)rls_update requires both roles and tables to prevent silent data wipeNATIVE_FILTER-<uuid> formatgranularity_sqla (required for dashboard time filters)sst_*) is not implemented in SupersetAdd to your superset_config.py:
These are handled automatically by the MCP server, but useful to know when debugging:
| Quirk | Details |
|---|---|
| RISON pagination | Superset ignores page/page_size as query params; must use RISON in q parameter |
| CSRF required | All POST/PUT/DELETE need X-CSRFToken header + session cookie |
| Referer required | SQL Lab returns 403 without Referer header |
Tag API returns {} | Tag creation doesn't return the ID; must query list |
Tag update needs name | Field is mandatory even if unchanged |
| Role permissions replace | POST /security/roles/{id}/permissions replaces ALL permissions |
| RLS update replaces | PUT /rowlevelsecurity/{id} replaces ALL provided fields |
| Dataset update columns | PUT /dataset/{id} with columns replaces ALL columns |
| Dashboard copy | Requires json_metadata (can be "{}") |
| Native filter IDs | Must be NATIVE_FILTER-<uuid> format |
filter_time needs granularity_sqla | Charts without it silently ignore time filters |
| Number formatting | SMART_NUMBER abbreviates; use ,d or ,.2f for exact |
MIT — Stanislav Chernov (@bintocher)