Metabase
STDIO连接AI助手与Metabase分析平台的MCP服务器
连接AI助手与Metabase分析平台的MCP服务器
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.
.env filesToolError exceptions for better error messages and debugging| syntax) for better type safetyuvx or uv package manager# 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
# Install globally uv tool install metabase-mcp # Or with pip pip install metabase-mcp # Then run metabase-mcp
# 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
Create a .env file with your Metabase credentials:
cp .env.example .env
METABASE_URL=https://your-metabase-instance.com METABASE_API_KEY=your-api-key-here
METABASE_URL=https://your-metabase-instance.com [email protected] METABASE_PASSWORD=your-password
HOST=localhost # Default: 0.0.0.0 PORT=9000 # Default: 8000
# 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
# 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
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
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" } } } }
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" } } } }
fastmcp install server.py -n "Metabase MCP"
| 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 | 
| Tool | Description | 
|---|---|
execute_query | Execute native SQL queries with parameter support | 
execute_card | Run saved Metabase questions/cards | 
| Tool | Description | 
|---|---|
list_cards | List all saved questions/cards | 
create_card | Create new questions/cards with SQL queries | 
| Tool | Description | 
|---|---|
list_collections | Browse all collections | 
create_collection | Create new collections for organization | 
The server supports multiple transport methods:
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
# Install with dev dependencies uv sync --group dev # Or with pip pip install -r requirements-dev.txt
# Run linting uv run ruff check . # Format code uv run ruff format . # Type checking uv run mypy server.py
# 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 )
metabase-mcp/
├── server.py                 # Main MCP server implementation
├── pyproject.toml           # Project configuration and dependencies
└── .env.example             # Environment variables template
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE file for details
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
If you find this project useful, please consider giving it a star! It helps others discover this tool.