redash-mcp
redash-mcp connects Claude AI to your Redash instance, enabling natural language querying, data exploration, and management of queries, dashboards, and alerts — with built-in SQL safety guardrails. It operates fully locally, keeping API keys and query results on your machine.
Data Source & Schema Exploration
List connected data sources, browse/search tables, and inspect column names and types
Query Execution
Run custom SQL against a data source with results in markdown or JSON format
Execute saved queries by ID
SQL Safety Guard: blocks dangerous operations (
DROP,TRUNCATE,ALTER, unguardedDELETE/UPDATE), auto-appliesLIMIT, and warns on PII column access
Smart Query (BIRD)
smart_query: analyze natural-language questions, auto-select relevant tables, and guide SQL generationRegister keyword→table mappings and few-shot examples to improve accuracy
Submit feedback on generated SQL and run accuracy evaluations
Saved Query Management
List, get details, create, update, fork, and archive saved queries
Dashboard Management
List, get details, create dashboards, and add visualization widgets
Alert Management
List, view, and create alerts that trigger when a query result crosses a threshold
Other
In-memory caching reduces redundant API calls
Allows querying Redash data sources, managing saved queries and dashboards, and running SQL via natural language.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@redash-mcpshow me the top 10 users by signup date"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
redash-mcp
MCP server that connects Redash to Claude, Cursor, Gemini CLI, Codex, and any MCP client — query data, manage dashboards, and run SQL with natural language.
Why · Features · Install · Env · Examples · Privacy

Why redash-mcp?
There are several Redash MCP servers. This one is built for letting an LLM touch production data safely:
🛡️ SQL Safety Guard — blocks
DROP/TRUNCATE/ALTERandDELETE/UPDATEwithoutWHERE;strict/warn/offmodes, PII detection, and auto-LIMIT. Hand Claude your real Redash without flinching.🧠 BIRD Smart Query — analyzes the question, auto-selects the right tables, and guides SQL generation (based on the BIRD text-to-SQL methodology). Optional Claude Haiku fallback for table selection.
⚡ One-command setup —
npx redash-mcp setupconfigures Claude Desktop / Claude Code / Cursor / Gemini CLI / Codex CLI for you. No hand-editing JSON.🔒 Fully local — talks directly to your Redash instance. API key and query results never leave your machine.
📊 End-to-end — query, save, fork, dashboards, widgets, and alerts — 20+ tools across 6 categories.
Related MCP server: redash-mcp
Features
Tools
Category | Tool | Description |
Data Sources |
| List connected data sources |
Schema |
| List tables (supports keyword search) |
Schema |
| Get column names and types |
Smart Query |
| Analyze a question, auto-select tables, guide SQL generation (BIRD) |
Smart Query |
| Inspect the active BIRD smart-query configuration |
Smart Query |
| Evaluate generated SQL against expected results |
Smart Query |
| Record feedback to improve future table selection |
Smart Query |
| Add/list BIRD few-shot examples |
Smart Query |
| Add/list keyword→table mappings |
Query |
| Execute SQL and return results |
Saved Queries |
| List saved queries |
Saved Queries |
| Get query details (SQL, visualizations) |
Saved Queries |
| Run a saved query and get results |
Saved Queries |
| Save a new query |
Saved Queries |
| Update a saved query |
Saved Queries |
| Fork a saved query |
Saved Queries |
| Archive (delete) a query |
Dashboards |
| List dashboards |
Dashboards |
| Get dashboard details and widgets |
Dashboards |
| Create a new dashboard |
Dashboards |
| Add a visualization widget to a dashboard |
Alerts |
| List alerts |
Alerts |
| Get alert details |
Alerts |
| Create a new alert |
SQL Safety Guard
Protects your database from dangerous queries:
Blocked always:
DROP,TRUNCATE,ALTER TABLE,GRANT/REVOKE,DELETE/UPDATEwithoutWHEREWarned (warn mode) / Blocked (strict mode):
SELECT *, queries withoutWHEREorLIMIT, PII column accessAuto-LIMIT: Automatically appends
LIMIT NwhenREDASH_AUTO_LIMITis set
Query Cache
Results are cached in-memory to reduce redundant API calls:
TTL: configurable via
REDASH_MCP_CACHE_TTL(default: 300s)Max memory: configurable via
REDASH_MCP_CACHE_MAX_MB(default: 50MB)
Installation
Auto Setup (Recommended)
npx redash-mcp setupThe setup wizard will guide you through configuring Claude Desktop, Claude Code (CLI), Cursor, Gemini CLI, and Codex CLI — pick any combination.
Shell Script Install
Installs Node.js, Claude Desktop, and MCP config all at once:
curl -fsSL https://raw.githubusercontent.com/seob717/redash-mcp/main/install.sh | bashManual Setup
1. Get your Redash API Key
Go to Redash → Profile (top right) → Edit Profile → Copy API Key
2-A. Claude Desktop
Open ~/Library/Application Support/Claude/claude_desktop_config.json and add:
{
"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.
2-B. Claude Code (CLI)
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-mcp2-C. Cursor
Open ~/.cursor/mcp.json (create it if missing) and add:
{
"mcpServers": {
"redash-mcp": {
"command": "npx",
"args": ["-y", "redash-mcp"],
"env": {
"REDASH_URL": "https://your-redash-instance.com",
"REDASH_API_KEY": "your_api_key_here"
}
}
}
}2-D. Gemini CLI
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-mcp2-E. Codex CLI
codex mcp add redash-mcp \
--env REDASH_URL=https://your-redash-instance.com \
--env REDASH_API_KEY=your_api_key_here \
-- npx -y redash-mcpmacOS: If
npxis not found, runwhich npxto get the full path and use that instead.
Environment Variables
Required
Variable | Description |
| Redash instance URL (e.g. |
| Redash user API key |
Optional
Variable | Default | Description |
|
| SQL safety level: |
|
| Disable PII detection |
|
| Disable cost warnings |
|
| Auto-append |
|
| Redash cache TTL in seconds |
|
| MCP query cache TTL in seconds (0 = disabled) |
|
| Max memory for MCP query cache in MB |
|
| Directory for BIRD few-shot, feedback, eval, keyword-map data |
|
| Set to |
|
| Per-request HTTP timeout against the Redash API |
| — | If set, BIRD smart_query falls back to Claude Haiku for table selection when keyword scoring fails |
Usage Examples
Just ask Claude in natural language:
"Show me the columns in the users table"
"Run a query to get order counts for the last 7 days"
"List all saved queries"
"Show widgets in the revenue dashboard"
"Create an alert when daily signups drop below 100"
Example 1: Query data with natural language
Prompt: "How many new users signed up this month?"
Tool flow:
list_data_sources→ Identify the target data sourcesmart_query→ Analyze the question, auto-select theUsertable, provide SQL generation guidancerun_query→ Execute the generated SQL
Result:
There were 18,197 new signups this month.Example 2: Complex business questions
Prompt: "What percentage of last week's new users made a purchase?"
Tool flow:
smart_query→ Analyze the question, auto-selectUserandPaymenttables, provide JOIN query guidancerun_query→ Execute the SQL
Result:
Out of 1,204 new users last week, 312 made a purchase (25.9%).Example 3: Create a query and dashboard
Prompt: "Create a monthly revenue trend query and add it to a dashboard"
Tool flow:
smart_query→ Analyze revenue-related tablescreate_query→ Save the "Monthly Revenue Trend" querycreate_dashboard→ Create a "Revenue Dashboard"get_query→ Get the visualization ID from the saved queryadd_widget→ Add the chart widget to the dashboard
Result:
Created "Revenue Dashboard" with the monthly revenue trend chart.
View in Redash: https://your-redash.com/dashboard/monthly-revenuePrivacy Policy
Data Collection and Processing
redash-mcp is a local MCP server that communicates directly with your Redash instance. No intermediate servers are involved.
Item | Description |
Redash API Key | Stored only as a local environment variable ( |
Query content & results | Delivered only to the local MCP client (Claude Desktop/Code) via the MCP protocol. |
BIRD SQL settings | Stored only in local files ( |
LLM Fallback | When |
Third-Party Sharing
We do not sell or share user data with third parties. When the LLM Fallback feature is active, only table name lists are sent to the Anthropic API, and only when the user has explicitly configured an ANTHROPIC_API_KEY.
Data Retention
Config files: Stored locally in
~/.redash-mcp/(user can delete at any time)Query cache: In-memory only, cleared on server shutdown
Schema cache: In-memory only, auto-expires after 10-minute TTL
Contact
For inquiries and security reports: GitHub 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
Available Tools
24 toolsadd_widgetADestructive
Add a saved query's visualization onto a dashboard as a widget. Behavior: places the widget and returns its id and dashboard_id. Usage: get the dashboard_id from list_dashboards or create_dashboard, and the visualization_id from get_query (each saved query exposes its visualizations). This is how you build up a dashboard after creating it.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Optional text/markdown caption shown on the widget | |
| width | No | Widget width: 1 = half row, 2 = full row (default 1) | |
| dashboard_id | Yes | ID of the dashboard to add the widget to (from list_dashboards/create_dashboard) | |
| visualization_id | Yes | ID of the visualization to embed (from get_query's visualizations list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint: true, and the description mentions the mutation ('places the widget') and its return values (id and dashboard_id). However, it does not elaborate on potential side effects or prerequisites like permissions, which could be helpful for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences without fluff: first states purpose, second provides usage guidance. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers prerequisites, usage steps, and return values. Without an output schema, it adequately informs the agent of what to expect. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds only minor context (sources for dashboard_id and visualization_id). This is adequate, as the schema already documents each parameter's meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add') and resource ('a saved query's visualization onto a dashboard as a widget'), and distinguishes this tool from siblings like create_dashboard or get_dashboard by specifying its role in building dashboards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (to build up a dashboard after creating it) and how to obtain the required parameters: dashboard_id from list_dashboards or create_dashboard, and visualization_id from get_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_queryADestructive
Archive a saved query, removing it from active query lists. This is Redash's form of deletion and cannot be undone through the API, so confirm with the user before calling it. Behavior: archives the query and returns a confirmation message. Usage: find the query_id with list_queries.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes | ID of the saved query to archive/delete (from list_queries) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description supplements destructiveHint annotation with details that archiving is equivalent to deletion and cannot be undone via API.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each serving a purpose: purpose, warning, and usage instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive tool with one parameter and no output schema, description covers purpose, prerequisites, behavior, and return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and description adds value by linking to list_queries for obtaining the query_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'archive' and resource 'saved query', distinguishes from siblings like update_query by explaining it's the form of deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises confirming with user before calling, mentions irreversibility, and instructs to find query_id via list_queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_alertADestructive
Create an alert that watches a saved query and fires when a chosen result column crosses a threshold (e.g., daily_signups less than 10). Behavior: creates the alert and returns its id and name. Usage: get the query_id from list_queries and confirm the exact column name with get_query / get_query_result first. The alert evaluates the query's latest result on Redash's schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | Comparison operator between the column value and the threshold | |
| name | Yes | Display name for the alert | |
| rearm | No | Seconds to wait before the alert can fire again; 0 means fire only once until manually reset (default 0) | |
| value | Yes | Threshold value that triggers the alert when the comparison is true | |
| column | Yes | Name of the result column to compare against the threshold | |
| query_id | Yes | ID of the saved query whose results are monitored (from list_queries) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, consistent with creation. Description adds that it returns id and name, and explains evaluation schedule. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a usage note: efficient, front-loaded, no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 6 params and no output schema, description provides purpose, behavior, return info, and usage tips. Adequately complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with descriptions. The description adds usage context like 'from list_queries' and 'confirm exact column name', enhancing understanding beyond raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates an alert that monitors a saved query and fires on a threshold, with an explicit example. Among sibling tools, no other creates alerts, so it is well-distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to obtain query_id from list_queries and verify column name via get_query/get_query_result. Does not specify when not to use, but context is clear for a creation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dashboardADestructive
Create a new, empty dashboard. Behavior: creates the dashboard and returns its id, name, and slug. Usage: after creating it, populate it with charts using add_widget, passing visualization ids obtained from get_query. To list or inspect existing dashboards instead, use list_dashboards / get_dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the new dashboard |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true, but the description does not elaborate on any destructive nature. Creating a dashboard is typically non-destructive. The description adds return value info but lacks detail on side effects or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no fluff. First sentence states purpose, subsequent sentences provide usage guidance. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Single-parameter tool with no output schema; description covers purpose, return values, and integration with sibling tools. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for the only parameter 'name'. The description does not add new meaning beyond the schema's 'Display name'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new empty dashboard and lists its return values (id, name, slug). It distinguishes from sibling tools like list_dashboards and get_dashboard for inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides a usage workflow: create the dashboard, then populate with charts using add_widget with visualization IDs from get_query. Also directs to alternative tools for listing or inspecting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_queryADestructive
Save a new named SQL query to Redash so it can be reused, scheduled, visualized, or added to a dashboard. Behavior: creates the query and returns its new id, name, and created_at. Usage: get the data_source_id from list_data_sources and verify the SQL runs with run_query first; to change an existing query use update_query instead. Note: this only saves the query — use get_query_result to execute it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the saved query | |
| tags | No | Optional tags to categorize the query (e.g., ['finance', 'weekly']) | |
| query | Yes | The SQL statement to save | |
| description | No | Optional human-readable description of what the query does | |
| data_source_id | Yes | ID of the data source this query runs against (from list_data_sources) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, indicating a mutation. The description adds behavioral detail: it creates the query and returns id, name, created_at. It also clarifies that it only saves, not executes, providing useful non-obvious context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with each earning its place: purpose, behavior, usage/notes. Front-loaded with key action. No redundant or vague wording. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, annotations (destructiveHint), and no output schema, the description covers all necessary context: what it does, return values, prerequisites, alternative tools, and limitations. Completely sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description adds usage context for data_source_id (get from list_data_sources) and query (verify with run_query), enhancing semantic understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Save a new named SQL query to Redash' with specific verb and resource. It also distinguishes from siblings by mentioning update_query for existing queries and get_query_result for execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use guidance: it tells to get the data_source_id from list_data_sources and verify SQL with run_query first, and explicitly says to use update_query for changing an existing query. This helps the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_queriesA
Build and run an accuracy test suite for SQL generation on a data source. Behavior: action 'add_test' stores a question paired with ground-truth SQL; 'list_tests' shows them; 'remove_test' deletes one; 'run' scores generated SQL against the test cases; 'results' shows the latest run. Usage: use this to measure whether keyword maps and few-shot examples actually improve smart_query accuracy over time; test cases and runs are stored locally per data_source_id.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform | |
| test_case | No | Test case to add (required when action=add_test) | |
| test_case_id | No | Test case ID to remove (required when action=remove_test) | |
| timeout_secs | No | Per-query execution timeout in seconds when action=run (1 to 300, default 30) | |
| data_source_id | Yes | Data source ID | |
| generated_sqls | No | List of SQL to evaluate (required when action=run) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains what each action does (stores, shows, deletes, scores, shows results) and notes that test cases and runs are stored locally per data_source_id. This is transparent about persistence and scope, though it does not detail side effects like whether run modifies stored data or whether results are overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—two sentences—and front-loads the core purpose. The action list is compact and informative, and the usage guidance is directly actionable without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters and nested objects, the description covers the main behaviors and usage context well. It explains the actions, the data source scoping, and the intended evaluation use case. However, it does not describe the return format of 'results' or 'run', which could be important since there is no output schema. This is a minor gap given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some context by linking parameters to actions (e.g., test_case required when add_test, generated_sqls when run), but this largely repeats what the schema already states. No new semantic meaning is added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: building and running an accuracy test suite for SQL generation on a data source. It enumerates the specific actions (add_test, list_tests, remove_test, run, results), making it unambiguous what the tool does and distinguishing it from siblings like run_query or smart_query which execute queries directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete usage scenario: measuring whether keyword maps and few-shot examples improve smart_query accuracy over time. It implies when to use this tool (for evaluation) versus alternatives (direct execution), though it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fork_queryADestructive
Fork (duplicate) an existing saved query into a new, independently editable copy, leaving the original unchanged. Behavior: creates the copy and returns its new id and name. Usage: find the query_id to fork with list_queries; use this when you want to experiment with or adapt a query without modifying the original.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes | ID of the saved query to duplicate (from list_queries) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims non-destructive behavior ('leaving the original unchanged'), but the annotation sets destructiveHint=true, creating a contradiction. The description also does not mention any side effects, permissions, or potential errors beyond creating a copy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two informative sentences, front-loading the key action and behavior, followed by usage guidance. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main behavior, usage, and return (id and name), which is adequate for a simple tool with no output schema. It could add error cases or more details about the return structure, but it is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, and the description reinforces the schema with usage context (from list_queries). The parameter meaning is clear, but the description adds little beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (fork/duplicate) and resource (saved query), and distinguishes it from siblings like create_query and archive_query by specifying that it creates a copy while leaving the original unchanged.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: use list_queries to find the query_id, and use this tool when experimenting or adapting without modifying the original. It implies when to use but does not explicitly state when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alertARead-only
Get the full detail of a single alert. Behavior: returns the alert's id, name, current state, last_triggered_at, threshold options (column, operator, value), and the query it monitors (id, name, description, data_source_id). Usage: find the alert_id with list_alerts.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | ID of the alert to inspect (from list_alerts) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, indicating no side effects. The description adds beyond this by detailing the exact fields returned (id, name, state, etc.), offering rich behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with clear structure: purpose, behavior details, usage instruction. No extraneous words. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one parameter and readOnlyHint, the description covers purpose, return fields, and parameter source. No output schema exists, but the description lists return fields adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description repeats that alert_id comes from list_alerts, which adds usage context but not new parameter semantics beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Get the full detail of a single alert,' clearly indicating the verb (get) and resource (alert detail). It distinguishes from siblings like list_alerts (which returns a list) and create_alert (which creates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Usage: find the alert_id with list_alerts,' guiding the agent on prerequisite tool usage. This implies when to use this tool (after list_alerts) and provides context without explicitly stating when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bird_configARead-only
View BIRD SQL configuration and status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, confirming a read operation. The description adds no additional behavioral context beyond 'View,' which is consistent. It does not disclose any potential side effects or authentication needs, but for a read-only tool, this is minimal yet acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb 'View,' and contains no redundant words. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, parameterless tool without an output schema, the description suffices by stating the purpose. It could optionally mention the output format, but it is not necessary for correctness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the input schema is empty with 100% coverage. The description need not explain parameters, so it adequately covers the semantic gap by stating the action without parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'View BIRD SQL configuration and status.' It uses a specific verb ('View') and identifies the resource ('BIRD SQL configuration and status'). Among sibling tools, none target BIRD configuration, so it effectively distinguishes its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing configuration without specifying when not to use it or alternatives. Given the tool's simplicity and lack of related siblings, the context is clear, but explicit guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboardARead-only
Get a dashboard's full layout. Behavior: returns the dashboard's id, name, slug, and every widget, each with its linked visualization (id, name, type) and the query behind it (id, name). Usage: find the dashboard id or slug with list_dashboards; use the returned visualization/query ids to understand or extend the dashboard with add_widget.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id_or_slug | Yes | Dashboard ID or slug to fetch (from list_dashboards) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the returned fields (id, name, slug, widgets with visualization and query details), complementing the readOnlyHint annotation without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, one for purpose and behavior, one for usage; no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, no output schema, and readOnly annotation, the description covers behavior, usage, and what to do with the result completely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already fully describes the parameter; the description reinforces its source (from list_dashboards) but adds little beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool retrieves a dashboard's full layout, distinguishing it from listing tools (list_dashboards) and modification tools (add_widget).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to get the dashboard ID or slug via list_dashboards, and suggests using returned IDs to extend with add_widget, providing good context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_queryARead-only
Get the full definition of a saved query. Behavior: returns the query's SQL text, data_source_id, tags, owner, update time, and its visualizations (each with id, name, type). Usage: find the query_id with list_queries. The returned visualization ids can be placed on a dashboard with add_widget; to actually run the query use get_query_result.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes | ID of the saved query to inspect (from list_queries) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and description confirms read-only behavior (returns definition). Additional behavioral details include exact return fields and side-effect-free operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise (three sentences) and well-structured with 'Behavior:' and 'Usage:' labels, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given read-only nature and 1-param schema, description fully covers input acquisition, output fields, and integration with sibling tools. No output schema needed as fields listed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with description. Description adds value by explaining how to obtain the query_id (from list_queries), reinforcing schema meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get the full definition of a saved query' and specifies exact returned fields (SQL text, data_source_id, tags, owner, update time, visualizations). Siblings named (get_query_result, list_queries) differentiate purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use case: find query_id with list_queries, then use returned visualization ids with add_widget or get_query_result. Distinguishes from get_query_result (run query vs. definition).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_query_resultARead-only
Run an existing saved query by its ID and return the latest results. Behavior: executes the query as stored in Redash and returns up to max_rows rows as a markdown table or JSON, with the column list and a truncation note. Usage: find the query_id with list_queries or get_query. Unlike run_query, this executes already-saved SQL rather than ad-hoc SQL, so the safety guard does not apply.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: table (markdown) or json | table |
| max_rows | No | Max rows to return (1 to 10000, default 100) | |
| query_id | Yes | ID of the saved query to run (from list_queries) | |
| timeout_secs | No | Query execution timeout in seconds (1 to 300, default 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and description adds that it executes stored SQL without mutation. Describes output format options (markdown table or JSON), max_rows limit, and truncation note. Does not contradict annotations; minor omission of error handling behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences in two logical blocks: purpose+behavior, then usage guidance. Every sentence adds value, no redundancy. Nicely front-loaded with key action and result.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters and no output schema, the description covers how to obtain the query_id, what the tool does (execute saved query), output format choices, and truncation note. Lacks specifics about return values beyond format hints, but sufficient given the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; description adds no new meaning beyond the schema's parameter descriptions. Default values and constraints are already documented. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Run an existing saved query by its ID' with a specific verb and resource. Distinguishes from siblings like run_query (saved vs. ad-hoc) and list_queries/get_query (finding vs. executing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to find query_id via list_queries or get_query, and contrasts with run_query for ad-hoc SQL, noting that the safety guard does not apply. Provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_columnsARead-only
Get the column names and data types for one or more tables in a data source. Accepts a single table or a comma-separated list of tables. Use this to confirm exact column names and types before writing SQL with run_query or smart_query. Returns each table's columns; if a table name is not found, it suggests verifying it with list_tables.
| Name | Required | Description | Default |
|---|---|---|---|
| table_name | Yes | Table name(s), comma-separated (e.g., 'users' or 'users,orders') | |
| data_source_id | Yes | Data source ID from list_data_sources |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds useful behavioral context (returns each table's columns, handles missing tables) but omits potential details like pagination or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with key action and parameters, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists; description mentions return type but lacks details on format (e.g., array of objects with name/type fields). Also does not specify limits on number of tables.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already describes both parameters. The description reiterates that table_name accepts comma-separated values, which is already in schema, adding minimal semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves column names and data types for one or more tables, and explicitly differentiates from siblings by advising use before run_query or smart_query and suggesting list_tables for verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: 'Use this to confirm exact column names and types before writing SQL with run_query or smart_query' and includes fallback advice to use list_tables if a table name is not found.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alertsARead-only
List all alerts configured in Redash. Behavior: returns an array where each alert has id, name, current state (ok / triggered / unknown), last_triggered_at, its linked query (id, name), and threshold options. Usage: use this to discover alert_ids, then call get_alert for one alert's full detail, or create_alert to add a new one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows it's a safe read operation. The description adds value by describing the return structure (array with id, name, state, last_triggered_at, query info, threshold options) beyond what annotations provide. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the function, the second details the return structure and usage guidance. It is concise, front-loaded, and contains no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description covers the return structure and usage guidance adequately. It omits potential details like pagination or error handling, but for a simple list-all tool this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has no parameters, baseline is 4. The description adds meaning beyond the schema by explaining the return fields, which helps the agent understand what the tool outputs, compensating for the lack of an output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'List all alerts configured in Redash,' providing a specific verb and resource. It distinguishes itself from siblings 'get_alert' and 'create_alert', making the tool's purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'use this to discover alert_ids, then call get_alert for one alert's full detail, or create_alert to add a new one.' This provides clear context for usage versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dashboardsARead-only
List dashboards in Redash, most recently updated first. Behavior: returns a paginated array where each item has id, name, slug, and created/updated timestamps. Usage: use this to discover a dashboard's id or slug, then call get_dashboard to inspect its widgets and visualizations, or create_dashboard to make a new one. Supports keyword search and pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to fetch, 1-based (default 1) | |
| search | No | Optional keyword to filter dashboards by name | |
| page_size | No | Number of dashboards per page, 1-100 (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. Description adds pagination detail, return fields (id, name, slug, timestamps), and support for search/pagination, which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose/ordering, behavior/return structure, usage guidance. No wasted words, well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, return format, pagination, search, and usage flow with siblings. Lacks mention of rate limits or authentication, but readOnlyHint partially covers safety. Output schema is absent, but description details return fields adequately for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions for all 3 parameters. Description mentions 'keyword search' and 'pagination' aligning with params but does not add new semantics beyond what schema specifies. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'list' and resource 'dashboards' with ordering 'most recently updated first'. It distinguishes from sibling tools like get_dashboard and create_dashboard by specifying usage for discovery of id/slug.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use this tool to discover dashboard id/slug, then use get_dashboard for details or create_dashboard for new ones. References alternatives directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_data_sourcesARead-only
List connected data sources (id, name, type). Call this first to get data_source_id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true. The description adds behavioral context about sequencing (first call) without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with zero waste. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with readOnly annotation, the description fully covers purpose, usage context, and return attributes. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no parameters (100% schema coverage). The description adds value by specifying what return fields to expect (id, name, type).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'data sources', specifies the attributes returned (id, name, type), and distinguishes itself from sibling tools that list other entities like tables or queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to call this first to obtain data_source_id, implying its role as a prerequisite. No explicit when-not or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_queriesARead-only
List saved (named) queries in Redash, most recently updated first. Behavior: returns a paginated array where each item has id, name, description, data_source_id, and updated_at. Usage: use this to discover query_ids, then call get_query for a query's full SQL and visualizations, or get_query_result to run it. Supports keyword search and pagination; for ad-hoc SQL that isn't saved, use run_query instead.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to fetch, 1-based (default 1) | |
| search | No | Optional keyword to filter queries by name/description | |
| page_size | No | Number of queries per page, 1-100 (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true; description adds that the tool is read-only, returns a paginated array sorted by updated_at with specific fields. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with clear sections (behavior, usage) and no redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains return fields and pagination. Adequately covers all aspects given tool complexity and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds minimal new meaning beyond reinforcing pagination and search usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List saved (named) queries' with a specific verb and resource, and distinguishes from siblings like run_query (ad-hoc) and get_query (full details).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use: to discover query_ids, then call get_query or get_query_result; for ad-hoc SQL use run_query. Also covers pagination and search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesARead-only
List tables in a data source. Use keyword to filter by name. Verify table names here before writing SQL.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | Filter keyword for table names (e.g., 'user', 'order') | |
| data_source_id | Yes | Data source ID from list_data_sources |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds the context of verifying table names before writing SQL, which is helpful. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, efficiently covering purpose and usage. No unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, annotations, and full schema coverage, the description is adequate. However, it could briefly mention the return type (e.g., a list of table names) for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description reiterates the keyword filter but does not add meaningful new information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List tables') and the resource ('in a data source'), with an additional usage hint. It is specific and distinct from sibling tools like 'get_table_columns' or 'list_data_sources'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context ('Use keyword to filter by name. Verify table names here before writing SQL.') but does not explicitly exclude alternatives or mention when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_few_shot_examplesA
Manage the few-shot examples that smart_query uses to generate more accurate SQL. Behavior: action 'list' returns all stored examples with their ids; 'add' saves a new example (requires the example object); 'remove' deletes one (requires example_id). Each example pairs a natural-language question with the correct SQL and the tables it uses, teaching the model your schema's domain conventions. Usage: examples are stored locally per data_source_id and are retrieved automatically by smart_query — register a few for recurring question patterns to raise accuracy.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform | |
| example | No | Example to add (required when action=add) | |
| example_id | No | Example ID to remove (required when action=remove) | |
| data_source_id | Yes | Data source ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It explicitly describes the behavior for each action: list returns all examples with IDs, add saves a new example, remove deletes one. It also notes local storage per data_source_id. However, it does not mention auth requirements, rate limits, or potential side effects like overwriting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is 4 sentences: purpose, behavior, example structure, usage advice. It is front-loaded with the most important information. Some redundancy exists (example structure mentioned twice implicitly), but overall it is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters with full schema coverage and no output schema, the description explains behavior and usage adequately. However, it does not fully describe the return structure for the 'list' action (only mentions IDs, not full object shape) and does not cover error scenarios (e.g., invalid action or missing parameters). Some gaps remain for an agent to invoke correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds minimal semantic value beyond the schema—it restates that 'add' requires the example object and 'remove' requires example_id, but the schema already indicates this via conditional requirements and descriptions. No new parameter details are introduced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages few-shot examples for smart_query, specifying three distinct actions (list, add, remove). It differentiates from sibling tools like smart_query and manage_keyword_map by focusing on storing training examples, and explains the structure of each example (question, SQL, tables).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to use: 'register a few for recurring question patterns to raise accuracy'. It also describes how examples are stored and retrieved automatically. However, it does not explicitly state when not to use or contrast with alternatives, though the context makes usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_keyword_mapA
Manage keyword-to-table-name mappings. After inspecting the schema with list_tables, register domain-specific mappings to improve smart_query table-matching accuracy. e.g., {"revenue": ["payment"], "creator": ["creator"]}
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform | |
| keywords | No | Keywords to remove (required when action=remove). e.g., ["revenue", "order"] | |
| mappings | No | Mappings to add (required when action=add). e.g., {"revenue": ["payment", "billing"]} | |
| data_source_id | Yes | Data source ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions actions like add/remove/reset implying mutation, but does not disclose behavioral traits such as reversibility, destructive nature, or permission requirements. More detail is needed for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with purpose and context, with an illustrative example. No redundant information; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, nested objects, enums, conditional requirements), the description covers the workflow and provides examples. No output schema, but the expected return is implied. It is sufficiently complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by providing an example of the mappings format and clarifying conditional requirements (e.g., mappings required when action=add). This enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages keyword-to-table-name mappings, with a specific verb 'manage' and resource. It provides an example and explains its role in improving smart_query accuracy, distinguishing it from sibling tools like manage_few_shot_examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to use after inspecting schema with list_tables, and explains the benefit (improve smart_query matching). While it does not explicitly state when not to use or list alternatives, it gives clear context and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_queryARead-only
Execute an ad-hoc SQL query against a data source and return the resulting rows. Every query passes through the SQL safety guard, which blocks destructive statements (DROP/TRUNCATE/ALTER, DELETE/UPDATE without WHERE) and flags PII columns and expensive full scans; results are cached in memory. Behavior: returns up to max_rows rows as a markdown table or JSON, with the column list and a truncation note when there are more rows. Usage: confirm table and column names with list_tables and get_table_columns first; for natural-language questions, plan the SQL with smart_query before calling this. To run an already-saved query instead, use get_query_result.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | SQL query to execute | |
| format | No | Output format: table (markdown) or json | table |
| max_age | No | Redash cache TTL in seconds (0 to 604800). Defaults to REDASH_DEFAULT_MAX_AGE env var | |
| max_rows | No | Max rows to return (1 to 10000, default 100) | |
| timeout_secs | No | Query execution timeout in seconds (1 to 300, default 30) | |
| data_source_id | Yes | Data source ID from list_data_sources |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true) are aligned and the description adds significant behavioral detail: safety guard that blocks destructive statements, PII flagging, caching, memory result, max rows, truncation notes, and format options. No contradiction; the annotation is reinforced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently packs purpose, safety, behavior, and usage tips. It is front-loaded with the main action. A slight reduction in length could be achieved, but it remains clear and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters (2 required), 100% schema coverage, and no output schema, the description covers the core behavior, safety, caching, format, and prerequisites. It could elaborate on return value structure (e.g., exact columns), but the mention of 'column list' and 'truncation note' provides enough context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description adds value by explaining the overall behavior ('returns up to max_rows rows as a markdown table or JSON'), which gives context to parameters like 'format' and 'max_rows'. It does not repeat all parameter descriptions but enriches their meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear action verb ('Execute') and specifies the resource ('ad-hoc SQL query against a data source') and the outcome ('return the resulting rows'). It distinguishes from siblings like 'get_query_result' and 'smart_query' by explicitly stating when to use them instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: confirm table/column names with 'list_tables' and 'get_table_columns' first, use 'smart_query' for natural-language questions, and use 'get_query_result' for saved queries. It also notes that the SQL safety guard blocks destructive statements, clarifying when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
smart_queryARead-only
BIRD SQL-based intelligent query tool. Analyzes natural-language questions to (1) extract relevant schema, (2) match similar few-shot examples, (3) assess complexity, (4) request clarification for ambiguous questions. Call this tool before run_query. For a new data source, first inspect the schema with list_tables, then register keyword-to-table mappings via manage_keyword_map to significantly improve accuracy. Note: when ANTHROPIC_API_KEY is set, table-name lists (never query results or row data) may be sent to the Anthropic API as a fallback for table selection.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | User's answer to a previous clarification question (for multi-turn) | |
| question | Yes | Natural-language question (e.g., 'How many payments were completed last month?') | |
| data_source_id | Yes | Data source ID (from list_data_sources) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that table-name lists may be sent to Anthropic API under certain conditions, clarifies no query results are sent, and explains the multi-turn context usage. This adds value beyond the readOnlyHint annotation and builds trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused paragraph with no wasted sentences. It front-loads the purpose and steps. Slightly dense but efficient for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (multi-step analysis, external API fallback, preconditions), the description covers all key aspects: steps, prerequisites, fallback behavior, and interaction with other tools. It is complete for an agent to understand how to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful context for the 'context' parameter ('user's answer to a previous clarification question for multi-turn'), which goes beyond the schema's brief description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as an intelligent NL-to-SQL pre-processor that extracts schema, matches examples, assesses complexity, and requests clarification. It distinguishes from sibling tools like run_query and list_tables by positioning itself as a prerequisite step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Call this tool before run_query' and provides guidance to first inspect schema and register keyword mappings for new data sources. However, it does not explicitly state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_query_feedbackA
Record whether the SQL produced for a question was correct, so smart_query improves over time. Behavior: stores an up/down rating; when you rate 'down' and supply the correct SQL, the error is classified and, if the same kind of mistake recurs, automatically promoted into a few-shot example. Returns the feedback id and any error type or promotion. Usage: call after reviewing smart_query/run_query output; feedback is stored locally per data_source_id and feeds the learning loop.
| Name | Required | Description | Default |
|---|---|---|---|
| rating | Yes | Rating: up (correct) or down (incorrect) | |
| question | Yes | Original natural-language question | |
| correct_sql | No | Correct SQL (provide when rating=down for automatic learning) | |
| generated_sql | Yes | Generated SQL | |
| data_source_id | Yes | Data source ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it stores ratings, classifies errors on 'down' ratings, and promotes recurring mistakes into few-shot examples. It also mentions the return values (feedback id, error type, promotion). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with no wasted words. It opens with a clear purpose sentence, then details behavior, and ends with usage context. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers return values (feedback id, error type, promotion). It explains the feedback loop and storage location. For a tool with 5 parameters and moderate complexity, this is complete and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline is 3. The description adds value by explaining the conditional nature of 'correct_sql' (provide when rating=down) and how 'rating' enum values map to up/down. This goes beyond the schema's literal descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Record'/'store') and resource ('correctness of SQL'). It explicitly distinguishes from sibling tools like 'run_query' and 'smart_query' by focusing on feedback collection for improvement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'call after reviewing smart_query/run_query output' and explains that feedback feeds the learning loop. It implies when to use but does not explicitly list when not to use or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_queryADestructive
Update fields of an existing saved query. Behavior: only the fields you pass are changed (name, SQL, description, or tags); any omitted field is left untouched. Returns the query's id, name, and updated_at. Usage: find the query_id with list_queries or get_query; to create a brand-new query instead, use create_query.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name (omit to keep current) | |
| tags | No | New tag list, replacing the existing tags (omit to keep current) | |
| query | No | New SQL statement (omit to keep current) | |
| query_id | Yes | ID of the saved query to update (from list_queries) | |
| description | No | New description (omit to keep current) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes partial update behavior (only passed fields changed, omitted left untouched) and return value (id, name, updated_at). Annotation destructiveHint is already present, but description adds meaningful behavioral details beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with the action and key behavior. Every sentence adds value; no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Handles all aspects: what it does, how it behaves (partial update), what it returns, prerequisites, and alternative tool. Despite no output schema, the description covers enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions for each parameter. The description reinforces the semantics by naming the fields and implying the 'omit to keep current' behavior, but does not add information beyond the schema. A slight improvement over baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it updates an existing saved query and lists the updatable fields (name, SQL, description, tags). Differentiates from create_query sibling by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells to find query_id via list_queries or get_query before using, and directs to create_query for new queries. Provides clear when-to and when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v3.3.0- Changed
evaluate_queries1 field changed- added
Input schema / properties / timeout_secsAdded value: +{ + "default": 30, + "description": "Per-query execution timeout in seconds when action=run (1 to 300, default 30)", + "maximum": 300, + "minimum": 1, + "type": "integer" +}
13 tool updates
v3.2.0- Changed
add_widget4 fields changed- changed
Input schema / properties / dashboard_id / descriptionPrevious value: -"Dashboard ID"New value: +"ID of the dashboard to add the widget to (from list_dashboards/create_dashboard)" - changed
Input schema / properties / text / descriptionPrevious value: -"Widget text"New value: +"Optional text/markdown caption shown on the widget" - changed
Input schema / properties / visualization_id / descriptionPrevious value: -"Visualization ID (from get_query's visualizations)"New value: +"ID of the visualization to embed (from get_query's visualizations list)" - changed
Input schema / properties / width / descriptionPrevious value: -"Widget width (1 = half, 2 = full)"New value: +"Widget width: 1 = half row, 2 = full row (default 1)"
- Changed
archive_query1 field changed- changed
Input schema / properties / query_id / descriptionPrevious value: -"Query ID to archive"New value: +"ID of the saved query to archive/delete (from list_queries)"
- Changed
create_alert6 fields changed- changed
Input schema / properties / column / descriptionPrevious value: -"Column name to monitor"New value: +"Name of the result column to compare against the threshold" - changed
Input schema / properties / name / descriptionPrevious value: -"Alert name"New value: +"Display name for the alert" - changed
Input schema / properties / op / descriptionPrevious value: -"Comparison operator"New value: +"Comparison operator between the column value and the threshold" - changed
Input schema / properties / query_id / descriptionPrevious value: -"Query ID to monitor"New value: +"ID of the saved query whose results are monitored (from list_queries)" - changed
Input schema / properties / rearm / descriptionPrevious value: -"Rearm interval in seconds (0 = fire once)"New value: +"Seconds to wait before the alert can fire again; 0 means fire only once until manually reset (default 0)" - changed
Input schema / properties / value / descriptionPrevious value: -"Threshold value"New value: +"Threshold value that triggers the alert when the comparison is true"
- Changed
create_dashboard1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"Dashboard name"New value: +"Display name for the new dashboard"
- Changed
create_query5 fields changed- changed
Input schema / properties / data_source_id / descriptionPrevious value: -"Data source ID from list_data_sources"New value: +"ID of the data source this query runs against (from list_data_sources)" - changed
Input schema / properties / description / descriptionPrevious value: -"Query description"New value: +"Optional human-readable description of what the query does" - changed
Input schema / properties / name / descriptionPrevious value: -"Query name"New value: +"Display name for the saved query" - changed
Input schema / properties / query / descriptionPrevious value: -"SQL query"New value: +"The SQL statement to save" - changed
Input schema / properties / tags / descriptionPrevious value: -"Tags"New value: +"Optional tags to categorize the query (e.g., ['finance', 'weekly'])"
- Changed
fork_query1 field changed- changed
Input schema / properties / query_id / descriptionPrevious value: -"Query ID to fork"New value: +"ID of the saved query to duplicate (from list_queries)"
- Changed
get_alert1 field changed- changed
Input schema / properties / alert_id / descriptionPrevious value: -"Alert ID (from list_alerts)"New value: +"ID of the alert to inspect (from list_alerts)"
- Changed
get_dashboard1 field changed- changed
Input schema / properties / dashboard_id_or_slug / descriptionPrevious value: -"Dashboard ID or slug (from list_dashboards)"New value: +"Dashboard ID or slug to fetch (from list_dashboards)"
- Changed
get_query1 field changed- changed
Input schema / properties / query_id / descriptionPrevious value: -"Query ID (from list_queries)"New value: +"ID of the saved query to inspect (from list_queries)"
- Changed
get_query_result1 field changed- changed
Input schema / properties / query_id / descriptionPrevious value: -"Saved query ID (from list_queries)"New value: +"ID of the saved query to run (from list_queries)"
- Changed
list_dashboards3 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Page number to fetch, 1-based (default 1)" - changed
Input schema / properties / page_size / descriptionPrevious value: -"Page size (max 100)"New value: +"Number of dashboards per page, 1-100 (default 20)" - changed
Input schema / properties / search / descriptionPrevious value: -"Search keyword"New value: +"Optional keyword to filter dashboards by name"
- Changed
list_queries3 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Page number to fetch, 1-based (default 1)" - changed
Input schema / properties / page_size / descriptionPrevious value: -"Page size (max 100)"New value: +"Number of queries per page, 1-100 (default 20)" - changed
Input schema / properties / search / descriptionPrevious value: -"Search keyword"New value: +"Optional keyword to filter queries by name/description"
- Changed
update_query5 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"New description"New value: +"New description (omit to keep current)" - changed
Input schema / properties / name / descriptionPrevious value: -"New name"New value: +"New display name (omit to keep current)" - changed
Input schema / properties / query / descriptionPrevious value: -"New SQL"New value: +"New SQL statement (omit to keep current)" - changed
Input schema / properties / query_id / descriptionPrevious value: -"Query ID to update"New value: +"ID of the saved query to update (from list_queries)" - changed
Input schema / properties / tags / descriptionPrevious value: -"New tags"New value: +"New tag list, replacing the existing tags (omit to keep current)"
24 tool updates
v0.1.0- First observed
add_widget - First observed
archive_query - First observed
create_alert - First observed
create_dashboard - First observed
create_query - First observed
evaluate_queries - First observed
fork_query - First observed
get_alert - First observed
get_bird_config - First observed
get_dashboard - First observed
get_query - First observed
get_query_result - First observed
get_table_columns - First observed
list_alerts - First observed
list_dashboards - First observed
list_data_sources - First observed
list_queries - First observed
list_tables - First observed
manage_few_shot_examples - First observed
manage_keyword_map - First observed
run_query - First observed
smart_query - First observed
submit_query_feedback - First observed
update_query
TDQS
Scored across 24 tools
Tools are mostly distinct, with clear separation between ad-hoc run_query, saved get_query_result, and NL-driven smart_query. A few pairs—list_tables vs get_table_columns and get_query vs list_queries—require careful reading, but descriptions generally prevent misselection.
Nearly all tools follow a clean verb_noun snake_case pattern like list_queries, create_dashboard, and archive_query. The outlier is smart_query, which is named as a noun/phrase rather than an action verb, breaking the otherwise consistent convention.
At 24 tools this is a heavy toolset, falling in the 16-25 range that needs strong justification. The breadth is understandable given the Redash + BIRD intelligent-query scope, but the surface is large enough that agents will need significant selection effort.
The query lifecycle is well covered with list/get/create/update/fork/archive/run, and there is solid dashboard creation and widget placement support. However, dashboard update/delete and alert update/delete are missing, leaving notable lifecycle gaps for those resources.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
The Ramp MCP server enables users to securely connect Ramp with AI assistants like ChatGPT and Claude to query financial data and take actions using natural language. It transforms Ramp's developer API into a SQL interface that LLMs can query, allowing admins to analyze spend trends, identify cost savings, and run complex SQL analyses on comprehensive datasets (transactions, purchase orders, vendors, users), while all users can manage cards, view transactions, request reimbursements, and get expense policy answers.
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Related MCP Servers
- AlicenseBqualityAmaintenanceModel Context Protocol (MCP) server that integrates Redash with AI assistants like Claude, allowing them to query data, manage visualizations, and interact with dashboards through natural language.672,857101MIT
- AlicenseAqualityBmaintenanceModel Context Protocol (MCP) server for Redash - manage queries, dashboards, and visualizations through AI assistants like Claude.6MIT
- FlicenseNot gradedqualityCmaintenanceA unified MCP server that lets Claude query any SQLite database and build live Streamlit dashboards — all from a single conversation.1-
- AlicenseAqualityDmaintenanceA database-agnostic MCP server that enables natural language queries to your database through Claude or Copilot, automatically writing and executing SQL.816MIT