Sandbox
@easecloudio/mcp-metabase-server

MCP server for Metabase analytics access

This server connects an MCP client to a Metabase instance so an agent can list, inspect, create, update, and delete analytics objects. It exposes dozens of tools for dashboards, cards, databases, tables, collections, users, permissions, search, and schema caching.

81 stars24 forksTypeScriptUpdated 4mo ago
Who it's for

Builders who want Claude Desktop or another MCP client to work directly with Metabase data and dashboards.

What it delivers

You can ask your agent to inspect, edit, and query Metabase without switching out of your workflow.

What it does

Dashboard tools

List, get, create, update, copy, delete, favorite, share, embed, and revise dashboards, including cards and layout.

Card and question tools

Manage questions, run them, export results, inspect parameters, and create public or embeddable links.

Database tools

Create and update database connections, run SQL, validate connections, sync schema, and check health.

Table tools

Inspect table metadata, foreign keys, sample data, field IDs, and manage CSV uploads for Metabase-managed tables.

Collection, user, and search tools

Create and edit collections, list users and permission groups, and search across Metabase content.

Schema cache for SQL to MBQL

Cache field IDs and schema metadata locally so agents can translate native SQL questions into interactive MBQL questions.

MCP resources

Expose dashboards, cards, databases, collections, users, tables, and fields through `metabase://` URIs.

How to get it

  1. 1Run
    export METABASE_URL=https://your-metabase-instance.com
    export METABASE_API_KEY=your_metabase_api_key
    npx @easecloudio/mcp-metabase-server
  2. 2Run
    npx @easecloudio/mcp-metabase-server
  3. 3Run
    npm install -g @easecloudio/mcp-metabase-server
    mcp-metabase-server
  4. 4Run
    docker build -t mcp-metabase-server .
    docker run -it --rm \
      -e METABASE_URL=https://your-metabase-instance.com \
      -e METABASE_API_KEY=your_metabase_api_key \
      mcp-metabase-server

README

Metabase MCP Server

npm version License: MIT TypeScript GitHub

A Model Context Protocol (MCP) server for Metabase that gives AI assistants full access to your analytics platform — dashboards, cards, databases, tables, collections, and more.

Developed and maintained by EaseCloud — cloud-native, AI-driven, and data infrastructure solutions.

Quick Start

export METABASE_URL=https://your-metabase-instance.com
export METABASE_API_KEY=your_metabase_api_key
npx @easecloudio/mcp-metabase-server

96 Tools Available

DomainTools
Dashboard Management27
Card / Question Management21
Database Management16
Table Management17
Collections, Users & Search13
Schema Cache (SQL→MBQL)2

Supported Metabase Versions

  • Metabase v0.46.x and above (recommended: v0.48.x or later)
  • Metabase Cloud (fully supported)
  • Self-hosted instances (Docker, JAR, or cloud deployments)

Installation

npx (Recommended)

npx @easecloudio/mcp-metabase-server

Global install

npm install -g @easecloudio/mcp-metabase-server
mcp-metabase-server

Docker

docker build -t mcp-metabase-server .
docker run -it --rm \
  -e METABASE_URL=https://your-metabase-instance.com \
  -e METABASE_API_KEY=your_metabase_api_key \
  mcp-metabase-server

Configuration

Authentication

API Key (preferred):

METABASE_URL=https://your-metabase-instance.com
METABASE_API_KEY=your_metabase_api_key

Username / Password (fallback):

METABASE_URL=https://your-metabase-instance.com
METABASE_USERNAME=your_username
METABASE_PASSWORD=your_password

Copy .env.example to .env and fill in your values.

Tool Filtering (TOOL_MODE)

Set TOOL_MODE to control which tools are exposed to the AI. Useful for limiting surface area or preventing accidental writes.

ModeDescription
allEvery available tool (default)
essentialCore read + execute tools only
readAll non-destructive tools
writeAll tools including create / update / delete
TOOL_MODE=essential  # smallest surface area
TOOL_MODE=read       # read-only
TOOL_MODE=all        # everything (default)

Claude Desktop Integration

MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%/Claude/claude_desktop_config.json

Using npx:

{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["@easecloudio/mcp-metabase-server"],
      "env": {
        "METABASE_URL": "https://your-metabase-instance.com",
        "METABASE_API_KEY": "your_metabase_api_key"
      }
    }
  }
}

With tool filtering:

{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["@easecloudio/mcp-metabase-server"],
      "env": {
        "METABASE_URL": "https://your-metabase-instance.com",
        "METABASE_API_KEY": "your_metabase_api_key",
        "TOOL_MODE": "essential"
      }
    }
  }
}

Using a local build:

{
  "mcpServers": {
    "metabase": {
      "command": "node",
      "args": ["/path/to/metabase-server/dist/index.js"],
      "env": {
        "METABASE_URL": "https://your-metabase-instance.com",
        "METABASE_API_KEY": "your_metabase_api_key"
      }
    }
  }
}

Username / password fallback:

{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["@easecloudio/mcp-metabase-server"],
      "env": {
        "METABASE_URL": "https://your-metabase-instance.com",
        "METABASE_USERNAME": "your_username",
        "METABASE_PASSWORD": "your_password"
      }
    }
  }
}

Available Tools

Dashboard Management (27 tools)

Core CRUD

ToolDescription
list_dashboardsList all dashboards
get_dashboardGet a specific dashboard by ID
create_dashboardCreate a new dashboard
update_dashboardUpdate an existing dashboard
delete_dashboardDelete / archive a dashboard
copy_dashboardDuplicate a dashboard (shallow or deep copy)
save_dashboardSave a complete dashboard object with nested data
save_dashboard_to_collectionMove a dashboard into a specific collection
search_dashboardsSearch dashboards by name or description
favorite_dashboardMark a dashboard as a favourite
unfavorite_dashboardRemove a dashboard from favourites

Card Layout

ToolDescription
get_dashboard_cardsGet all cards in a dashboard
add_card_to_dashboardAdd a card with positioning
add_text_blockAdd a text or heading block to a dashboard
remove_card_from_dashboardRemove a card
update_dashboard_cardUpdate card position, size, and settings
update_dashboard_cardsBulk-replace all cards on a dashboard
update_dashcardUpdate a specific dashcard's properties
execute_dashboard_cardExecute a specific dashcard and return results

Public Sharing & Embedding

ToolDescription
create_dashboard_public_linkCreate a public sharing link
delete_dashboard_public_linkRemove the public link
list_public_dashboardsList dashboards with public links
list_embeddable_dashboardsList dashboards enabled for embedding

Revision, Audit & Discovery

ToolDescription
get_dashboard_revisionsGet revision history (audit trail)
revert_dashboardRevert to a previous revision
get_dashboard_relatedGet related content suggestions
get_dashboard_queriesExtract all card queries with resolved field IDs
Card / Question Management (21 tools)

Core CRUD

ToolDescription
list_cardsList all questions / cards
get_cardGet a card by ID (includes full SQL / MBQL query)
create_cardCreate a new question
update_cardUpdate an existing question
delete_cardDelete / archive a question
copy_cardDuplicate a card
move_cardsMove one or more cards to a different collection
move_cards_to_collectionBulk-move cards from a source collection

Execution & Export

ToolDescription
execute_cardRun a card and return results
execute_pivot_card_queryRun a card formatted as a pivot table
export_card_resultExport results as CSV or JSON

Parameters

ToolDescription
get_card_param_valuesGet available values for a card parameter
search_card_param_valuesSearch / filter parameter values
get_card_param_remappingGet how parameter values are remapped for display

Metadata & Discovery

ToolDescription
get_card_query_metadataGet column types and display names
get_card_dashboardsList dashboards containing this card
get_card_seriesGet series data or related card suggestions

Public Sharing & Embedding

ToolDescription
create_card_public_linkCreate a public sharing link
delete_card_public_linkRemove the public link
list_public_cardsList cards with public links
list_embeddable_cardsList cards enabled for embedding
Database Management (16 tools)

Core CRUD

ToolDescription
list_databasesList all database connections
get_databaseGet a specific database by ID
create_database_connectionCreate a new database connection
update_databaseUpdate a database connection's config or credentials
delete_databasePermanently remove a database connection
add_sample_databaseAdd the built-in H2 sample database with demo data

Querying

ToolDescription
execute_queryExecute a SQL query against a database

Schema & Sync

ToolDescription
get_database_schemaGet schema information
get_database_tablesGet all tables in a database
get_database_metadataGet full metadata including all tables and field IDs
list_database_schemasList all schemas within a database
sync_database_schemaTrigger a schema metadata sync
get_database_sync_statusCheck sync status

Diagnostics

ToolDescription
check_database_healthCheck connection health
validate_databaseValidate connection settings before saving
test_database_connectionTest an existing connection
Table Management (17 tools)

Metadata

ToolDescription
list_tablesList tables (optionally filtered by database)
get_tableGet table metadata by ID
get_table_metadataGet full query metadata including field IDs and types
get_table_fksGet foreign key relationships
get_table_relatedFind related tables via FK relationships
get_table_dataGet a sample data preview from a table
get_field_idLook up a field ID by table ID + column name (returns MBQL ref)

Card Virtual Tables

ToolDescription
get_card_table_fksGet FK relationships for a card's virtual table
get_card_table_query_metadataGet query metadata for a card's virtual table

Management

ToolDescription
update_tableUpdate display name, description, or visibility
update_tablesBulk-update multiple tables with the same config
reorder_table_fieldsChange the display order of fields
sync_table_schemaTrigger a schema sync for a specific table
rescan_table_field_valuesRescan field values (updates filter dropdowns)
discard_table_field_valuesDiscard cached field values

CSV Upload (Metabase-managed tables)

ToolDescription
append_csv_to_tableAppend new rows from CSV content
replace_table_csvReplace all table data with new CSV content
Collections, Users & Search (13 tools)

Collections

ToolDescription
list_collectionsList all collections
create_collectionCreate a new collection
get_collectionGet collection details
update_collectionUpdate name, description, color, or parent
delete_collectionDelete a collection and its contents
get_collection_itemsList cards, dashboards, and sub-collections
move_to_collectionMove a card or dashboard to a different collection

Users

ToolDescription
list_usersList all users
create_userCreate a new user

Permissions

ToolDescription
list_permission_groupsList all permission groups
create_permission_groupCreate a new permission group

Search

ToolDescription
search_contentSearch across all Metabase content
Schema Cache — SQL to MBQL (2 tools)

These tools enable an AI to convert native SQL questions into interactive MBQL questions. Metabase has no REST API for this conversion — it requires field IDs, which these tools cache locally.

How it works:

  1. get_card — extract the SQL and database_id
  2. get_schema_cache — get tables + field IDs for MBQL references like ["field", 42, null]
  3. AI translates SQL → MBQL using the cached field IDs
  4. create_card — save the new interactive question

Cache is stored at ~/.easecloud/metabase-mcp/cache/{url-hash}/ with a 24-hour TTL and scoped per Metabase instance.

ToolDescription
get_schema_cacheReturn cached schema (auto-fetches if missing or stale)
refresh_schema_cacheForce-refresh cache for one or all databases

MCP Resources

Access Metabase entities directly via metabase:// URIs:

URIDescription
metabase://dashboard/{id}Dashboard details
metabase://card/{id}Card / question details
metabase://database/{id}Database information
metabase://collection/{id}Collection details
metabase://user/{id}User information
metabase://table/{id}Table metadata
metabase://field/{id}Field information

Development

npm install
npm run build       # compile TypeScript → dist/
npm run watch       # incremental rebuild
npm run dev         # build + start
npm run inspector   # launch MCP Inspector for debugging

Debugging

MCP servers communicate over stdio, which makes direct debugging awkward. Use the MCP Inspector:

npm run inspector

The Inspector provides a browser UI for sending tool calls and inspecting responses.

About EaseCloud

EaseCloud is a cloud consulting and solutions company specializing in:

  • Cloud-native application development
  • AI & automation integrations
  • DevOps and infrastructure management
  • Data analytics and BI platform consulting

We built this project to contribute to the open-source MCP ecosystem while demonstrating our expertise in integration, automation, and cloud solutions.

If your team is adopting Metabase at scale or looking to integrate AI with your BI stack, get in touch — we provide consulting, customization, and managed support for enterprises.

📧 support@easecloud.io 🌐 easecloud.io

Bug Reports & Issues

Found a bug or have a feature request?

🐛 Create a GitHub issue

Please include:

  • Metabase version
  • MCP server version
  • Steps to reproduce
  • Expected vs actual behavior
  • Any error messages or logs

Contributing

Contributions are welcome. Visit the GitHub repository to submit issues or pull requests.

License

MIT — see LICENSE for details.

Files in the repo

Repository payload18 top-level entries
  • .github
  • src
  • .dockerignore
  • .env.example
  • .gitignore
  • .npmrc
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • docker-compose.yml
  • docker-run.sh
  • Dockerfile
  • LICENSE
  • package-lock.json
  • package.json
  • README.md
  • SECURITY.md
  • smithery.yaml
  • tsconfig.json

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More connectors

Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface

86k

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

43k

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

14k
okf-memory/
okf-agent-memory

Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300µs in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.

547
2akouwu/
reverify

Stop your AI from making things up — it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.

1.1k
t8y2/dbxConnectors

20 MB lightweight cross-platform database client for 90+ databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, and Dameng. Built-in AI, MCP Server, CLI, desktop and Docker. | 轻量级跨平台数据库管理工具,支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、达梦等 90+ 数据库,提供桌面端、Docker、CLI、内置 AI 助手和 MCP Server。

19k