mcp-superset
Health Pass
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 24 GitHub stars
Code Warn
- network request — Outbound network request in src/mcp_superset/client.py
Permissions Pass
- Permissions — No dangerous permissions requested
This server provides a comprehensive bridge allowing AI assistants to manage and control an Apache Superset instance. It exposes over 130 distinct tools to handle dashboards, charts, datasets, SQL Lab queries, and user access controls.
Security Assessment
Because it is designed to interact directly with Superset's API, the server makes outbound network requests to the specified Superset instance. It does not request inherently dangerous local permissions or execute arbitrary shell commands. However, the sheer scope of its capabilities—especially the 26 security tools that manage users, roles, and Row Level Security—means an AI agent could inadvertently or maliciously alter access controls or execute raw SQL via SQL Lab. There are no hardcoded secrets detected, but you must securely provide your own Superset API credentials. Overall risk is rated as Medium due to the highly sensitive nature of the data and access controls it can manipulate.
Quality Assessment
The project is highly maintained, featuring recent commits, continuous integration (CI), and automated CodeQL security scanning. It is distributed under the permissive and standard MIT license. While community trust is currently growing with 24 GitHub stars, the developer's commitment to modern tooling (Python 3.12+, Ruff) and comprehensive documentation indicates a reliable, high-quality project.
Verdict
Use with caution — it is a well-built and actively maintained tool, but its broad administrative capabilities over sensitive BI infrastructure require strict oversight and carefully scoped API credentials.
MCP server for managing Apache Superset — 128+ tools for dashboards, charts, datasets, SQL Lab, access control
mcp-superset
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.
Comparison with Other Superset MCP Servers
| 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:
- Only MCP server with full security management (users, roles, RLS, groups, permissions audit)
- Only one with built-in safety validations (confirmation flags, DDL/DML blocking)
- Only one with dashboard native filter management
- Only one with automatic datasource_access synchronization
- Only one with multiple transport options (HTTP, SSE, stdio)
- Only one with configurable CLI (
--host,--port,--transport,--env-file)
Features
- 137 MCP tools covering the complete Superset REST API
- Dashboard management — CRUD, copy, publish/unpublish, export/import, embedded mode, native filters
- Chart management — CRUD, copy, data retrieval, export/import, cache warmup
- Database management — CRUD, connection testing, schema/table introspection, SQL validation
- Dataset management — CRUD, duplicate, schema refresh, export/import
- SQL Lab — query execution, formatting, cost estimation, results & CSV export
- Security — users, roles, permissions, Row Level Security (RLS), groups
- Access control automation — grant/revoke dashboard access with automatic datasource permission sync
- Audit — comprehensive permissions matrix (user x dashboards x datasets x RLS)
- Tags, reports, annotations, saved queries — full CRUD
- Asset export/import — full instance backup and restore
- Built-in safety — confirmation flags for destructive operations, DDL/DML blocking in SQL Lab
- JWT authentication with automatic token refresh and CSRF handling
- Streamable HTTP, SSE, and stdio transports
Quick Start
Installation
# From PyPI
pip install mcp-superset
# With uv (recommended)
uv pip install mcp-superset
# Run without installing (uvx)
uvx mcp-superset
Configuration
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
Running
# 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
CLI Options
| 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 |
Connecting to MCP Clients
Claude Code
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.
Claude Desktop
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"
}
}
}
}
Cursor / Windsurf
{
"mcpServers": {
"superset": {
"command": "uvx",
"args": ["mcp-superset", "--transport", "stdio"],
"env": {
"SUPERSET_BASE_URL": "https://superset.example.com",
"SUPERSET_USERNAME": "admin",
"SUPERSET_PASSWORD": "your_password"
}
}
}
}
Other MCP Clients
Any MCP-compatible client can connect via:
- Streamable HTTP:
http://<host>:<port>/mcp - SSE:
http://<host>:<port>/sse - stdio: pipe to
mcp-superset --transport stdio
Available Tools (137)
Dashboards (15 tools)
| 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 |
Dashboard Filters (5 tools)
| 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) |
Charts (11 tools)
| 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 |
Databases (18 tools)
| 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 |
Datasets (11 tools)
| 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 |
SQL Lab & Queries (13 tools)
| 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) |
Security & Access Control (26 tools)
| 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) |
Groups (9 tools)
| 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 |
Tags (7 tools)
| 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 |
System & Reports (21 tools)
| 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 |
Audit (1 tool)
| Tool | Description |
|---|---|
superset_permissions_audit |
Generate comprehensive permissions matrix |
Safety Features
The server includes extensive built-in protections to prevent accidental data loss or misconfiguration.
Confirmation Flags
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 |
Automatic Protections
- DDL/DML blocking — SQL Lab rejects
DROP,DELETE,UPDATE,INSERT,TRUNCATE,ALTER,CREATE,GRANT,REVOKE(SQL comments are stripped before checking) - System role protection — cannot delete Admin, Alpha, Gamma, Public roles
- Service account protection — cannot delete the MCP service user
- RLS safety —
rls_updaterequires bothrolesandtablesto prevent silent data wipe - Native filter IDs — automatically generated in
NATIVE_FILTER-<uuid>format - Chart validation — rejects charts without
granularity_sqla(required for dashboard time filters) - Auto-sync — datasource_access permissions are automatically synchronized when dashboard roles change
Architecture
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)
Superset Compatibility
- Tested with: Apache Superset 6.0.1
- Authentication: JWT (recommended) — API Key (
sst_*) is not implemented in Superset - Required Superset user: Admin role (for full API access)
Recommended Superset Configuration
Add 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
Development
Setup
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
Running Locally
# Run from source
uv run python -m mcp_superset
# Or with CLI
uv run mcp-superset --port 8001
Running Tests
uv run python test_all_tools.py
Known Superset API Quirks
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 |
License
MIT — Stanislav Chernov (@bintocher)
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found