Skip to main content
Glama
Sanjeev4523

metabase-lite-mcp

by Sanjeev4523
README.md
# metabase-lite-mcp

An MCP (Model Context Protocol) server that lets AI agents interact with Metabase — search dashboards & cards, explore database metadata, and run read-only query previews.

## Use Case

Give your AI agent (Claude, Cursor, etc.) the ability to:

- **Search & read** saved questions (cards) and dashboards
- **Explore database schema** — list databases, tables, fields, and collections
- **Run query previews** — execute read-only SQL/Mongo queries with built-in safety validation (write operations are blocked before they ever reach Metabase)

This is useful for agents that need to understand your data, find existing reports, validate queries, or build new dashboards on your behalf.

## Prerequisites

- Node.js 18+
- A Metabase instance with API key access enabled
- A Metabase [API key](https://www.metabase.com/docs/latest/people-and-groups/api-keys) (inherits permissions from its group)

## Install

```bash
npm install -g metabase-lite-mcp
```

Or use directly with `npx` (no install needed) — see configuration below.

## Configuration

The server requires two environment variables:

| Variable | Description | Example |
|---|---|---|
| `METABASE_BASE_URL` | Your Metabase instance URL | `https://metabase.example.com` |
| `METABASE_API_KEY` | Metabase API key | `mb_xxxxxxxxxxxxxx` |

## Usage with Claude Code

Add to your `.mcp.json` (project-level or `~/.claude/.mcp.json` for global):

```json
{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["-y", "metabase-lite-mcp"],
      "env": {
        "METABASE_BASE_URL": "https://metabase.example.com",
        "METABASE_API_KEY": "mb_xxxxxxxxxxxxxx"
      }
    }
  }
}
```

## Usage with Cursor

Add to your Cursor MCP settings (`.cursor/mcp.json`):

```json
{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["-y", "metabase-lite-mcp"],
      "env": {
        "METABASE_BASE_URL": "https://metabase.example.com",
        "METABASE_API_KEY": "mb_xxxxxxxxxxxxxx"
      }
    }
  }
}
```

## Available Tools

| Tool | Description |
|---|---|
| `get_configured_databases` | List all databases configured in Metabase |
| `get_database_metadata` | Get tables and fields for a specific database |
| `get_collections` | List all collections |
| `search_cards` | Search saved questions by name/text |
| `get_card` | Get full details of a saved question |
| `search_dashboards` | Search dashboards by name/text |
| `get_dashboard_full` | Get full dashboard with tabs, cards, and filters |
| `run_query_preview` | Execute a read-only query and return results |

## Safety

All queries are validated before being sent to Metabase:

- **SQL**: Blocks `INSERT`, `UPDATE`, `DELETE`, `DROP`, `ALTER`, `TRUNCATE`, `CREATE`, `GRANT`, `REVOKE`, `CALL`, `EXECUTE`, and multi-statement queries
- **MongoDB**: Blocks `$out` and `$merge` pipeline stages

## Development

```bash
git clone https://github.com/sanjeevsingla/metabase-lite-mcp.git
cd metabase-lite-mcp
npm install
npm run build
npm run watch      # Rebuild on changes
npm run inspector  # Launch MCP inspector to test tools interactively
```

## License

MIT

TDQS

A3.6/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct resource and action (cards vs dashboards vs databases). The only potential overlap is copy_card vs create_card, but descriptions clearly distinguish duplication from fresh creation. Search vs get follows standard patterns, and all tools have clear boundaries.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with snake_case (get_, search_, create_, update_, move_, add_, remove_, ensure_, run_). Even copy_card fits the convention. No camelCase or mixed verb styles.

Tool Count4/5

17 tools is slightly above the typical 3-15 range but is justified for the domain, covering cards, dashboards, and database metadata. Each tool has a legitimate purpose, and the set is not bloated with redundant utilities.

Completeness3/5

The set covers CRUD for cards (create, read, update, copy/move) and dashboards (create, read, update, add/remove cards, filters), but lacks delete operations for both cards and dashboards. Missing direct get_dashboard (only full) but full supersedes. These are notable gaps that prevent full lifecycle management.

Maintenance

ActivityInactive
ResponsivenessNo issues