redash-mcp
# redash-mcp
[](https://www.npmjs.com/package/redash-mcp)
[](https://www.npmjs.com/package/redash-mcp)
[](https://nodejs.org)
[](https://glama.ai/mcp/servers/seob717/redash-mcp)
[](https://github.com/seob717/redash-mcp#installation)
[](https://github.com/seob717/redash-mcp#installation)
[](https://github.com/seob717/redash-mcp#installation)
[](https://github.com/seob717/redash-mcp#installation)
English | [한국어](README.ko.md) | [日本語](README.ja.md)
> MCP server that connects [Redash](https://redash.io) to Claude, Cursor, Gemini CLI, Codex, and any MCP client — query data, build charts and dashboards, and run SQL with natural language.
[Install](#installation) · [Tools](#tools) · [Env](#environment-variables) · [Examples](#usage-examples) · [Troubleshooting](#troubleshooting) · [Privacy](#privacy-policy)
## What's new in 3.5
- **`create_visualization`** — create line / column / area / pie / scatter charts or counters on a saved query. If the query has been run, column names are checked against its latest result, so a typo returns an error instead of an empty chart.
- **Dashboard auto-layout** — `add_widget` places new widgets below existing ones; half-width widgets pair up side by side (previously they all overlapped at the top-left).
Full history: [Releases](https://github.com/seob717/redash-mcp/releases)
## Why redash-mcp?
Built for letting an LLM touch **production** data safely:
- **🛡️ SQL Safety Guard** — blocks `DROP`/`TRUNCATE`/`ALTER` and `DELETE`/`UPDATE` without `WHERE`; `strict`/`warn`/`off` modes, PII detection, and auto-`LIMIT`.
- **🧠 BIRD Smart Query** — analyzes the question, auto-selects tables, and guides SQL generation ([BIRD text-to-SQL](https://bird-bench.github.io/)). Optional Claude Haiku fallback.
- **📊 End-to-end** — query, save, chart, dashboards, and alerts — 25 tools.
- **⚡ One-command setup** — `npx redash-mcp setup` configures Claude Desktop / Claude Code / Cursor / Gemini CLI / Codex CLI.
- **🔒 Fully local** — talks directly to your Redash. API key and results never leave your machine.
## Installation
**Requirements:** Node.js 20+ and a Redash API key (Redash → Profile → **Edit Profile** → **API Key**).
```bash
npx redash-mcp setup
```
The wizard configures any combination of Claude Desktop, Claude Code, Cursor, Gemini CLI, and Codex CLI.
Alternatively, install Node.js, Claude Desktop, and the MCP config in one go:
```bash
curl -fsSL https://raw.githubusercontent.com/seob717/redash-mcp/main/install.sh | bash
```
<details>
<summary><b>Manual setup</b></summary>
- **Claude Desktop** — `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Cursor** — `~/.cursor/mcp.json` (create it if missing)
```json
{
"mcpServers": {
"redash-mcp": {
"command": "npx",
"args": ["-y", "redash-mcp"],
"env": {
"REDASH_URL": "https://your-redash-instance.com",
"REDASH_API_KEY": "your_api_key_here"
}
}
}
}
```
Fully quit and restart Claude Desktop after saving.
**Claude Code**
```bash
claude mcp add --scope user redash-mcp \
-e REDASH_URL=https://your-redash-instance.com \
-e REDASH_API_KEY=your_api_key_here \
-- npx -y redash-mcp
```
**Gemini CLI**
```bash
gemini mcp add -s user \
-e REDASH_URL=https://your-redash-instance.com \
-e REDASH_API_KEY=your_api_key_here \
redash-mcp npx -y redash-mcp
```
**Codex CLI**
```bash
codex mcp add redash-mcp \
--env REDASH_URL=https://your-redash-instance.com \
--env REDASH_API_KEY=your_api_key_here \
-- npx -y redash-mcp
```
</details>
## Tools
| Category | Tools |
|---|---|
| Data sources & schema | `list_data_sources`, `list_tables`, `get_table_columns` |
| Query | `run_query` — execute SQL and return results |
| Saved queries | `list_queries`, `get_query`, `get_query_result` (with parameter values), `create_query`, `update_query`, `fork_query`, `archive_query` |
| Charts | `create_visualization` — line / column / area / pie / scatter / counter |
| Dashboards | `list_dashboards`, `get_dashboard`, `create_dashboard`, `add_widget` (auto-layout) |
| Alerts | `list_alerts`, `get_alert`, `create_alert` |
| Smart Query (BIRD) | `smart_query`, `get_bird_config`, `evaluate_queries`, `submit_query_feedback`, `manage_few_shot_examples`, `manage_keyword_map` |
### SQL Safety Guard
Applies to ad-hoc SQL run through `run_query`. Saved queries executed with `get_query_result` are not checked, so give the Redash data source a read-only DB account.
- **Always blocked** (unless `REDASH_SAFETY_MODE=off`): `DROP`, `TRUNCATE`, `ALTER TABLE`, `GRANT/REVOKE`, `DELETE/UPDATE` without `WHERE`
- **Warned (`warn`) / blocked (`strict`)**: `SELECT *`, queries without `WHERE` or `LIMIT`, PII column access
- **Auto-LIMIT**: appends `LIMIT N` when `REDASH_AUTO_LIMIT` is set
Details: [docs/sql-safety-guard.md](docs/sql-safety-guard.md). Query results are also cached in memory (see `REDASH_MCP_CACHE_*` below).
## Environment Variables
| Variable | Default | Description |
|---|---|---|
| `REDASH_URL` | **required** | Redash instance URL (e.g. `https://redash.example.com`) |
| `REDASH_API_KEY` | **required** | Redash user API key |
| `REDASH_SAFETY_MODE` | `warn` | SQL safety level: `off` / `warn` / `strict` |
| `REDASH_SAFETY_DISABLE_PII` | `false` | Disable PII detection |
| `REDASH_SAFETY_DISABLE_COST` | `false` | Disable cost warnings |
| `REDASH_AUTO_LIMIT` | `0` | Auto-append `LIMIT N` to queries without one (0 = off) |
| `REDASH_DEFAULT_MAX_AGE` | `0` | Redash cache TTL in seconds |
| `REDASH_MCP_CACHE_TTL` | `300` | MCP query cache TTL in seconds (0 = off) |
| `REDASH_MCP_CACHE_MAX_MB` | `50` | Max memory for the MCP query cache, in MB |
| `REDASH_MCP_CONFIG_DIR` | `~/.redash-mcp` | Where BIRD few-shot, feedback, eval, and keyword-map data live |
| `REDASH_BIRD_ENABLED` | `true` | `false` disables the BIRD smart query tools |
| `REDASH_HTTP_TIMEOUT_SECS` | `30` | Per-request HTTP timeout against the Redash API |
| `ANTHROPIC_API_KEY` | — | Enables the Claude Haiku fallback for table selection in `smart_query` |
## Usage Examples
Just ask in natural language:
- "How many new users signed up this month?" → `smart_query` picks the tables → `run_query`
- "What percentage of last week's new users made a purchase?" → `smart_query` guides the JOIN → `run_query`
- "Create an alert when daily signups drop below 100" → `create_alert`
**Build a dashboard:** "Save a monthly revenue query, chart it as a line, and put it on a new Revenue dashboard."
1. `create_query` — save "Monthly Revenue"
2. `get_query_result` — run it once so the chart columns can be checked
3. `create_visualization` — `type: "line"`, `x_column: "month"`, `y_columns: ["revenue"]`
4. `create_dashboard` — create "Revenue"
5. `add_widget` — place the chart; more widgets stack below or pair side by side
## Troubleshooting
| Symptom | Fix |
|---|---|
| `npx` not found (macOS GUI apps) | Run `which npx` and use the full path as `command` |
| "Authentication failed" | Check `REDASH_API_KEY` — it must be a user API key |
| "Unable to connect to the Redash server" | Check `REDASH_URL` (base URL with `https://`, without `/api`) and network/VPN |
| "The query timed out" | Simplify the query or pass a larger `timeout_secs` to `run_query` / `get_query_result`; raise `REDASH_HTTP_TIMEOUT_SECS` for slow API responses |
| Query blocked by the safety guard | Add `WHERE`/`LIMIT`; in `strict` mode, switch to `REDASH_SAFETY_MODE=warn` to get warnings instead |
| Tools don't show up | Fully restart the client after editing its config |
## Development
```bash
npm install
npm run dev # run from source (tsx)
npm test # vitest
npm run build # typecheck + bundle to dist/
```
## Privacy Policy
redash-mcp is a **local MCP server** that talks directly to your Redash instance. No intermediate servers are involved.
| Item | Description |
|------|-------------|
| **Redash API Key** | Stored only as a local environment variable (`REDASH_API_KEY`). Never transmitted externally. |
| **Query content & results** | Delivered only to the local MCP client via the MCP protocol. |
| **BIRD SQL settings** | Stored only in local files (`~/.redash-mcp/`): few-shot examples, keyword maps, and feedback. |
| **LLM Fallback** | Only when `ANTHROPIC_API_KEY` is set, `smart_query` sends table names, column names, and the question text to the Anthropic API. Query results and row data are never transmitted. |
We do not sell or share user data with third parties.
**Retention:** config files stay in `~/.redash-mcp/` until you delete them; the query cache is in-memory and cleared on shutdown; the schema cache is in-memory with a 10-minute TTL.
**Contact:** inquiries and security reports via [GitHub Issues](https://github.com/seob717/redash-mcp/issues).
## Disclaimer
redash-mcp is an unofficial, community-built integration and is **not affiliated with, endorsed by, or sponsored by Redash**. "Redash" is a trademark of its respective owners and is used here only to describe compatibility. This project communicates with Redash solely through its public REST API.
## License
MIT
TDQS
Scored across 25 tools
Core Redash operations are well separated by resource and action, and run_query vs get_query_result vs smart_query are explicitly differentiated in descriptions. The main ambiguity is the smart-query meta-tool cluster (few-shot examples, feedback, query evaluation, keyword maps, BIRD config), whose boundaries are related and could cause misselection.
Almost all tools use consistent snake_case with a verb_noun pattern (list_queries, create_dashboard, get_alert, manage_keyword_map). Minor deviations are smart_query, which is not verb-led, and get_bird_config, but the overall convention remains predictable.
At 25 tools this is at the heavy end for an MCP server and forces agents to choose among many related operations. The core Redash tools are reasonable, but the smart-query learning/evaluation/config tools inflate the surface and make the set feel borderline over-scoped.
The server covers important workflows: query discovery, execution, creation/update/fork/archive, dashboards/widgets, alerts, schema inspection, and ad-hoc SQL. However, notable lifecycle gaps remain, including no dashboard update/delete, no alert update/delete, no widget/visualization removal, and data sources are only listable.