Skip to main content

Metabase MCP Server - Connect AI Assistants to Your Metabase Analytics

PyPI version Python 3.12+ License: MIT FastMCP

A high-performance Model Context Protocol (MCP) server for Metabase, enabling AI assistants like Claude, Cursor, and other MCP clients to interact seamlessly with your Metabase instance. Query databases, execute SQL, manage dashboards, and automate analytics workflows with natural language through AI-powered database operations.

Perfect for: Data analysts, developers, and teams looking to integrate AI assistants with their Metabase business intelligence platform for automated SQL queries, dashboard management, and data exploration.

Key Features

Database Operations

  • List Databases: Browse all configured Metabase databases
  • Table Discovery: Explore tables with metadata and descriptions
  • Field Inspection: Get detailed field/column information with smart pagination

Query & Analytics

  • SQL Execution: Run native SQL queries with parameter support and templating
  • Card Management: Execute, create, and manage Metabase questions/cards
  • Collection Organization: Create and manage collections for better organization
  • Natural Language Queries: Let AI assistants translate questions into SQL

Authentication & Security

  • API Key Support: Secure authentication via Metabase API keys (recommended)
  • Session-based Auth: Alternative email/password authentication
  • Environment Variables: Secure credential management via .env files

AI Assistant Integration

  • Claude Desktop: Native integration with Anthropic's Claude AI
  • Cursor IDE: Seamless integration for AI-assisted development
  • Any MCP Client: Compatible with all Model Context Protocol clients

Enhanced Performance & Reliability

  • Context-aware Logging: Real-time logging with debug, info, warning, and error levels visible to AI clients
  • Proper Error Handling: FastMCP ToolError exceptions for better error messages and debugging
  • Middleware Stack: Built-in error handling and logging middleware for production reliability
  • Best Practices: Follows latest FastMCP patterns with duplicate prevention and clean configuration
  • Modern Python: Uses Python 3.12+ type hints (| syntax) for better type safety

Quick Start

Prerequisites

  • Python 3.12+
  • Metabase instance with API access
  • uvx or uv package manager

Installation

Option 1: Using uvx (Easiest - No Installation Required)

# Run directly without installing (like npx for Python)
uvx metabase-mcp

# With environment variables
METABASE_URL=https://your-instance.com METABASE_API_KEY=your-key uvx metabase-mcp

Option 2: Install from PyPI

# Install globally
uv tool install metabase-mcp

# Or with pip
pip install metabase-mcp

# Then run
metabase-mcp

Option 3: Development Setup (From Source)

# Clone the repository
git clone https://github.com/cheukyin175/metabase-mcp.git
cd metabase-mcp

# Install dependencies
uv sync

# Run the server
uv run python server.py

Configuration

Create a .env file with your Metabase credentials:

cp .env.example .env

Configuration Options

METABASE_URL=https://your-metabase-instance.com
METABASE_API_KEY=your-api-key-here

Option 2: Email/Password Authentication

METABASE_URL=https://your-metabase-instance.com
METABASE_USER_EMAIL=your-email@example.com
METABASE_PASSWORD=your-password

Optional: Custom Host/Port for SSE/HTTP

HOST=localhost  # Default: 0.0.0.0
PORT=9000      # Default: 8000

Usage

Run the Server

Quick Start (No Setup Required)

# Run directly with uvx
uvx metabase-mcp

# With custom Metabase instance
METABASE_URL=https://your-instance.com METABASE_API_KEY=your-key uvx metabase-mcp

From Source (Development)

# STDIO transport (default)
uv run python server.py

# SSE transport (uses HOST=0.0.0.0, PORT=8000 by default)
uv run python server.py --sse

# HTTP transport (uses HOST=0.0.0.0, PORT=8000 by default)
uv run python server.py --http

# Custom host and port via environment variables
HOST=localhost PORT=9000 uv run python server.py --sse
HOST=192.168.1.100 PORT=8080 uv run python server.py --http

Cursor Integration

You can manually configure Cursor by editing your Cursor settings.

For SSE transport: You must start the server before using Cursor:

uv run python server.py --sse

Claude Desktop Integration

Add this to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
    "mcpServers": {
        "metabase-mcp": {
            "command": "uvx",
            "args": ["metabase-mcp"],
            "env": {
                "METABASE_URL": "https://your-metabase-instance.com",
                "METABASE_API_KEY": "your-api-key-here"
            }
        }
    }
}

Option 2: Using Local Installation

If you've cloned the repository:

{
    "mcpServers": {
        "metabase-mcp": {
            "command": "uv",
            "args": [
                "run",
                "--directory",
                "/absolute/path/to/metabase-mcp",
                "python",
                "server.py"
            ],
            "env": {
                "METABASE_URL": "https://your-metabase-instance.com",
                "METABASE_API_KEY": "your-api-key-here"
            }
        }
    }
}

Option 3: Using FastMCP CLI

fastmcp install server.py -n "Metabase MCP"

Available Tools

Database Operations

Tool Description
list_databases List all configured databases in Metabase
list_tables Get all tables in a specific database with metadata
get_table_fields Retrieve field/column information for a table

Query Operations

Tool Description
execute_query Execute native SQL queries with parameter support
execute_card Run saved Metabase questions/cards

Card Management

Tool Description
list_cards List all saved questions/cards
create_card Create new questions/cards with SQL queries

Collection Management

Tool Description
list_collections Browse all collections
create_collection Create new collections for organization

Transport Methods

The server supports multiple transport methods:

  • STDIO (default): For IDE integration (Cursor, Claude Desktop)
  • SSE: Server-Sent Events for web applications
  • HTTP: Standard HTTP for API access
uv run python server.py                        # STDIO (default)
uv run python server.py --sse                  # SSE (HOST=0.0.0.0, PORT=8000)
uv run python server.py --http                 # HTTP (HOST=0.0.0.0, PORT=8000)
HOST=localhost PORT=9000 uv run python server.py --sse   # Custom host/port

Development

Setup Development Environment

# Install with dev dependencies
uv sync --group dev

# Or with pip
pip install -r requirements-dev.txt

Code Quality

# Run linting
uv run ruff check .

# Format code
uv run ruff format .

# Type checking
uv run mypy server.py

Usage Examples

Query Examples

# List all databases
databases = await list_databases()

# Execute a SQL query
result = await execute_query(
    database_id=1,
    query="SELECT * FROM users LIMIT 10"
)

# Create and run a card
card = await create_card(
    name="Active Users Report",
    database_id=1,
    query="SELECT COUNT(*) FROM users WHERE active = true",
    collection_id=2
)

Project Structure

metabase-mcp/
├── server.py                 # Main MCP server implementation
├── pyproject.toml           # Project configuration and dependencies
└── .env.example             # Environment variables template

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License - see LICENSE file for details

Resources

Keywords & Topics

metabase mcp model-context-protocol claude cursor ai-assistant fastmcp sql database analytics business-intelligence bi data-analysis anthropic llm python automation api data-science query-builder natural-language-sql

Star History

If you find this project useful, please consider giving it a star! It helps others discover this tool.

Use Cases

  • Natural Language Database Queries: Ask Claude to query your Metabase databases using plain English
  • Automated Report Generation: Use AI to create and manage Metabase cards and collections
  • Data Exploration: Let AI assistants help you discover insights from your data
  • SQL Query Assistance: Get help writing and optimizing SQL queries through AI
  • Dashboard Management: Automate the creation and organization of Metabase dashboards
  • Data Analysis Workflows: Integrate AI-powered analytics into your development workflow

Metadata

Release files for iflow-mcp_cheukyin175-metabase-mcp 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for iflow-mcp_cheukyin175-metabase-mcp 1.0.0
File Size Uploaded
iflow_mcp_cheukyin175_metabase_mcp-1.0.0.tar.gz 64.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for iflow-mcp_cheukyin175-metabase-mcp 1.0.0
File Interpreter ABI Platform
iflow_mcp_cheukyin175_metabase_mcp-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 138.6 kB

Release files / iflow_mcp_cheukyin175_metabase_mcp-1.0.0.tar.gz

Download URL iflow_mcp_cheukyin175_metabase_mcp-1.0.0.tar.gz
Size 64.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b361f2077d8be93fc51beceebabec1852ac8d93b8d4d4d769d03737360d7f385
BLAKE2b-256 checksum
How to use checksums
10f557d7b5a592c198298f57791d34d26af8bc632fd4c92119e8d2044f406f6f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / iflow_mcp_cheukyin175_metabase_mcp-1.0.0-py3-none-any.whl

Download URL iflow_mcp_cheukyin175_metabase_mcp-1.0.0-py3-none-any.whl
Size 74.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c0a7d3ea6dcc9b2ba786b3acf86fd7d534c8a881b4ddba15b5a53504d694590d
BLAKE2b-256 checksum
How to use checksums
e78885942551e6e5cba368e2c1e9af28fe85bc1722691ec01e4e0d39167c5aa4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page