Metabase MCP server
OFFICIAL SERVERBuilt-in MCP endpoint of a Metabase instance for searching, querying, charting and editing its content
Run, write and manage Redash queries, dashboards, charts and alerts from an MCP client
By yuma iwasaki (individual) TypeScript Local · stdio, Streamable HTTP Data and analyticsDatabases
57 popularity score ★ 108 ↓ 5.2k/wk
Opens the app, which asks before it adds the server.
claude mcp add --transport http redash http://localhost:3000/mcp{
"mcpServers": {
"redash": {
"url": "http://localhost:3000/mcp"
}
}
}{
"servers": {
"redash": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}[mcp_servers.redash]
url = "http://localhost:3000/mcp"gemini mcp add --scope user --transport http redash http://localhost:3000/mcpOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs REDASH_URL, REDASH_API_KEY. Replace each <NAME> with your value.
claude mcp add redash -e REDASH_URL=<REDASH_URL> -e REDASH_API_KEY=<REDASH_API_KEY> -- npx -y @suthio/redash-mcp{
"mcpServers": {
"redash": {
"command": "npx",
"args": [
"-y",
"@suthio/redash-mcp"
],
"env": {
"REDASH_URL": "<REDASH_URL>",
"REDASH_API_KEY": "<REDASH_API_KEY>"
}
}
}
}{
"mcpServers": {
"redash": {
"command": "npx",
"args": [
"-y",
"@suthio/redash-mcp"
],
"env": {
"REDASH_URL": "<REDASH_URL>",
"REDASH_API_KEY": "<REDASH_API_KEY>"
}
}
}
}{
"servers": {
"redash": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@suthio/redash-mcp"
],
"env": {
"REDASH_URL": "<REDASH_URL>",
"REDASH_API_KEY": "<REDASH_API_KEY>"
}
}
}
}[mcp_servers.redash]
command = "npx"
args = ["-y", "@suthio/redash-mcp"]
[mcp_servers.redash.env]
REDASH_URL = "<REDASH_URL>"
REDASH_API_KEY = "<REDASH_API_KEY>"gemini mcp add --scope user -e REDASH_URL=<REDASH_URL> -e REDASH_API_KEY=<REDASH_API_KEY> redash npx -- -y @suthio/redash-mcpREDASH_URL |
Required: Address of your Redash instance, e.g. https://redash.example.com. |
|---|---|
REDASH_API_KEY |
Required: Redash API key used for every call in stdio mode; in HTTP mode only a fallback when a request sends no Authorization header. |
REDASH_TIMEOUT |
Optional: Request timeout in milliseconds, 30000 by default. |
REDASH_EXTRA_HEADERS |
Optional: Extra headers for every Redash request (e.g. Cloudflare Access), as JSON or key=value pairs. |
REDASH_SOCKS_PROXY |
Optional: SOCKS proxy URL for reaching Redash, e.g. socks5h://localhost:1080. |
MCP_TRANSPORT |
Optional: stdio (default), http or streamable-http. |
MCP_HTTP_HOST |
Optional: Bind address in HTTP mode, 127.0.0.1 by default. |
MCP_HTTP_PORT |
Optional: Port in HTTP mode, 3000 by default. |
MCP_HTTP_ALLOWED_HOSTS |
Optional: Host header allowlist; needed with MCP_HTTP_ALLOWED_ORIGINS for a non-local bind. |
MCP_HTTP_ALLOWED_ORIGINS |
Optional: Browser Origin allowlist, also controls CORS. |
Redash MCP Server connects an MCP client to a self-hosted or cloud Redash instance through Redash's REST API, using a Redash API key. It can browse and run saved queries, run one-off SQL against any data source the key can reach, page through a data source's schema, and pull results as rows or CSV. Saved queries and dashboards are also offered as resources under redash://query/<id> and redash://dashboard/<id>.
Beyond reading, it edits most of what Redash holds: it creates and updates queries and their parameters, builds and rearranges dashboards and widgets, changes chart options, shares dashboards by public link, and creates, mutes and deletes alerts and their subscriptions.
The README lists 27 tools, but version 0.1.0 registers 67 in src/index.ts: the extra ones cover alerts, query snippets, favourites, tags, forking, public sharing and widget management. It runs over stdio by default, or as a stateless Streamable HTTP server (MCP_TRANSPORT=http) where each request can carry its own user's Redash token in the Authorization header, so one process can serve several people. It also has built-in OpenTelemetry tracing, metrics and logs, which stay off until an exporter is configured.
| Runtime | Node.js 22+ |
|---|
Node.js 22.13 or later for the npx command. A Redash instance you can reach over the network and a Redash API key for a user on it (in stdio mode). The published Docker image (ghcr.io/suthio/redash-mcp) serves Streamable HTTP on port 3000 rather than stdio: start it with docker run -p 127.0.0.1:3000:3000 and REDASH_URL set, then point the client at http://localhost:3000/mcp. Building from source needs Corepack to get the pinned pnpm.
It acts with the rights of the Redash user whose key it is given and cannot do more than that user can. get_query_results_csv does not take parameterized queries. get_schema returns at most 100 tables per page (25 by default), and Query Results data sources have no fixed schema to return. execute_adhoc_query asks Redash to add an automatic LIMIT unless applyAutoLimit is false (needed for MSSQL). HTTP mode keeps no sessions and sends no log notifications to the client. The README's version history (v1.0.0, v1.1.0) does not match the published package, which is 0.1.0, and its tool list covers 27 of the 67 tools in that version's src/index.ts.
Suits analysts and engineers who already use Redash and want an assistant to find, run and edit queries, or to build and tidy dashboards, without leaving the client. It is a third-party project, not Redash's own. Because 67 tools include deletes, sharing and alert changes, give it a key for a user with limited rights if you only want reads. Teams can run one HTTP process per Redash instance behind an authenticating proxy, with each person sending their own token. If you want to query a database directly rather than through Redash, a server for that database fits better.
list_queriesget_querycreate_queryupdate_queryget_query_parametersupdate_query_parametersarchive_querylist_data_sourcesexecute_queryexecute_parameterized_queryget_query_results_csvlist_dashboardsget_dashboardget_dashboard_layoutget_dashboard_by_slugget_visualizationexecute_adhoc_querycreate_visualizationupdate_visualizationupdate_chart_visualizationdelete_visualizationget_schemacreate_dashboardupdate_dashboardget_dashboard_parametersupdate_dashboard_parametersarchive_dashboardfork_dashboardget_public_dashboardshare_dashboardunshare_dashboardget_my_dashboardsget_favorite_dashboardsadd_dashboard_favoriteremove_dashboard_favoriteget_dashboard_tagslist_alertsget_alertcreate_alertupdate_alertdelete_alertmute_alertget_alert_subscriptionsadd_alert_subscriptionremove_alert_subscriptionfork_queryget_my_queriesget_recent_queriesget_query_tagsget_favorite_queriesadd_query_favoriteremove_query_favoritelist_widgetscreate_widgetupdate_widgetupdate_widget_layoutupdate_dashboard_layoutdelete_widgetcreate_query_snippetlist_destinations