Skip to main content
Glama

redash-mcp

npm version Downloads Node Glama Claude Cursor Gemini CLI Codex CLI

English | 한국어 | 日本語

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

redash-mcp demo — Claude explores Redash tables, charts revenue by category, then the SQL safety guard blocks a PII export


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/ALTER and DELETE/UPDATE without WHERE; strict/warn/off modes, 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 setupnpx redash-mcp setup configures 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_data_sources

List connected data sources

Schema

list_tables

List tables (supports keyword search)

Schema

get_table_columns

Get column names and types

Smart Query

smart_query

Analyze a question, auto-select tables, guide SQL generation (BIRD)

Smart Query

get_bird_config

Inspect the active BIRD smart-query configuration

Smart Query

evaluate_queries

Evaluate generated SQL against expected results

Smart Query

submit_query_feedback

Record feedback to improve future table selection

Smart Query

manage_few_shot_examples

Add/list BIRD few-shot examples

Smart Query

manage_keyword_map

Add/list keyword→table mappings

Query

run_query

Execute SQL and return results

Saved Queries

list_queries

List saved queries

Saved Queries

get_query

Get query details (SQL, visualizations)

Saved Queries

get_query_result

Run a saved query and get results

Saved Queries

create_query

Save a new query

Saved Queries

update_query

Update a saved query

Saved Queries

fork_query

Fork a saved query

Saved Queries

archive_query

Archive (delete) a query

Dashboards

list_dashboards

List dashboards

Dashboards

get_dashboard

Get dashboard details and widgets

Dashboards

create_dashboard

Create a new dashboard

Dashboards

add_widget

Add a visualization widget to a dashboard

Alerts

list_alerts

List alerts

Alerts

get_alert

Get alert details

Alerts

create_alert

Create a new alert

SQL Safety Guard

Protects your database from dangerous queries:

  • Blocked always: DROP, TRUNCATE, ALTER TABLE, GRANT/REVOKE, DELETE/UPDATE without WHERE

  • Warned (warn mode) / Blocked (strict mode): SELECT *, queries without WHERE or LIMIT, PII column access

  • Auto-LIMIT: Automatically appends LIMIT N when REDASH_AUTO_LIMIT is 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

npx redash-mcp setup

The 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 | bash

Manual 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-mcp

2-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-mcp

2-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-mcp

macOS: If npx is not found, run which npx to get the full path and use that instead.


Environment Variables

Required

Variable

Description

REDASH_URL

Redash instance URL (e.g. https://redash.example.com)

REDASH_API_KEY

Redash user API key

Optional

Variable

Default

Description

REDASH_SAFETY_MODE

warn

SQL safety level: off / warn / strict

REDASH_SAFETY_DISABLE_PII

false

Disable PII detection

REDASH_SAFETY_DISABLE_COST

false

Disable cost warnings

REDASH_AUTO_LIMIT

0

Auto-append LIMIT N to queries without one (0 = disabled)

REDASH_DEFAULT_MAX_AGE

0

Redash cache TTL in seconds

REDASH_MCP_CACHE_TTL

300

MCP query cache TTL in seconds (0 = disabled)

REDASH_MCP_CACHE_MAX_MB

50

Max memory for MCP query cache in MB

REDASH_MCP_CONFIG_DIR

~/.redash-mcp

Directory for BIRD few-shot, feedback, eval, keyword-map data

REDASH_BIRD_ENABLED

true

Set to false to disable BIRD smart query tools

REDASH_HTTP_TIMEOUT_SECS

30

Per-request HTTP timeout against the Redash API

ANTHROPIC_API_KEY

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:

  1. list_data_sources → Identify the target data source

  2. smart_query → Analyze the question, auto-select the User table, provide SQL generation guidance

  3. run_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:

  1. smart_query → Analyze the question, auto-select User and Payment tables, provide JOIN query guidance

  2. run_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:

  1. smart_query → Analyze revenue-related tables

  2. create_query → Save the "Monthly Revenue Trend" query

  3. create_dashboard → Create a "Revenue Dashboard"

  4. get_query → Get the visualization ID from the saved query

  5. add_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-revenue

Privacy 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 (REDASH_API_KEY). Never transmitted externally.

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 (~/.redash-mcp/). Includes few-shot examples, keyword maps, and feedback.

LLM Fallback

When ANTHROPIC_API_KEY is set, only table name lists are sent to the Anthropic API. Query data and results are never transmitted.

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 tools
add_widgetA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoOptional text/markdown caption shown on the widget
widthNoWidget width: 1 = half row, 2 = full row (default 1)
dashboard_idYesID of the dashboard to add the widget to (from list_dashboards/create_dashboard)
visualization_idYesID of the visualization to embed (from get_query's visualizations list)

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_queryA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_idYesID of the saved query to archive/delete (from list_queries)

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_alertA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesComparison operator between the column value and the threshold
nameYesDisplay name for the alert
rearmNoSeconds to wait before the alert can fire again; 0 means fire only once until manually reset (default 0)
valueYesThreshold value that triggers the alert when the comparison is true
columnYesName of the result column to compare against the threshold
query_idYesID of the saved query whose results are monitored (from list_queries)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_dashboardA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name for the new dashboard

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_queryA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name for the saved query
tagsNoOptional tags to categorize the query (e.g., ['finance', 'weekly'])
queryYesThe SQL statement to save
descriptionNoOptional human-readable description of what the query does
data_source_idYesID of the data source this query runs against (from list_data_sources)

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
test_caseNoTest case to add (required when action=add_test)
test_case_idNoTest case ID to remove (required when action=remove_test)
timeout_secsNoPer-query execution timeout in seconds when action=run (1 to 300, default 30)
data_source_idYesData source ID
generated_sqlsNoList of SQL to evaluate (required when action=run)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_queryA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_idYesID of the saved query to duplicate (from list_queries)

TDQS

A3.6/5.0
Behavior1/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_alertA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
alert_idYesID of the alert to inspect (from list_alerts)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_configA
Read-only

View BIRD SQL configuration and status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_dashboardA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dashboard_id_or_slugYesDashboard ID or slug to fetch (from list_dashboards)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_queryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_idYesID of the saved query to inspect (from list_queries)

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_resultA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format: table (markdown) or jsontable
max_rowsNoMax rows to return (1 to 10000, default 100)
query_idYesID of the saved query to run (from list_queries)
timeout_secsNoQuery execution timeout in seconds (1 to 300, default 30)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_columnsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
table_nameYesTable name(s), comma-separated (e.g., 'users' or 'users,orders')
data_source_idYesData source ID from list_data_sources

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_alertsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_dashboardsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch, 1-based (default 1)
searchNoOptional keyword to filter dashboards by name
page_sizeNoNumber of dashboards per page, 1-100 (default 20)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_sourcesA
Read-only

List connected data sources (id, name, type). Call this first to get data_source_id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_queriesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch, 1-based (default 1)
searchNoOptional keyword to filter queries by name/description
page_sizeNoNumber of queries per page, 1-100 (default 20)

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_tablesA
Read-only

List tables in a data source. Use keyword to filter by name. Verify table names here before writing SQL.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordNoFilter keyword for table names (e.g., 'user', 'order')
data_source_idYesData source ID from list_data_sources

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
exampleNoExample to add (required when action=add)
example_idNoExample ID to remove (required when action=remove)
data_source_idYesData source ID

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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"]}

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
keywordsNoKeywords to remove (required when action=remove). e.g., ["revenue", "order"]
mappingsNoMappings to add (required when action=add). e.g., {"revenue": ["payment", "billing"]}
data_source_idYesData source ID

TDQS

A4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_queryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSQL query to execute
formatNoOutput format: table (markdown) or jsontable
max_ageNoRedash cache TTL in seconds (0 to 604800). Defaults to REDASH_DEFAULT_MAX_AGE env var
max_rowsNoMax rows to return (1 to 10000, default 100)
timeout_secsNoQuery execution timeout in seconds (1 to 300, default 30)
data_source_idYesData source ID from list_data_sources

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_queryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNoUser's answer to a previous clarification question (for multi-turn)
questionYesNatural-language question (e.g., 'How many payments were completed last month?')
data_source_idYesData source ID (from list_data_sources)

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ratingYesRating: up (correct) or down (incorrect)
questionYesOriginal natural-language question
correct_sqlNoCorrect SQL (provide when rating=down for automatic learning)
generated_sqlYesGenerated SQL
data_source_idYesData source ID

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_queryA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew display name (omit to keep current)
tagsNoNew tag list, replacing the existing tags (omit to keep current)
queryNoNew SQL statement (omit to keep current)
query_idYesID of the saved query to update (from list_queries)
descriptionNoNew description (omit to keep current)

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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. 1 tool updatev3.3.0
    • Changedevaluate_queries1 field changed
      • addedInput schema / properties / timeout_secs
        Added value: +{
        +  "default": 30,
        +  "description": "Per-query execution timeout in seconds when action=run (1 to 300, default 30)",
        +  "maximum": 300,
        +  "minimum": 1,
        +  "type": "integer"
        +}
  2. 13 tool updatesv3.2.0
    • Changedadd_widget4 fields changed
      • changedInput schema / properties / dashboard_id / description
        Previous value: -"Dashboard ID"New value: +"ID of the dashboard to add the widget to (from list_dashboards/create_dashboard)"
      • changedInput schema / properties / text / description
        Previous value: -"Widget text"New value: +"Optional text/markdown caption shown on the widget"
      • changedInput schema / properties / visualization_id / description
        Previous value: -"Visualization ID (from get_query's visualizations)"New value: +"ID of the visualization to embed (from get_query's visualizations list)"
      • changedInput schema / properties / width / description
        Previous value: -"Widget width (1 = half, 2 = full)"New value: +"Widget width: 1 = half row, 2 = full row (default 1)"
    • Changedarchive_query1 field changed
      • changedInput schema / properties / query_id / description
        Previous value: -"Query ID to archive"New value: +"ID of the saved query to archive/delete (from list_queries)"
    • Changedcreate_alert6 fields changed
      • changedInput schema / properties / column / description
        Previous value: -"Column name to monitor"New value: +"Name of the result column to compare against the threshold"
      • changedInput schema / properties / name / description
        Previous value: -"Alert name"New value: +"Display name for the alert"
      • changedInput schema / properties / op / description
        Previous value: -"Comparison operator"New value: +"Comparison operator between the column value and the threshold"
      • changedInput schema / properties / query_id / description
        Previous value: -"Query ID to monitor"New value: +"ID of the saved query whose results are monitored (from list_queries)"
      • changedInput schema / properties / rearm / description
        Previous 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)"
      • changedInput schema / properties / value / description
        Previous value: -"Threshold value"New value: +"Threshold value that triggers the alert when the comparison is true"
    • Changedcreate_dashboard1 field changed
      • changedInput schema / properties / name / description
        Previous value: -"Dashboard name"New value: +"Display name for the new dashboard"
    • Changedcreate_query5 fields changed
      • changedInput schema / properties / data_source_id / description
        Previous value: -"Data source ID from list_data_sources"New value: +"ID of the data source this query runs against (from list_data_sources)"
      • changedInput schema / properties / description / description
        Previous value: -"Query description"New value: +"Optional human-readable description of what the query does"
      • changedInput schema / properties / name / description
        Previous value: -"Query name"New value: +"Display name for the saved query"
      • changedInput schema / properties / query / description
        Previous value: -"SQL query"New value: +"The SQL statement to save"
      • changedInput schema / properties / tags / description
        Previous value: -"Tags"New value: +"Optional tags to categorize the query (e.g., ['finance', 'weekly'])"
    • Changedfork_query1 field changed
      • changedInput schema / properties / query_id / description
        Previous value: -"Query ID to fork"New value: +"ID of the saved query to duplicate (from list_queries)"
    • Changedget_alert1 field changed
      • changedInput schema / properties / alert_id / description
        Previous value: -"Alert ID (from list_alerts)"New value: +"ID of the alert to inspect (from list_alerts)"
    • Changedget_dashboard1 field changed
      • changedInput schema / properties / dashboard_id_or_slug / description
        Previous value: -"Dashboard ID or slug (from list_dashboards)"New value: +"Dashboard ID or slug to fetch (from list_dashboards)"
    • Changedget_query1 field changed
      • changedInput schema / properties / query_id / description
        Previous value: -"Query ID (from list_queries)"New value: +"ID of the saved query to inspect (from list_queries)"
    • Changedget_query_result1 field changed
      • changedInput schema / properties / query_id / description
        Previous value: -"Saved query ID (from list_queries)"New value: +"ID of the saved query to run (from list_queries)"
    • Changedlist_dashboards3 fields changed
      • addedInput schema / properties / page / description
        Added value: +"Page number to fetch, 1-based (default 1)"
      • changedInput schema / properties / page_size / description
        Previous value: -"Page size (max 100)"New value: +"Number of dashboards per page, 1-100 (default 20)"
      • changedInput schema / properties / search / description
        Previous value: -"Search keyword"New value: +"Optional keyword to filter dashboards by name"
    • Changedlist_queries3 fields changed
      • addedInput schema / properties / page / description
        Added value: +"Page number to fetch, 1-based (default 1)"
      • changedInput schema / properties / page_size / description
        Previous value: -"Page size (max 100)"New value: +"Number of queries per page, 1-100 (default 20)"
      • changedInput schema / properties / search / description
        Previous value: -"Search keyword"New value: +"Optional keyword to filter queries by name/description"
    • Changedupdate_query5 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"New description"New value: +"New description (omit to keep current)"
      • changedInput schema / properties / name / description
        Previous value: -"New name"New value: +"New display name (omit to keep current)"
      • changedInput schema / properties / query / description
        Previous value: -"New SQL"New value: +"New SQL statement (omit to keep current)"
      • changedInput schema / properties / query_id / description
        Previous value: -"Query ID to update"New value: +"ID of the saved query to update (from list_queries)"
      • changedInput schema / properties / tags / description
        Previous value: -"New tags"New value: +"New tag list, replacing the existing tags (omit to keep current)"
  3. 24 tool updatesv0.1.0
    • First observedadd_widget
    • First observedarchive_query
    • First observedcreate_alert
    • First observedcreate_dashboard
    • First observedcreate_query
    • First observedevaluate_queries
    • First observedfork_query
    • First observedget_alert
    • First observedget_bird_config
    • First observedget_dashboard
    • First observedget_query
    • First observedget_query_result
    • First observedget_table_columns
    • First observedlist_alerts
    • First observedlist_dashboards
    • First observedlist_data_sources
    • First observedlist_queries
    • First observedlist_tables
    • First observedmanage_few_shot_examples
    • First observedmanage_keyword_map
    • First observedrun_query
    • First observedsmart_query
    • First observedsubmit_query_feedback
    • First observedupdate_query

TDQS

A3.9/5.0

Scored across 24 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessSlow

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

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Model 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.
    67
    2,857
    101
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A database-agnostic MCP server that enables natural language queries to your database through Claude or Copilot, automatically writing and executing SQL.
    8
    16
    MIT