Metabase MCP Server

$npm install metabase-mcp-mbql
README.md

Enables AI assistants to interact with Metabase by providing access to dashboards, questions, and databases through the Metabase API.

metabase-mcp-mbql

Serveur MCP (Model Context Protocol) pour l'intégration avec Metabase, avec support complet de MBQL pour l'édition visuelle des requêtes.

Installation

npm install metabase-mcp-mbql

Configuration MCP

Ajoutez cette configuration à votre client MCP (Claude Desktop, etc.) :

{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["metabase-mcp-mbql"],
      "env": {
        "METABASE_URL": "https://metabase.example.com",
        "METABASE_API_KEY": "mb_votre_cle_api"
      }
    }
  }
}

Authentification

Deux méthodes sont supportées :

1. Clé API (recommandé) :

{
  "METABASE_URL": "https://metabase.example.com",
  "METABASE_API_KEY": "mb_votre_cle_api"
}

2. Identifiants utilisateur :

{
  "METABASE_URL": "https://metabase.example.com",
  "METABASE_USERNAME": "votre_email",
  "METABASE_PASSWORD": "votre_mot_de_passe"
}

Outils disponibles

Dashboards

Outil Description
list_dashboards Liste tous les dashboards
get_dashboard Récupère les détails complets d'un dashboard (cartes, paramètres)
create_dashboard Crée un nouveau dashboard
update_dashboard Met à jour un dashboard existant
delete_dashboard Archive ou supprime un dashboard
get_dashboard_cards Liste toutes les cartes d'un dashboard
add_card_to_dashboard Ajoute une carte à un dashboard
remove_card_from_dashboard Retire une carte d'un dashboard
update_dashboard_cards Met à jour les cartes avec leurs mappings de paramètres
add_dashboard_filter Ajoute ou met à jour un filtre sur un dashboard

Cards (Questions)

Outil Description
list_cards Liste toutes les questions/cartes (filtres: archived, table, database, using_model, bookmarked, using_segment, all, mine)
get_card Récupère une carte avec sa configuration complète (dataset_query, template-tags)
create_card Crée une nouvelle question
update_card Met à jour une question existante
delete_card Archive ou supprime une question
execute_card Exécute une question et retourne les résultats

Requêtes MBQL

Outil Description
create_card_mbql Crée une question en MBQL (éditable dans le query builder visuel)
execute_mbql_query Exécute une requête MBQL sans créer de carte

Requêtes SQL

Outil Description
execute_query Exécute une requête SQL native sur une base de données

Bases de données

Outil Description
list_databases Liste toutes les bases de données
get_database_metadata Récupère les métadonnées complètes (tables, champs, IDs)
get_table_metadata Récupère les métadonnées détaillées d'une table

Collections

Outil Description
list_collections Liste toutes les collections
create_collection Crée une nouvelle collection
update_collection Met à jour une collection

Utilisateurs

Outil Description
list_users Liste tous les utilisateurs
get_user Récupère les détails d'un utilisateur
create_user Crée un nouvel utilisateur
update_user Met à jour un utilisateur
disable_user Désactive un utilisateur

Permissions

Outil Description
list_permission_groups Liste les groupes de permissions
create_permission_group Crée un groupe de permissions
delete_permission_group Supprime un groupe de permissions
get_collection_permissions Récupère le graphe des permissions par collection
update_collection_permissions Met à jour les permissions d'un groupe sur une collection
add_user_to_group Ajoute un utilisateur à un groupe
remove_user_from_group Retire un utilisateur d'un groupe

Exemples d'utilisation

Créer une question MBQL

{
  "name": "Ventes par mois",
  "database_id": 1,
  "query": {
    "source-table": 123,
    "aggregation": [["sum", ["field", 456, null]]],
    "breakout": [["field", 789, {"temporal-unit": "month"}]]
  },
  "display": "line"
}

Configurer un filtre avec template-tag

{
  "card_id": 42,
  "dataset_query": {
    "type": "native",
    "database": 1,
    "native": {
      "query": "SELECT * FROM orders WHERE status = {{status}}",
      "template-tags": {
        "status": {
          "id": "abc-123",
          "name": "status",
          "display-name": "Statut",
          "type": "dimension",
          "dimension": ["field", 456, null],
          "widget-type": "category"
        }
      }
    }
  }
}

Connecter un filtre dashboard à une carte

{
  "dashboard_id": 10,
  "cards": [{
    "id": 100,
    "card_id": 42,
    "row": 0,
    "col": 0,
    "size_x": 6,
    "size_y": 4,

Tools (37)

list_dashboardsLists all dashboards
get_dashboardRetrieves full details of a dashboard including cards and parameters
create_dashboardCreates a new dashboard
update_dashboardUpdates an existing dashboard
delete_dashboardArchives or deletes a dashboard
get_dashboard_cardsLists all cards in a dashboard
add_card_to_dashboardAdds a card to a dashboard
remove_card_from_dashboardRemoves a card from a dashboard
update_dashboard_cardsUpdates cards with their parameter mappings
add_dashboard_filterAdds or updates a filter on a dashboard
list_cardsLists all questions/cards with filters like archived, table, database
get_cardRetrieves a card with full configuration including dataset_query and template-tags
create_cardCreates a new question
update_cardUpdates an existing question
delete_cardArchives or deletes a question
execute_cardExecutes a question and returns results
create_card_mbqlCreates a question using MBQL editable in visual query builder
execute_mbql_queryExecutes an MBQL query without creating a card
execute_queryExecutes a native SQL query on a database
list_databasesLists all databases
get_database_metadataRetrieves complete metadata including tables, fields, IDs
get_table_metadataRetrieves detailed metadata for a table
list_collectionsLists all collections
create_collectionCreates a new collection
update_collectionUpdates a collection
list_usersLists all users
get_userRetrieves details of a user
create_userCreates a new user
update_userUpdates a user
disable_userDisables a user
list_permission_groupsLists permission groups
create_permission_groupCreates a permission group
delete_permission_groupDeletes a permission group
get_collection_permissionsRetrieves permissions graph per collection
update_collection_permissionsUpdates permissions for a group on a collection
add_user_to_groupAdds a user to a group
remove_user_from_groupRemoves a user from a group

Environment Variables

METABASE_URLrequiredURL of the Metabase instance
METABASE_API_KEYMetabase API key for authentication (recommended)
METABASE_USERNAMEMetabase username for user authentication (alternative)
METABASE_PASSWORDMetabase password for user authentication (alternative)

Configuration

claude_desktop_config.json
{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["metabase-mcp-mbql"],
      "env": {
        "METABASE_URL": "https://metabase.example.com",
        "METABASE_API_KEY": "mb_votre_cle_api"
      }
    }
  }
}

Try it

List all dashboards in my Metabase instance.
Execute card ID 123 and return the results.
Execute this SQL query: SELECT * FROM orders WHERE status = 'shipped'.
Create a new MBQL question for sales aggregated by month from table 123.
List all databases and get metadata for database ID 1.

Frequently Asked Questions

How do I install Metabase MCP Server?

Install Metabase MCP Server by running: npm install metabase-mcp-mbql

What MCP clients work with Metabase MCP Server?

Metabase MCP Server works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Use Metabase MCP Server with Conare

Manage MCP servers visually, upload persistent context, and never start from zero with Claude Code & Codex.

Try Free