
Metabase MCP Server (Headless): Setup for Claude, Cursor and Other Apps
Not the official Metabase MCP server. This one is built by the community. Metabase makes its own: Metabase →
Lets Claude, Cursor and other assistants query your Metabase data and manage dashboards, questions, users and settings with an API key.
This is a community server for Metabase, not the one Metabase publishes. It runs on your computer and signs in to your Metabase with an API key or an email and password, so there is no browser sign-in step.
It covers far more than querying. It also reaches dashboards, users, permissions, settings and database connections. Turn on read-only mode, or load only the groups of tools you need, before you give it a key with wide rights.
Good for
- Analysts who want to ask questions of Metabase data in plain language
- Teams who build and tidy dashboards and collections from chat
- Metabase admins who manage users, groups, permissions and settings
- Developers who need Metabase in CI jobs or servers with no browser sign-in
Works in
12 should work
Tap an app to see how to set it up and any known problems.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Client does not support this transport.
Client does not support this transport.
Install Metabase MCP (headless)
Claude Code
- 1
Copy this prompt.
Add the Metabase MCP (headless) server to Claude Code. Run this command: claude mcp add metabase-headless -e METABASE_URL=<METABASE_URL> -e METABASE_API_KEY=<METABASE_API_KEY> -- npx -y @serdnaley/metabase-mcp Ask me for METABASE_URL, METABASE_API_KEY and only put the values in that config, nowhere else. Then check that it loaded and tell me if I need to sign in or restart.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires Node.js.
Built from the package data we hold. Not yet tested by us.
Tools
Finds questions, dashboards, collections and tables by keyword
Searches across everything in Metabase. You can limit it to certain types such as dashboards or tables, or to one collection, and include archived items.
Try: “Find every dashboard that mentions revenue.”
Read ·
searchLists the databases Metabase is connected to
Returns the databases your Metabase account can see.
Try: “Which databases does our Metabase have?”
Read ·
list_databasesShows details for one database
Returns the settings and details of a single connected database.
Try: “Show me the details of database 2.”
Read ·
get_databaseLists a database's tables, columns and links between them
Returns the full structure of a database: tables, fields, their types and how tables relate.
Try: “Show the tables and columns in the sales database.”
Read ·
get_database_metadataLists the schemas in a database
Returns the schema names inside one database.
Try: “What schemas does database 2 have?”
Read ·
list_database_schemasLists the tables in one schema
Returns the tables that sit in a given schema of a database.
Try: “List the tables in the public schema of database 2.”
Read ·
get_database_schemaAdds a new database connection to Metabase
Creates a connection to a new database from the details you give, such as engine and credentials.
Try: “Connect Metabase to our new Postgres analytics database.”
Write ·
create_databaseChanges an existing database connection
Updates the settings of a connected database, such as its name or connection details.
Try: “Rename database 3 to Warehouse (prod).”
Write ·
update_databaseRemoves a database connection from Metabase
Deletes a database connection. Saved questions that depend on it will stop working.
Try: “Remove the old staging database from Metabase.”
Delete ·
delete_databaseTests connection details before you save them
Checks whether Metabase can connect with the given details, without saving anything.
Try: “Test whether these Postgres credentials work.”
Write ·
validate_databaseTells Metabase to re-read a database's tables
Starts a resync so Metabase picks up tables or columns added or changed after the last sync.
Try: “I added a table yesterday. Resync database 2.”
Write ·
sync_database_schemaShows one table and its fields
Returns a table's details and the fields it contains.
Try: “Show me the orders table.”
Read ·
get_tableShows a table's fields, foreign keys and metrics for building queries
Returns what you need to write a query on a table: fields, how it links to other tables, and related metrics.
Try: “What can I join the orders table to?”
Read ·
get_table_query_metadataShows one column with its type and statistics
Returns a field's type, semantic type and fingerprint, which is Metabase's summary of its values.
Try: “What type is the created_at field, and what does it hold?”
Read ·
get_fieldShows sample values from a column
Returns example values for a field, the same list Metabase uses in filter dropdowns.
Try: “What values does the status column take?”
Read ·
get_field_valuesChanges a table's name, description or visibility
Edits a table's display name, description, visibility or entity type in the data model.
Try: “Hide the internal_audit table and give orders a description.”
Write ·
update_tableChanges a column's name, description or meaning
Edits a field's display name, description, semantic type, visibility or foreign key target.
Try: “Mark the user_id column as a foreign key to the users table.”
Write ·
update_fieldRefreshes the cached values behind filter dropdowns
Asks Metabase to scan a field again and rebuild its list of filter values.
Try: “Rescan the values of the country field.”
Write ·
rescan_field_valuesClears a column's cached filter values
Deletes the cached values stored for a field. Metabase can rebuild them later.
Try: “Clear the cached values for the email field.”
Write ·
discard_field_valuesSets the order columns appear in for a table
Saves a custom column order for a table from a list of field IDs.
Try: “Put order_id, created_at and total first in the orders table.”
Write ·
reorder_fieldsShows all collections as a folder tree
Returns the whole collection hierarchy at once.
Try: “Show me how our Metabase collections are organized.”
Read ·
get_collection_treeLists collections
Returns the collections you can see.
Try: “List all collections.”
Read ·
list_collectionsShows details for one collection
Returns a collection's name, description and location.
Try: “Show collection 12.”
Read ·
get_collectionLists what is inside a collection
Returns the questions, dashboards and sub-collections in one collection.
Try: “What is in the Marketing collection?”
Read ·
list_collection_itemsCreates a new collection
Adds a collection, optionally inside a parent collection.
Try: “Create a collection called Q4 Reports.”
Write ·
create_collectionRenames or edits a collection
Changes a collection's properties such as its name, description or parent.
Try: “Move the Q4 Reports collection into Finance.”
Write ·
update_collectionLists saved questions
Returns the saved questions (cards) you can see.
Try: “List all saved questions.”
Read ·
list_cardsShows a saved question's query and chart settings
Returns the query behind a saved question and how it is displayed.
Try: “Show me the SQL behind question 45.”
Read ·
get_cardRuns a saved question and returns its rows
Runs a saved question and returns compact columns and rows, paged with a row limit and offset. You can pass values for its filters.
Try: “Run question 45 with fromDate 2024-01-01 and toDate 2024-12-31.”
Read ·
execute_card_queryCreates a saved question from SQL or a structured query
Saves a new question that uses either native SQL or Metabase's structured query format.
Try: “Save this SQL as a question called Weekly signups.”
Write ·
create_cardEdits a saved question
Changes a question's query, chart type, name or other properties.
Try: “Change question 45 to a bar chart.”
Write ·
update_cardDeletes a saved question
Deletes a question. Dashboards that use it will lose that card.
Try: “Delete question 45.”
Delete ·
delete_cardCopies a question into a collection
Makes a copy of a saved question in the collection you choose.
Try: “Copy question 45 into the Sandbox collection.”
Write ·
copy_cardMakes a public link for a question
Turns on a public link anyone can open without signing in. Public sharing must be enabled in Metabase admin settings.
Try: “Create a public link for question 45.”
Write ·
create_card_public_linkTurns off a question's public link
Removes the public sharing link so the question is private again.
Try: “Stop sharing question 45 publicly.”
Delete ·
delete_card_public_linkLists dashboards
Returns the dashboards you can see.
Try: “List all dashboards.”
Read ·
list_dashboardsShows a dashboard with its cards and layout
Returns a dashboard along with every card on it and where each sits.
Try: “Show me what is on dashboard 7.”
Read ·
get_dashboardCreates a new dashboard
Adds an empty dashboard with the name and description you give.
Try: “Create a dashboard called Sales Overview.”
Write ·
create_dashboardEdits a dashboard's name, description or filters
Changes dashboard properties such as its name, description and filters.
Try: “Add a date filter to dashboard 7.”
Write ·
update_dashboardDeletes a dashboard
Deletes a dashboard. The questions on it are not deleted.
Try: “Delete the old Q3 dashboard.”
Delete ·
delete_dashboardCopies a dashboard into a collection
Makes a copy of a dashboard in the collection you choose.
Try: “Copy dashboard 7 into the Archive collection.”
Write ·
copy_dashboardAdds, removes or moves cards on a dashboard
Changes which cards appear on a dashboard and where they are placed.
Try: “Add question 45 to the top row of dashboard 7.”
Write ·
update_dashboard_cardsMakes a public link for a dashboard
Turns on a public link anyone can open without signing in. Public sharing must be enabled in Metabase admin settings.
Try: “Create a public link for dashboard 7.”
Write ·
create_dashboard_public_linkTurns off a dashboard's public link
Removes the public sharing link so the dashboard is private again.
Try: “Stop sharing dashboard 7 publicly.”
Delete ·
delete_dashboard_public_linkLists actions
Returns the actions (write-back forms and queries) defined in Metabase.
Try: “List all actions.”
Read ·
list_actionsShows one action
Returns the details of a single action.
Try: “Show action 3.”
Read ·
get_actionCreates an action
Adds a query or implicit action. Actions that call a web address are not supported.
Try: “Create an action that marks an order as shipped.”
Write ·
create_actionEdits an action
Changes an existing action. You cannot change its type to a web request.
Try: “Rename action 3 to Mark shipped.”
Write ·
update_actionDeletes an action
Deletes an action from Metabase.
Try: “Delete action 3.”
Delete ·
delete_actionRuns an action
Runs an action with the parameters you give. This can change data in your database.
Try: “Run action 3 for order 1042.”
Write ·
execute_actionMakes a public link for an action form
Turns on a public link to an action's form.
Try: “Create a public link for action 3.”
Write ·
create_action_public_linkTurns off an action's public link
Removes the public link from an action.
Try: “Stop sharing action 3 publicly.”
Delete ·
delete_action_public_linkRuns any SQL or structured query on a database
Runs a query exactly as written and returns compact columns and rows. The server does not block INSERT, UPDATE, DELETE or DDL, so what it can change depends only on the Metabase key and database permissions.
Try: “How many orders were placed last month? Use database 2.”
Write ·
execute_queryLists Metabase users
Returns all users, and can filter by name or email.
Try: “Find the Metabase user with the email jane@example.com.”
Read ·
list_usersShows one user
Returns a user's details by ID.
Try: “Show user 15.”
Read ·
get_userShows who the assistant is signed in as
Returns the Metabase account that the API key or login belongs to.
Try: “Which Metabase user am I connected as?”
Read ·
get_current_userLists permission groups
Returns the permission groups in Metabase.
Try: “List all permission groups.”
Read ·
list_groupsShows a group and its members
Returns a group with its members. Each member comes with the membership ID needed to remove them.
Try: “Who is in the Analysts group?”
Read ·
get_groupCreates a Metabase user
Adds a new user account.
Try: “Create a user for sam@example.com.”
Write ·
create_userEdits a user
Changes only the fields you give, such as name or email.
Try: “Change user 15's last name to Okafor.”
Write ·
update_userDeactivates a user
Turns off a user's access. The record is kept, so it can be reactivated.
Try: “Deactivate user 15.”
Delete ·
deactivate_userTurns a deactivated user back on
Restores access for a user who was deactivated earlier.
Try: “Reactivate user 15.”
Write ·
reactivate_userCreates a permission group
Adds a new group for managing access.
Try: “Create a group called Finance.”
Write ·
create_groupRenames a permission group
Changes the name of a group.
Try: “Rename group 5 to Finance Analysts.”
Write ·
update_groupDeletes a permission group
Deletes a group. Permissions given through it go away.
Try: “Delete group 5.”
Delete ·
delete_groupAdds a user to a group
Puts a user into a permission group.
Try: “Add user 15 to the Analysts group.”
Write ·
add_group_memberRemoves a user from a group
Takes a user out of a group, using the membership ID from the group's member list.
Try: “Remove user 15 from the Analysts group.”
Delete ·
remove_group_memberShows data permissions for every group and database
Returns who can view data and create queries, per group and per database.
Try: “Which groups can query the sales database?”
Read ·
get_permissions_graphShows which groups can open which collections
Returns the collection permissions for each group.
Try: “Who can edit the Finance collection?”
Read ·
get_collection_permissionsChanges data permissions
Saves a new data permissions graph. It must include the revision number from the last read, so an out-of-date change is rejected.
Try: “Remove query access on the sales database for the Interns group.”
Write ·
update_permissions_graphChanges collection permissions
Saves a new collection permissions graph. It must include the revision number from the last read.
Try: “Give the Analysts group view access to the Finance collection.”
Write ·
update_collection_permissionsLists segments
Returns saved filters (segments) defined on tables.
Try: “List all segments.”
Read ·
list_segmentsShows one segment
Returns a segment's definition.
Try: “Show segment 4.”
Read ·
get_segmentCreates a segment
Saves a reusable filter on a table.
Try: “Create a segment for orders over $100.”
Write ·
create_segmentEdits a segment
Changes an existing segment.
Try: “Change segment 4 to orders over $250.”
Write ·
update_segmentArchives a segment
Deletes (archives) a segment.
Try: “Delete segment 4.”
Delete ·
delete_segmentShows a question or dashboard's edit history
Returns the revision history of a card or dashboard.
Try: “What changed on dashboard 7 recently?”
Read ·
list_revisionsRestores an earlier version of a question or dashboard
Rolls a card or dashboard back to a past revision.
Try: “Revert dashboard 7 to the version before yesterday's edit.”
Write ·
revert_revisionLists Metabase settings
Returns the instance settings.
Try: “List the Metabase settings.”
Read ·
list_settingsShows one setting
Returns the value of a single setting.
Try: “What is the site name setting?”
Read ·
get_settingChanges a Metabase setting
Sets a new value for an instance setting.
Try: “Set the site name to Acme Analytics.”
Write ·
update_settingLists question alerts
Returns alerts on saved questions, optionally for one question only.
Try: “Which alerts are set on question 45?”
Read ·
list_alertsShows one alert
Returns the details of an alert by its notification ID.
Try: “Show alert 9.”
Read ·
get_alertLists a dashboard's email and Slack subscriptions
Returns the scheduled deliveries set up for a dashboard.
Try: “Who gets dashboard 7 by email?”
Read ·
list_dashboard_subscriptionsLists all notifications
Returns every notification, including question alerts and system-event notifications.
Try: “List all notifications.”
Read ·
list_notificationsSends a notification now
Sends a notification immediately, outside its schedule. This delivers real emails or Slack messages, and Metabase 0.64 and later only allows its creator or an admin.
Try: “Send alert 9 now.”
Write ·
send_notificationCreates an alert on a saved question
Sets up an alert that checks a question on a schedule and notifies the channels you pick when the condition is met.
Try: “Alert me by email when question 45 returns any rows.”
Write ·
create_alertEdits an alert
Changes only the fields you give.
Try: “Move alert 9 to run daily.”
Write ·
update_alertDeletes an alert
Deactivates an alert. It can be restored later by setting it active again.
Try: “Delete alert 9.”
Delete ·
delete_alertSchedules a dashboard to be emailed or sent to Slack
Creates a subscription that delivers a snapshot of a dashboard on a schedule. By default it includes every question on the dashboard.
Try: “Email dashboard 7 to the team every Monday at 8am.”
Write ·
create_dashboard_subscriptionEdits a dashboard subscription
Changes a subscription's name, schedule, recipients, parameters or cards.
Try: “Move the weekly dashboard email to Tuesdays.”
Write ·
update_dashboard_subscriptionDeletes a dashboard subscription
Removes a subscription. Metabase archives it.
Try: “Stop the weekly email for dashboard 7.”
Delete ·
delete_dashboard_subscriptionBuilds an automatic exploration dashboard for a table
Generates an X-ray, a dashboard Metabase creates by itself to show what is interesting in a table.
Try: “Run an X-ray on the orders table.”
Read ·
generate_xrayClears cached query results
Invalidates cached results so the next run fetches fresh data.
Try: “Clear the cache for dashboard 7.”
Write ·
invalidate_cacheChanges how long results are cached
Updates the cache strategy for a database, dashboard or question.
Try: “Cache question 45 for one hour.”
Write ·
update_cache_configTurns on saved copies of a model's data
Enables persistence, which stores a model's results in a table.
Try: “Persist model 30.”
Write ·
persist_modelTurns off saved copies of a model's data
Disables persistence for a model.
Try: “Stop persisting model 30.”
Write ·
unpersist_modelRefreshes a model's saved data now
Triggers a refresh of the stored data of a persisted model.
Try: “Refresh model 30 now.”
Write ·
refresh_persisted_modelUploads CSV data as a new table
Creates a new table in Metabase from CSV text you provide, and can place the resulting model in a collection.
Try: “Upload this CSV as a table called budget_2025.”
Write ·
upload_csvShows recent and popular items together
Returns the current user's recently viewed items plus the instance's popular items. The two narrower tools are preferred.
Try: “What has been happening in Metabase lately?”
Read ·
get_activityShows what you opened or picked recently
Returns the current user's recently viewed or selected dashboards, questions, tables, collections and documents.
Try: “What did I look at in Metabase recently?”
Read ·
get_recent_itemsShows the most used dashboards, questions and tables
Returns the items used most across the Metabase instance.
Try: “Which dashboards are most popular?”
Read ·
get_popular_itemsLists SQL snippets
Returns the saved SQL snippets.
Try: “List all SQL snippets.”
Read ·
list_snippetsShows one SQL snippet
Returns a snippet's content.
Try: “Show snippet 6.”
Read ·
get_snippetCreates a reusable SQL snippet
Saves a piece of SQL that questions can reuse.
Try: “Save this date filter as a snippet called last_30_days.”
Write ·
create_snippetEdits a SQL snippet
Changes a snippet's name or SQL.
Try: “Change snippet 6 to the last 60 days.”
Write ·
update_snippetArchives a SQL snippet
Soft-deletes a snippet.
Try: “Archive snippet 6.”
Delete ·
delete_snippetLists business glossary terms
Returns the terms in the Metabase glossary.
Try: “List our glossary terms.”
Read ·
list_glossary_termsShows one glossary term
Returns a term and its definition.
Try: “What does the glossary say about MRR?”
Read ·
get_glossary_termAdds a glossary term
Creates a business term with a definition.
Try: “Add MRR to the glossary: monthly recurring revenue.”
Write ·
create_glossary_termEdits a glossary term
Changes a term or its definition.
Try: “Update the definition of MRR.”
Write ·
update_glossary_termDeletes a glossary term
Removes a term from the glossary.
Try: “Delete the glossary term MRR.”
Delete ·
delete_glossary_termLists documents
Returns the narrative analytics documents in Metabase.
Try: “List all documents.”
Read ·
list_documentsShows one document
Returns a document by ID.
Try: “Open document 2.”
Read ·
get_documentCreates a document
Adds a narrative analytics document.
Try: “Create a document summarizing this quarter's results.”
Write ·
create_documentEdits a document
Changes an existing document.
Try: “Add a conclusion to document 2.”
Write ·
update_documentPermanently deletes a document
Deletes a document for good. It archives the document first, as Metabase requires.
Try: “Delete document 2.”
Delete ·
delete_documentLists timelines
Returns the timelines used to annotate charts.
Try: “List all timelines.”
Read ·
list_timelinesShows one timeline
Returns a timeline by ID.
Try: “Show timeline 1.”
Read ·
get_timelineCreates a timeline
Adds a timeline for marking events on charts.
Try: “Create a timeline called Product launches.”
Write ·
create_timelineEdits a timeline
Changes an existing timeline.
Try: “Rename timeline 1 to Releases.”
Write ·
update_timelineDeletes a timeline
Removes a timeline.
Try: “Delete timeline 1.”
Delete ·
delete_timelineAdds an event to a timeline
Creates an event on a timeline.
Try: “Add a launch event on March 3 to timeline 1.”
Write ·
create_timeline_eventEdits a timeline event
Changes an existing event.
Try: “Move the launch event to March 5.”
Write ·
update_timeline_eventDeletes a timeline event
Removes an event from a timeline.
Try: “Delete the launch event.”
Delete ·
delete_timeline_eventLists your bookmarks
Returns the current user's bookmarks.
Try: “What have I bookmarked in Metabase?”
Read ·
list_bookmarksBookmarks a question, dashboard or collection
Adds a bookmark for the current user.
Try: “Bookmark dashboard 7.”
Write ·
create_bookmarkRemoves a bookmark
Deletes one of the current user's bookmarks.
Try: “Remove my bookmark on dashboard 7.”
Delete ·
delete_bookmarkMarks an item as verified, or removes the mark
Verifies a card or dashboard, or clears the verification. This is a Pro and Enterprise feature.
Try: “Mark dashboard 7 as verified.”
Write ·
create_moderation_reviewConverts export IDs to numeric IDs
Translates the entity IDs used in serialization into the integer IDs the API uses.
Try: “Translate these entity IDs into numeric IDs.”
Read ·
translate_entity_idsLists metrics
Returns the curated metrics defined in Metabase, such as Revenue or Number of Orders.
Try: “What metrics are defined?”
Read ·
list_metricsShows a metric's definition
Returns one metric. Metabase 0.64 and later also returns its dimensions.
Try: “Show the Revenue metric.”
Read ·
get_metricCalculates a metric without writing a query
Computes a metric or measure with optional filters and breakouts. Metabase 0.60 and later.
Try: “Show Revenue by month for this year.”
Read ·
run_metricLists what a metric can be filtered or grouped by
Returns a metric's dimensions with their IDs. Metabase 0.64 and later.
Try: “What can I break Revenue down by?”
Read ·
list_metric_dimensionsShows the values a metric dimension can take
Returns distinct values of a dimension, with optional search, useful before filtering. Metabase 0.64 and later.
Try: “Which countries can I filter Revenue by?”
Read ·
get_metric_dimension_valuesCreates a metric
Saves a reusable aggregation. Its query must aggregate exactly once.
Try: “Create a metric called Total Revenue as the sum of order totals.”
Write ·
create_metricEdits or archives a metric
Changes a metric's name, description, definition or collection, or archives it.
Try: “Archive the old Revenue metric.”
Write ·
update_metricLists measures
Returns reusable aggregations scoped to one table.
Try: “List all measures.”
Read ·
list_measuresShows one measure
Returns a measure by ID.
Try: “Show measure 3.”
Read ·
get_measureCreates a measure on a table
Saves a reusable aggregation for a table. You can then run it with the metric tool.
Try: “Create a measure for the sum of Total on orders.”
Write ·
create_measureEdits or archives a measure
Changes a measure, or archives it.
Try: “Rename measure 3.”
Write ·
update_measureLists transforms
Returns transforms, which write a query's result into a warehouse table. Self-hosted Metabase must enable transforms first.
Try: “List all transforms.”
Read ·
list_transformsShows one transform
Returns a transform's source query, target table and last run.
Try: “Show transform 2.”
Read ·
get_transformLists past transform runs
Returns runs with status, start and end time and message, newest first.
Try: “Did last night's transforms succeed?”
Read ·
list_transform_runsShows one transform run
Returns the details of a single run.
Try: “Show run 118.”
Read ·
get_transform_runLists transform jobs
Returns the schedules that run every transform carrying one of a job's tags.
Try: “What transform schedules exist?”
Read ·
list_transform_jobsLists transform tags
Returns the tags used to group transforms.
Try: “List the transform tags.”
Read ·
list_transform_tagsCreates a transform
Defines a transform that writes the result of a query into a table in your database. Self-hosted Metabase must enable transforms first.
Try: “Create a transform that saves daily revenue into a table.”
Write ·
create_transformEdits a transform
Changes a transform's name, description, source query, target or tags.
Try: “Change transform 2 to also tag it nightly.”
Write ·
update_transformDeletes a transform
Deletes a transform. It can also drop the table the transform produced.
Try: “Delete transform 2 and drop its table.”
Delete ·
delete_transformRuns a transform now
Starts a run and returns a run ID you can check later. The run writes to the target table.
Try: “Run transform 2 now.”
Write ·
run_transformCancels a transform's current run
Stops the run that is in progress.
Try: “Cancel the running transform 2.”
Write ·
cancel_transform_runSchedules transforms to run
Creates a job that runs all transforms with the given tags on a schedule.
Try: “Run all nightly transforms at 2am.”
Write ·
create_transform_jobRuns a transform job now
Starts a job straight away instead of waiting for its schedule.
Try: “Run the nightly job now.”
Write ·
run_transform_jobDeletes a transform job
Removes the job. The transforms stay.
Try: “Delete the nightly job.”
Delete ·
delete_transform_jobCreates a transform tag
Adds a tag for grouping transforms.
Try: “Create a tag called nightly.”
Write ·
create_transform_tagExports a saved question's full results
Exports all rows of a saved question as csv, json or xlsx, unlike the run tool's 2,000-row cap. With an output path it saves the file on the computer running the server.
Try: “Export question 45 as a CSV to /Users/me/q45.csv.”
Files ·
export_card_queryExports the results of any query to a file
Runs a query exactly as written and exports the result as csv, json or xlsx. The server does not block INSERT, UPDATE, DELETE or DDL, and an output path saves a file on your machine.
Try: “Export all orders from 2024 as CSV.”
Files ·
export_querySaves a dashboard as a PDF
Renders a dashboard to PDF on the Metabase server and saves it to the output path you give. Metabase 0.64 and later.
Try: “Save dashboard 7 as a PDF at /Users/me/sales.pdf.”
Files ·
export_dashboard_pdfLists Metabase API keys
Returns API keys, masked, with the group each one acts as. Admin only.
Try: “List all Metabase API keys.”
Read ·
list_api_keysCreates an API key
Makes a key that acts with one group's permissions. The full key is shown only once. Admin only.
Try: “Create an API key for the Analysts group.”
Write ·
create_api_keyRenames a key or moves it to another group
Changes a key's name or its group. Admin only.
Try: “Move key 3 to the Admins group.”
Write ·
update_api_keyReplaces an API key's secret
Issues a new secret. The old key stops working at once and the new one is shown only once. Admin only.
Try: “Regenerate API key 3.”
Write ·
regenerate_api_keyDeletes an API key
Removes a key. Anything using it loses access at once. Admin only.
Try: “Delete API key 3.”
Delete ·
delete_api_keyShows embedding settings and what is embeddable
Returns static, interactive and SDK embedding settings, whether a signing key exists (never its value), and which cards and dashboards can be embedded. Admin only.
Try: “Which dashboards are embeddable?”
Read ·
get_embedding_statusCreates a signed embed link for a card or dashboard
Builds a signed iframe URL for an item that has embedding turned on, signed locally with the instance's secret key, which is never returned. Admin only.
Try: “Create an embed URL for dashboard 7.”
Read ·
create_embed_urlTurns static embedding on or off for everyone
Switches signed embedding for the whole instance. Turning it off breaks existing embeds. Admin only.
Try: “Turn static embedding on.”
Write ·
set_static_embeddingAllows or stops embedding of one card or dashboard
Controls whether one item can be embedded, and for each parameter whether embedders may change it, must set it in the token, or never see it. Admin only.
Try: “Allow dashboard 7 to be embedded.”
Write ·
set_resource_embeddingShows background task history
Returns tasks such as syncs, analyzes and notification sends, newest first. Useful for slow or failing syncs. Admin only.
Try: “Which syncs failed this week?”
Read ·
list_tasksShows one background task with its log
Returns a task's details and log lines. Admin only.
Try: “Show task 5000 and its log.”
Read ·
get_taskLists task types you can filter by
Returns the task type names the task list accepts. Admin only.
Try: “What task types exist?”
Read ·
list_task_typesShows grouped sync runs per database
Returns each sync, analyze or fingerprint run with success and failure counts. Admin only.
Try: “How did the last sync of database 2 go?”
Read ·
list_task_runsShows scheduled jobs and next run times
Returns the scheduler status and every job with its triggers. Admin only.
Try: “When does the next sync run?”
Read ·
get_scheduler_infoShows recent Metabase server logs
Returns about the last 250 log lines kept in memory, newest first. Admin only.
Try: “Show recent errors in the Metabase log.”
Read ·
get_server_logsLists logging presets
Returns groups of loggers meant for troubleshooting, such as sync. Admin only.
Try: “What logging presets are there?”
Read ·
list_log_presetsShows the paid-plan token status
Returns whether the premium token is valid, its features and expiry. Open-source instances report no token. Admin only.
Try: “Is our Metabase license valid?”
Read ·
get_premium_token_statusTemporarily turns up logging
Changes log levels for some loggers for a set time, then Metabase reverts them. Admin only.
Try: “Turn on sync debug logging for 10 minutes.”
Write ·
set_log_levelsUndoes the log level change now
Resets the log levels changed earlier. Admin only.
Try: “Reset the logging levels.”
Write ·
reset_log_levels
Read from the source code
Permissions
high risk · 6 things to watch
High risk
It can read your data, change dashboards and settings, and delete things, and it can run any SQL you or the assistant write. Turn on read-only mode and use a Metabase key whose database access is read-only.
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only modeHow to turn it on
Watch out for
It can delete data and connections
Tools delete databases, questions, dashboards, groups, API keys and more, and all tools are on by default. Turn on read-only mode, or disable them with METABASE_TOOLS_DISABLE=delete_*. github.com
It runs any SQL you give it, even read-only
The query tools send SQL as written and stay available in read-only mode. Use a Metabase key whose database access is read-only to block changes. github.com
It can change who has access
Admin tools edit users, groups, permissions and API keys, and can regenerate a key so the old one stops working. Use a key from a non-admin account unless you need these. github.com
It can share data publicly and send messages
Tools create public links and send real emails or Slack messages. Keep approval prompts on in your assistant. github.com
Exports can write files to your computer
Export tools can save to a path you name, and do not overwrite an existing file unless asked. Check the path before approving. github.com
Shared server mode needs a strong token
In HTTP mode, anyone with the token acts as your Metabase key. Keep it on localhost, or put it behind TLS. github.com
Security advisories
No published security advisories as of Nov 1, 2026.
Technical details
| Turning on read-only | Set METABASE_READ_ONLY_MODE=true. It hides all 99 write tools; read tools stay. Read-only mode beats the enable and disable lists. |
|---|---|
| Talks to | Your Metabase server (METABASE_URL) |
| Sign-in and keys | The key or login is read from environment variables on your machine and sent only to your Metabase. Nothing is stored by the server. |
| Scopes |
|
Questions
Is this the official Metabase MCP server?
No. It is a community project by Serdnaley. Metabase has its own server, described on the Metabase page, which signs in through the browser and needs an admin to switch it on.
What do I need to run it?
Node.js, your Metabase address and an API key. Create the key in the Metabase admin area and put it in the setting shown in the install box. An email and password also work.
Can it run read-only?
Yes. Set METABASE_READ_ONLY_MODE to true and all 99 write tools disappear. The query tools stay, so also give the Metabase key read-only database access.
Can I load fewer tools?
Yes. METABASE_TOOLSETS takes group names or the presets query, content and admin. METABASE_TOOLS_ENABLE and METABASE_TOOLS_DISABLE add or drop single tools.
Does it run locally or in the cloud?
Locally by default, on your computer, talking to your Metabase. It can also run as a shared HTTP service with a bearer token, or as a container, as the README describes.
Does it work with Metabase open source?
Yes. The README says it works with the free and paid editions, tested on versions 0.59 and 0.64. A few tools need a paid plan or a newer version, as their descriptions say.
Information
updated Nov 2, 2026
- Publisher
- Community
- Package
@serdnaley/metabase-mcp- Registry
- npm
- Transport
- stdio
- Auth
- API key
- Version
- 0.4.0
- License
- MIT
- Last commit
- Oct 31, 2026
- Open issues
- 0
- Listed in
- Official MCP registry
Other Metabase MCP servers
Sources
Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.
Show all 2Hide
- README.md · github.com
- metabase-mcp · npmjs.com