Mcp For Redash — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp For Redash (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Connect Codex, Claude Code, Cursor, and other MCP-compatible AI tools to Redash.
This project is a local MCP server written in Python. It gives your AI assistant a structured way to list Redash assets, run approved read-only queries, inspect dashboards, manage alerts, and work with other Redash objects through the Redash API.
This repository does not need your Redash URL or API key to be committed to GitHub.
.env.example only contains placeholdersYou can provide credentials in either of these ways:
REDASH_URL and REDASH_API_KEYIf you are not technical, think of this as a bridge between your AI assistant and Redash.
Without this MCP:
With this MCP:
In short: this makes your AI assistant act more like a Redash power user.
MCP stands for Model Context Protocol.
It is a standard way for an AI client to talk to an external tool.
In this project:
This server currently supports:
By default, the server starts in a hardened enterprise mode:
read_only is enabled by defaultYou need:
git clone https://github.com/Ashuqwe/mcp-for-redash.git
cd mcp-for-redashpython3 -m venv .venv
source .venv/bin/activatepython3 -m pip install -e .You have two safe options.
export REDASH_URL="https://your-redash.example.com"
export REDASH_API_KEY="YOUR_REDASH_API_KEY"Optional:
export REDASH_TIMEOUT_SECONDS="300"
export REDASH_MCP_MAX_ROWS="200"
export REDASH_MCP_READ_ONLY="true"
export REDASH_MCP_ALLOW_ADHOC_SQL="false"
export REDASH_MCP_DEFAULT_INSTANCE="default"You can copy .env.example as a reference, but do not commit your real .env file.
Copy config.example.json to a local file outside version control, for example:
mkdir -p ~/.config/redash-mcp
cp config.example.json ~/.config/redash-mcp/config.jsonThen edit it with your own values:
{
"default_instance": "prod",
"read_only": true,
"allow_adhoc_sql": false,
"instances": {
"prod": {
"base_url": "https://your-redash.example.com",
"api_key": "YOUR_REDASH_API_KEY"
},
"staging": {
"base_url": "https://your-staging-redash.example.com",
"api_key": "YOUR_STAGING_REDASH_API_KEY"
}
}
}If you want to store that file somewhere else, set:
export REDASH_MCP_CONFIG="/absolute/path/to/your/config.json"These commands were verified against the local Codex CLI help on this machine.
Use the Python interpreter inside your virtual environment so Codex can always find the package:
codex mcp add redash \
--env REDASH_URL=https://your-redash.example.com \
--env REDASH_API_KEY=YOUR_REDASH_API_KEY \
--env REDASH_TIMEOUT_SECONDS=300 \
--env REDASH_MCP_MAX_ROWS=200 \
--env REDASH_MCP_READ_ONLY=true \
--env REDASH_MCP_ALLOW_ADHOC_SQL=false \
-- /ABSOLUTE/PATH/TO/mcp-for-redash/.venv/bin/python -m redash_mcp_serverCheck that it is registered:
codex mcp list
codex mcp get redash~/.codex/config.toml[mcp_servers.redash]
command = "/ABSOLUTE/PATH/TO/mcp-for-redash/.venv/bin/python"
args = ["-m", "redash_mcp_server"]
[mcp_servers.redash.env]
REDASH_URL = "https://your-redash.example.com"
REDASH_API_KEY = "YOUR_REDASH_API_KEY"
REDASH_TIMEOUT_SECONDS = "300"
REDASH_MCP_MAX_ROWS = "200"
REDASH_MCP_READ_ONLY = "true"
REDASH_MCP_ALLOW_ADHOC_SQL = "false"These instructions follow Anthropic's official Claude Code MCP docs for local stdio servers.
claude mcp add --transport stdio \
--env REDASH_URL=https://your-redash.example.com \
--env REDASH_API_KEY=YOUR_REDASH_API_KEY \
--env REDASH_TIMEOUT_SECONDS=300 \
--env REDASH_MCP_MAX_ROWS=200 \
--env REDASH_MCP_READ_ONLY=true \
--env REDASH_MCP_ALLOW_ADHOC_SQL=false \
redash \
-- /ABSOLUTE/PATH/TO/mcp-for-redash/.venv/bin/python -m redash_mcp_serverCheck it:
claude mcp list
claude mcp get redashInside Claude Code, you can also use:
/mcp.mcp.json{
"mcpServers": {
"redash": {
"command": "/ABSOLUTE/PATH/TO/mcp-for-redash/.venv/bin/python",
"args": ["-m", "redash_mcp_server"],
"env": {
"REDASH_URL": "https://your-redash.example.com",
"REDASH_API_KEY": "YOUR_REDASH_API_KEY",
"REDASH_TIMEOUT_SECONDS": "300",
"REDASH_MCP_MAX_ROWS": "200",
"REDASH_MCP_READ_ONLY": "true",
"REDASH_MCP_ALLOW_ADHOC_SQL": "false"
}
}
}
}Many MCP clients accept a JSON config with a command, args, and env block.
Example:
{
"mcpServers": {
"redash": {
"command": "/ABSOLUTE/PATH/TO/mcp-for-redash/.venv/bin/python",
"args": ["-m", "redash_mcp_server"],
"env": {
"REDASH_URL": "https://your-redash.example.com",
"REDASH_API_KEY": "YOUR_REDASH_API_KEY",
"REDASH_TIMEOUT_SECONDS": "300",
"REDASH_MCP_MAX_ROWS": "200",
"REDASH_MCP_READ_ONLY": "true",
"REDASH_MCP_ALLOW_ADHOC_SQL": "false"
}
}
}
}If your client supports only HTTP MCP servers, this repo is not the right fit out of the box. This server uses stdio.
This MCP is optimized to be summary-first. List tools and most read tools return compact metadata by default, and detailed objects are available only when the client explicitly asks for full=true. Query result rows are capped by REDASH_MCP_MAX_ROWS, which defaults to 200 to keep token usage predictable on lower-tier plans.
Every tool also accepts an optional instance name when you configure multiple Redash environments. Use list_redash_instances first if you want the AI to choose from your configured instances.
The default security posture is:
REDASH_MCP_READ_ONLY=trueREDASH_MCP_ALLOW_ADHOC_SQL=falseOnce the MCP is installed, you usually do not call tools manually. You just ask your AI assistant what you want.
Examples:
If you do not know Redash well, use prompts like:
This MCP exposes a fairly broad tool surface. The main groups are:
list_redash_instanceslist_querieslist_my_querieslist_recent_querieslist_favorite_queriesget_querycreate_queryupdate_queryarchive_queryadd_query_favoriteremove_query_favoritefork_queryexecute_saved_queryexecute_adhoc_querylist_dashboardslist_my_dashboardslist_favorite_dashboardsget_dashboardcreate_dashboardupdate_dashboardarchive_dashboardfork_dashboardadd_dashboard_favoriteremove_dashboard_favoritelist_alertsget_alertcreate_alertupdate_alertdelete_alertmute_alertget_alert_subscriptionsadd_alert_subscriptionremove_alert_subscriptionget_visualizationcreate_visualizationupdate_visualizationdelete_visualizationlist_widgetsget_widgetcreate_widgetupdate_widgetdelete_widgetlist_data_sourcesget_query_tagsget_dashboard_tagslist_destinationsThis MCP also exposes a few resources:
redash://instancesredash://data-sourcesredash://query/{query_id}redash://dashboard/{slug}Resources are useful when a client wants read-only context by URI instead of calling a tool.
list_my_dashboards when /api/dashboards/my is missing./api/visualizations/{id} returned HTML instead of JSON. This server now raises a clear error in that case instead of returning broken data.REDASH_MCP_READ_ONLY=true.redash-mcp-server: command not foundUse the virtual environment's Python directly:
/ABSOLUTE/PATH/TO/mcp-for-redash/.venv/bin/python -m redash_mcp_serverCheck:
REDASH_URLREDASH_API_KEYREDASH_MCP_DEFAULT_INSTANCECheck:
python3 -m pip install -e . completed successfullySome Redash deployments do not expose visualization detail as a JSON API route. In that case the MCP returns a clear error message instead of malformed output.
Install for development:
python3 -m pip install -e .Run tests:
python3 -m unittest discover -s tests -vThis project follows the same general idea as suthio/redash-mcp, but it is implemented in Python and tailored for local stdio MCP use.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.