Two of the seven tools exist purely to avoid re-execution — fetch a result by id, or take the latest cached result for a saved query — and the execution call itself accepts a cache max-age. On a shared Redash instance backed by a production warehouse, that is the difference between an assistant being useful and being a load problem. Setting a default data source id removes the most common argument from the query call.
An MCP server over the Redash API. It covers the awkward part of Redash automation — submitting a query and polling until the job finishes — and the read paths around it, so an assistant can work with a company's existing data sources and saved queries.
- SQL execution that blocks until the result is ready, with an optional data source id and a cache max-age — `execute_query_and_wait`
- Data source discovery: list everything available, or read one in detail — `list_data_sources`, `get_data_source`
- Saved query access: fetch one by id including its SQL text, or search saved queries by keyword with paging — `get_query`, `search_queries`
- Results without re-running anything: fetch an existing result by its result id, or the latest cached result for a saved query — `get_query_result`, `get_saved_query_result`
A Redash API key from Edit Profile in your Redash instance, plus the instance URL: `REDASH_API_KEY` and `REDASH_BASE_URL`. Optional: `DATA_SOURCE_ID` as the default data source, and `PORT` for the HTTP modes (3000 by default). Run it with `npx mcp-redash` after `npm link`, or as a Docker container. Three launch modes: stdio by default, Streamable HTTP with `--streamable-http` exposing POST, GET and DELETE on /mcp, and a deprecated SSE mode kept for legacy clients. The package is `mcp-redash` (1.0.0 in package.json).
One command plus a key — npx mcp-redash, then supply credentials
