Skip to main content
Glama
README.md
# redash-mcp

Redash REST API を**読み取り専用**でラップする MCP サーバ。唯一の例外として
保存済みクエリの実行(`POST /api/queries/{id}/results`)のみ許可する。

## ツール

- `list_queries(q?, page, page_size)` — クエリ一覧・検索
- `get_query(query_id)` — クエリ詳細(`api_key` は秘匿)
- `execute_query(query_id, parameters?, max_age)` — クエリ実行 → 行データ
- `list_data_sources()` — データソース一覧
- `get_data_source_schema(data_source_id)` — スキーマ
- `list_dashboards(q?, page, page_size)` — ダッシュボード一覧・検索
- `get_dashboard(identifier)` — ダッシュボード詳細(id または slug)

## 設定(環境変数)

| 変数 | 必須 | 既定(プロセス) | 用途 |
|---|---|---|---|
| `REDASH_URL` | ✅ | — | 例 `http://redash`。常にサーバサイド。 |
| `REDASH_API_KEY` | stdioで必須 | — | 既定APIキー。HTTPは`X-REDASH-API-KEY`で上書き可。 |
| `REDASH_MCP_TRANSPORT` | | `stdio` | `stdio` / `streamable-http`。CLI `--transport`。 |
| `REDASH_MCP_HOST` | | `127.0.0.1` | http バインドホスト。CLI `--host`。 |
| `REDASH_MCP_PORT` | | `8000` | http ポート。CLI `--port`。 |
| `REDASH_MCP_ALLOWED_HOSTS` | | (なし) | 許可 `Host`(カンマ区切り)。**ポートは含めない**(例 `redash-mcp,localhost`)。照合時にポートは無視される。 |
| `REDASH_TIMEOUT` | | `30` | HTTP タイムアウト秒 |
| `REDASH_POLL_TIMEOUT` | | `60` | ジョブ待機の上限秒 |
| `REDASH_MAX_ROWS` | | `1000` | 返却行数の上限 |

## 実行

ローカル(uv):
```bash
uv run redash-mcp                                             # stdio
uv run redash-mcp --transport streamable-http --host 127.0.0.1 --port 8000
```

Docker(既定で streamable-http / 0.0.0.0:8000):
```bash
docker run --rm -p 8000:8000 \
  -e REDASH_URL=http://redash -e REDASH_API_KEY=xxxx redash-mcp
```

streamable-http でネットワーク公開する場合は DNS リバインディング対策として `REDASH_MCP_ALLOWED_HOSTS` を設定することを推奨。

## LibreChat 連携

各ユーザーが自分の Redash API キーを持てる(`X-REDASH-API-KEY` ヘッダ)。
`REDASH_URL` はサーバ側で固定し、`REDASH_API_KEY`(サーバ既定キー)は設定しない。
各リクエストの `X-REDASH-API-KEY` ヘッダを実効キーとする。

### 1. LibreChat の mcpServers 設定

```yaml
redash:
  type: "streamable-http"
  url: "http://redash-mcp:8000/mcp"
  headers:
    X-REDASH-API-KEY: "{{REDASH_API_KEY}}"
  customUserVars:
    REDASH_API_KEY:
      title: "Redash API Key"
      description: "Redash の [ユーザー設定] から発行した API キー"
```

### 2. docker-compose(LibreChat と同一ネットワークに接続)

コンテナは LibreChat と同じ Docker ネットワークに置き、`REDASH_MCP_ALLOWED_HOSTS`
で許可 `Host` を絞る。ホストへのポート公開は不要(LibreChat から内部ネットワーク
経由で `http://redash-mcp:8000/mcp` に接続する)。

```yaml
services:
  redash-mcp:
    image: redash-mcp
    build: .
    environment:
      REDASH_URL: http://redash
      REDASH_MCP_ALLOWED_HOSTS: "redash-mcp"
      # REDASH_API_KEY は設定しない(各ユーザーが X-REDASH-API-KEY ヘッダで供給)
    networks:
      - librechat_default

networks:
  librechat_default:
    external: true
```

> スタンドアロン(LibreChat を使わない)構成は `docker-compose.example.yml` を参照。

## 開発

```bash
uv sync
uv run pytest
```

TDQS

B3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct resource and action: queries (execute vs. get details vs. list), dashboards (get vs. list), and data sources (list vs. get schema). No overlapping purposes.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., execute_query, get_dashboard, list_queries), with uniform use of snake_case.

Tool Count5/5

Seven tools is appropriate for a Redash MCP server, covering essential read and list operations without unnecessary bloat.

Completeness2/5

The tool set lacks any create, update, or delete operations for queries, dashboards, or data sources, leaving significant gaps in lifecycle management. An agent cannot create or modify resources.

Maintenance

ActivityStale
ResponsivenessNo issues