Install
$ agentstack add mcp-naveen-chava-metabase-mcp ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
metabase-mcp
Query your Metabase with AI agents. No API key. No admin begging. Just vibes and a cookie.
The problem
The official Metabase MCP wants an API key or your username/password. Cool in theory. Not so cool if your company won't give you one.
But you can log into Metabase in a browser. Which means you have a session cookie. Which means you have everything you need.
That's this.
Wait, should you even use this?
Honest answer: if you have an API key or username/password, just use the official Metabase MCP. It's proper, supported, and won't expire on you mid-conversation. Newer versions of Metabase also support Google login natively via the official MCP.
This project is for the rest of us: the people whose company guards API keys like they're nuclear launch codes and treats every Metabase upgrade request like a 6-month procurement process.
You'll love this if:
- Your org controls Metabase and you don't have credentials beyond your browser login
- Your Metabase version doesn't support the official MCP's Google login yet
- You'd rather fish a cookie out of DevTools than write another Jira ticket
- You want to query data with AI and get on with your life
You should know:
| The good | The not-so-good | |---|---| | Works with just a browser login | Cookies expire, you'll re-paste it occasionally | | Inherits your exact Metabase permissions | If using a session file, the token is stored in plaintext on disk (optional, you can pass it inline instead) | | Zero setup on the Metabase side | If your session logs out, so does the MCP |
What it can do
| Tool | What it does | |---|---| | list_databases | List all connected databases | | list_collections | List all collections (folders) | | list_collection_items | List questions, dashboards, and sub-collections inside a collection | | list_cards | List all saved questions | | get_card | Get details of a specific question | | create_card | Create a new saved question in a collection | | run_card | Execute a saved question and return results | | list_dashboards | List all dashboards | | get_dashboard | Get a dashboard with its card layout | | list_tables | List tables, optionally filtered by database | | search | Search across questions, dashboards, collections, and tables | | execute_query | Run an ad-hoc query against any connected database |
Prerequisites
- Go 1.25.5+
- A Metabase instance you can log into
Install
go install github.com/Naveen-chava/metabase-mcp@latest
This puts the binary in ~/go/bin/. Make sure that's in your $PATH:
export PATH="$PATH:$(go env GOPATH)/bin"
Or build from source:
git clone https://github.com/Naveen-chava/metabase-mcp
cd metabase-mcp
go install .
Getting your session cookie
This is the one slightly sneaky step.
- Open Metabase in your browser and log in
- Open DevTools → Application → Cookies → select your Metabase domain
- Find
metabase.SESSIONand copy its value
That's your cookie. Treat it like a password; it grants the same access as your login session.
> If the MCP starts throwing 401s, your session expired. Grab a fresh cookie and you're back.
Configuration
| Variable | Required | Description | |---|---|---| | METABASE_URL | Yes | Base URL of your Metabase instance | | METABASE_SESSION | One of these two | Session cookie value, read once at startup | | METABASE_SESSION_FILE | One of these two | Path to a file containing the cookie, read on every request so rotating is just overwriting the file |
Inline (quick start):
METABASE_URL=https://metabase.company.com \
METABASE_SESSION=your-cookie \
./metabase-mcp
Via file (recommended, no restart when your cookie expires):
echo "your-cookie" > ~/.metabase-session
METABASE_URL=https://metabase.company.com \
METABASE_SESSION_FILE=~/.metabase-session \
./metabase-mcp
To rotate a stale cookie, just overwrite the file. No restart needed; the next request picks it up automatically.
> The server expands ~ and $HOME in the session file path, so ~/.metabase-session works everywhere.
Claude Desktop
Add this to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"metabase": {
"command": "metabase-mcp",
"env": {
"METABASE_URL": "https://metabase.company.com",
"METABASE_SESSION_FILE": "~/.metabase-session"
}
}
}
}
Restart Claude Desktop. Done.
Claude Code
claude mcp add metabase metabase-mcp -s user -e METABASE_URL=https://metabase.company.com -e METABASE_SESSION_FILE=~/.metabase-session
> Run as a single line. Backslash continuations can introduce invisible characters when copied from some terminals or browsers.
Cursor
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project-level):
{
"mcpServers": {
"metabase": {
"command": "metabase-mcp",
"env": {
"METABASE_URL": "https://metabase.company.com",
"METABASE_SESSION_FILE": "~/.metabase-session"
}
}
}
}
Restart Cursor and verify the server is connected under Settings → MCP.
Example prompts
- "What databases are connected to Metabase?"
- "Show me all tables in the Analytics DB"
- "What's in my personal collection?"
- "Run the 'Daily Active Users' question"
- "Search for anything related to revenue"
- "Run this SQL on the Analytics DB: SELECT count(\*) FROM orders WHERE created\at > now() - interval 7 day"_
- "Query the orders collection in MongoDB and group revenue by category"
- "Create a saved question that shows top customers by spend"
Project structure
metabase-mcp/
├── main.go # Startup, env vars, wires everything together
└── internal/
├── metabase/ # Metabase API client
│ ├── client.go # HTTP client with cookie auth
│ ├── types.go # API types
│ ├── databases.go
│ ├── collections.go
│ ├── cards.go
│ ├── dashboards.go
│ ├── tables.go
│ ├── search.go
│ ├── query.go
│ └── tests/ # HTTP-level tests (package metabase_test)
└── tools/ # MCP tool handlers
├── client.go # MetabaseClient interface
├── register.go # One place to add/remove tools
├── helpers.go # Shared utilities
├── databases.go
├── collections.go
├── cards.go
├── dashboards.go
├── tables.go
├── search.go
├── query.go
└── tests/ # Handler tests with mock client (package tools_test)
Running tests
go test ./...
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Naveen-chava
- Source: Naveen-chava/metabase-mcp
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.