Provides comprehensive control over Apache Superset instances, including tools for managing dashboards, charts, datasets, SQL Lab, security roles, and Row Level Security (RLS).
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 128+ tools.
Comparison with Other Superset MCP Servers
Feature | mcp-superset | |||
Total tools | 128+ | ~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) | 22 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 |
| - | - | - |
PyPI package |
|
|
| - |
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
128+ 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-supersetConfiguration
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 stdioRunning
# 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 stdioCLI Options
Option | Default | Env Variable | Description |
|
|
| Server bind address |
|
|
| Server bind port |
|
|
| Transport: |
| auto-detect | — | Path to |
| — | — | 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>/mcpSSE:
http://<host>:<port>/ssestdio: pipe to
mcp-superset --transport stdio
Available Tools (128+)
Dashboards (15 tools)
Tool | Description |
| List dashboards with filtering and pagination |
| Get dashboard details by ID |
| Create a new dashboard |
| Update dashboard properties |
| Delete a dashboard (requires confirmation) |
| Duplicate a dashboard |
| Publish a draft dashboard |
| Unpublish a dashboard |
| List charts in a dashboard |
| List datasets used by a dashboard |
| Export dashboard as ZIP (base64) |
| Import dashboard from ZIP file |
| Get embedded configuration |
| Enable embedded mode with allowed domains |
| Disable embedded mode |
Dashboard Filters (5 tools)
Tool | Description |
| List native filters on a dashboard |
| Add a native filter (auto-generates correct ID format) |
| Update an existing native filter |
| Remove a native filter (requires confirmation) |
| Remove all filters (requires confirmation) |
Charts (11 tools)
Tool | Description |
| List charts with filtering and pagination |
| Get chart details by ID |
| Create a new chart |
| Update chart properties |
| Delete a chart (requires confirmation) |
| Duplicate a chart |
| Execute chart query and get data |
| Get data from a saved chart |
| Export chart as ZIP (base64) |
| Import chart from ZIP file |
| Warm up chart cache |
Databases (18 tools)
Tool | Description |
| List database connections |
| Get database details |
| Register a new database connection |
| Update database settings |
| Remove a database (requires confirmation) |
| Test database connectivity |
| List schemas in a database |
| List tables in a schema |
| List catalogs (for multi-catalog databases) |
| Get connection string info |
| List available SQL functions |
| Find charts/datasets using this database |
| Validate SQL syntax |
| Validate connection parameters |
| Generate SELECT * query for a table |
| Get table column and index metadata |
| Export database config as ZIP |
| List supported database engines |
Datasets (11 tools)
Tool | Description |
| List datasets with filtering |
| Get dataset details including columns and metrics |
| Create a dataset from a table or SQL query |
| Update dataset properties |
| Delete a dataset (requires confirmation) |
| Duplicate a dataset |
| Refresh columns from source |
| Find charts using this dataset |
| Export dataset as ZIP |
| Import dataset from ZIP |
| Get existing or create new dataset |
SQL Lab & Queries (13 tools)
Tool | Description |
| Execute a SQL query (SELECT only) |
| Format/beautify SQL |
| Fetch results of a completed query |
| Estimate query execution cost |
| Export query results as CSV |
| List executed queries |
| Get query details and results |
| Stop a running query |
| List saved queries |
| Save a new query |
| Get saved query details |
| Update a saved query |
| Delete a saved query (requires confirmation) |
Security & Access Control (22 tools)
Tool | Description |
| Get current authenticated user info |
| Get roles of current user |
| List users with filtering |
| Get user details |
| Create a new user |
| Update user properties |
| Delete a user (requires confirmation) |
| List roles |
| Get role details |
| Create a new role |
| Update role name/description |
| Delete a role (requires confirmation, blocks system roles) |
| List all available permissions |
| Get permissions assigned to a role |
| Set role permissions (full replacement, requires confirmation) |
| Grant a role access to dashboard and its datasets |
| Revoke a role's access to dashboard datasets |
| List Row Level Security rules |
| Get RLS rule details |
| Create an RLS rule |
| Update an RLS rule (requires both roles and tables) |
| Delete an RLS rule (requires confirmation) |
Groups (9 tools)
Tool | Description |
| List groups |
| Get group details with members and roles |
| Create a new group |
| Update group name |
| Delete a group |
| Add users to a group |
| Remove users from a group |
| Add roles to a group |
| Remove roles from a group |
Tags (7 tools)
Tool | Description |
| List tags |
| Get tag details |
| Create a tag (optionally bind to objects) |
| Update a tag |
| Delete a tag (requires confirmation) |
| List objects associated with a tag |
| Create multiple tags at once |
System & Reports (21 tools)
Tool | Description |
| List scheduled reports |
| Get report details |
| Create a scheduled report |
| Update a report |
| Delete a report (requires confirmation) |
| List annotation layers |
| Get annotation layer details |
| Create an annotation layer |
| Update an annotation layer |
| Delete an annotation layer (requires confirmation) |
| List annotations in a layer |
| Get annotation details |
| Create an annotation |
| Update an annotation |
| Delete an annotation (requires confirmation) |
| Get recent user activity |
| Get audit logs |
| Get Superset menu structure |
| Get configured Superset base URL |
| Export all Superset assets as ZIP |
| Import assets from ZIP file |
Audit (1 tool)
Tool | Description |
| 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 |
| Dashboard name, slug, chart count |
Delete chart |
| Linked dashboards |
Delete dataset |
| Affected charts and dashboards |
Delete database |
| Affected datasets, charts |
Delete RLS rule |
| Clause, roles, datasets |
Delete role |
| Blocks system roles |
Delete user |
| Blocks service account deletion |
Update chart params |
| — |
Update dataset columns |
| — |
Update database URI |
| Affected charts/dashboards |
Update user roles |
| Current roles |
Set role permissions |
| — |
Grant dashboard access |
| Dry-run results |
Revoke dashboard access |
| Dry-run results |
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 wipeNative filter IDs — automatically generated in
NATIVE_FILTER-<uuid>formatChart 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 tools (22)
├── 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 SupersetRequired 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 = 100Development
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 credentialsRunning Locally
# Run from source
uv run python -m mcp_superset
# Or with CLI
uv run mcp-superset --port 8001Running Tests
uv run python test_all_tools.pyKnown Superset API Quirks
These are handled automatically by the MCP server, but useful to know when debugging:
Quirk | Details |
RISON pagination | Superset ignores |
CSRF required | All POST/PUT/DELETE need |
Referer required | SQL Lab returns 403 without |
Tag API returns | Tag creation doesn't return the ID; must query list |
Tag update needs | Field is mandatory even if unchanged |
Role permissions replace |
|
RLS update replaces |
|
Dataset update columns |
|
Dashboard copy | Requires |
Native filter IDs | Must be |
| Charts without it silently ignore time filters |
Number formatting |
|
License
MIT — Stanislav Chernov (@bintocher)