Metabase MCP server
A maintained Metabase MCP server from Cognition that lets an agent run questions, build dashboards, and query databases across your Metabase instance.
This Metabase MCP server, maintained by Cognition, connects an AI agent to a Metabase business-intelligence instance through the Metabase REST API. It exposes a broad tool surface — over 80 tools across dashboards, cards (saved questions), databases, tables, and collections — so an agent can list and execute existing questions, run ad-hoc SQL with execute_query, create and update dashboards and cards, manage public and embeddable links, and organize content into collections. Because it speaks the same API a human analyst uses, the agent works within your existing Metabase models, permissions, and connected data sources.
To keep the tool surface manageable for a model, it ships selectable modes: the default --essential loads a curated core set, --read exposes only read-only tools, --write exposes modification tools, and --all loads the full inventory. It runs locally over stdio, launches with npx, and authenticates with METABASE_URL plus an API key (METABASE_API_KEY) or a username and password against your Metabase instance. That makes it a practical way to let an agent answer questions from your dashboards, prototype new charts, and automate BI chores conversationally.
Quick install
Copy-paste configs are provided for all 8 supported clients. Pick your client below.
Available tools
| Tool | Description |
|---|---|
| list_dashboards | List all dashboards in the instance. |
| get_dashboard | Get a dashboard's details. |
| create_dashboard | Create a new dashboard. |
| update_dashboard | Update an existing dashboard. |
| delete_dashboard | Delete a dashboard. |
| copy_dashboard | Copy an existing dashboard. |
| get_dashboard_cards | List the cards placed on a dashboard. |
| add_card_to_dashboard | Add a card to a dashboard. |
| remove_card_from_dashboard | Remove a card from a dashboard. |
| update_dashboard_card | Update a card's placement or settings on a dashboard. |
| execute_dashboard_card | Execute a single card on a dashboard. |
| create_public_link | Create a public sharing link for a dashboard. |
| delete_public_link | Delete a dashboard's public sharing link. |
| list_public_dashboards | List dashboards with public links enabled. |
| list_embeddable_dashboards | List dashboards enabled for embedding. |
| get_dashboard_param_values | Get the available values for a dashboard parameter. |
| search_dashboard_param_values | Search the values for a dashboard parameter. |
| get_dashboard_param_remapping | Get the value remapping for a dashboard parameter. |
| execute_dashboard_query | Execute the query behind a dashboard. |
| get_dashboard_related | Get entities related to a dashboard. |
| get_dashboard_query_metadata | Get query metadata for a dashboard. |
| update_dashboard_cards | Update multiple cards on a dashboard at once. |
| save_dashboard | Save changes to a dashboard. |
| list_cards | List all saved questions (cards). |
| get_card | Get a card's details. |
| create_card | Create a new card (saved question), including SQL questions. |
| update_card | Update an existing card. |
| delete_card | Delete a card. |
| copy_card | Copy an existing card. |
| execute_card | Run a saved card and return its results. |
| execute_card_query_with_format | Run a card's query and return results in a specified export format. |
| execute_pivot_card_query | Run a card's query as a pivot table. |
| get_card_query_metadata | Get query metadata for a card. |
| move_cards | Move multiple cards. |
| move_cards_to_collection | Move cards into a collection. |
| get_card_dashboards | List the dashboards a card appears on. |
| get_card_series | Get the series compatible with a card for combination charts. |
| get_card_param_values | Get the available values for a card parameter. |
| search_card_param_values | Search the values for a card parameter. |
| get_card_param_remapping | Get the value remapping for a card parameter. |
| create_card_public_link | Create a public sharing link for a card. |
| delete_card_public_link | Delete a card's public sharing link. |
| get_public_cards | List cards with public links enabled. |
| get_embeddable_cards | List cards enabled for embedding. |
| list_databases | List all connected databases. |
| get_database | Get a database's details. |
| create_database | Add a new database connection. |
| update_database | Update a database connection. |
| delete_database | Remove a database connection. |
| get_database_schema_tables | List the tables in a database schema. |
| get_database_schemas | List the schemas in a database. |
| get_database_metadata | Get a database's metadata. |
| sync_database_schema | Trigger a schema sync for a database. |
| execute_query | Run an ad-hoc native SQL query against a database. |
| execute_query_export | Run a query and export the results. |
| get_database_usage_info | Get usage information for a database. |
| rescan_database_field_values | Rescan cached field values for a database. |
| list_tables | List tables. |
| get_table | Get a table's details. |
| update_table | Update a table's metadata. |
| update_tables | Update metadata for multiple tables. |
| get_table_data | Get the data in a table. |
| append_csv_to_table | Append rows from a CSV to a table. |
| replace_table_csv | Replace a table's contents from a CSV. |
| get_table_query_metadata | Get query metadata for a table. |
| get_table_fks | Get a table's foreign keys. |
| get_table_related | Get entities related to a table. |
| sync_table_schema | Trigger a schema sync for a table. |
| reorder_table_fields | Reorder the fields of a table. |
| rescan_table_field_values | Rescan cached field values for a table. |
| discard_table_field_values | Discard cached field values for a table. |
| get_card_table_fks | Get the foreign keys for a card's underlying table. |
| get_card_table_query_metadata | Get query metadata for a card's underlying table. |
| list_collections | List collections. |
| create_collection | Create a collection to organize content. |
| update_collection | Update a collection. |
| delete_collection | Delete a collection. |
| get_collection_items | List the items in a collection. |
| search_content | Search across dashboards, cards, and other content. |
| get_recent_views | Get the user's recently viewed items. |
| get_popular_items | Get the most popular items in the instance. |
| get_metabase_playground_link | Get a link to open content in the Metabase query playground. |
Required configuration
- METABASE_URLRequired
Base URL of your Metabase instance.
- METABASE_API_KEYOptional
Metabase API key (preferred authentication).
- METABASE_USERNAMEOptional
Username for session-based authentication (used with METABASE_PASSWORD).
- METABASE_PASSWORDOptional
Password for session-based authentication (used with METABASE_USERNAME).
What you can do with it
Answer questions from your dashboards
The agent searches your saved questions and dashboards, executes the relevant cards, and explains the numbers without anyone opening Metabase.
Prototype charts and run ad-hoc SQL
Using execute_query and create_card, the agent writes a native query, validates it, and saves it as a new card or pins it to a dashboard.
FAQ
- Is it free?
- Yes. This Metabase MCP server is open source under the MIT license and free to run; you only need a Metabase instance (which itself has a free open-source edition) for it to connect to.
- Does it support remote/OAuth?
- It runs as a local stdio server launched with npx and authenticates with a Metabase API key (or username and password) against your instance. There is no hosted OAuth endpoint; it acts on the API token's permissions.
- There are 80+ tools — is that too many for an agent?
- Use the mode flags to scope the surface: --essential (the default) loads a curated core set, --read exposes only read-only tools, --write exposes modification tools, and --all loads everything.