Metabase MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | Host for HTTP transports | localhost |
| PORT | No | Port for HTTP transports | 3200 |
| LOG_LEVEL | No | Logging level (DEBUG, INFO, WARNING, ERROR) | INFO |
| TRANSPORT | No | Transport protocol (stdio, streamable-http) | streamable-http |
| METABASE_URL | Yes | Your Metabase instance URL | |
| METABASE_API_KEY | Yes | Your Metabase API key (starts with mb_) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_metabase_collectionB | Retrieve a single Metabase collection by ID. Args: collection_id (int): ID of the collection. Returns: Dict[str, Any]: Collection metadata. |
| create_metabase_collectionB | Create a new Metabase collection. Args: name (str): Name of the collection. color (str, optional): Hex color code. parent_id (int, optional): ID of the parent collection. Returns: Dict[str, Any]: Newly created collection metadata. |
| update_metabase_collectionB | Update an existing Metabase collection. Args: collection_id (int): ID of the collection to update. name (str, optional): New name. color (str, optional): New color. parent_id (int, optional): New parent collection ID. Returns: Dict[str, Any]: Updated collection metadata. |
| delete_metabase_collectionC | Delete a Metabase collection. Args: collection_id (int): ID of the collection to delete. Returns: Dict[str, Any]: Confirmation of the collection deletion. |
| get_metabase_cardsB | Get a list of all saved questions (cards). Returns: Dict[str, Any]: Cards metadata including names, ids, collections. |
| get_card_query_resultsB | Get the results of a card's query. Args: card_id (int): ID of the card. Returns: Dict[str, Any]: Query result data. |
| create_metabase_cardA | Create a new card (chart or table) in Metabase via the /api/card endpoint. This function creates a visual card using either SQL or MBQL queries and supports all chart types including pie, donut, bar, table, and KPI-style metrics. Args: name (str): Display name of the card in Metabase. Returns: Dict[str, Any]: A dictionary representing the created card including: - id (int) - name (str) - dataset_query (dict) - visualization_settings (dict) - created_at, updated_at, etc. Example: >>> await create_metabase_card( name="Seats Sold by Destination (Donut with Outer Ring)", display="pie", dataset_query={ "type": "native", "native": { "query": "SELECT destination, SUM("seatsSold") AS total_seats_sold FROM "Flight" GROUP BY destination" }, "database": 2 }, visualization_settings={ "pie": { "category": "destination", "metric": "total_seats_sold", "labels": true, "inner_radius": 0.6, "outer_radius": 0.95, "show_values": true, "outer_ring": true }, "show_legend": true, "legend_position": "right" }, collection_id=3 ) |
| update_metabase_cardB | Update an existing card in Metabase. Args: card_id (int): ID of the card to update. name (str, optional): New name of the card. dataset_query (Dict[str, Any], optional): Dataset query definition. display (str, optional): Display type. type (str, optional): Card type. visualization_settings (Dict[str, Any], optional): Visualization settings. collection_id (int, optional): ID of the collection. description (str, optional): Description of the card. parameter_mappings (list, optional): Parameter mappings. collection_position (int, optional): Position in the collection. result_metadata (list, optional): Metadata for results. cache_ttl (int, optional): Cache TTL. parameters (list, optional): Query parameters. dashboard_id (int, optional): Dashboard ID. dashboard_tab_id (int, optional): Dashboard tab ID. entity_id (str, optional): Entity ID. Returns: Dict[str, Any]: Updated card metadata. |
| delete_metabase_cardC | Delete a card from Metabase. Args: card_id (int): ID of the card to delete. Returns: Dict[str, Any]: Deletion confirmation. |
| get_metabase_dashboardsB | Get a list of dashboards in Metabase. Returns: Dict[str, Any]: Dashboard metadata including id, name, and cards. |
| get_dashboard_by_idB | Get a dashboard by ID. Args: dashboard_id (int): ID of the dashboard. Returns: Dict[str, Any]: Dashboard metadata including id, name, cards, and tabs. |
| get_dashboard_cardsB | Get cards in a dashboard. Args: dashboard_id (int): ID of the dashboard. Returns: Dict[str, Any]: Cards in the dashboard. |
| get_dashboard_itemsC | Get all items in a dashboard. Args: dashboard_id (int): ID of the dashboard. Returns: Dict[str, Any]: All items in the dashboard. |
| create_metabase_dashboardB | Create a new dashboard in Metabase. Args: name (str): Name of the dashboard. description (str, optional): Dashboard description. collection_id (int, optional): Collection ID. parameters (list, optional): Parameters for the dashboard. tabs (list, optional): Tabs for the dashboard (list of {"name": "Tab Name"}). cache_ttl (int, optional): Cache time to live in seconds. collection_position (int, optional): Position in the collection. Returns: Dict[str, Any]: Created dashboard metadata. |
| update_metabase_dashboardA | Update an existing dashboard in Metabase using structured inputs and auto-fallback behavior. This function allows partial updates to a dashboard. If you don't pass optional fields like
Args: dashboard_id (int): The ID of the dashboard to update. Returns:
Dict[str, Any]:
JSON object containing updated dashboard metadata from Metabase.
Includes fields like:
- Behavior:
- If Example: >>> await update_metabase_dashboard( dashboard_id=1, name="Updated Flight Dashboard", dashcards=[ DashboardCard(card_id=123, row=0, col=0, size_x=4, size_y=3), DashboardCard(card_id=124, row=0, col=4, size_x=4, size_y=3) ], tabs=[DashboardTab(name="Overview")], width="fixed" ) |
| delete_metabase_dashboardB | Delete a dashboard from Metabase. Args: dashboard_id (int): ID of the dashboard to delete. Returns: Dict[str, Any]: Deletion confirmation. |
| copy_metabase_dashboardB | Copy a dashboard. Args: from_dashboard_id (int): ID of the source dashboard to copy. name (str): Name for the new dashboard. description (str, optional): Description for the new dashboard. collection_id (int, optional): Collection ID for the new dashboard. is_deep_copy (bool, optional): Whether to perform a deep copy (copy linked cards too). collection_position (int, optional): Position in the collection. Returns: Dict[str, Any]: New dashboard metadata. |
| get_metabase_databasesB | Get a list of connected databases in Metabase. Returns: Dict[str, Any]: List of database metadata. |
| create_metabase_databaseA | Create a new database connection in Metabase. Args: name (str): Name of the database. engine (str): Database engine. details (Dict[str, Any]): Connection details. auto_run_queries (bool, optional): Enable auto run. cache_ttl (int, optional): Cache time-to-live. is_full_sync (bool, optional): Whether to perform full sync. schedule (Dict[str, Any], optional): Sync schedule. timezone (str, optional): Timezone for the database. metadata_sync (bool, optional): Enable metadata sync. Returns: Dict[str, Any]: Created database metadata. |
| update_metabase_databaseB | Update an existing database connection in Metabase. Args: database_id (int): ID of the database to update. name (str, optional): Name of the database. details (Dict[str, Any], optional): Connection details. auto_run_queries (bool, optional): Enable auto run. cache_ttl (int, optional): Cache time-to-live. is_full_sync (bool, optional): Whether to perform full sync. schedule (Dict[str, Any], optional): Sync schedule. timezone (str, optional): Timezone for the database. metadata_sync (bool, optional): Enable metadata sync. Returns: Dict[str, Any]: Updated database metadata. |
| delete_metabase_databaseB | Delete a database connection from Metabase. Args: database_id (int): ID of the database to delete. Returns: Dict[str, Any]: Deletion confirmation. |
| get_metabase_usersB | Get a list of users in Metabase. Returns: Dict[str, Any]: User metadata including id, email, groups, etc. |
| create_metabase_userB | Create a new user in Metabase. Args: first_name (str): User's first name. last_name (str): User's last name. email (str): Email address. password (str): Account password. login_attributes (dict, optional): Additional login metadata. group_ids (list, optional): List of group IDs to assign the user. is_superuser (bool, optional): Whether the user is a superuser. Returns: Dict[str, Any]: Created user metadata. |
| update_metabase_userB | Update an existing user in Metabase. Args: user_id (int): ID of the user to update. first_name (str, optional): Updated first name. last_name (str, optional): Updated last name. email (str, optional): Updated email address. password (str, optional): Updated password. login_attributes (dict, optional): Updated login metadata. group_ids (list, optional): Updated group IDs. is_superuser (bool, optional): Updated superuser flag. Returns: Dict[str, Any]: Updated user metadata. |
| delete_metabase_userB | Delete a user from Metabase. Args: user_id (int): ID of the user to delete. Returns: Dict[str, Any]: Deletion confirmation. |
| get_metabase_current_userA | Get current logged-in user info from Metabase. Returns: Dict[str, Any]: User details like id, email, groups, etc. |
| get_metabase_groupsB | Get a list of groups (roles) in Metabase. Returns: Dict[str, Any]: Group metadata including id, name, etc. |
| create_metabase_groupB | Create a new group (role) in Metabase. Args: name (str): Name of the group to create. ldap_dn (str, optional): LDAP Distinguished Name if applicable. Returns: Dict[str, Any]: Created group metadata. |
| delete_metabase_groupA | Delete a group (role) from Metabase. Args: group_id (int): ID of the group to delete. Returns: Dict[str, Any]: Deletion confirmation. |
| execute_sql_queryA | Execute a native SQL query through Metabase. Args: database_id (int): ID of the database to execute the query on. native_query (str): The SQL query to execute. parameters (list, optional): Query parameters. Returns: Dict[str, Any]: Query execution result. Notes: - For PostgreSQL databases, column names are be case-sensitive - Use double quotes around column names with mixed case (e.g., "columnName") - Example with quoted column names: SELECT "userId", "orderDate", COUNT(*) FROM "Orders" GROUP BY "userId", "orderDate" |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CW-Codewalnut/metabase-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server