The read path is complete enough to start from nothing: find the database, list its tables, read a table's fields, then run the SQL. The write path stops where a reviewer would want it to — create_card and create_collection add new work, and nothing in the list edits or deletes an existing card, so a wrong query becomes an extra card rather than a silent change to someone's dashboard. execute_query takes native SQL against a database_id, so the guardrail is whatever the Metabase credentials in use are permitted to do.
A server over the Metabase API covering schema discovery, native SQL execution, saved questions and collections.
- Schema discovery from the top down: list_databases returns what the instance has configured, list_tables returns one database's tables, and get_table_fields returns a table's columns.
- Native SQL: execute_query runs a query against a named database_id and takes native_parameters alongside it.
- Saved questions as callable units: list_cards enumerates them, execute_card runs one with parameters and returns its results, and create_card saves a new query with a name, description, collection and visualization_settings.
- Collections: list_collections reads what exists and create_collection adds one, with a parent_id and a colour.
A running Metabase instance and the settings to reach it — METABASE_URL, METABASE_API_KEY, METABASE_API_KEY.
One command plus a key — uvx metabase-mcp, then supply credentials
