metabase-mcp-server
Provides read-only access to a Metabase instance, enabling AI agents to explore schemas, query databases via MBQL or native SQL, run saved questions, compare data across databases, and export results.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@metabase-mcp-serverHow many orders did we get last month?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
An MCP server that gives AI agents read-only access to any Metabase instance. Explore schemas, query databases, run saved questions, compare data across databases, and export results — all through natural conversation.
Works with Claude Code, Cursor, and any MCP-compatible client.
Quick Start
git clone https://github.com/arkanji/metabase-mcp-server.git
cd metabase-mcp-server
npm install && npm run buildThen add it to your AI client:
{
"mcpServers": {
"metabase": {
"command": "node",
"args": ["/path/to/metabase-mcp-server/dist/index.js"],
"env": {
"METABASE_URL": "https://metabase.example.com",
"METABASE_API_KEY": "mb_xxxxxxxxxxxxx"
}
}
}
}{
"mcpServers": {
"metabase": {
"command": "node",
"args": ["/path/to/metabase-mcp-server/dist/index.js"],
"env": {
"METABASE_URL": "https://metabase.example.com",
"METABASE_API_KEY": "mb_xxxxxxxxxxxxx"
}
}
}
}Related MCP server: Metabase MCP Server
Configuration
Variable | Required | Default | Description |
| Yes | — | Your Metabase instance URL. Do not include |
| Yes | — | How to generate one — go to Admin > Settings > API Keys. |
| No |
| Where |
Tools
Discovery
Tool | What it does |
| List all connected databases |
| List tables in a database |
| Get column names, IDs, and types for a table |
| Sample rows to understand data shape |
| Find saved questions, dashboards, or tables by keyword |
Querying
Tool | What it does |
| Run structured MBQL queries (aggregations, filters, breakouts) |
| Run raw SQL queries (requires SQL permission on API key) |
| Execute an existing saved question by ID |
| Inspect a saved question's definition without running it |
| List all saved questions, optionally by database |
Dashboards
Tool | What it does |
| List all dashboards |
| Get a dashboard's cards and layout details |
Analysis & Export
Tool | What it does |
| Find overlapping values across two databases (e.g. shared emails between CRM and marketing) |
| Export up to 500K rows to CSV/JSON with auto-pagination |
Examples
"How many orders did we get last month?"
The agent will:
list_databases→ find your orders databaselist_tables→ find the orders tableget_table_fields→ get the date and status field IDsquery_dataset→ run a count aggregation with a date filter
"Export all active customers to a CSV"
The agent will:
Discover the table and field IDs
export_dataset→ auto-paginates through the 2,000-row Metabase cap, writes to~/Downloads/
"Which customers exist in both our CRM and marketing databases?"
The agent will:
Identify the email field in both databases
cross_db_overlap→ fetches both sides, computes the intersection in memory
How It Works
You ──→ AI Agent ──→ MCP Server ──→ Metabase REST API ──→ Your Databases
(Claude, (this (x-api-key auth,
Cursor) project) read-only)Key things to know:
Read-only — no write operations. Native SQL queries are validated to reject
INSERT,UPDATE,DELETE,DROP, etc.2,000-row cap — Metabase limits query results to 2,000 rows. Use aggregations for analytics, or
export_datasetfor full data extraction (auto-paginates up to 500K rows).30s timeout — each API request times out after 30 seconds to prevent hung connections.
MBQL — Metabase's structured query language. Columns are referenced by field ID (not name), so always call
get_table_fieldsfirst to look them up.
Security
API keys are passed via environment variables and sent as
x-api-keyheaders. They are never logged or exposed in tool responses.Write-operation guard —
run_native_queryrejects queries that start with write keywords (INSERT,UPDATE,DELETE,DROP,ALTER,TRUNCATE,CREATE,GRANT,REVOKE). This is a basic prefix check, not a comprehensive SQL parser — Metabase's own permission system is the primary access control.No secrets in code — the server reads credentials only from env vars at startup.
Troubleshooting
Problem | Cause | Fix |
| Missing env var | Set |
| Invalid or expired API key | Generate a new key in Metabase Admin > Settings > API Keys |
| Key lacks permission for this action | Check your key's permission group in Metabase. Native SQL requires explicit "native query" permission. |
| URL is wrong or Metabase is down | Verify |
| SQL query starts with INSERT/UPDATE/etc. | This server is read-only. Use SELECT queries only. |
Queries return empty results | Wrong field IDs or filters | Call |
Export hangs | Very large dataset + slow Metabase | Add filters to reduce row count. Exports are capped at 500K rows. |
Development
npm run dev # Watch mode — recompiles on save
npm run build # One-time build
npm start # Run the serverShould work with any Metabase version that supports the /api/dataset endpoint and API key authentication (generally v0.44+).
Contributing
Issues and PRs are welcome. Please open an issue first to discuss significant changes.
License
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Arkanji/metabase-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server