A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
MCP server for managing Apache Superset — 128+ tools for dashboards, charts, datasets, SQL Lab, access control
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)# From PyPI
pip install mcp-superset
# With uv (recommended)
uv pip install mcp-superset
# Run without installing (uvx)
uvx mcp-superset
Create a .env file in the current directory, or set environment variables:
# Required
SUPERSET_BASE_URL=https://superset.example.com
SUPERSET_USERNAME=admin
SUPERSET_PASSWORD=your_password
# Optional
SUPERSET_AUTH_PROVIDER=db # db (default) or ldap
SUPERSET_MCP_HOST=127.0.0.1 # Server host (default: 127.0.0.1)
SUPERSET_MCP_PORT=8001 # Server port (default: 8001)
SUPERSET_MCP_TRANSPORT=streamable-http # streamable-http (default), sse, or stdio
# Using CLI (after pip install)
mcp-superset
# Run without installing
uvx mcp-superset
# Using Python module
python -m mcp_superset
# With uv from source
uv run mcp-superset
# With custom settings
mcp-superset --host 0.0.0.0 --port 9000 --transport sse
# With custom .env file
mcp-superset --env-file /path/to/.env
# Using stdio transport (for Claude Desktop, Cursor, etc.)
mcp-superset --transport stdio
| 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:
{
"mcpServers": {
"superset": {
"type": "http",
"url": "http://localhost:8001/mcp"
}
}
}
Then start the server: mcp-superset or uvx mcp-superset.
Add to claude_desktop_config.json:
{
"mcpServers": {
"superset": {
"command": "uvx",
"args": ["mcp-superset", "--transport", "stdio"],
"env": {
"SUPERSET_BASE_URL": "https://superset.example.com",
"SUPERSET_USERNAME": "admin",
"SUPERSET_PASSWORD": "your_password"
}
}
}
}
{
"mcpServers": {
"superset": {
"command": "uvx",
"args": ["mcp-superset", "--transport", "stdio"],
"env": {
"SUPERSET_BASE_URL": "https://superset.example.com",
"SUPERSET_USERNAME": "admin",
"SUPERSET_PASSWORD": "your_password"
}
}
}
}
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)superset-mcp/
├── pyproject.toml # Package configuration
├── .env.example # Environment variable template
├── LICENSE # MIT License
├── README.md # This file
├── README_RU.md # Russian documentation
├── CHANGELOG.md # Version history
└── src/mcp_superset/
├── __init__.py # Package init with __version__
├── __main__.py # CLI entry point with argparse
├── server.py # FastMCP server setup and configuration
├── auth.py # JWT authentication (login, refresh, CSRF)
├── client.py # HTTP client (auto-auth, retry, RISON pagination)
├── models.py # Pydantic models
└── tools/
├── __init__.py # register_all_tools()
├── helpers.py # Auto-sync datasource_access logic
├── dashboards.py # Dashboard + filter tools (20)
├── charts.py # Chart tools (11)
├── databases.py # Database tools (18)
├── datasets.py # Dataset tools (11)
├── queries.py # SQL Lab + saved query tools (13)
├── security.py # User, role, permission, RLS, bulk operations (26)
├── groups.py # Group management tools (9)
├── audit.py # Permissions audit tool (1)
├── tags.py # Tag tools (7)
└── system.py # Reports, annotations, logs, assets (21)
sst_*) is not implemented in SupersetAdd to your superset_config.py:
from datetime import timedelta
# Increase JWT token lifetime (default is 15 min)
JWT_ACCESS_TOKEN_EXPIRES = timedelta(hours=1)
JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=30)
# Max API page size
FAB_API_MAX_PAGE_SIZE = 100
git clone https://github.com/bintocher/mcp-superset.git
cd superset-mcp
# Create virtual environment and install in editable mode
uv venv
uv pip install -e ".[dev]"
# Copy and configure .env
cp .env.example .env
# Edit .env with your Superset credentials
# Run from source
uv run python -m mcp_superset
# Or with CLI
uv run mcp-superset --port 8001
uv run python test_all_tools.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)
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
MCP server integration for DaVinci Resolve Studio
Secure MCP server for MySQL database interaction, queries, and schema management