metabase-lite-mcp
# 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
Scored across 17 tools
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.
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.
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.
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.