MetabaseSAFE
mcp metabase
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://mseep.ai/app/imlewc-metabase-server)
[](https://smithery.ai/server/@imlewc/metabase-server)
A Model Context Protocol server for Metabase integration.
This is a TypeScript-based MCP server that implements integration with Metabase API. It allows AI assistants to interact with Metabase, providing access to:
- Dashboards, questions/cards, and databases as resources
- Tools for listing and executing Metabase queries
- Ability to view and interact with Metabase data
Features
Resources
- List and access Metabase resources via
metabase://URIs - Access dashboards, cards/questions, and databases
- JSON content type for structured data access
Tools
list_dashboards- List all dashboards in Metabaselist_cards- List all questions/cards in Metabaselist_databases- List all databases in Metabaseexecute_card- Execute a Metabase question/card and get resultsget_dashboard_cards- Get all cards in a dashboardexecute_query- Execute a SQL query against a Metabase database
Configuration
Before running the server, you need to set environment variables for authentication. The server supports two methods:
- API Key (Preferred):
METABASE_URL: The URL of your Metabase instance (e.g.,https://your-metabase-instance.com).METABASE_API_KEY: Your Metabase API key.
- Username/Password (Fallback):
METABASE_URL: The URL of your Metabase instance.METABASE_USERNAME: Your Metabase username.METABASE_PASSWORD: Your Metabase password.
The server will first check for METABASE_API_KEY. If it's set, API key authentication will be used. If METABASE_API_KEY is not set, the server will fall back to using METABASE_USERNAME and METABASE_PASSWORD. You must provide credentials for at l
e044a9ccb37bOBSERVED · 2026-10-07Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add metabase-server --env METABASE_API_KEY=${METABASE_API_KEY} --env METABASE_PASSWORD=${METABASE_PASSWORD} -- npx -y @imlewc/[email protected]{
"mcpServers": {
"metabase-server": {
"command": "npx",
"args": [
"-y",
"@imlewc/[email protected]"
],
"env": {
"METABASE_API_KEY": "${METABASE_API_KEY}",
"METABASE_PASSWORD": "${METABASE_PASSWORD}"
}
}
}
}Exposed tools (33)
12 read · 16 write · 5 destructive. Blast radius: 5 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
add_card_to_dashboard | write | Add a card/question to a dashboard. |
add_dashboard_filter | write | Add or update a filter parameter on a dashboard. |
add_user_to_group | write | Add a user to a permission group. |
create_card | write | Create a new Metabase question (card). |
create_collection | write | Create a new collection in Metabase. |
create_dashboard | write | Create a new Metabase dashboard. |
create_permission_group | write | Create a new permission group in Metabase. |
create_user | write | Create a new user in Metabase. |
delete_card | destructive | Delete a Metabase question (card). |
delete_dashboard | destructive | Delete a Metabase dashboard. |
delete_permission_group | destructive | Delete a permission group in Metabase. |
disable_user | write | Disable (deactivate) a user in Metabase. This prevents them from logging in but preserves their data. |
execute_card | write | Execute a Metabase question/card and get results |
execute_query | write | Execute a SQL query against a Metabase database |
get_card | read | Get a single Metabase question/card by ID with full details including dataset_query with template-tags configuration for variables/filters. Use this to inspect a card before updating it. |
get_collection_permissions | read | Get the collection permissions graph showing which groups have access to which collections. |
get_dashboard | read | Get full dashboard details including cards and parameters. |
get_dashboard_cards | read | Get all cards in a dashboard |
get_user | read | Get details about a specific user including their group memberships. |
list_cards | read | List all questions/cards in Metabase |
list_collections | read | List all collections in Metabase. |
list_dashboard_tabs | read | List all tabs of a dashboard. Returns tab IDs, names, and positions. |
list_dashboards | read | List all dashboards in Metabase |
list_databases | read | List all databases in Metabase |
list_permission_groups | read | List all permission groups in Metabase. |
list_users | read | List all users in Metabase. |
remove_card_from_dashboard | destructive | Remove a card from a dashboard. |
remove_user_from_group | destructive | Remove a user from a permission group. |
update_collection | write | Update a collection in Metabase. |
update_collection_permissions | write | Update collection permissions for a group. Sets the permission level for a group on a collection. |
update_dashboard | write | Update an existing Metabase dashboard. |
update_dashboard_cards | write | Update dashboard cards including their parameter mappings. Use this to connect dashboard filters to card variables. |
update_user | write | Update an existing user in Metabase. |
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (3 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (3)
delete_card, delete_dashboard, delete_permission_group, remove_card_from_dashboard, remove_user_from_group
@modelcontextprotocol/sdk, abort-controller, axios, @types/axios, @types/node, typescript
Gates applied: no_behavioural_pass, no_license.
e044a9ccb37bfull audit observations/trust-audit/mcp-server/imlewc__metabase.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-07 | e044a9ccb37b | SAFE | B | 89 | first audit |
Questions
What is the Metabase MCP server?
mcp metabase
What tools does Metabase expose?
33 in total: 12 read-only, 16 that write, and 5 that can delete or overwrite (delete_card, delete_dashboard, delete_permission_group, remove_card_from_dashboard, remove_user_from_group). Every one is listed on this page with its risk.
Is Metabase safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B. Separately from the audit: 5 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Metabase need?
It reads METABASE_API_KEY and METABASE_PASSWORD from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Metabase run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as @imlewc/metabase-server at 0.1.0.
How current is this page?
The grade is for one exact copy of the source (e044a9ccb37b), read on 2026-10-07. The repository is watched and re-audited when it changes.