redash mcp

Local 2025-09-01 00:00:38 0
Developer Tools @suthio/redash-mcp

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.


Model Context Protocol (MCP) server for integrating Redash with AI assistants like Claude.

Features

  • Connect to Redash instances via the Redash API
  • List available queries and dashboards as resources
  • Execute queries and retrieve results
  • Create and manage queries (create, update, archive)
  • List data sources for query creation
  • Get dashboard details and visualizations

Prerequisites

  • Node.js (v18 or later)
  • npm or yarn
  • Access to a Redash instance
  • Redash API key

Environment Variables

The server requires the following environment variables:

  • REDASH_URL: Your Redash instance URL (e.g., https://redash.example.com)
  • REDASH_API_KEY: Your Redash API key

Optional variables: - REDASH_TIMEOUT: Timeout for API requests in milliseconds (default: 30000) - REDASH_MAX_RESULTS: Maximum number of results to return (default: 1000)

Installation

  1. Clone this repository:

    git clone https://github.com/suthio/redash-mcp.git
    cd redash-mcp

  2. Install dependencies:

    npm install

  3. Create a .env file with your Redash configuration:

    REDASH_URL=https://your-redash-instance.com
    REDASH_API_KEY=your_api_key

  4. Build the project:

    npm run build

  5. Start the server:

    npm start

Usage with Claude for Desktop

To use this MCP server with Claude for Desktop, configure it in your Claude for Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%Claudeclaude_desktop_config.json

Add the following configuration (edit paths as needed):

{
  "mcpServers": {
    "redash": {
      "command": "npx",
      "args": [
         "-y",
         "@suthio/redash-mcp"
      ],
      "env": {
        "REDASH_API_KEY": "your-api-key",
        "REDASH_URL": "https://your-redash-instance.com"
      }
    }
  }
}

Available Tools

Query Management

  • list-queries: List all available queries in Redash
  • get-query: Get details of a specific query
  • create-query: Create a new query in Redash
  • update-query: Update an existing query in Redash
  • archive-query: Archive (soft-delete) a query
  • list-data-sources: List all available data sources

Query Execution

  • execute-query: Execute a query and return results

Dashboard Management

  • list-dashboards: List all available dashboards
  • get-dashboard: Get dashboard details and visualizations
  • get-visualization: Get details of a specific visualization

Development

Run in development mode:

npm run dev

Version History

  • v1.1.0: Added query management functionality (create, update, archive)
  • v1.0.0: Initial release

License

MIT

[
  {
    "description": "List all available queries in Redash",
    "inputSchema": {
      "properties": {
        "page": {
          "description": "Page number (starts at 1)",
          "type": "number"
        },
        "pageSize": {
          "description": "Number of results per page",
          "type": "number"
        }
      },
      "type": "object"
    },
    "name": "list-queries"
  },
  {
    "description": "Get details of a specific query",
    "inputSchema": {
      "properties": {
        "queryId": {
          "description": "ID of the query to get",
          "type": "number"
        }
      },
      "required": [
        "queryId"
      ],
      "type": "object"
    },
    "name": "get-query"
  },
  {
    "description": "Create a new query in Redash",
    "inputSchema": {
      "properties": {
        "data_source_id": {
          "description": "ID of the data source to use",
          "type": "number"
        },
        "description": {
          "description": "Description of the query",
          "type": "string"
        },
        "name": {
          "description": "Name of the query",
          "type": "string"
        },
        "options": {
          "description": "Query options",
          "type": "object"
        },
        "query": {
          "description": "SQL query text",
          "type": "string"
        },
        "schedule": {
          "description": "Query schedule",
          "type": "object"
        },
        "tags": {
          "description": "Tags for the query",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "name",
        "data_source_id",
        "query"
      ],
      "type": "object"
    },
    "name": "create-query"
  },
  {
    "description": "Update an existing query in Redash",
    "inputSchema": {
      "properties": {
        "data_source_id": {
          "description": "ID of the data source to use",
          "type": "number"
        },
        "description": {
          "description": "Description of the query",
          "type": "string"
        },
        "is_archived": {
          "description": "Whether the query is archived",
          "type": "boolean"
        },
        "is_draft": {
          "description": "Whether the query is a draft",
          "type": "boolean"
        },
        "name": {
          "description": "New name of the query",
          "type": "string"
        },
        "options": {
          "description": "Query options",
          "type": "object"
        },
        "query": {
          "description": "SQL query text",
          "type": "string"
        },
        "queryId": {
          "description": "ID of the query to update",
          "type": "number"
        },
        "schedule": {
          "description": "Query schedule",
          "type": "object"
        },
        "tags": {
          "description": "Tags for the query",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "queryId"
      ],
      "type": "object"
    },
    "name": "update-query"
  },
  {
    "description": "Archive (soft-delete) a query in Redash",
    "inputSchema": {
      "properties": {
        "queryId": {
          "description": "ID of the query to archive",
          "type": "number"
        }
      },
      "required": [
        "queryId"
      ],
      "type": "object"
    },
    "name": "archive-query"
  },
  {
    "description": "List all available data sources in Redash",
    "inputSchema": {
      "properties": {},
      "type": "object"
    },
    "name": "list-data-sources"
  },
  {
    "description": "Execute a Redash query and return results",
    "inputSchema": {
      "properties": {
        "parameters": {
          "additionalProperties": true,
          "description": "Parameters to pass to the query (if any)",
          "type": "object"
        },
        "queryId": {
          "description": "ID of the query to execute",
          "type": "number"
        }
      },
      "required": [
        "queryId"
      ],
      "type": "object"
    },
    "name": "execute-query"
  },
  {
    "description": "List all available dashboards in Redash",
    "inputSchema": {
      "properties": {
        "page": {
          "description": "Page number (starts at 1)",
          "type": "number"
        },
        "pageSize": {
          "description": "Number of results per page",
          "type": "number"
        }
      },
      "type": "object"
    },
    "name": "list-dashboards"
  },
  {
    "description": "Get details of a specific dashboard",
    "inputSchema": {
      "properties": {
        "dashboardId": {
          "description": "ID of the dashboard to get",
          "type": "number"
        }
      },
      "required": [
        "dashboardId"
      ],
      "type": "object"
    },
    "name": "get-dashboard"
  },
  {
    "description": "Get details of a specific visualization",
    "inputSchema": {
      "properties": {
        "visualizationId": {
          "description": "ID of the visualization to get",
          "type": "number"
        }
      },
      "required": [
        "visualizationId"
      ],
      "type": "object"
    },
    "name": "get-visualization"
  }
]