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 dashboardsget_dashboardRetrieves full details of a dashboard including cards and parameterscreate_dashboardCreates a new dashboardupdate_dashboardUpdates an existing dashboarddelete_dashboardArchives or deletes a dashboardget_dashboard_cardsLists all cards in a dashboardadd_card_to_dashboardAdds a card to a dashboardremove_card_from_dashboardRemoves a card from a dashboardupdate_dashboard_cardsUpdates cards with their parameter mappingsadd_dashboard_filterAdds or updates a filter on a dashboardlist_cardsLists all questions/cards with filters like archived, table, databaseget_cardRetrieves a card with full configuration including dataset_query and template-tagscreate_cardCreates a new questionupdate_cardUpdates an existing questiondelete_cardArchives or deletes a questionexecute_cardExecutes a question and returns resultscreate_card_mbqlCreates a question using MBQL editable in visual query builderexecute_mbql_queryExecutes an MBQL query without creating a cardexecute_queryExecutes a native SQL query on a databaselist_databasesLists all databasesget_database_metadataRetrieves complete metadata including tables, fields, IDsget_table_metadataRetrieves detailed metadata for a tablelist_collectionsLists all collectionscreate_collectionCreates a new collectionupdate_collectionUpdates a collectionlist_usersLists all usersget_userRetrieves details of a usercreate_userCreates a new userupdate_userUpdates a userdisable_userDisables a userlist_permission_groupsLists permission groupscreate_permission_groupCreates a permission groupdelete_permission_groupDeletes a permission groupget_collection_permissionsRetrieves permissions graph per collectionupdate_collection_permissionsUpdates permissions for a group on a collectionadd_user_to_groupAdds a user to a groupremove_user_from_groupRemoves a user from a groupEnvironment Variables
METABASE_URLrequiredURL of the Metabase instanceMETABASE_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.