Metabase MCP tool catalog
@serdnaley/metabase-mcp 0.4.0: 178 tools (79 read, 99 write) in 33 toolsets. Headless: API key auth, stdio or HTTP, every Metabase tier. GitHub · npm · tools.json
searchreadSearch
Search across all Metabase entities (cards, dashboards, collections, tables, etc.)
| Parameter | Type | Description |
|---|---|---|
q required | string | Search query string |
models | array | Filter by entity types |
collection | string | Filter by collection ID |
archived | boolean | Include archived items (default: false) |
list_databasesreadDatabases
List all databases the user has access to
No parameters.
get_databasereadDatabases
Get database details by ID
| Parameter | Type | Description |
|---|---|---|
id required | number | Database ID |
get_database_metadatareadDatabases
Get full database metadata: tables, fields, types, relationships
| Parameter | Type | Description |
|---|---|---|
id required | number | Database ID |
list_database_schemasreadDatabases
List schemas in a database
| Parameter | Type | Description |
|---|---|---|
id required | number | Database ID |
get_database_schemareadDatabases
Get tables within a specific database schema
| Parameter | Type | Description |
|---|---|---|
id required | number | Database ID |
schema required | string | Schema name as returned by list_database_schemas ("" for schema-less databases such as SQLite) |
create_databasewriteDatabases
Add a new database connection to Metabase
| Parameter | Type | Description |
|---|---|---|
name required | string | Database display name |
engine required | string | Database engine (postgres, mysql, h2, bigquery, snowflake, etc.) |
details required | object | Connection details (host, port, dbname, user, password, ssl, etc.) |
update_databasewritedestructiveidempotentDatabases
Update an existing database connection configuration
| Parameter | Type | Description |
|---|---|---|
id required | number | Database ID |
name | string | New display name |
engine | string | Database engine |
details | object | Connection details to update |
is_full_sync | boolean | Whether to run a full sync on schedule |
auto_run_queries | boolean | Whether to automatically run queries when opening the database |
delete_databasewritedestructiveidempotentDatabases
Delete a database connection from Metabase
| Parameter | Type | Description |
|---|---|---|
id required | number | Database ID |
validate_databasewriteidempotentDatabases
Test database connection parameters before saving to verify credentials and connectivity
| Parameter | Type | Description |
|---|---|---|
engine required | string | Database engine (postgres, mysql, h2, bigquery, snowflake, etc.) |
details required | object | Connection details to validate (host, port, dbname, user, password, etc.) |
sync_database_schemawriteidempotentDatabases
Trigger a schema resync on a database (use after DDL changes to pick up new or modified tables)
| Parameter | Type | Description |
|---|---|---|
id required | number | Database ID |
get_tablereadTables & Fields
Get table details and field info
| Parameter | Type | Description |
|---|---|---|
id required | number | Table ID |
get_table_query_metadatareadTables & Fields
Get full query metadata for a table (fields, FKs, metrics)
| Parameter | Type | Description |
|---|---|---|
id required | number | Table ID |
get_fieldreadTables & Fields
Get field details including type, special type, fingerprint
| Parameter | Type | Description |
|---|---|---|
id required | number | Field ID |
get_field_valuesreadTables & Fields
Get sample values for a field
| Parameter | Type | Description |
|---|---|---|
id required | number | Field ID |
update_tablewritedestructiveidempotentTables & Fields
Update table display name, description, visibility type, or entity type
| Parameter | Type | Description |
|---|---|---|
id required | number | Table ID |
display_name | string | Display name |
description | string | Description |
visibility_type | string | Visibility type (e.g. hidden, technical, cruft) |
entity_type | string | Entity type (e.g. entity/GenericTable, entity/EventTable) |
update_fieldwritedestructiveidempotentTables & Fields
Update field display name, description, semantic type, visibility, or FK target
| Parameter | Type | Description |
|---|---|---|
id required | number | Field ID |
display_name | string | Display name |
description | string | Description |
semantic_type | string | Semantic type (e.g. type/Name, type/Category) |
visibility_type | string | Visibility type (e.g. normal, details-only, hidden, sensitive) |
has_field_values | string | How field values are retrieved (e.g. list, search, none) |
fk_target_field_id | number | Target field ID for foreign key relationships |
coercion_strategy | string | Coercion strategy for type casting (e.g. 'ISO8601->DateTime', 'UNIXSeconds->DateTime') |
rescan_field_valueswriteidempotentTables & Fields
Trigger a re-scan of field values used to populate filter dropdowns
| Parameter | Type | Description |
|---|---|---|
id required | number | Field ID |
discard_field_valueswritedestructiveidempotentTables & Fields
Clear cached field values for a field
| Parameter | Type | Description |
|---|---|---|
id required | number | Field ID |
reorder_fieldswritedestructiveidempotentTables & Fields
Set a custom field ordering for a table by providing an ordered list of field IDs
| Parameter | Type | Description |
|---|---|---|
id required | number | Table ID |
field_order required | array | Ordered list of field IDs |
get_collection_treereadCollections
Get the full collection hierarchy as a tree
No parameters.
list_collectionsreadCollections
List all collections
| Parameter | Type | Description |
|---|---|---|
personal_only | boolean | Only return personal collections (default: false) |
get_collectionreadCollections
Get collection details
| Parameter | Type | Description |
|---|---|---|
id required | number | Collection ID |
list_collection_itemsreadCollections
List items in a collection (cards, dashboards, sub-collections)
| Parameter | Type | Description |
|---|---|---|
id required | number | Collection ID |
models | array | Filter by item types |
sort_column | string (name | last_edited_at | last_edited_by | model) | Column to sort by |
sort_direction | string (asc | desc) | Sort direction |
archived | boolean | Include archived items (default: false) |
create_collectionwriteCollections
Create a new collection
| Parameter | Type | Description |
|---|---|---|
name required | string | Collection name |
description | string | Collection description |
parent_id | number | Parent collection ID |
update_collectionwritedestructiveidempotentCollections
Update collection properties
| Parameter | Type | Description |
|---|---|---|
id required | number | Collection ID |
name | string | New name |
description | string | New description |
parent_id | number | New parent collection ID |
archived | boolean | Archive the collection |
list_cardsreadCards
List all saved questions
No parameters.
get_cardreadCards
Get card details (query definition, visualization settings)
| Parameter | Type | Description |
|---|---|---|
id required | number | Card ID |
execute_card_queryreadCards
Run a saved question and return results as compact columns + rows (paged with max_rows/offset). For parameterized cards, pass template tag values as key-value pairs (e.g. { fromDate: '2024-01-01', toDate: '2024-12-31' }). For date ranges in native queries, use two separate date/single parameters.
| Parameter | Type | Description |
|---|---|---|
card_id required | number | Card ID |
parameter_values | object | Template tag parameter values as { paramName: value } pairs. For date: '2024-01-01'. For date/month-year: '2024-01'. For number: 100. For text: 'value'. For date ranges, use two separate date parameters (fromDate + toDate). |
max_rows | integer | Max rows to return (capped by METABASE_MAX_ROWS, default 500) |
offset | integer | Skip this many result rows first, for paging through a large result |
verbose | boolean | Return the raw Metabase response (column internals, results_metadata, insights) instead of the compact columns + rows view |
create_cardwriteCards
Create a new question (native SQL or structured query)
| Parameter | Type | Description |
|---|---|---|
name required | string | Question name |
dataset_query required | object | Query definition. For native SQL: { type: "native", native: { query: "SELECT ..." }, database: 1 }. For structured: { type: "query", query: { "source-table": 1 }, database: 1 } |
display required | string | Visualization type: "table", "bar", "line", "pie", "scalar", "row", "area", "combo", "pivot", "smartscalar", "gauge", "progress", "funnel", "map", "scatter", "waterfall". Important: set visualization_settings alongside this to configure chart dimensions/metrics. |
description | string | Question description |
collection_id | number | Collection to save in |
visualization_settings | object | Visualization settings — must be configured for charts to render correctly. For pie: { "pie.dimension": "COLUMN", "pie.metric": "COLUMN" }. For bar/line/area: { "graph.dimensions": ["COLUMN"], "graph.metrics": ["COLUMN"] }. For scatter: { "graph.dimensions": ["X_COL"], "graph.metrics": ["Y_COL"] }. For funnel: { "funnel.dimension": "COLUMN", "funnel.metric": "COLUMN" }. For table: { "table.pivot_column": "COL", "table.cell_column": "COL" }. Column names must match SQL aliases or structured query field names. |
type | string (question | model | metric) | Card type: "question" (default), "model" (curated dataset), or "metric" (published metric definition) |
update_cardwritedestructiveidempotentCards
Update question query, display, name, or other properties
| Parameter | Type | Description |
|---|---|---|
id required | number | Card ID |
name | string | New name |
dataset_query | object | New query definition |
display | string | New visualization type |
description | string | New description |
collection_id | number | Move to collection |
visualization_settings | object | Visualization settings — must be configured for charts to render correctly. For pie: { "pie.dimension": "COLUMN", "pie.metric": "COLUMN" }. For bar/line/area: { "graph.dimensions": ["COLUMN"], "graph.metrics": ["COLUMN"] }. For scatter: { "graph.dimensions": ["X_COL"], "graph.metrics": ["Y_COL"] }. For funnel: { "funnel.dimension": "COLUMN", "funnel.metric": "COLUMN" }. Column names must match SQL aliases or structured query field names. |
archived | boolean | Archive the card |
type | string (question | model | metric) | Change card type: "question", "model", or "metric" |
result_metadata | array | Column metadata array for models. Each entry: { name, display_name, description, semantic_type, base_type, ... }. Use to set per-column display names, descriptions, and semantic types on model columns. |
enable_embedding | boolean | Enable static embedding for this card (Pro/Enterprise) |
delete_cardwritedestructiveidempotentCards
Delete a card (question)
| Parameter | Type | Description |
|---|---|---|
id required | number | Card ID |
copy_cardwriteCards
Copy a card to a collection
| Parameter | Type | Description |
|---|---|---|
id required | number | Card ID to copy |
collection_id | number | Target collection ID |
create_card_public_linkwriteCards
Generate a public sharing link for a card. Returns the card with a public_uuid field. The public URL is {metabase_url}/public/question/{uuid}. Public sharing must be enabled in Metabase admin settings.
| Parameter | Type | Description |
|---|---|---|
card_id required | number | Card ID |
delete_card_public_linkwritedestructiveidempotentCards
Remove the public sharing link from a card
| Parameter | Type | Description |
|---|---|---|
card_id required | number | Card ID |
list_dashboardsreadDashboards
List all dashboards
No parameters.
get_dashboardreadDashboards
Get dashboard with all cards and layout
| Parameter | Type | Description |
|---|---|---|
id required | number | Dashboard ID |
create_dashboardwriteDashboards
Create a new dashboard
| Parameter | Type | Description |
|---|---|---|
name required | string | Dashboard name |
description | string | Dashboard description |
collection_id | number | Collection to save in |
parameters | array | Dashboard filter parameters |
update_dashboardwritedestructiveidempotentDashboards
Update dashboard properties (name, description, filters)
| Parameter | Type | Description |
|---|---|---|
id required | number | Dashboard ID |
name | string | New name |
description | string | New description |
collection_id | number | Move to collection |
archived | boolean | Archive the dashboard |
parameters | array | Updated filter parameters |
enable_embedding | boolean | Enable static embedding for this dashboard (Pro/Enterprise) |
delete_dashboardwritedestructiveidempotentDashboards
Delete a dashboard
| Parameter | Type | Description |
|---|---|---|
id required | number | Dashboard ID |
copy_dashboardwriteDashboards
Copy a dashboard to a collection
| Parameter | Type | Description |
|---|---|---|
from_dashboard_id required | number | Dashboard ID to copy |
name | string | Name for the copy |
description | string | Description for the copy |
collection_id | number | Target collection ID |
is_deep_copy | boolean | Deep copy cards too (default: false) |
update_dashboard_cardswritedestructiveidempotentDashboards
Add, remove, or reposition cards on a dashboard
| Parameter | Type | Description |
|---|---|---|
id required | number | Dashboard ID |
cards required | array | Array of card positions and settings |
create_dashboard_public_linkwriteDashboards
Generate a public sharing link for a dashboard. Returns the dashboard with a public_uuid field. The public URL is {metabase_url}/public/dashboard/{uuid}. Public sharing must be enabled in Metabase admin settings.
| Parameter | Type | Description |
|---|---|---|
dashboard_id required | number | Dashboard ID |
delete_dashboard_public_linkwritedestructiveidempotentDashboards
Remove the public sharing link from a dashboard
| Parameter | Type | Description |
|---|---|---|
dashboard_id required | number | Dashboard ID |
list_actionsreadActions
List all actions
| Parameter | Type | Description |
|---|---|---|
model_id | number | Filter by model ID |
get_actionreadActions
Get action details
| Parameter | Type | Description |
|---|---|---|
action_id required | number | Action ID |
create_actionwriteActions
Create a new action (query or implicit only — HTTP actions are not supported)
| Parameter | Type | Description |
|---|---|---|
name required | string | Action name |
type required | string (query | implicit) | Action type (query or implicit) |
model_id required | number | Model card ID this action belongs to |
database_id | number | Database ID (required for query actions) |
dataset_query | object | Query definition for query-type actions |
description | string | Action description |
update_actionwritedestructiveidempotentActions
Update an action (cannot change type to http)
| Parameter | Type | Description |
|---|---|---|
id required | number | Action ID |
name | string | New action name |
description | string | New description |
dataset_query | object | New query definition |
database_id | number | New database ID |
delete_actionwritedestructiveidempotentActions
Delete an action
| Parameter | Type | Description |
|---|---|---|
action_id required | number | Action ID |
execute_actionwritedestructiveActions
Run an action with optional parameters
| Parameter | Type | Description |
|---|---|---|
id required | number | Action ID |
parameters | object | Action parameters as key-value pairs |
create_action_public_linkwriteActions
Generate a public link for an action form
| Parameter | Type | Description |
|---|---|---|
action_id required | number | Action ID |
delete_action_public_linkwritedestructiveidempotentActions
Remove the public link from an action
| Parameter | Type | Description |
|---|---|---|
action_id required | number | Action ID |
execute_queryreadDataset (ad-hoc queries)
Run an ad-hoc query (native SQL or structured) and return results as compact columns + rows (paged with max_rows/offset). WARNING: the SQL is sent as-is; this server does not block INSERT/UPDATE/DELETE/DDL. Whether it can change data depends only on the Metabase API key's permissions and the database user's grants.
| Parameter | Type | Description |
|---|---|---|
database required | number | Database ID to query |
type required | string (native | query) | Query type: native SQL or structured |
native | object | Required when type is "native" |
query | object | Required when type is "query". Structured query definition |
max_rows | integer | Max rows to return (capped by METABASE_MAX_ROWS, default 500) |
offset | integer | Skip this many result rows first, for paging through a large result |
verbose | boolean | Return the raw Metabase response (column internals, results_metadata, insights) instead of the compact columns + rows view |
list_usersreadUsers & Groups
List all Metabase users. Supports optional search query to filter by name or email.
| Parameter | Type | Description |
|---|---|---|
query | string | Search query to filter users by first name, last name, or email |
get_userreadUsers & Groups
Get a Metabase user by ID
| Parameter | Type | Description |
|---|---|---|
id required | number | User ID |
get_current_userreadUsers & Groups
Get the currently authenticated Metabase user
No parameters.
list_groupsreadUsers & Groups
List all Metabase permission groups
No parameters.
get_groupreadUsers & Groups
Get a permission group with its members (each member carries the membership_id that remove_group_member needs)
| Parameter | Type | Description |
|---|---|---|
id required | number | Group ID |
create_userwriteUsers & Groups
Create a new Metabase user
| Parameter | Type | Description |
|---|---|---|
email required | string | User email address |
first_name | string | User first name |
last_name | string | User last name |
password | string | User password (optional, user will receive a setup email if omitted) |
group_ids | array | Array of permission group IDs to add the user to |
update_userwritedestructiveidempotentUsers & Groups
Update an existing Metabase user. Only provided fields will be updated.
| Parameter | Type | Description |
|---|---|---|
id required | number | User ID |
first_name | string | New first name |
last_name | string | New last name |
email | string | New email address |
locale | string | User locale (e.g. 'en', 'fr') |
deactivate_userwritedestructiveidempotentUsers & Groups
Deactivate a Metabase user (soft-delete). The user record is retained but access is disabled.
| Parameter | Type | Description |
|---|---|---|
id required | number | User ID to deactivate |
reactivate_userwritedestructiveidempotentUsers & Groups
Reactivate a previously deactivated Metabase user
| Parameter | Type | Description |
|---|---|---|
id required | number | User ID to reactivate |
create_groupwriteUsers & Groups
Create a new Metabase permission group
| Parameter | Type | Description |
|---|---|---|
name required | string | Group name |
update_groupwritedestructiveidempotentUsers & Groups
Update the name of a Metabase permission group
| Parameter | Type | Description |
|---|---|---|
id required | number | Group ID |
name required | string | New group name |
delete_groupwritedestructiveidempotentUsers & Groups
Delete a Metabase permission group
| Parameter | Type | Description |
|---|---|---|
id required | number | Group ID to delete |
add_group_memberwriteUsers & Groups
Add a user to a Metabase permission group
| Parameter | Type | Description |
|---|---|---|
group_id required | number | Permission group ID |
user_id required | number | User ID to add to the group |
remove_group_memberwritedestructiveidempotentUsers & Groups
Remove a user from a Metabase permission group by membership ID
| Parameter | Type | Description |
|---|---|---|
membership_id required | number | Membership ID to remove (from get_group members[].membership_id, or the add_group_member response) |
get_permissions_graphreadPermissions
Get the full data permissions graph (view-data and create-queries permissions per group per database)
No parameters.
get_collection_permissionsreadPermissions
Get the collection permissions graph (which groups can access which collections)
No parameters.
update_permissions_graphwritedestructiveidempotentPermissions
Update the data permissions graph. Must include the 'revision' field from get_permissions_graph for optimistic locking.
| Parameter | Type | Description |
|---|---|---|
graph required | object | Full permissions graph object with 'revision' and 'groups' keys |
update_collection_permissionswritedestructiveidempotentPermissions
Update the collection permissions graph. Must include the 'revision' field from get_collection_permissions for optimistic locking.
| Parameter | Type | Description |
|---|---|---|
graph required | object | Full collection permissions graph object with 'revision' and 'groups' keys |
list_segmentsreadSegments
List all segments
| Parameter | Type | Description |
|---|---|---|
table_id | number | Filter segments by table ID |
get_segmentreadSegments
Get segment by ID
| Parameter | Type | Description |
|---|---|---|
id required | number | Segment ID |
create_segmentwriteSegments
Create a new segment
| Parameter | Type | Description |
|---|---|---|
name required | string | Segment name |
table_id required | number | ID of the table this segment applies to |
definition required | object | MBQL filter clause defining the segment, e.g. { "filter": [">", ["field", 4, null], 100] } |
description | string | Optional segment description |
update_segmentwritedestructiveidempotentSegments
Update an existing segment
| Parameter | Type | Description |
|---|---|---|
id required | number | Segment ID |
revision_message required | string | Required audit trail message describing the reason for this update |
name | string | New segment name |
definition | object | Updated MBQL filter clause |
description | string | Updated description |
archived | boolean | Set to true to archive the segment |
delete_segmentwritedestructiveidempotentSegments
Delete (archive) a segment
| Parameter | Type | Description |
|---|---|---|
id required | number | Segment ID |
revision_message required | string | Required audit trail message describing the reason for deletion |
list_revisionsreadRevisions
List revision history for a card or dashboard
| Parameter | Type | Description |
|---|---|---|
entity required | string (card | dashboard) | Entity type |
id required | number | Card or dashboard ID |
revert_revisionwritedestructiveRevisions
Revert a card or dashboard to a prior revision
| Parameter | Type | Description |
|---|---|---|
entity required | string (card | dashboard) | Entity type |
id required | number | Card or dashboard ID |
revision_id required | number | Revision ID to revert to |
list_settingsreadSettings
List all Metabase instance settings
No parameters.
get_settingreadSettings
Get a specific Metabase setting value
| Parameter | Type | Description |
|---|---|---|
key required | string | Setting key (e.g., 'site-name', 'enable-public-sharing') |
update_settingwritedestructiveidempotentSettings
Update a Metabase setting value
| Parameter | Type | Description |
|---|---|---|
key required | string | Setting key |
value required | object | New setting value |
list_alertsreadAlerts & Subscriptions
List question alerts (card notifications). Optionally filter by card.
| Parameter | Type | Description |
|---|---|---|
card_id | number | Only alerts on this card |
include_inactive | boolean | Include deactivated (deleted) alerts |
get_alertreadAlerts & Subscriptions
Get details of a specific alert (notification ID)
| Parameter | Type | Description |
|---|---|---|
id required | number | Alert (notification) ID |
list_dashboard_subscriptionsreadAlerts & Subscriptions
List email/Slack subscriptions for a dashboard
| Parameter | Type | Description |
|---|---|---|
dashboard_id required | number | Dashboard ID |
list_notificationsreadAlerts & Subscriptions
List notifications of any kind (question alerts, system-event notifications). Alerts are payload_type 'notification/card'. Use list_alerts for alerts only.
| Parameter | Type | Description |
|---|---|---|
payload_type | string | e.g. 'notification/card' (alerts) or 'notification/system-event' |
card_id | number | Only notifications on this card |
creator_id | number | Only notifications created by this user |
recipient_id | number | Only notifications this user receives |
include_inactive | boolean | Include deactivated notifications |
send_notificationwriteAlerts & Subscriptions
Send a notification (e.g. an alert) right now, outside its schedule. Delivers real emails/Slack messages. Metabase 0.64+ allows this only for its creator or an admin.
| Parameter | Type | Description |
|---|---|---|
id required | number | Notification (alert) ID |
handler_ids | array | Only send via these handler (channel) IDs; default all |
create_alertwriteAlerts & Subscriptions
Create an alert on a saved question. Metabase checks the question on the cron schedule and notifies the channels when the condition is met.
| Parameter | Type | Description |
|---|---|---|
card_id required | number | Card ID to alert on |
send_condition | string (has_result | goal_above | goal_below) | Alert condition (default 'has_result') |
send_once | boolean | Stop after the first notification (default false) |
channels required | array | Where to deliver the alert, e.g. [{ type: 'email', user_ids: [1] }] or [{ type: 'slack', channel: '#alerts' }] |
cron_schedule | string | Quartz cron schedule for checking the alert, e.g. '0 0 9 * * ? *' (daily 09:00, the default) or '0 0 * * * ? *' (hourly) |
update_alertwritedestructiveidempotentAlerts & Subscriptions
Update an existing alert. Only the fields you provide will be changed.
| Parameter | Type | Description |
|---|---|---|
id required | number | Alert (notification) ID |
send_condition | string (has_result | goal_above | goal_below) | 'has_result' = the question returns any rows; 'goal_above'/'goal_below' = the goal line is crossed |
send_once | boolean | Stop after the first notification |
channels | array | Replaces all delivery channels |
cron_schedule | string | Quartz cron schedule for checking the alert, e.g. '0 0 9 * * ? *' (daily 09:00, the default) or '0 0 * * * ? *' (hourly) |
active | boolean | Re-activate (true) or deactivate (false) the alert |
delete_alertwritedestructiveidempotentAlerts & Subscriptions
Delete an alert (Metabase deactivates it; it can be restored with update_alert active=true)
| Parameter | Type | Description |
|---|---|---|
id required | number | Alert (notification) ID |
create_dashboard_subscriptionwriteAlerts & Subscriptions
Create an email or Slack subscription for a dashboard. Subscriptions deliver a snapshot of the dashboard on a schedule. By default includes every question on the dashboard.
| Parameter | Type | Description |
|---|---|---|
dashboard_id required | number | Dashboard ID |
name | string | Subscription name (default: dashboard name) |
channels required | array | Delivery channels. Email: [{ channel_type: 'email', enabled: true, recipients: [{ id: userId }, { email: 'a@b.c' }], schedule_type: 'weekly', schedule_day: 'mon', schedule_hour: 8 }]. Slack: [{ channel_type: 'slack', enabled: true, details: { channel: '#reports' }, schedule_type: 'daily', schedule_hour: 9 }] |
parameters | array | Dashboard filter values to apply in the subscription |
cards | array | Cards to include: [{ id: cardId, dashboard_card_id, include_csv, include_xls }]. Default: all dashboard questions |
update_dashboard_subscriptionwritedestructiveidempotentAlerts & Subscriptions
Update a dashboard subscription (name, schedule, channels, parameters, cards)
| Parameter | Type | Description |
|---|---|---|
id required | number | Subscription ID |
name | string | Updated name |
channels | array | Updated delivery channels |
parameters | array | Updated dashboard filter values |
cards | array | Updated cards list |
delete_dashboard_subscriptionwritedestructiveidempotentAlerts & Subscriptions
Delete a dashboard subscription (Metabase archives it)
| Parameter | Type | Description |
|---|---|---|
id required | number | Subscription ID |
generate_xrayreadX-Rays
Generate an automatic X-ray exploratory dashboard for a table
| Parameter | Type | Description |
|---|---|---|
table_id required | number | Table ID to generate X-ray for |
invalidate_cachewritedestructiveidempotentCache
Invalidate cached query results
| Parameter | Type | Description |
|---|---|---|
database | number | Database ID to invalidate |
dashboard | number | Dashboard ID to invalidate |
card | number | Card ID to invalidate |
update_cache_configwritedestructiveidempotentCache
Update cache strategy for a model (database, dashboard, or card)
| Parameter | Type | Description |
|---|---|---|
model required | string | Cache target type: 'root', 'database', 'dashboard', or 'question' |
model_id required | number | ID of the target (0 for root) |
strategy required | object | Cache strategy, e.g. { type: 'duration', duration: 3600, unit: 'seconds' } or { type: 'schedule', schedule: 'cron expression' } |
persist_modelwriteidempotentModel Persistence
Enable persistence (materialization) for a model card
| Parameter | Type | Description |
|---|---|---|
card_id required | number | Model card ID to enable persistence for |
unpersist_modelwritedestructiveidempotentModel Persistence
Disable persistence (materialization) for a model card
| Parameter | Type | Description |
|---|---|---|
card_id required | number | Model card ID to disable persistence for |
refresh_persisted_modelwriteidempotentModel Persistence
Manually trigger a refresh of the materialized data for a persisted model
| Parameter | Type | Description |
|---|---|---|
card_id required | number | Model card ID to refresh persisted data for |
upload_csvwriteUploads
Upload a CSV file as a new table in Metabase
| Parameter | Type | Description |
|---|---|---|
csv_data required | string | Raw CSV content to upload |
table_name required | string | Name for the new table |
collection_id | number | Collection ID to place the resulting model in |
get_activityreadActivity & Tasks
Get recent activity: the current user's recently viewed items plus the instance's popular items (prefer get_recent_items / get_popular_items)
No parameters.
get_recent_itemsreadActivity & Tasks
Get the current user's recently viewed and/or selected items (dashboards, questions, tables, collections, documents)
| Parameter | Type | Description |
|---|---|---|
context | array | Which recents to return (default ['views']) |
get_popular_itemsreadActivity & Tasks
Get the most popular dashboards, questions and tables across the instance
No parameters.
list_snippetsreadSnippets
List all SQL snippets
No parameters.
get_snippetreadSnippets
Get a SQL snippet by ID
| Parameter | Type | Description |
|---|---|---|
id required | number | Snippet ID |
create_snippetwriteSnippets
Create a reusable SQL snippet
| Parameter | Type | Description |
|---|---|---|
name required | string | Snippet name |
content required | string | SQL content |
description | string | Description |
collection_id | number | Snippet collection ID |
update_snippetwritedestructiveidempotentSnippets
Update a SQL snippet
| Parameter | Type | Description |
|---|---|---|
id required | number | Snippet ID |
name | string | New name |
content | string | New SQL content |
description | string | New description |
archived | boolean | Archive the snippet |
delete_snippetwritedestructiveidempotentSnippets
Archive (soft-delete) a SQL snippet
| Parameter | Type | Description |
|---|---|---|
id required | number | Snippet ID |
list_glossary_termsreadGlossary
List all business glossary terms
No parameters.
get_glossary_termreadGlossary
Get a glossary term by ID
| Parameter | Type | Description |
|---|---|---|
id required | number | Glossary term ID |
create_glossary_termwriteGlossary
Create a business glossary term
| Parameter | Type | Description |
|---|---|---|
term required | string | The term to define |
definition required | string | Definition of the term |
update_glossary_termwritedestructiveidempotentGlossary
Update a glossary term
| Parameter | Type | Description |
|---|---|---|
id required | number | Glossary term ID |
term | string | Updated term |
definition | string | Updated definition |
delete_glossary_termwritedestructiveidempotentGlossary
Delete a glossary term
| Parameter | Type | Description |
|---|---|---|
id required | number | Glossary term ID |
list_documentsreadDocuments
List all narrative analytics documents
No parameters.
get_documentreadDocuments
Get a document by ID
| Parameter | Type | Description |
|---|---|---|
id required | number | Document ID |
create_documentwriteDocuments
Create a narrative analytics document
| Parameter | Type | Description |
|---|---|---|
name required | string | Document name |
collection_id | number | Collection ID to place the document in |
document | object | Document body as a ProseMirror JSON doc, e.g. {"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Hello"}]}]} |
text | string | Plain-text shortcut for the body: paragraphs separated by blank lines (ignored if document is given) |
content | object | Deprecated alias for document |
update_documentwritedestructiveidempotentDocuments
Update a document
| Parameter | Type | Description |
|---|---|---|
id required | number | Document ID |
name | string | Updated document name |
collection_id | number | Updated collection ID |
document | object | Document body as a ProseMirror JSON doc, e.g. {"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Hello"}]}]} |
text | string | Plain-text shortcut for the body: paragraphs separated by blank lines (ignored if document is given) |
content | object | Deprecated alias for document |
archived | boolean | Archive the document |
delete_documentwritedestructiveidempotentDocuments
Permanently delete a document (archives it first, as Metabase requires)
| Parameter | Type | Description |
|---|---|---|
id required | number | Document ID |
list_timelinesreadTimelines
List all timelines
| Parameter | Type | Description |
|---|---|---|
collection_id | number | Filter timelines by collection ID |
get_timelinereadTimelines
Get a timeline by ID
| Parameter | Type | Description |
|---|---|---|
id required | number | Timeline ID |
create_timelinewriteTimelines
Create a timeline for annotating charts
| Parameter | Type | Description |
|---|---|---|
name required | string | Timeline name |
collection_id | number | Collection ID to place the timeline in |
icon | string | Icon name (default: star) |
default | boolean | Whether this is the default timeline |
update_timelinewritedestructiveidempotentTimelines
Update a timeline
| Parameter | Type | Description |
|---|---|---|
id required | number | Timeline ID |
name | string | Updated timeline name |
icon | string | Updated icon name |
default | boolean | Whether this is the default timeline |
archived | boolean | Archive the timeline |
delete_timelinewritedestructiveidempotentTimelines
Delete a timeline
| Parameter | Type | Description |
|---|---|---|
id required | number | Timeline ID |
create_timeline_eventwriteTimelines
Create an event on a timeline
| Parameter | Type | Description |
|---|---|---|
timeline_id required | number | ID of the timeline to add the event to |
name required | string | Event name |
timestamp required | string | Event timestamp (ISO 8601 format) |
description | string | Event description |
icon | string | Icon name (default: star) |
timezone | string | Timezone for the event (default: UTC) |
update_timeline_eventwritedestructiveidempotentTimelines
Update a timeline event
| Parameter | Type | Description |
|---|---|---|
id required | number | Timeline event ID |
name | string | Updated event name |
timestamp | string | Updated event timestamp (ISO 8601 format) |
description | string | Updated event description |
icon | string | Updated icon name |
archived | boolean | Archive the event |
delete_timeline_eventwritedestructiveidempotentTimelines
Delete a timeline event
| Parameter | Type | Description |
|---|---|---|
id required | number | Timeline event ID |
list_bookmarksreadBookmarks
List all bookmarks for the current user
No parameters.
create_bookmarkwriteBookmarks
Bookmark a card, dashboard, or collection
| Parameter | Type | Description |
|---|---|---|
type required | string (card | dashboard | collection) | Type of item to bookmark |
item_id required | number | ID of the item to bookmark |
delete_bookmarkwritedestructiveidempotentBookmarks
Remove a bookmark from a card, dashboard, or collection
| Parameter | Type | Description |
|---|---|---|
type required | string (card | dashboard | collection) | Type of bookmarked item |
item_id required | number | ID of the bookmarked item |
create_moderation_reviewwriteModeration
Mark a card or dashboard as verified or remove verification (Pro/Enterprise)
| Parameter | Type | Description |
|---|---|---|
moderated_item_id required | number | Card or dashboard ID |
moderated_item_type required | string (card | dashboard) | Item type |
status required | union | Set to 'verified' to verify, or null to remove verification |
translate_entity_idsreadEID Translation
Translate serialization entity IDs to API integer IDs
| Parameter | Type | Description |
|---|---|---|
entity_ids required | object | Map of entity type to array of entity IDs. Example: { "card": ["abc123", "def456"], "dashboard": ["ghi789"] } |
list_metricsreadMetrics
List metrics: the curated, governed numbers defined in Metabase (e.g. Revenue, Number of Orders)
No parameters.
get_metricreadMetrics
Get a metric's definition (Metabase 0.64+ also returns its dimensions)
| Parameter | Type | Description |
|---|---|---|
id required | number | Metric (card) ID |
run_metricreadMetrics
Compute a metric (or measure) with optional filters and breakouts, without writing a query. Get dimension IDs from list_metric_dimensions. For metric math pass a raw definition, e.g. { expression: ['/', {}, ['metric', {'lib/uuid': 'a'}, 1], ['metric', {'lib/uuid': 'b'}, 2]] }. Metabase 0.60+.
| Parameter | Type | Description |
|---|---|---|
metric_id | number | Metric ID to compute |
measure_id | number | Measure ID to compute (instead of a metric) |
filters | array | Filters on the metric's dimensions (combined with AND) |
breakouts | array | Group the result by these dimensions |
definition | object | Raw /api/metric/dataset definition (expression, filters, projections); overrides the other inputs |
max_rows | integer | Max rows to return (capped by METABASE_MAX_ROWS, default 500) |
offset | integer | Skip this many result rows first, for paging through a large result |
verbose | boolean | Return the raw Metabase response (column internals, results_metadata, insights) instead of the compact columns + rows view |
list_metric_dimensionsreadMetrics
List the dimensions (columns) a metric can be filtered or broken out by, with their IDs. Metabase 0.64+.
| Parameter | Type | Description |
|---|---|---|
id required | number | Metric ID |
get_metric_dimension_valuesreadMetrics
Get the distinct values of a metric dimension, optionally searching them. Useful before filtering. Metabase 0.64+.
| Parameter | Type | Description |
|---|---|---|
id required | number | Metric ID |
dimension_id required | string | Dimension ID from list_metric_dimensions |
query | string | Search text; omit to list values |
create_metricwriteMetrics
Create a metric: a saved aggregation others can reuse. dataset_query must aggregate exactly once, e.g. { database: 1, type: 'query', query: { 'source-table': 2, aggregation: [['sum', ['field', 5, null]]] } }
| Parameter | Type | Description |
|---|---|---|
name required | string | Metric name |
dataset_query required | object | Query with a single aggregation (legacy MBQL or MBQL 5) |
description | string | What the metric means |
collection_id | number | Collection to save it in |
update_metricwritedestructiveidempotentMetrics
Update a metric's name, description, definition or collection; archived: true archives it
| Parameter | Type | Description |
|---|---|---|
id required | number | Metric ID |
name | string | New name |
dataset_query | object | New definition (single aggregation) |
description | string | New description |
collection_id | number | Move to collection |
archived | boolean | Archive (true) or restore (false) |
list_measuresreadMeasures
List measures: reusable, table-scoped aggregations (e.g. 'Revenue = sum of Total')
No parameters.
get_measurereadMeasures
Get a measure by ID
| Parameter | Type | Description |
|---|---|---|
id required | number | Measure ID |
create_measurewriteMeasures
Create a measure on a table. Run it with run_metric (measure_id).
| Parameter | Type | Description |
|---|---|---|
name required | string | Measure name |
table_id required | number | Table the measure aggregates |
definition required | object | Aggregation defining the measure, e.g. { aggregation: [['sum', ['field', 5, null]]] }, or a full query ({ database, type: 'query', query: { 'source-table', aggregation } }) |
description | string | What the measure means |
update_measurewritedestructiveidempotentMeasures
Update a measure; archived: true archives it
| Parameter | Type | Description |
|---|---|---|
id required | number | Measure ID |
revision_message required | string | Audit message describing the change |
name | string | New name |
definition | object | Aggregation defining the measure, e.g. { aggregation: [['sum', ['field', 5, null]]] }, or a full query ({ database, type: 'query', query: { 'source-table', aggregation } }) |
description | string | New description |
archived | boolean | Archive (true) or restore (false) |
list_transformsreadTransforms
List transforms. Transforms write a query's result into a warehouse table. Self-hosted Metabase must enable them (MB_TRANSFORMS_ENABLED=true); the sample database can't be a target.
| Parameter | Type | Description |
|---|---|---|
database_id | number | Only transforms on this database |
tag_ids | array | Only transforms with these tags |
get_transformreadTransforms
Get a transform: source query, target table, last run
| Parameter | Type | Description |
|---|---|---|
id required | number | Transform ID |
list_transform_runsreadTransforms
List transform runs (status, start/end time, message), newest first
| Parameter | Type | Description |
|---|---|---|
transform_ids | array | Only runs of these transforms |
statuses | array | e.g. ['started', 'succeeded', 'failed'] |
get_transform_runreadTransforms
Get one transform run
| Parameter | Type | Description |
|---|---|---|
run_id required | number | Run ID |
list_transform_jobsreadTransforms
List transform jobs: cron schedules that run every transform carrying one of the job's tags
No parameters.
list_transform_tagsreadTransforms
List transform tags
No parameters.
create_transformwriteTransforms
Create a transform that materialises a query into a table. Transforms write a query's result into a warehouse table. Self-hosted Metabase must enable them (MB_TRANSFORMS_ENABLED=true); the sample database can't be a target.
| Parameter | Type | Description |
|---|---|---|
name required | string | Transform name |
sql | string | Native SQL whose result becomes the table (needs database_id) |
database_id | number | Database to run sql against (also the target database) |
query | object | A full dataset_query instead of sql |
source | object | Raw transform source, e.g. { type: 'query', query: {...} }; overrides sql/query |
target_table required | string | Name of the table to create/replace |
target_schema | string | Schema for the table (e.g. 'public'); omit for schema-less databases |
description | string | Description |
collection_id | number | Collection to file the transform in |
tag_ids | array | Tags (jobs run transforms by tag) |
update_transformwritedestructiveidempotentTransforms
Update a transform's name, description, source query, target or tags
| Parameter | Type | Description |
|---|---|---|
id required | number | Transform ID |
name | string | New name |
description | string | New description |
sql | string | Native SQL whose result becomes the table (needs database_id) |
database_id | number | Database to run sql against (also the target database) |
query | object | A full dataset_query instead of sql |
source | object | Raw transform source, e.g. { type: 'query', query: {...} }; overrides sql/query |
target_table | string | New target table name |
target_schema | string | New target schema |
tag_ids | array | Replace tags |
delete_transformwritedestructiveidempotentTransforms
Delete a transform. drop_table: true also drops the table it produced.
| Parameter | Type | Description |
|---|---|---|
id required | number | Transform ID |
drop_table | boolean | Also drop the target table (default false) |
run_transformwriteTransforms
Run a transform now. Returns a run_id; poll get_transform_run or list_transform_runs for the result.
| Parameter | Type | Description |
|---|---|---|
id required | number | Transform ID |
cancel_transform_runwritedestructiveTransforms
Cancel the transform's current run
| Parameter | Type | Description |
|---|---|---|
id required | number | Transform ID |
create_transform_jobwriteTransforms
Create a transform job that runs all transforms with the given tags on a schedule
| Parameter | Type | Description |
|---|---|---|
name required | string | Job name |
schedule required | string | Quartz cron, e.g. '0 0 3 * * ? *' (daily 03:00) |
tag_ids | array | Transform tags this job runs |
description | string | Description |
run_transform_jobwriteTransforms
Run a transform job now
| Parameter | Type | Description |
|---|---|---|
job_id required | number | Job ID |
delete_transform_jobwritedestructiveidempotentTransforms
Delete a transform job (the transforms stay)
| Parameter | Type | Description |
|---|---|---|
job_id required | number | Job ID |
create_transform_tagwriteTransforms
Create a transform tag
| Parameter | Type | Description |
|---|---|---|
name required | string | Tag name |
export_card_queryreadExports
Export a saved question's full results as csv, json or xlsx (all rows, unlike execute_card_query's 2000-row cap)
| Parameter | Type | Description |
|---|---|---|
card_id required | number | Card ID |
format required | string (csv | json | xlsx) | File format |
parameter_values | object | Template tag values, as for execute_card_query |
format_rows | boolean | Apply Metabase column formatting (default false: raw values) |
output_path | string | Absolute path on the MCP server's machine to save the file to. Required for xlsx/pdf; for csv/json omit it to get the content inline. |
overwrite | boolean | Replace output_path if it exists (default false) |
max_inline_chars | number | Max characters returned inline for csv/json (default 100000); longer output is truncated |
export_queryreadExports
Export an ad-hoc query's results as csv, json or xlsx. WARNING: the SQL is sent as-is; this server does not block INSERT/UPDATE/DELETE/DDL. Whether it can change data depends only on the Metabase API key's permissions and the database user's grants.
| Parameter | Type | Description |
|---|---|---|
query required | object | dataset_query, e.g. { database: 1, type: 'native', native: { query: 'SELECT ...' } } |
format required | string (csv | json | xlsx) | File format |
format_rows | boolean | Apply Metabase column formatting (default false) |
output_path | string | Absolute path on the MCP server's machine to save the file to. Required for xlsx/pdf; for csv/json omit it to get the content inline. |
overwrite | boolean | Replace output_path if it exists (default false) |
max_inline_chars | number | Max characters returned inline for csv/json (default 100000); longer output is truncated |
export_dashboard_pdfreadExports
Render a dashboard to PDF on the Metabase server and save it to output_path. Metabase 0.64+.
| Parameter | Type | Description |
|---|---|---|
dashboard_id required | number | Dashboard ID |
output_path required | string | Absolute path to save the PDF to |
overwrite | boolean | Replace output_path if it exists (default false) |
paper_size | string (a4 | letter) | Paper size (default a4) |
parameters | array | Dashboard filter values, e.g. [{ id: '<parameter id>', value: ['Widget'] }] |
list_api_keysreadAPI Keys
List Metabase API keys (masked) with the group each one acts as. Admin only.
No parameters.
create_api_keywriteAPI Keys
Create an API key that acts with the permissions of one group. The full key (unmasked_key) is returned only once: store it right away. Admin only.
| Parameter | Type | Description |
|---|---|---|
name required | string | Key name, e.g. 'etl-pipeline' |
group_id required | number | Group whose permissions the key gets (see list_groups). Note: every key is also in All Users. |
update_api_keywritedestructiveidempotentAPI Keys
Rename an API key or move it to another group. Admin only.
| Parameter | Type | Description |
|---|---|---|
id required | number | API key ID |
name | string | New name |
group_id | number | New group ID |
regenerate_api_keywritedestructiveAPI Keys
Replace an API key's secret. The old key stops working immediately; the new one (unmasked_key) is shown only once. Admin only.
| Parameter | Type | Description |
|---|---|---|
id required | number | API key ID |
delete_api_keywritedestructiveidempotentAPI Keys
Delete an API key; anything using it loses access immediately. Admin only.
| Parameter | Type | Description |
|---|---|---|
id required | number | API key ID |
get_embedding_statusreadEmbedding
Embedding settings (static / interactive / SDK), whether a signing key exists (never its value), and which cards and dashboards are embeddable. Admin only.
No parameters.
create_embed_urlreadEmbedding
Create a signed static-embedding iframe URL for a card or dashboard that has embedding enabled. Signed locally with the instance's embedding secret key; the key is never returned. Admin only.
| Parameter | Type | Description |
|---|---|---|
resource required | string (card | dashboard) | What to embed |
id required | number | Card or dashboard ID |
params | object | Values for locked parameters, by slug, e.g. { category: 'Widget' } |
expires_in_minutes | integer | Token lifetime (default 10) |
bordered | boolean | Show a border (default true) |
titled | boolean | Show the title (default true) |
theme | string (light | night | transparent) | Color theme |
set_static_embeddingwritedestructiveidempotentEmbedding
Turn static (signed) embedding on or off for the whole instance. Turning it off breaks existing embeds. Admin only.
| Parameter | Type | Description |
|---|---|---|
enabled required | boolean | true to enable, false to disable |
set_resource_embeddingwritedestructiveidempotentEmbedding
Allow or stop static embedding of one card or dashboard, and choose per parameter whether embedders may change it (enabled), must set it in the token (locked) or never see it (disabled). Admin only.
| Parameter | Type | Description |
|---|---|---|
resource required | string (card | dashboard) | What to embed |
id required | number | Card or dashboard ID |
enabled required | boolean | Allow embedding |
embedding_params | object | Per parameter slug: 'enabled' | 'locked' | 'disabled' |
list_tasksreadTasks & Logs
Background task history (sync, analyze, field values, fingerprinting, notification sends, transform runs), newest first. Use to debug slow or failing syncs. Admin only.
| Parameter | Type | Description |
|---|---|---|
status | string (success | failed | started | unknown) | Only tasks with this status |
task | string | Only this task type (see list_task_types), e.g. 'sync' |
limit | integer | Page size (default 50) |
offset | integer | Skip this many tasks |
verbose | boolean | Include each task's log lines |
get_taskreadTasks & Logs
One background task with its details and log lines. Admin only.
| Parameter | Type | Description |
|---|---|---|
id required | number | Task ID from list_tasks |
list_task_typesreadTasks & Logs
Task type names usable as list_tasks' task filter. Admin only.
No parameters.
list_task_runsreadTasks & Logs
Grouped task runs: one sync/analyze/fingerprint run of a database with success/failure counts. Admin only.
| Parameter | Type | Description |
|---|---|---|
limit | integer | Page size (default 50) |
offset | integer | Skip this many runs |
get_scheduler_inforeadTasks & Logs
Quartz scheduler status and every scheduled job with its triggers and next fire time. Admin only.
No parameters.
get_server_logsreadTasks & Logs
Recent Metabase server log lines (the last ~250 kept in memory), newest first, ANSI colors stripped. Admin only.
| Parameter | Type | Description |
|---|---|---|
level | string (ERROR | WARN | INFO | DEBUG | TRACE) | Minimum level |
contains | string | Only lines whose message or logger contains this text |
limit | integer | Max lines (default 100) |
list_log_presetsreadTasks & Logs
Logging presets (groups of loggers for troubleshooting, e.g. sync). Admin only.
No parameters.
get_premium_token_statusreadTasks & Logs
Status of the premium (paid plan) token: validity, features, expiry. Open-source instances report no token. Admin only.
No parameters.
set_log_levelswritedestructiveidempotentTasks & Logs
Temporarily change log levels for some loggers (e.g. from list_log_presets) to debug an issue; Metabase reverts them after the duration. Admin only.
| Parameter | Type | Description |
|---|---|---|
log_levels required | object | Logger name → level, e.g. { 'metabase.sync': 'debug' } |
duration required | integer | How long the change lasts |
duration_unit required | string (seconds | minutes | hours | days) | Unit of duration |
reset_log_levelswritedestructiveidempotentTasks & Logs
Undo set_log_levels now. Admin only.
No parameters.
No tools match.