> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration MCP

> Comment ajouter, configurer et gérer des serveurs MCP

<div id="adding-mcp-servers">
  ## Ajouter des serveurs MCP
</div>

<div id="via-command-line">
  ### En ligne de commande
</div>

Le moyen le plus rapide d’ajouter un serveur MCP :

```bash theme={null}
# Serveur stdio — passez simplement la commande après --
devin mcp add <name> -- <command> [args...]

# Serveur HTTP — passez l'URL comme argument positionnel
devin mcp add <name> <URL>

# Serveur HTTP — ou utilisez l'option --url
devin mcp add <name> --url <URL>
```

Le type de transport est déduit automatiquement : une URL implique HTTP (Streamable HTTP), et des arguments en fin de commande (ou `--command`) impliquent stdio.

<Note>Les serveurs MCP distants utilisent Streamable HTTP par défaut. Si le serveur répond avec une erreur HTTP 4xx, la CLI bascule vers SSE sur la même URL. Définissez `"transport": "sse"` explicitement si nécessaire — voir [basculement vers l’ancien SSE](#legacy-sse-fallback) ci-dessous.</Note>

Par défaut, les serveurs sont enregistrés dans le périmètre **local** (`.devin/config.local.json`, ignoré par Git). Utilisez `-s`/`--scope` pour le modifier :

```bash theme={null}
devin mcp add -s project <name> <URL>   # partagé via .devin/config.json
devin mcp add -s user <name> <URL>      # global (~/.config/devin/config.json ; %APPDATA%\devin\config.json sous Windows)
```

Vous pouvez également gérer les serveurs en ligne de commande :

```bash theme={null}
devin mcp list              # List all configured servers
devin mcp get <name>        # Show details for a specific server
devin mcp remove <name>     # Remove a configured server
devin mcp login <name>      # Authenticate with a server via OAuth
devin mcp logout <name>     # Remove stored identifiants OAuth
devin mcp enable <name>     # Activer un serveur désactivé
devin mcp disable <name>    # Désactiver un serveur sans le supprimer
```

<div id="via-config-file">
  ### Via un fichier de configuration
</div>

Ajoutez des serveurs directement dans la section `mcpServers` de votre fichier de configuration :

<Tabs>
  <Tab title="Configuration du projet">
    ```json theme={null}
    // .devin/config.json
    {
      "mcpServers": {
        "server-name": {
          "command": "npx",
          "args": ["-y", "@company/mcp-server"],
          "env": {
            "API_KEY": "your-key"
          }
        }
      }
    }
    ```

    <Note>Les serveurs définis au niveau du projet sont partagés avec votre Team via le contrôle de version.</Note>
  </Tab>

  <Tab title="Configuration utilisateur">
    ```json theme={null}
    // ~/.config/devin/config.json
    {
      "mcpServers": {
        "my-server": {
          "command": "node",
          "args": ["/path/to/my-server.js"],
          "env": {}
        }
      }
    }
    ```

    <Note>Les serveurs définis au niveau utilisateur s’appliquent à tous vos projets.</Note>
  </Tab>

  <Tab title="Surcharge locale">
    ```json theme={null}
    // .devin/config.local.json
    {
      "mcpServers": {
        "server-name": {
          "command": "npx",
          "args": ["-y", "@company/mcp-server"],
          "env": {
            "API_KEY": "my-personal-key"
          }
        }
      }
    }
    ```

    <Note>Les configurations locales sont ignorées par Git ; utilisez-les pour les clés API personnelles.</Note>
  </Tab>
</Tabs>

***

<div id="server-configuration-options">
  ## Options de configuration des serveurs
</div>

Les serveurs MCP peuvent être configurés de deux manières : comme **commande locale** (transport stdio) ou comme **serveur distant** (transport HTTP).

<div id="local-command-stdio">
  ### Commande locale (stdio)
</div>

| Champ      | Type      | Requis | Description                                                                                                                   |
| ---------- | --------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `command`  | string    | Oui    | L’exécutable à lancer                                                                                                         |
| `args`     | string\[] | Non    | Arguments de ligne de commande                                                                                                |
| `env`      | object    | Non    | Variables d’environnement à définir                                                                                           |
| `disabled` | boolean   | Non    | Définir sur `true` pour ignorer ce serveur (voir [Activation et désactivation des serveurs](#enabling-and-disabling-servers)) |

<div id="remote-server-streamable-http">
  ### Serveur distant (Streamable HTTP)
</div>

| Champ               | Type    | Obligatoire | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------------- | ------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `url`               | string  | Oui         | L’URL de l’endpoint du serveur MCP                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `transport`         | string  | Non         | `"http"` (Streamable HTTP, valeur par défaut pour les serveurs configurés via une URL) ou `"sse"` (ancien SSE). Lorsqu’il est défini sur `"http"` ou omis, la CLI essaie d’abord Streamable HTTP, puis bascule sur SSE en cas d’erreurs 4xx ([selon la spécification](https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/transports/#backwards-compatibility)). Définissez `"sse"` explicitement si l’endpoint SSE du serveur se trouve sur un chemin différent. |
| `headers`           | object  | Non         | En-têtes HTTP personnalisés à inclure dans les requêtes                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `oauthClientId`     | string  | Non         | Client ID OAuth préenregistré, pour les serveurs qui ne prennent pas en charge l’enregistrement dynamique des clients (DCR), p. ex. GitHub. Voir la section « Pre-registered OAuth clients » ci-dessous.                                                                                                                                                                                                                                                                          |
| `oauthClientSecret` | string  | Non         | Secret client OAuth, pour les clients confidentiels. À associer à `oauthClientId`.                                                                                                                                                                                                                                                                                                                                                                                                |
| `disabled`          | boolean | Non         | Définissez sur `true` pour ignorer ce serveur (voir [Activation et désactivation des serveurs](#enabling-and-disabling-servers))                                                                                                                                                                                                                                                                                                                                                  |

<div id="examples">
  ### Exemples
</div>

<AccordionGroup>
  <Accordion title="GitHub (stdio)">
    ```json theme={null}
    {
      "mcpServers": {
        "github": {
          "command": "npx",
          "args": ["-y", "@modelcontextprotocol/server-github"],
          "env": {
            "GITHUB_TOKEN": "ghp_..."
          }
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="Notion (HTTP avec OAuth)">
    ```json theme={null}
    {
      "mcpServers": {
        "notion": {
          "url": "https://mcp.notion.com/mcp",
          "transport": "http"
        }
      }
    }
    ```

    <Note>Après avoir ajouté un serveur utilisant OAuth, exécutez `devin mcp login notion` pour vous authentifier. Voir [Authentification](#authentication) ci-dessous.</Note>
  </Accordion>

  <Accordion title="Linear (HTTP avec OAuth)">
    ```json theme={null}
    {
      "mcpServers": {
        "linear": {
          "url": "https://mcp.linear.app/mcp",
          "transport": "http"
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="Atlassian / Jira (HTTP avec OAuth)">
    ```json theme={null}
    {
      "mcpServers": {
        "atlassian": {
          "url": "https://mcp.atlassian.com/v1/mcp",
          "transport": "http"
        }
      }
    }
    ```

    <Note>Après l'avoir ajouté, exécutez `devin mcp login atlassian` pour vous authentifier. Chaque client MCP (Windsurf, Claude Code, Devin CLI) conserve sa propre session OAuth. Vous devez donc vous connecter séparément, même si vous vous êtes déjà authentifié dans un autre outil.</Note>
  </Accordion>

  <Accordion title="Serveur personnalisé (stdio)">
    ```json theme={null}
    {
      "mcpServers": {
        "my-tools": {
          "command": "python",
          "args": ["./scripts/mcp-server.py"],
          "env": {
            "DB_URL": "postgres://localhost/mydb"
          }
        }
      }
    }
    ```
  </Accordion>
</AccordionGroup>

***

<div id="authentication">
  ## Authentification
</div>

Certains serveurs MCP distants nécessitent une authentification OAuth. Après avoir ajouté un serveur utilisant OAuth à votre configuration, authentifiez-vous à l’aide de la commande `login` :

```bash theme={null}
devin mcp login <server-name>
```

Par exemple :

```bash theme={null}
devin mcp login notion    # S'authentifier avec Notion
devin mcp login linear    # S'authentifier avec Linear
```

Cela ouvre une fenêtre de navigateur dans laquelle vous pouvez autoriser l’accès. Les tokens OAuth sont stockés localement et renouvelés automatiquement.

Vous pouvez également demander des périmètres OAuth spécifiques :

```bash theme={null}
devin mcp login notion --scopes read,write
```

Pour supprimer les identifiants OAuth enregistrés pour un serveur :

```bash theme={null}
devin mcp logout <server-name>
```

<Note>
  Si le serveur prend en charge OAuth, une invite d’authentification s’affichera également automatiquement lors de sa première utilisation.
</Note>

<div id="pre-registered-oauth-clients">
  ### Clients OAuth préenregistrés
</div>

La plupart des serveurs MCP basés sur OAuth prennent en charge l’[enregistrement dynamique des clients](https://datatracker.ietf.org/doc/html/rfc7591) (DCR). Devin CLI s’enregistre donc automatiquement, et vous n’avez pas besoin de fournir d’identifiants client.

Certains fournisseurs (p. ex. GitHub) ne prennent pas en charge la DCR et exigent à la place un client OAuth **préenregistré**. Pour ces fournisseurs, indiquez le Client ID — ainsi qu’un secret client s’il s’agit d’un client confidentiel — via `oauthClientId` / `oauthClientSecret` :

```json theme={null}
{
  "mcpServers": {
    "my-server": {
      "url": "https://mcp.example.com/mcp",
      "transport": "http",
      "oauthClientId": "Iv1.abc123def456",
      "oauthClientSecret": "${env:MY_MCP_CLIENT_SECRET}"
    }
  }
}
```

Lorsque `oauthClientId` est défini, Devin CLI ignore l’enregistrement dynamique du client et utilise votre client préenregistré lors du flux OAuth. Exécutez `devin mcp login <name>` (ou déclenchez l’authentification lors de la première utilisation) pour vous authentifier comme d’habitude.

Vous pouvez également les définir depuis la ligne de commande lors de l’ajout d’un serveur ou de la connexion à celui-ci :

```bash theme={null}
devin mcp add my-server <URL> --oauth-client-id <ID> --oauth-client-secret <SECRET>
devin mcp login my-server --oauth-client-id <ID> --oauth-client-secret <SECRET>
```

<Note>
  `oauthClientId` / `oauthClientSecret` sont des identifiants client OAuth utilisés dans le cadre du flux d’autorisation. Il ne s’agit **pas** d’identifiants génériques envoyés à chaque requête — si un serveur attend un token statique, utilisez plutôt `headers` (HTTP) ou `env` (stdio).
</Note>

<Warning>
  N’ajoutez pas de client secret à une configuration partagée. Référencez-le via une variable d’environnement (`${env:VAR}`), lisez-le à partir d’un fichier (`${file:/path}`) ou placez-le dans `.devin/config.local.json` (ignoré par Git). Consultez la section "Gestion des secrets" ci-dessous.
</Warning>

***

<div id="enabling-and-disabling-servers">
  ## Activation et désactivation des serveurs
</div>

Vous pouvez temporairement désactiver un serveur MCP sans supprimer sa configuration. Un serveur désactivé est ignoré lors de la découverte des outils : ses outils n’apparaîtront pas et le processus du serveur ne sera pas lancé.

```bash theme={null}
devin mcp disable <name>    # Désactiver un serveur
devin mcp enable <name>     # Le réactiver
```

Cette commande définit l’indicateur `"disabled": true` pour l’entrée de serveur dans le fichier de configuration. Utilisez `-s`/`--scope` pour cibler un périmètre spécifique :

```bash theme={null}
devin mcp disable -s project my-server
devin mcp enable -s user my-server
```

Vous pouvez également définir cette option directement dans votre fichier de configuration :

```json theme={null}
{
  "mcpServers": {
    "my-server": {
      "command": "npx",
      "args": ["-y", "@company/mcp-server"],
      "disabled": true
    }
  }
}
```

<Note>Désactiver un serveur est utile lorsque vous souhaitez conserver sa configuration (y compris les variables d’environnement et les identifiants OAuth) tout en cessant temporairement de l’utiliser — par exemple, pour réduire le temps de démarrage ou isoler un problème.</Note>

***

<div id="managing-secrets">
  ## Gestion des secrets
</div>

<Warning>
  N’ajoutez jamais de clés API ou de secrets au contrôle de version. Utilisez `.devin/config.local.json` pour les données sensibles.
</Warning>

Pour les projets d’équipe, la méthode recommandée est la suivante :

1. Définissez le serveur dans `.devin/config.json` avec des espaces réservés pour les variables d’environnement, ou sans variables d’environnement
2. Chaque membre de l’équipe ajoute ses clés personnelles dans `.devin/config.local.json`

Le fichier de configuration local est automatiquement exclu de git.

***

<div id="mcp-permissions">
  ## Autorisations MCP
</div>

Vous pouvez approuver à l’avance, refuser ou toujours demander pour des outils MCP spécifiques dans votre configuration des autorisations :

```json theme={null}
{
  "permissions": {
    "allow": [
      "mcp__github__list_issues",
      "mcp__github__create_issue"
    ],
    "deny": [
      "mcp__github__delete_repo"
    ],
    "ask": [
      "mcp__linear__*"
    ]
  }
}
```

**Motifs de correspondance des autorisations :**

| Motif               | Correspond à                                  |
| ------------------- | --------------------------------------------- |
| `mcp__server__tool` | Un outil spécifique sur un serveur spécifique |
| `mcp__server__*`    | Tous les outils sur un serveur spécifique     |
| `mcp__*`            | Tous les outils MCP sur tous les serveurs     |

***

<div id="organization-restrictions">
  ## Restrictions de l’organisation
</div>

Si vous faites partie d’une Team Enterprise, votre administrateur peut limiter les serveurs MCP auxquels vous pouvez vous connecter. Un serveur que vous avez configuré peut être bloqué si MCP est désactivé pour votre Team, ou s’il ne figure pas dans la liste d’autorisation de votre Team ni dans un **registre MCP** imposé — auquel cas il ne pourra pas se connecter et ses outils ne seront pas disponibles. Voir [Team Settings — MCP Registry](/fr/cli/enterprise/team-settings#mcp-registry) pour plus de détails.

***

<div id="troubleshooting">
  ## Dépannage
</div>

<AccordionGroup>
  <Accordion title="Authentification requise / erreurs OAuth avec des serveurs distants">
    Si vous voyez des erreurs comme `Auth required` ou `AuthRequired` lors de la connexion à un serveur MCP distant, cela signifie que le serveur nécessite une authentification OAuth.

    Exécutez :

    ```bash theme={null}
    devin mcp login <server-name>
    ```

    Chaque client MCP s’authentifie indépendamment. Même si vous vous êtes déjà authentifié dans Windsurf ou Claude Code, vous devez exécuter `devin mcp login` séparément pour Devin CLI.

    Pour vérifier votre statut d’authentification, essayez de supprimer puis de rajouter les identifiants :

    ```bash theme={null}
    devin mcp logout <server-name>
    devin mcp login <server-name>
    ```
  </Accordion>

  <Accordion title="Le serveur ne démarre pas">
    Vérifiez que la commande fonctionne en dehors de Devin CLI :

    ```bash theme={null}
    npx -y @modelcontextprotocol/server-github
    ```

    Vérifiez que toutes les variables d’environnement requises sont bien définies.
  </Accordion>

  <Accordion title="Les outils n’apparaissent pas">
    Demandez à l’agent de lister les serveurs MCP et les outils. Le serveur peut avoir besoin d’un instant pour s’initialiser.
  </Accordion>

  <Accordion title="Autorisation refusée">
    Vérifiez la configuration de vos autorisations. Par défaut, les outils MCP demandent une approbation. Ajoutez-les à `permissions.allow` pour les approuver automatiquement.
  </Accordion>

  <Accordion title="Basculement vers l’ancien SSE">
    Lors de la connexion à un serveur HTTP, Devin CLI essaie d’abord **Streamable HTTP**. Si le serveur renvoie une erreur HTTP 4xx (p. ex. 404 ou 405), il bascule automatiquement vers **l’ancien SSE** sur la **même URL configurée**. Cela suit les [recommandations de rétrocompatibilité de la spécification MCP](https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/transports/#backwards-compatibility).

    Le basculement ne se déclenche que pour les réponses 4xx — les erreurs de connexion, les délais d’expiration et les réponses 5xx sont signalés directement, sans tentative SSE.

    Si l’endpoint SSE de votre serveur se trouve sur un chemin différent (p. ex. `/sse` au lieu de `/mcp`), définissez `"transport": "sse"` avec l’URL SSE pour vous connecter directement, sans tentative préalable via Streamable HTTP.

    Si les deux transports échouent, le message d’erreur inclut les détails des deux tentatives pour faciliter le dépannage.
  </Accordion>
</AccordionGroup>
