
List cards (saved questions) with client-side pagination (the Metabase API returns the full list; this tool slices it for you) and server-side filters. Returns a lightweight summary per card — call getcard for its datasetquery/visualization_settings. Use search to filter by name instead of paging through everything.
Get a card (saved question) by ID. Use list_cards or search to find valid IDs.
Create a new card (saved question). Use listdatabases to find a valid database id for datasetquery, and listcollections to find a valid collectionid (omit to place it in the root collection).
Update a card's name, description, query, display, collection, or archived status. Use listcards or search to find the cardid. Use listcollections to find a valid collectionid.
Permanently and irreversibly delete a card by ID (hard delete — cannot be undone). To move it to Trash instead, where it can be restored, use updatecard with archived=true. Use listcards or search to find the card_id.
Run a card's saved query and return its result rows and columns, truncated to limit rows (default 500) to avoid overflowing context. Use listcards or search to find the cardid. Set ignore_cache=true to force a fresh run instead of a cached result. Pass parameters to run a parameterized question with different template-tag/filter values instead of its saved defaults.
List collections (folders that organize dashboards and questions) with client-side pagination (the Metabase API returns the full list; this tool slices it for you). Use this to find valid collectionid values for createdashboard and create_card. Set archived=true to list archived collections instead of active ones.
Get a collection by ID. Use list_collections to find valid IDs.
List dashboards with server-side pagination and filters, including by collectionid. Items are a lightweight summary — call getdashboard for a dashboard's filter/parameter definitions. Use search to filter by name instead of paging through everything.
Get a dashboard by ID. Use list_dashboards or search to find valid IDs.
Create a new dashboard. Use listcollections to find a valid collectionid, or omit it to place the dashboard in the root collection.
Update a dashboard's name, description, collection, or archived status. Use listdashboards or search to find the dashboardid. Use listcollections to find a valid collectionid.
Permanently and irreversibly delete a dashboard by ID (hard delete — cannot be undone). To move it to Trash instead, where it can be restored, use updatedashboard with archived=true. Use listdashboards or search to find the dashboard_id.
List databases connected to this Metabase instance with client-side pagination (the Metabase API returns the full list; this tool slices it for you). Use this to find valid databaseid values for createcard's dataset_query. Connection credentials are never returned.
Get a database by ID. Use list_databases to find valid IDs. Connection credentials are never returned.
List permission groups with client-side pagination (the Metabase API returns the full list; this tool slices it for you). Use this to find valid groupid values for listusers' group_id filter.
Get a permission group by ID, including its member list (user id/email/name per member). Use listgroups to find valid groupid values.
Search dashboards, cards (questions), collections, tables, and databases by name substring, with server-side filters and server-side pagination. Use this instead of listdashboards/listcards when you know part of the name.
List Metabase users with server-side pagination and filters. Use this to find valid user IDs. Use listgroups to find a valid groupid to filter by.
Get a Metabase user by ID. Use list_users to find valid IDs.
Validate the Metabase instance URL and API key by fetching the current user.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It's an MCP server that lets your agents access data and functionality from Metabase via tools. Your agents can invoke these tools to run a saved question, pull a dashboard's results, execute a native SQL query, list available databases, and more.
Metabase ships its own official MCP server, scoped to the connecting user's Metabase permissions. You can also connect through a third-party platform like Merge Agent Handler, which puts Metabase behind the same endpoint as every other tool your agents use.
The use cases naturally depend on the agent you've built, but here are a few common ones:
Here are some of the most commonly used tools:
run_card: executes a saved question, what Metabase calls a "card," and returns its result set. this is the tool an agent reaches for when it needs the live numbers behind a specific metric or reportrun_native_query: executes an ad-hoc SQL query against a connected database. useful when the question isn't already saved as a card and needs a custom queryget_dashboard: retrieves a dashboard's layout along with the current results for every card it contains. good for pulling a full snapshot of a report rather than a single metriclist_databases: returns the databases connected to a Metabase instance, along with schema details. agents call this first when they need to know what data is even available to querysearch_cards: finds saved questions by keyword or natural-language description. handy when an agent knows roughly what metric it needs but not the exact card namelist_collections: lists the collections that organize dashboards and questions into folders. agents use this to navigate a large Metabase instance and locate the right resources by team or projectSince Metabase already ships its own official MCP server, the difference comes down to what you get once agents are actually running in production:
You can take the following steps:
1. Create or log into your Merge Agent Handler account.
2. Install the Merge CLI by running pipx install merge-api, then run merge configure to link the CLI to your Merge account and merge login to authenticate your session.
3. Register the Agent Handler MCP server with Claude Code by running claude mcp add --transport http agent-handler https://ah-api.merge.dev/mcp, then open Claude Code and run /mcp to confirm agent-handler appears with a connected status.
4. Select agent-handler from the MCP list. This opens a browser window where you select which integrations to authenticate. Choose Metabase and complete the auth flow. Merge stores and manages the credentials going forward.
5. Open a Claude Code session and start querying Metabase data directly. The first time you use a Metabase tool, a Magic Link may appear to complete connector authentication.
If you want to connect Merge Agent Handler's Metabase MCP with internal or customer-facing agentic products, you can follow the steps in our docs.
Yes, Merge for Workforce lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, Codex, and other MCP-compatible AI tools to Metabase without bypassing IT governance.
Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Merge and gets individual credentials tied to their identity. An analyst can ask their AI to pull a dashboard's latest numbers, run a saved question, or summarize a metric trend, all within IT-defined permissions.
IT also provisions access by role or group via SCIM. A data analyst, for example, gets Metabase access to run saved questions, Snowflake access to query warehouse tables, and Slack access to post summaries to a channel, while a finance manager gets Metabase access to pull revenue dashboards, NetSuite access to reconcile transactions, and Google Sheets access to export reporting data.
Every tool call an employee's AI makes to Metabase is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now