Redash MCP Server

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

Connect your client

Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http redash http://localhost:3000/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "redash": {
      "url": "http://localhost:3000/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "redash": {
      "type": "http",
      "url": "http://localhost:3000/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.redash]
url = "http://localhost:3000/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http redash http://localhost:3000/mcp
Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs REDASH_URL, REDASH_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add redash -e REDASH_URL=<REDASH_URL> -e REDASH_API_KEY=<REDASH_API_KEY> -- npx -y @suthio/redash-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "redash": {
      "command": "npx",
      "args": [
        "-y",
        "@suthio/redash-mcp"
      ],
      "env": {
        "REDASH_URL": "<REDASH_URL>",
        "REDASH_API_KEY": "<REDASH_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "redash": {
      "command": "npx",
      "args": [
        "-y",
        "@suthio/redash-mcp"
      ],
      "env": {
        "REDASH_URL": "<REDASH_URL>",
        "REDASH_API_KEY": "<REDASH_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "redash": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@suthio/redash-mcp"
      ],
      "env": {
        "REDASH_URL": "<REDASH_URL>",
        "REDASH_API_KEY": "<REDASH_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[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 CLITerminal
gemini mcp add --scope user -e REDASH_URL=<REDASH_URL> -e REDASH_API_KEY=<REDASH_API_KEY> redash npx -- -y @suthio/redash-mcp

Settings 10

REDASH_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.

What it does

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.

What it needs

RuntimeNode.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.

Limits

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.

Who it suits

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.

Tools 60 of 67

list_queries
Lists saved queries, paged, 25 per page by default, with an optional search term
get_query
Fetches one saved query with its SQL and settings
create_query
Saves a new query against a chosen data source
update_query
Changes a saved query's name, SQL, options or archived flag
get_query_parameters
Shows the parameter definitions saved on a query
update_query_parameters
Rewrites the parameter definitions saved on a query
archive_query
Archives a query, Redash's soft delete
list_data_sources
Lists the data sources the key can see
execute_query
Runs a saved query and returns its rows, optionally reusing a cached result via maxAge
execute_parameterized_query
Runs a saved query with typed parameter values, falling back to its saved defaults
get_query_results_csv
Returns a query's latest or refreshed result as CSV; not for parameterized queries
list_dashboards
Lists dashboards, paged
get_dashboard
Fetches one dashboard with its widgets and visualizations
get_dashboard_layout
Shows each widget's position, size and visibility on a dashboard
get_dashboard_by_slug
Fetches a dashboard by its slug instead of its ID
get_visualization
Fetches one visualization's settings
execute_adhoc_query
Runs SQL against a data source without saving it, with Redash's auto LIMIT on by default
create_visualization
Adds a chart, table or other visualization to a query
update_visualization
Changes a visualization's name, type or options
update_chart_visualization
Patches chart options such as series type, column mapping, legend and axes, merged into the current config
delete_visualization
Removes a visualization
get_schema
Returns one page of a data source's tables and columns, 25 by default and up to 100, with a name filter
create_dashboard
Creates an empty dashboard with optional tags
update_dashboard
Changes a dashboard's name, tags or other settings
get_dashboard_parameters
Shows dashboard parameter values and how widgets map to them
update_dashboard_parameters
Changes dashboard parameter values and their order
archive_dashboard
Archives a dashboard
fork_dashboard
Makes a copy of a dashboard
get_public_dashboard
Reads a dashboard through its public share token
share_dashboard
Turns on a public link for a dashboard
unshare_dashboard
Turns off a dashboard's public link
get_my_dashboards
Lists dashboards the key's user created
get_favorite_dashboards
Lists the user's favourite dashboards
add_dashboard_favorite
Marks a dashboard as a favourite
remove_dashboard_favorite
Unmarks a favourite dashboard
get_dashboard_tags
Lists the tags used on dashboards
list_alerts
Lists alerts
get_alert
Fetches one alert and its condition
create_alert
Creates an alert on a query's result
update_alert
Changes an alert's condition or settings
delete_alert
Removes an alert
mute_alert
Silences an alert's notifications
get_alert_subscriptions
Lists who or what an alert notifies
add_alert_subscription
Sends an alert to a notification destination
remove_alert_subscription
Stops an alert notifying a destination
fork_query
Makes a copy of a saved query
get_my_queries
Lists queries the key's user created
get_recent_queries
Lists recently used queries
get_query_tags
Lists the tags used on queries
get_favorite_queries
Lists the user's favourite queries
add_query_favorite
Marks a query as a favourite
remove_query_favorite
Unmarks a favourite query
list_widgets
Lists the widgets on a dashboard
create_widget
Places a visualization or text box on a dashboard
update_widget
Changes a widget's text or options
update_widget_layout
Moves or resizes one widget
update_dashboard_layout
Moves or resizes several widgets in one call
delete_widget
Removes a widget from a dashboard
create_query_snippet
Saves a reusable SQL snippet
list_destinations
Lists alert notification destinations such as email or Slack

Similar servers