
Metabase Server
β 151from imlewc
Integrate with Metabase to query databases and visualize data. Requires Metabase URL and API key for authentication.
metabase-server MCP 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
Development
Install dependencies:
npm installBuild the server:
npm run buildFor development with auto-rebuild:
npm run watchTesting
After configuring the environment variables as described in the "Configuration" section, you can manually test the server's authentication. The MCP Inspector (npm run inspector) is a useful tool for sending requests to the server.
1. Testing with API Key Authentication
- Set the
METABASE_URLandMETABASE_API_KEYenvironment variables with your Metabase instance URL and a valid API key. - Ensure
METABASE_USERNAMEandMETABASE_PASSWORDare unset or leave them, as the API key should take precedence. - Start the server:
npm run build && node build/index.js(or use your chosen method for running the server, like via Claude Desktop config). - Check the server logs. You should see a message indicating that it's using API key authentication (e.g., "Using Metabase API Key for authentication.").
- Using an MCP client or the MCP Inspector, try calling a tool, for example,
tools/callwith{"name": "list_dashboards"}. - Verify that the tool call is successful and you receive the expected data.
2. Testing with Username/Password Authentication (Fallback)
- Ensure the
METABASE_API_KEYenvironment variable is unset. - Set
METABASE_URL,METABASE_USERNAME, andMETABASE_PASSWORDwith valid credentials for your Metabase instance. - Start the server.
- Check the server logs. You should see a message indicating that it's using username/password authentication (e.g., "Using Metabase username/password for authentication." followed by "Authenticating with Metabase using username/password...").
- Using an MCP client or the MCP Inspector, try calling the
list_dashboardstool. - Verify that the tool call is successful.
3. Testing Authentication Failures
- Invalid API Key:
- Set
METABASE_URLand an invalidMETABASE_API_KEY. EnsureMETABASE_USERNAMEandMETABASE_PASSWORDvariables are unset. - Start the server.
- Attempt to call a tool (e.g.,
list_dashboards). The tool call should fail, and the server logs might indicate an authentication error from Metabase (e.g., "Metabase API error: Invalid X-API-Key").
- Set
- Invalid Username/Password:
- Ensure
METABASE_API_KEYis unset. SetMETABASE_URLand invalidMETABASE_USERNAME/METABASE_PASSWORD. - Start the server.
- Attempt to call a tool. The tool call should fail due to failed session authentication. The server logs might show "Authentication failed" or "Failed to authenticate with Metabase".
- Ensure
- Missing Credentials:
- Unset
METABASE_API_KEY,METABASE_USERNAME, andMETABASE_PASSWORD. Set onlyMETABASE_URL. - Attempt to start the server.
- The server should fail to start and log an error message stating that authentication credentials (either API key or username/password) are required (e.g., "Either (METABASE_URL and METABASE_API_KEY) or (METABASE_URL, METABASE_USERNAME, and METABASE_PASSWORD) environment variables are required").
- Unset
npm installBefore it works, you'll need: METABASE_URLMETABASE_API_KEYMETABASE_USERNAMEMETABASE_PASSWORD
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 least one of these methods.
Example setup:
Using API Key:
# Required environment variables
export METABASE_URL=https://your-metabase-instance.com
export METABASE_API_KEY=your_metabase_api_keyOr, using Username/Password:
# Required environment variables
export METABASE_URL=https://your-metabase-instance.com
export METABASE_USERNAME=your_username
export METABASE_PASSWORD=your_passwordYou can set these environment variables in your shell profile or use a .env file with a package like dotenv.
Installation
# Oneliner, suitable for CI environment
git clone https://github.com/imlewc/metabase-server.git && cd metabase-server && npm i && npm run build && npm linkTo use with Claude Desktop, add the server config:
On MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"metabase-server": {
"command": "metabase-server",
"env": {
"METABASE_URL": "https://your-metabase-instance.com",
// Use API Key (preferred)
"METABASE_API_KEY": "your_metabase_api_key"
// Or Username/Password (if API Key is not set)
// "METABASE_USERNAME": "your_username",
// "METABASE_PASSWORD": "your_password"
}
}
}
}Note: You can also set these environment variables in your system instead of in the config file if you prefer.
Installing via Smithery
To install metabase-server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @imlewc/metabase-server --client claudeInstalling via Claude Code CLI
To install metabase-server for Claude Code CLI:
claude mcp add metabase-server -s user \
-e METABASE_URL="https://your-metabase-instance.com" \
-e METABASE_USERNAME="your-email@example.com" \
-e METABASE_PASSWORD="your-password" \
-- npx -y @imlewc/metabase-serverOr using API Key (preferred):
claude mcp add metabase-server -s user \
-e METABASE_URL="https://your-metabase-instance.com" \
-e METABASE_API_KEY="your-api-key" \
-- npx -y @imlewc/metabase-serverConfiguration will be written to ~/.claude.json:
{
"mcpServers": {
"metabase-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@imlewc/metabase-server"],
"env": {
"METABASE_URL": "https://your-metabase-instance.com",
"METABASE_USERNAME": "your-email@example.com",
"METABASE_PASSWORD": "your-password"
}
}
}
}Troubleshooting
If MCP server fails to connect, check the logs:
cat ~/.claude/debug/latest | grep -i metabaseCommon issues:
- Environment variables not configured (
"env": {}is empty) - Invalid URL format (must include
https://) - Incorrect credentials
Debugging
Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector, which is available as a package script:
npm run inspectorThe Inspector will provide a URL to access debugging tools in your browser.
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.
