Skip to main content
Glama
yespark

metabase-server

by yespark
README.md
# 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

```bash
npm install metabase-mcp-mbql
```

## Configuration MCP

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

```json
{
  "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é) :**
```json
{
  "METABASE_URL": "https://metabase.example.com",
  "METABASE_API_KEY": "mb_votre_cle_api"
}
```

**2. Identifiants utilisateur :**
```json
{
  "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

```json
{
  "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

```json
{
  "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

```json
{
  "dashboard_id": 10,
  "cards": [{
    "id": 100,
    "card_id": 42,
    "row": 0,
    "col": 0,
    "size_x": 6,
    "size_y": 4,
    "parameter_mappings": [{
      "parameter_id": "filter-1",
      "card_id": 42,
      "target": ["variable", ["template-tag", "status"]]
    }]
  }]
}
```

---

## Développement

```bash
# Installation des dépendances
npm install

# Build
npm run build

# Watch mode
npm run watch

# Inspector MCP (debug)
npm run inspector
```

## Licence

MIT