Ce que vous pouvez faire avec MCP
Avec les serveurs MCP connectés, vous pouvez demander à Claude Code de :- Implémenter des fonctionnalités à partir de suivi de problèmes : « Ajouter la fonctionnalité décrite dans le problème JIRA ENG-4521 et créer une PR sur GitHub. »
- Analyser les données de surveillance : « Vérifier Sentry et Statsig pour vérifier l’utilisation de la fonctionnalité décrite dans ENG-4521. »
- Interroger les bases de données : « Trouver les e-mails de 10 utilisateurs aléatoires qui ont utilisé la fonctionnalité ENG-4521, en fonction de notre base de données PostgreSQL. »
- Intégrer les conceptions : « Mettre à jour notre modèle d’e-mail standard en fonction des nouvelles conceptions Figma qui ont été publiées sur Slack »
- Automatiser les flux de travail : « Créer des brouillons Gmail invitant ces 10 utilisateurs à une session de rétroaction sur la nouvelle fonctionnalité. »
- Réagir aux événements externes : Un serveur MCP peut également agir comme un canal qui pousse des messages dans votre session, afin que Claude réagisse aux messages Telegram, aux discussions Discord ou aux événements webhook pendant que vous êtes absent.
Trouver et créer des serveurs MCP
Parcourez les connecteurs vérifiés dans le Répertoire Anthropic. Les connecteurs du répertoire utilisent la même infrastructure MCP que Claude Code, vous pouvez donc ajouter n’importe quel serveur distant répertorié avecclaude mcp add.
Pour créer votre propre serveur, consultez le guide du serveur MCP pour les principes fondamentaux du protocole et la documentation de création de connecteurs Claude pour l’authentification, les tests et la soumission au répertoire.
Vous pouvez également faire en sorte que Claude crée un serveur pour vous avec le plugin officiel mcp-server-dev.
Installer le plugin
Marketplace "claude-plugins-official" not found: ajoutez le marketplace avec/plugin marketplace add anthropics/claude-plugins-official, puis réessayez l’installation.- Le plugin est introuvable dans le marketplace : vérifiez le nom du plugin.
Run /reload-plugins to activate., Claude Code exécute ensuite ce rechargement pour vous. Si le rechargement vous avertit que votre prochain message relierait la conversation, exécutez /reload-plugins --force.Exécuter la compétence de création
Installation des serveurs MCP
Les serveurs MCP peuvent être configurés de plusieurs façons selon vos besoins :Option 1 : Ajouter un serveur HTTP distant
Les serveurs HTTP sont l’option recommandée pour se connecter à des serveurs MCP distants. C’est le transport le plus largement supporté pour les services basés sur le cloud..mcp.json, ~/.claude.json, ou claude mcp add-json, le champ type accepte streamable-http comme alias pour http. La spécification MCP utilise le nom streamable-http pour ce transport, donc les configurations copiées depuis la documentation du serveur fonctionnent sans modification.
Une entrée JSON qui a une url mais pas de type est une erreur de configuration, car Claude Code lit une entrée sans type comme un serveur stdio. Claude Code ignore ce serveur et rapporte MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry. Avant la v2.1.202, Claude Code rapportait cette mauvaise configuration comme command: expected string, received undefined.
Dans les exécutions --output-format stream-json, Claude Code rapporte également une entrée --mcp-config ignorée dans le champ mcp_server_errors de l’événement system/init, afin que les scripts puissent détecter que le serveur n’a jamais été chargé. Cela nécessite Claude Code v2.1.219 ou ultérieur.
Option 2 : Ajouter un serveur SSE distant
Certains services exposent toujours uniquement un point de terminaison SSE. Ajoutez-les avec la même commandeclaude mcp add --transport http <name> <url> que pour un serveur HTTP. Claude Code essaie d’abord le transport HTTP et bascule vers SSE lorsque le serveur ne l’accepte pas. Le basculement automatique nécessite Claude Code v2.1.265 ou ultérieur.
Sur une version antérieure, ou pour se connecter directement via SSE, passez --transport sse à la place :
Option 3 : Ajouter un serveur stdio local
Les serveurs stdio s’exécutent en tant que processus locaux sur votre machine. Ils sont idéaux pour les outils qui ont besoin d’un accès direct au système ou de scripts personnalisés. Claude Code définitCLAUDE_PROJECT_DIR dans l’environnement du serveur généré pour que votre serveur puisse résoudre les chemins relatifs au projet sans dépendre du répertoire de travail. C’est le même répertoire que les hooks reçoivent dans leur variable CLAUDE_PROJECT_DIR. Lisez-le depuis l’intérieur de votre processus serveur, par exemple process.env.CLAUDE_PROJECT_DIR en Node ou os.environ["CLAUDE_PROJECT_DIR"] en Python.
CLAUDE_PROJECT_DIR est la racine du projet stable et ne change pas lorsque vous ajoutez ou supprimez des répertoires de travail en cours de session. Un serveur qui limite son propre accès au système de fichiers à un ensemble de répertoires autorisés devrait implémenter la demande MCP roots/list à la place. Claude Code répond à roots/list avec le répertoire de lancement de la session plus chaque répertoire de travail supplémentaire que vous avez accordé avec --add-dir, /add-dir, ou le paramètre additionalDirectories. Claude Code envoie notifications/roots/list_changed lorsque cet ensemble change. Avant la v2.1.203, roots/list retournait uniquement le répertoire de lancement et Claude Code n’envoyait pas notifications/roots/list_changed.
Cette variable est définie dans l’environnement du serveur, pas dans l’environnement de Claude Code lui-même, donc la référencer via l’expansion ${VAR} dans la command ou args d’une entrée .mcp.json scoped au projet ou une entrée serveur locale ou utilisateur dans ~/.claude.json nécessite une valeur par défaut telle que ${CLAUDE_PROJECT_DIR:-.}. Les configurations MCP fournies par les plugins substituent ${CLAUDE_PROJECT_DIR} directement et n’ont pas besoin de la valeur par défaut.
--Pour les serveurs stdio, le -- (double tiret) sépare les propres options de Claude, telles que --transport, --env, et --scope, de la commande et des arguments qui exécutent le serveur. Tout ce qui suit -- est transmis au serveur sans modification.Par exemple :claude mcp add --transport stdio myserver -- npx server→ exécutenpx serverclaude mcp add --env KEY=value --transport stdio myserver -- python server.py --port 8080→ exécutepython server.py --port 8080avecKEY=valuedans l’environnement
--, Claude Code essaierait d’analyser les drapeaux du serveur, comme --port ci-dessus, comme ses propres options.--env accepte plusieurs paires KEY=value. Si le nom du serveur vient directement après --env, la CLI lit le nom comme une autre paire et le rejette, donc placez au moins une autre option, comme --transport stdio, entre --env et le nom du serveur.Option 4 : Ajouter un serveur WebSocket distant
Les serveurs WebSocket maintiennent une connexion bidirectionnelle persistante, ce qui convient aux serveurs MCP distants qui poussent des événements vers Claude sans être sollicités. Utilisez HTTP à la place lorsque votre serveur répond uniquement aux demandes, car HTTP supporte OAuth et le drapeauclaude mcp add --transport, tandis que WebSocket ne supporte ni l’un ni l’autre.
Configurez les serveurs WebSocket dans .mcp.json ou avec claude mcp add-json :
type: "ws" accepte les mêmes champs url, headers, headersHelper, timeout, et alwaysLoad que http. L’authentification est uniquement par en-tête, donc passez un jeton statique dans headers ou générez-en un au moment de la connexion avec headersHelper. Le drapeau claude mcp add --transport n’accepte pas ws.
Ajouter un serveur à partir d’instructions de configuration écrites pour un autre client
Les serveurs MCP ne sont pas spécifiques à Claude Code, donc les instructions de configuration d’un serveur peuvent être écrites pour Claude Desktop, Cursor, ou un autre client MCP et ne pas donner de commandeclaude mcp add. Pour ajouter le serveur quand même, cherchez dans ces instructions l’une de ces trois choses :
- Une URL telle que
https://mcp.example.com/mcp: le serveur est distant. - Une commande de lancement telle que
npx -y @example/mcp-server: le serveur s’exécute sur votre machine. - Un bloc JSON
mcpServers: configuration écrite pour le fichier de paramètres d’un autre client.
--scope project ou --scope user.
À partir d’une URL
Une URL signifie que le serveur est distant. Pour un point de terminaisonhttps://, ajoutez-le avec --transport http, ou suivez l’Option 2 lorsque les instructions disent que le point de terminaison utilise SSE. Pour un point de terminaison wss://, utilisez plutôt l’Option 4, car --transport n’accepte pas ws :
--header comme montré dans l’Option 1.
À partir d’une commande npx, uvx, ou binaire
Une commande de lancement signifie que le serveur s’exécute en tant que processus stdio local. Mettez la commande entière après --, afin que Claude Code transmette les drapeaux tels que -y à la commande qui démarre le serveur au lieu de les lire comme ses propres options. Passez toutes les variables d’environnement que les instructions demandent avec --env, après le nom du serveur et avant -- :
-- en détail.
À partir d’un bloc JSON mcpServers
Un bloc mcpServers écrit pour un autre client MCP, tel que Claude Desktop, utilise la clé wrapper et la forme d’entrée que Claude Code lit. Passez à claude mcp add-json l’objet à l’intérieur de mcpServers, pas le wrapper. Deux entrées ont besoin d’une réparation d’abord :
- Une
urlsanstype: ajoutez"type": "http","type": "sse", ou"type": "ws"pour correspondre au point de terminaison. Claude Code lit une entrée sanstypecomme un serveur stdio, donc une entréeurlsanstypeéchoue. - Une clé avec des caractères autres que des lettres, des chiffres, des tirets, et des traits de soulignement : choisissez un nom de serveur qui utilise uniquement ces caractères. Sinon, la clé est le nom du serveur.
--scope pour add-json. Pour partager le serveur avec votre équipe à la place, ajoutez --scope project, ou ajoutez l’entrée sous mcpServers dans .mcp.json à la racine de votre projet et validez-la. La portée du projet couvre comment Claude Code charge et approuve ce fichier.
Chaque commande claude mcp add et claude mcp add-json imprime une ligne Added .... Pour vérifier que Claude Code s’est connecté, exécutez claude mcp get <name> ; la Statut du serveur couvre les statuts qu’il affiche et l’étape d’approbation pour les serveurs .mcp.json.
Gestion de vos serveurs
Une fois configurés, vous pouvez gérer vos serveurs MCP avec ces commandes :Statut du serveur
claude mcp add confirme un ajout réussi en imprimant une ligne Added ..., ce qui signifie que la configuration a été écrite. claude mcp list affiche ensuite un statut de santé à côté de chaque serveur qu’il liste, tel que ✔ Connected, ! Needs authentication, ou ✘ Failed to connect. Un statut d’échec signifie que Claude Code n’a pas pu se connecter à ce serveur, pas que la commande list a échoué.
Les statuts dans cette liste rapportent une décision de configuration plutôt qu’une tentative de connexion, donc Claude Code les imprime sans se connecter au serveur :
⏸ Pending approval (run `claude` to approve): un serveur scoped au projet depuis.mcp.jsonque vous n’avez pas encore approuvé. Claude Code l’affiche à la fois dansclaude mcp listetclaude mcp get <name>. Exécutezclaudede manière interactive pour l’examiner et l’approuver.✘ Rejected (see disabledMcpjsonServers in settings): un serveur.mcp.jsonqu’une entréedisabledMcpjsonServersrejette. Claude Code l’affiche uniquement dansclaude mcp get <name>.⊘ Disabled for this project (re-enable via /mcp): un serveur que la listedisabledMcpServersdu projet nomme. Claude Code l’affiche à la fois dansclaude mcp listetclaude mcp get <name>. Réactivez le serveur depuis le panneau/mcp. Avant la v2.1.238, les deux commandes se connectaient à un serveur désactivé pour le vérifier et rapportaient le résultat de la connexion.
claude mcp list. Utilisez claude mcp get <name> ou le panneau /mcp pour les vérifier.
Approbations des serveurs de projet et confiance de l’espace de travail
À partir de la v2.1.196,claude mcp list et claude mcp get lisent les approbations .mcp.json uniquement à partir des fichiers de paramètres qui ne sont pas validés dans le référentiel jusqu’à ce que vous fassiez confiance à l’espace de travail en exécutant claude et en acceptant la boîte de dialogue de confiance de l’espace de travail. Un référentiel cloné ne peut pas approuver ses propres serveurs : enableAllProjectMcpServers ou enabledMcpjsonServers validé dans le .claude/settings.json du projet est ignoré dans un dossier non approuvé, et le serveur reste à ⏸ Pending approval au lieu d’être connecté et vérifié.
Les approbations de ces sources s’appliquent toujours dans un dossier non approuvé :
- votre
~/.claude/settings.jsonutilisateur - paramètres gérés
- paramètres passés avec
--settings
.claude/settings.local.json non suivi, mais il exécute git pour vérifier si le fichier est suivi, et il n’exécute cette vérification que dans un dossier approuvé. Dans un dossier que vous n’avez jamais approuvé, Claude Code attend la boîte de dialogue de confiance avant d’appliquer les approbations du fichier, sauf si le dossier est votre propre répertoire de configuration : votre répertoire personnel, ou un répertoire dont le .claude que vous avez défini comme CLAUDE_CONFIG_DIR. Avant la v2.1.207, Claude Code appliquait les approbations d’un .claude/settings.local.json non suivi même dans un dossier que vous n’aviez jamais approuvé.
Une entrée disabledMcpjsonServers dans n’importe quel fichier de paramètres rejette toujours le serveur.
Détail du statut du serveur
Dans/mcp, y compris le menu d’un serveur là-bas, et dans le gestionnaire /plugin, un serveur HTTP ou SSE distant que vous avez utilisé auparavant peut afficher un statut cached tel que cached 2h ago · connects on first use · 5 tools. Claude Code a chargé la liste d’outils du serveur à partir de son cache de découverte, enregistré dans une session précédente, au lieu de se connecter au démarrage, et Claude Code connecte le serveur la première fois que Claude appelle l’un des outils du serveur. Les outils sont disponibles à partir de votre premier message, donc vous n’avez rien à faire. Le cache de découverte et son statut cached nécessitent Claude Code v2.1.221 ou ultérieur.
Le cache de découverte est désactivé par défaut sauf si un déploiement progressif l’a activé pour votre compte. Définissez MCP_DISCOVERY_CACHE=1 pour l’activer, ou 0 pour le garder désactivé même lorsque le déploiement l’a activé. Avant la v2.1.238, le cache était activé par défaut.
Deux actions dans le menu d’un serveur dans /mcp affectent également l’entrée du cache de ce serveur :
- Reconnect : sur un serveur
cached, Claude Code le connecte maintenant plutôt que lors de son premier appel d’outil et conserve l’entrée. Sur un serveur connecté ou échoué, Claude Code le reconnecte et supprime également l’entrée. - Clear authentication : Claude Code révoque l’authentification du serveur et supprime également l’entrée.
✘ Failed to connect, claude mcp list ajoute le détail de l’échec à cette ligne de statut, et claude mcp get <name> l’affiche sur une ligne Issue: : le statut HTTP ou le code d’erreur, plus tout texte d’erreur que le serveur a retourné. La vue de détail du serveur dans /mcp inclut le même texte rapporté par le serveur dans sa ligne Issue:. Claude Code rédige le texte ressemblant à des identifiants de ce détail et n’inclut jamais l’URL du serveur développée, qui peut contenir des secrets. Claude Code n’ajoute aucun détail à un statut ✘ Connection error, car le texte d’exception qu’il imprimerait là peut intégrer cette URL. Avant la v2.1.219, les deux commandes affichaient uniquement le statut d’échec nu, sans le code de statut ou le texte d’erreur du serveur.
Lorsque vous terminez l’authentification depuis /mcp et que la connexion échoue toujours avec un statut HTTP ou un code d’erreur de transport, Claude Code ajoute ce code et l’origine de l’URL qu’il a essayée au message qu’il imprime après la tentative. L’origine est le schéma et l’hôte, plus le port lorsque l’URL en nomme un, tel que https://mcp.example.com.
- Le chemin et la requête n’apparaissent jamais dans ce message.
- Pour un serveur dans la portée locale, de projet, ou utilisateur scope ou dans la configuration MCP gérée, l’origine affiche l’hôte tel qu’écrit dans cette configuration, donc une référence
${VAR}dans l’hôte n’est pas développée dans le message. - Pour un échec sans code de statut ou d’erreur, Claude Code affiche le texte d’erreur sans l’origine.
url vide s’affiche comme not configured dans /mcp, dans claude mcp list, et dans le gestionnaire /plugin, et Claude Code ne tente pas de s’y connecter. Un plugin peut inclure une entrée d’espace réservé comme celle-ci pour un connecteur que vous configurez plus tard, afin que Claude Code ne la rapporte pas comme une erreur ou un problème de configuration. La vue de détail du serveur dans /mcp lit No URL configured for this server ; définissez l’url de l’entrée pour la connecter. Avant la v2.1.208, Claude Code rapportait une url vide comme un problème de configuration avec une invite de reconnexion.
Avertissements de configuration
Claude Code avertit des problèmes de configuration ci-dessous. Chaque entrée dit ce que Claude Code vérifie et comment effacer l’avertissement :- Espaces blancs cachés : Claude Code avertit lorsqu’une valeur de configuration MCP porte des espaces blancs cachés en début ou en fin, ce qui provient souvent du collage d’un jeton avec une nouvelle ligne de fin. Claude Code vérifie
command,url, chaque entréeargs, et les valeurs et noms de clés sousenvetheaders. Claude Code affiche l’avertissement dans la sortieclaude mcp listet dans/mcp, nommant les champs affectés sans répéter leurs valeurs, par exempleLeading or trailing whitespace in: headers.Authorization. Claude Code ne supprime pas les espaces blancs et utilise les valeurs exactement comme écrites, donc modifiez la configuration pour les supprimer. - Même nom dans plus d’une portée : si vous définissez le même nom de serveur dans plus d’une portée avec des points de terminaison différents, Claude Code avertit du conflit dans la sortie
claude mcp listet dans/mcp. Claude Code stocke les connexions OAuth par point de terminaison, donc lorsque vous authentifiez la définition qui se charge dans un projet, vous devez toujours vous connecter séparément dans un projet où une définition différente se charge. Conservez le point de terminaison que vous voulez et supprimez les autres avecclaude mcp remove <name> --scope <scope>. Dans l’avertissement, Claude Code cite le point de terminaison de chaque portée tel qu’écrit dans votre configuration, avec les références${VAR}non développées, donc il n’affiche jamais une valeur résolue telle qu’une clé API. - Noms réservés : Claude Code réserve les noms de ses serveurs intégrés, y compris
workspace,claude-in-chrome,computer-use,Claude Preview, etClaude Browser. Si votre configuration définit un serveur avec un nom réservé, Claude Code le saute au moment du chargement et affiche un avertissement vous demandant de le renommer.claude mcp addrejette un nom réservé avec une erreur.Claude PreviewetClaude Browsernomment tous deux le serveur intégré que le volet d’aperçu de l’application de bureau Claude Code utilise. Avant la v2.1.205,Claude Browsern’était pas réservé, donc un serveur configuré par l’utilisateur pouvait s’enregistrer sous ce nom. - Variable d’environnement manquante : si une référence
${VAR}dans la configuration d’un serveur nomme une variable qui n’est pas définie et n’a pas de:-default, Claude Code avertit dans la sortieclaude mcp listet dans/mcp, nommant la variable, et charge toujours le serveur avec le texte${VAR}non développé. Définissez la variable ou ajoutez un fallback${VAR:-default}. Dans l’urlet lesheadersd’un serveur distant, certaines variables d’identifiants lisent comme vides à la place, sans avertissement.
Disponibilité des outils
Le panneau/mcp affiche le nombre d’outils à côté de chaque serveur connecté et signale les serveurs qui annoncent la capacité des outils mais n’exposent aucun outil.
Si votre demande a besoin d’outils d’un serveur qui se connecte toujours en arrière-plan, Claude attend ce serveur avant de continuer. La façon dont l’attente se produit dépend de votre configuration :
- Avec recherche d’outils, la valeur par défaut : l’attente se produit à l’intérieur de l’appel
ToolSearch. - Sans recherche d’outils : Claude utilise l’outil
WaitForMcpServersà la place. Les configurations sans recherche d’outils incluent uneANTHROPIC_BASE_URLpersonnalisée,ENABLE_TOOL_SEARCH=false, et un modèle antérieur à la génération Claude 4.5 sur la plateforme Agent de Google Cloud. - Sur un déploiement Microsoft Foundry hébergé sur Azure : Claude commence sur le chemin de recherche d’outils plutôt qu’avec
WaitForMcpServers, car Claude Code découvre le rejet côté serveur du déploiement uniquement à partir de l’API. Après que Claude Code bascule ce déploiement vers chargement en amont, les outils d’un serveur qui termine la connexion deviennent disponibles à la prochaine demande de Claude.
Désactiver un serveur sans le supprimer
Basculez un serveur dans le panneau/mcp pour arrêter Claude Code de s’y connecter sans perdre sa configuration. Claude Code liste toujours le serveur dans /mcp, marqué comme désactivé.
Lorsque vous basculez un serveur, Claude Code enregistre votre choix par projet dans ~/.claude.json, dans l’une de deux listes qui couvrent des ensembles disjoints de serveurs :
disabledMcpServers: une liste d’exclusion pour les serveurs configurés par l’utilisateur, les serveurs de plugins, les serveurs que votre organisation fournit via les paramètres gérés, les connecteurs claude.ai que Claude Code récupère lui-même, et les serveurs intégrés qui sont activés par défaut. Claude Code ne se connecte pas à un serveur que vous listez ici. Lorsque vous désactivez un connecteur claude.ai avec le basculement/mcppar projet décrit dans Désactiver les connecteurs claude.ai, Claude Code l’écrit dans cette liste sous son nom d’affichage, par exempleclaude.ai Slack.enabledMcpServers: une liste d’inclusion pour les serveurs intégrés qui sont désactivés par défaut, tels quecomputer-use. Claude Code se connecte à un serveur désactivé par défaut uniquement lorsque vous le listez ici.
enabledMcpServers, ou un serveur intégré désactivé par défaut à disabledMcpServers, Claude Code ignore l’entrée.
disabledMcpServers et enabledMcpServers ne sont pas liés à enabledMcpjsonServers et disabledMcpjsonServers, qui contrôlent l’approbation des serveurs définis dans le fichier .mcp.json d’un projet.
Runtimes clients MCP
Claude Code se connecte aux serveurs MCP via l’un de deux runtimes clients. Le runtime v1 est construit sur MCP TypeScript SDK 1.x. Le runtime v2 est le même code sur MCP TypeScript SDK 2.0, qui ajoute la révision du protocole MCP 2026-07-28. Le reste de cette page s’applique aux deux runtimes, sauf où une section nomme le runtime v2. Claude Code choisit un runtime chaque fois que vous le démarrez et le conserve jusqu’à ce que vous quittiez. Dans les sessions où il récupère les drapeaux de fonctionnalité, il utilise le runtime v2 sur Claude Code v2.1.232 ou ultérieur. Dans les sessions où il ne récupère pas les drapeaux de fonctionnalité, Claude Code utilise le runtime v2 par défaut sur Claude Code v2.1.274 ou ultérieur :- Sessions sur Amazon Bedrock, Claude Platform sur AWS, la plateforme Agent de Google Cloud, ou Microsoft Foundry, sauf si une plateforme hôte qui intègre Claude Code définit
CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST - Sessions connectées via une passerelle d’applications Claude
- Sessions où vous désactivez la télémétrie ou la récupération des drapeaux de fonctionnalité, par exemple avec
DISABLE_TELEMETRY
- Demande aux serveurs HTTP s’ils supportent la révision plus récente, et l’utilise avec ceux qui le font. Il demande également aux serveurs connecteurs claude.ai dans les sessions où il récupère les drapeaux de fonctionnalité. Pour qu’il demande aux serveurs stdio, ou aux serveurs connecteurs dans chaque session, définissez
MCP_PROTOCOL_NEGOTIATIONsurauto. Il se connecte à tous les autres serveurs comme v1 le fait. - Reçoit les notifications
list_changeddes serveurs sur la révision plus récente sur un flux qu’il maintient ouvert. - N’enregistre pas un serveur de canal qui se connecte sur la révision plus récente, car cette révision ne peut pas transporter les messages de canal.
- Échoue une connexion OAuth MCP dont la réponse d’autorisation nomme un émetteur inattendu.
MCP_SDK_GENERATION sur v1 ou v2. Pour décider si Claude Code demande, définissez MCP_PROTOCOL_NEGOTIATION sur auto ou legacy.
Mises à jour dynamiques des outils
Claude Code supporte les notifications MCPlist_changed, permettant aux serveurs MCP de mettre à jour dynamiquement leurs outils, invites, et ressources disponibles sans vous obliger à vous déconnecter et reconnecter. Lorsqu’un serveur MCP envoie une notification list_changed, Claude Code actualise automatiquement les capacités disponibles de ce serveur.
Si une demande d’actualisation échoue, Claude Code conserve les outils, invites, et ressources précédemment découverts du serveur jusqu’à ce qu’une actualisation ultérieure réussisse. Avant la v2.1.214, une erreur transitoire lors de l’actualisation remplaçait les outils, invites, et ressources du serveur par une liste vide.
Flux de notification sur le runtime v2
Sur le runtime v2, Claude Code reçoit les notificationslist_changed d’un serveur sur la révision du protocole plus récente sur un flux qu’il maintient ouvert. Lorsque le flux se ferme, Claude Code le rouvre, avec deux limites :
- Le flux se ferme à nouveau dans les 10 secondes : Claude Code le rouvre jusqu’à trois fois, puis s’arrête pour cette connexion.
- Le flux reste ouvert plus de 10 secondes, puis se ferme, comme les flux vers les hôtes sans serveur le font couramment : après cinq réouvertures en une heure, Claude Code attend environ six heures avant la suivante.
/mcp.
Reconnexion automatique
Claude Code reconnecte un serveur distant qui se déconnecte en cours de session et réessaie la première connexion d’un serveur HTTP ou SSE après une erreur transitoire. Les serveurs stdio sont des processus locaux, et Claude Code ne les reconnecte pas automatiquement.Déconnexions en cours de session d’un serveur distant
Claude Code reconnecte un serveur distant déconnecté avec un backoff exponentiel : jusqu’à cinq tentatives, en commençant par un délai d’une seconde et en le doublant à chaque fois. Ce que vous voyez dépend de la façon dont vous exécutez Claude Code :- Dans une session interactive :
/mcpaffiche le serveur comme en attente pendant que Claude Code se reconnecte. Après cinq tentatives échouées, Claude Code marque le serveur comme échoué, ou comme ayant besoin d’authentification lorsque le serveur a besoin d’être autorisé à nouveau. Vous pouvez réessayer manuellement depuis/mcp. - Dans les exécutions
claude -pet les sessions Agent SDK : Claude Code se reconnecte selon le même calendrier, sans panneau/mcppour afficher les tentatives.
Échecs de première connexion
Lorsque la première connexion d’un serveur HTTP ou SSE échoue avec une erreur transitoire, telle qu’une réponse 5xx, une connexion refusée, ou un délai d’expiration, Claude Code réessaie jusqu’à trois fois. Si la connexion échoue toujours, Claude Code marque le serveur comme échoué. Claude Code réessaie de cette façon au démarrage et lorsqu’un serveur est ajouté en cours de session. Cela inclut un serveur que Claude Code ajoute à une session cloud à partir de sa configuration et un serveur que vous ajoutez avec la méthodesetMcpServers() du Agent SDK.
Claude Code ne réessaie pas dans ces cas :
- La première connexion d’un serveur WebSocket
- Une erreur d’authentification ou non trouvée, car elle nécessite un changement de configuration pour être résolue. Lorsqu’un
headersHelperest la seule source du serveur de l’en-têteAuthorization, Claude Code réessaie quand même une erreur d’authentification, car il réexécute l’assistant à chaque tentative et peut récupérer une nouvelle identifiant
Demandes de découverte échouées
Après qu’un serveur se connecte, Claude Code lui envoie des demandes de découverte de capacités telles quetools/list, prompts/list, et resources/list. Claude Code réessaie ces demandes jusqu’à trois fois avec un backoff court après une erreur réseau ou serveur transitoire. Il ne réessaie pas les erreurs d’authentification, les réponses 4xx, ou les délais d’expiration des demandes.
Comment Claude apprend qu’un serveur a échoué
Que Claude Code dise à Claude qu’un serveur configuré n’a pas pu se connecter dépend de la recherche d’outils, qui est activée par défaut :- Avec la recherche d’outils, Claude Code dit à Claude quel serveur a échoué et son erreur de connexion, donc Claude rapporte l’échec de la connexion dans sa réponse. Claude Code inclut les mêmes informations dans les résultats
ToolSearchqui ne trouvent aucun outil correspondant. - Dans toute configuration sans recherche d’outils, Claude Code ne rapporte pas les échecs de connexion du serveur à Claude.
Pousser des messages avec des canaux
Un serveur MCP peut également pousser des messages directement dans votre session afin que Claude puisse réagir à des événements externes comme les résultats CI, les alertes de surveillance, ou les messages de chat. Pour activer cela, votre serveur déclare la capacitéclaude/channel et vous l’acceptez avec le drapeau --channels au démarrage. Voir Canaux pour utiliser un canal officiellement supporté, ou Référence des canaux pour construire le vôtre.
Sur le runtime v2, si vous définissez MCP_PROTOCOL_NEGOTIATION sur auto et qu’un serveur de canal négocie la révision du protocole MCP 2026-07-28, il ne peut pas livrer les messages de canal, donc Claude Code ne l’enregistre pas comme un canal. Laisser la variable non définie, ou la définir sur legacy, garde les serveurs stdio sur la poignée de main antérieure.
Le timeout par serveur est une limite de temps mur dur par appel d’outil, et les notifications de progression du serveur ne l’étendent pas. Les valeurs inférieures à 1000 sont ignorées et tombent à MCP_TOOL_TIMEOUT, ou à sa valeur par défaut d’environ 28 heures lorsque cette variable n’est pas définie. Pour un serveur HTTP, SSE, ou connecteur claude.ai, il y a aussi un deuxième minuteur par demande qui couvre chaque demande jusqu’au premier octet de réponse du serveur. Claude Code définit ce minuteur au plus grand de trois valeurs : 60 secondes, le délai d’expiration de l’outil qui s’applique au serveur, et MCP_TIMEOUT. La valeur par défaut de 28 heures d’un MCP_TOOL_TIMEOUT non défini n’entre pas dans cette comparaison, et une valeur inférieure à 60 secondes ne raccourcit pas le minuteur. Les serveurs stdio et WebSocket n’ont pas de minuteur par demande.
Un timeout par serveur d’au moins 1000 agit également comme un plancher sur le délai d’inactivité décrit ci-dessous : Claude Code n’abandonne jamais les appels d’outil de ce serveur pour inactivité plus tôt que le timeout par serveur. Nécessite Claude Code v2.1.203 ou ultérieur.
Un appel d’outil à un serveur MCP qui n’envoie aucune réponse et aucune notification de progression pendant la fenêtre d’inactivité abandonne avec une erreur au lieu d’attendre la limite de temps mur. Le délai d’inactivité nécessite Claude Code v2.1.187 ou ultérieur. Il s’applique à tous les types de serveurs sauf les serveurs IDE et les serveurs en processus du SDK. La fenêtre d’inactivité par défaut est de cinq minutes pour les serveurs HTTP, SSE, WebSocket, et connecteur claude.ai, et de 30 minutes pour les serveurs stdio. Avant la v2.1.203, les serveurs stdio étaient exempts du délai d’inactivité.
Définissez la variable d’environnement CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT en millisecondes pour changer la fenêtre d’inactivité, ou définissez-la sur 0 pour désactiver la vérification.
Ces délais d’expiration limitent la durée d’exécution d’un appel, pas toujours la durée de son blocage de la session : un appel de conversation principale qui s’exécute au-delà de deux minutes se déplace d’abord vers une tâche en arrière-plan. Voir Arrière-plan automatique des appels d’outil longs.
Arrière-plan automatique des appels d’outil longs
Un appel d’outil MCP dans la conversation principale qui s’exécute toujours après deux minutes se déplace vers une tâche en arrière-plan au lieu de bloquer la session. Claude reçoit l’ID de la tâche immédiatement et continue de travailler, et le résultat arrive comme une notification de tâche lorsque l’appel se règle. L’arrière-plan automatique nécessite Claude Code v2.1.212 ou ultérieur. La tâche apparaît dans/tasks, où vous pouvez également l’arrêter, et elle ne survit pas à la sortie de la session. Les limites par appel s’appliquent toujours pendant que l’appel s’exécute en arrière-plan : la limite de temps mur définie par le timeout par serveur ou MCP_TOOL_TIMEOUT, et le délai d’inactivité défini par CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT.
Définissez la variable d’environnement CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS en millisecondes pour changer le seuil, ou définissez-la sur 0 pour désactiver l’arrière-plan automatique. Définir CLAUDE_CODE_DISABLE_BACKGROUND_TASKS sur 1 le désactive également, ainsi que toutes les autres fonctionnalités de tâche en arrière-plan.
Certains appels ne se déplacent jamais vers l’arrière-plan :
- Les appels des sous-agents ; Claude Code met en arrière-plan uniquement les appels de conversation principale
- Les appels aux serveurs IDE
- Les appels en mode non interactif, sauf si
CLAUDE_AUTO_BACKGROUND_TASKSest défini sur1, car une exécution unique peut se terminer avant l’arrivée du résultat
Serveurs MCP fournis par les plugins
Les plugins peuvent regrouper les serveurs MCP qui fournissent des outils et des intégrations lorsque vous activez le plugin. Les serveurs MCP fournis par les plugins fonctionnent de manière identique aux serveurs configurés par l’utilisateur. Comment fonctionnent les serveurs MCP fournis par les plugins :- Les plugins définissent les serveurs MCP dans
.mcp.jsonà la racine du plugin ou en ligne dansplugin.json - Lorsque vous activez un plugin, Claude Code démarre automatiquement ses serveurs MCP
- Claude Code offre les outils MCP du plugin aux côtés des outils MCP configurés manuellement
- Vous ajoutez et supprimez les serveurs de plugins en installant ou en désinstallant le plugin, pas avec les commandes
/mcp. Vous pouvez toujours basculer un serveur de plugin installé dans/mcp, ce qui arrête Claude Code de s’y connecter sans supprimer le plugin
.mcp.json à la racine du plugin :
plugin.json :
- Cycle de vie automatique : les serveurs se connectent et se déconnectent à ces points :
- Au démarrage de la session, Claude Code connecte automatiquement les serveurs des plugins activés. Dans
/mcp, un serveur de plugin distant (HTTP ou SSE) que vous avez utilisé auparavant peut afficher le statutcachedà la place ; Claude Code le connecte lorsque Claude appelle pour la première fois l’un de ses outils - Si vous activez ou désactivez un plugin pendant une session, Claude Code connecte ou déconnecte ses serveurs MCP lorsque la modification s’applique. Appliquer les modifications de plugin sans redémarrer décrit quand c’est le cas. Dans une session sans terminal interactif,
/reload-pluginsne connecte ou ne déconnecte pas les serveurs MCP du plugin ; ces modifications prennent effet dans votre prochaine session - Lorsque vous rechargez, Claude Code conserve les connexions en direct des serveurs de plugins dont la configuration est inchangée, et fait de même lorsque vous remplacez la liste des serveurs MCP de la session à partir du Agent SDK sans les nommer
- Lorsque vous déplacez la session avec
/cdsur v2.1.246 ou ultérieur, Claude Code connecte les serveurs des plugins que les paramètres du nouveau répertoire activent et déconnecte les serveurs des plugins qui ne sont plus activés, donc vous n’avez pas besoin d’exécuter/reload-pluginsaprès le déplacement - Dans les sessions web, un appel MCP à un serveur de plugin qui n’est pas encore connecté, comme juste après qu’une session inactive se réveille, démarre le serveur à la demande et attend qu’il se connecte
- Au démarrage de la session, Claude Code connecte automatiquement les serveurs des plugins activés. Dans
- Espaces réservés de chemin :
${CLAUDE_PLUGIN_ROOT}se résout au répertoire d’installation du plugin,${CLAUDE_PLUGIN_DATA}à son répertoire d’état persistant, et${CLAUDE_PROJECT_DIR}à la racine du projet stable. La substitution s’applique à :- serveurs
stdio:command,args,env - serveurs
http,sse, etws:url,headers, etheadersHelper. Avant la v2.1.195,headersHelpertransmettait l’espace réservé comme une chaîne littérale
- serveurs
- Accès à l’environnement utilisateur : accès aux mêmes variables d’environnement que les serveurs configurés manuellement
- Types de transport multiples : support pour les transports stdio, SSE, HTTP, et WebSocket, bien que le support du transport puisse varier selon le serveur
/mcp avec des indicateurs montrant qu’ils proviennent des plugins.
Noms d’outils MCP du plugin :
Les outils d’un serveur MCP regroupé par un plugin incluent à la fois le nom du plugin et la clé du serveur dans leur nom appelable. La forme complète est mcp__plugin_<plugin-name>_<server-name>__<tool-name>, où tout caractère en dehors de A-Z, a-z, 0-9, _, et - est remplacé par _. Pour le serveur database-tools regroupé dans un plugin nommé my-plugin, un outil query est appelable comme :
allowed-tools d’une compétence, le champ tools d’un sous-agent, ou un correspondant de hook. Un correspondant de hook écrit contre la clé du serveur nu, tel que mcp__database-tools__.*, ne se déclenche jamais pour un serveur regroupé par un plugin.
Le serveur lui-même s’enregistre sous le nom scoped plugin:<plugin-name>:<server-name>, tel que plugin:my-plugin:database-tools. Utilisez ce nom où un nom de serveur configuré est attendu, tel que le champ server d’un hook mcp_tool.
Voir la référence des composants du plugin pour les détails sur le regroupement des serveurs MCP avec les plugins.
Portées d’installation MCP
Les serveurs MCP peuvent être configurés à trois portées différentes. La portée que vous choisissez contrôle les projets dans lesquels le serveur se charge et si la configuration est partagée avec votre équipe. Les administrateurs peuvent également déployer ou fournir des serveurs pour chaque utilisateur via la configuration gérée.Portée locale
La portée locale est la portée par défaut. Un serveur à portée locale se charge uniquement dans le projet où vous l’avez ajouté et reste privé pour vous. Claude Code le stocke dans~/.claude.json sous le chemin de ce projet, donc le même serveur n’apparaîtra pas dans vos autres projets. Utilisez la portée locale pour les serveurs de développement personnels, les configurations expérimentales ou les serveurs avec des identifiants que vous ne voulez pas dans le contrôle de version.
~/.claude.json (votre répertoire personnel), tandis que les paramètres locaux généraux utilisent .claude/settings.local.json (dans le répertoire du projet). Consultez Paramètres pour plus de détails sur les emplacements des fichiers de paramètres.~/.claude.json. L’exemple ci-dessous montre le résultat lorsque vous l’exécutez à partir de /path/to/your/project :
Portée du projet
Les serveurs à portée de projet permettent la collaboration d’équipe en stockant les configurations dans un fichier.mcp.json à la racine de votre projet. Lorsque vous ajoutez un serveur à portée de projet, Claude Code crée ou met à jour automatiquement ce fichier avec la structure de configuration appropriée. Archivez .mcp.json dans le contrôle de version pour que tous les membres de votre équipe obtiennent les mêmes outils et services MCP.
.mcp.json résultant suit un format standardisé :
.mcp.json. Pour réinitialiser ces choix d’approbation, exécutez claude mcp reset-project-choices.
Dans les exécutions claude -p, les sessions du SDK Agent et les sessions cloud, Claude Code ne peut pas afficher cette invite : il charge les serveurs à portée de projet sans demander. Claude Code ignore également l’invite dans une session que vous démarrez en mode bypassPermissions avec skipDangerousModePermissionPrompt défini dans vos paramètres utilisateur ou dans les paramètres gérés. Pour garder un serveur à l’écart de toute façon :
- Ajoutez-le à
disabledMcpjsonServers, qui le bloque dans tous les modes de permission. - Excluez entièrement les paramètres du projet avec
--setting-sourcesou l’optionsettingSourcesdu SDK. - Démarrez la session avec
--strict-mcp-config. Claude Code utilise alors uniquement les serveurs MCP que vous transmettez avec--mcp-config. Ignorer l’invite d’approbation pour les serveurs à portée de projet que Claude Code ne charge pas nécessite Claude Code v2.1.246 ou ultérieur ; avant v2.1.246, une session stricte attendait toujours l’approbation pour eux, ce qui laissait les sessions en arrière-plan en attente au démarrage. Consultez Contrôle exclusif avec managed-mcp.json pour voir ce que le drapeau fait sous un fichier MCP géré.
Portée utilisateur
Les serveurs à portée utilisateur sont stockés dans~/.claude.json et offrent une accessibilité inter-projets, les rendant disponibles dans tous les projets de votre machine tout en restant privés pour votre compte utilisateur. Cette portée fonctionne bien pour les serveurs utilitaires personnels, les outils de développement ou les services que vous utilisez fréquemment dans différents projets.
Hiérarchie de portée et précédence
Lorsque le même serveur est défini à plus d’un endroit, Claude Code s’y connecte une fois, en utilisant la définition de la source avec la plus haute priorité. L’entrée de serveur entière de cette source est utilisée ; les champs ne sont pas fusionnés entre les portées.- Portée locale
- Portée du projet
- Portée utilisateur
- Serveurs fournis par les plugins
- Connecteurs claude.ai
managedMcpServers se classe au-dessus de tous ceux-ci, donc lorsque l’un d’eux le duplique, Claude Code se connecte à la définition de l’organisation. Nécessite Claude Code v2.1.259 ou ultérieur.
Si vous ouvrez une session locale dans l’onglet Code de l’application de bureau avec le même nom de serveur stdio au niveau supérieur de ~/.claude.json (portée utilisateur) et dans .mcp.json, l’onglet Code utilise la définition ~/.claude.json.
Expansion des variables d’environnement dans .mcp.json
Claude Code supporte l’expansion des variables d’environnement dans les fichiers .mcp.json, permettant aux équipes de partager des configurations tout en maintenant la flexibilité pour les chemins spécifiques à la machine et les valeurs sensibles comme les clés API.
Syntaxe supportée
${VAR}: se développe à la valeur de la variable d’environnementVAR${VAR:-default}: se développe àVARsi défini, sinon utilisedefault
Emplacements d’expansion
Les variables d’environnement peuvent être développées dans :command: le chemin de l’exécutable du serveurargs: arguments de la ligne de commandeenv: variables d’environnement passées au serveururl: pour les types de serveur HTTPheaders: pour l’authentification du serveur HTTP
Exemple avec expansion de variable
Variables non définies sans valeur par défaut
Si une variable d’environnement requise n’est pas définie et n’a pas de valeur par défaut, la configuration se charge toujours : Claude Code signale un avertissement de variable manquante pour ce serveur dans la sortieclaude mcp list et utilise le texte non développé ${VAR} tel quel. Définissez la variable ou ajoutez un fallback :-default pour que le serveur démarre avec la valeur que vous avez l’intention d’utiliser. Dans l’url et les headers d’un serveur distant, certaines variables d’identification se lisent comme vides à la place, sans avertissement.
Variables d’identification qui se lisent comme vides
Dans l’url et les headers d’un serveur distant, Claude Code lit les variables d’identification de votre environnement comme vides plutôt que de les développer. Cela empêche le .mcp.json d’un projet ou un plugin d’envoyer vos identifiants Claude Code ou de fournisseur cloud à un serveur qu’il nomme. Si vous écrivez Bearer ${ANTHROPIC_AUTH_TOKEN}, le serveur reçoit Bearer sans identifiant et rejette la demande, généralement avec un 401. Claude Code signale cela comme une connexion échouée.
Les noms couverts sont :
- Les identifiants propres de Claude Code, tels que
ANTHROPIC_API_KEYetANTHROPIC_AUTH_TOKEN - Les identifiants de votre fournisseur cloud, tels que
AWS_BEARER_TOKEN_BEDROCK - Autres identifiants que votre environnement porte, tels que
HTTPS_PROXYetNPM_TOKEN
:-default sur celui-ci est ignoré. Une URL de base de fournisseur telle que ANTHROPIC_BASE_URL se développe toujours, donc "url": "${ANTHROPIC_BASE_URL}/mcp" fonctionne, sauf si la valeur de l’URL elle-même intègre un identifiant tel qu’un nom d’utilisateur et un mot de passe.
Un nom en dehors de cet ensemble, tel que API_KEY, se développe tel qu’écrit. Pour donner au serveur l’un des identifiants couverts, copiez-le dans une variable avec un nom de votre choix et référencez ce nom à la place.
Lorsque l’url ou les headers d’un serveur distant référencent une variable couverte que vous avez définie, Claude Code la nomme dans une ligne de journal de débogage. Pour lire la ligne, exécutez claude --debug-file /tmp/claude-debug.log et recherchez dans ce fichier never expanded toward a remote server.
Comment les références apparaissent dans /mcp et la sortie CLI
Pour un serveur dans la portée locale, de projet ou utilisateur, les surfaces suivantes affichent une référence ${VAR} par nom plutôt que comme sa valeur résolue :
- L’URL ou la ligne de commande dans la vue de détail
/mcpd’un serveur - Sortie
claude mcp listetclaude mcp get
/mcp affiche les références de cette façon dans Claude Code v2.1.268 ou ultérieur.
Pour un serveur que votre organisation fournit via le paramètre managedMcpServers, ces surfaces affichent uniquement l’hôte de l’URL.
Pour vérifier ce que claude mcp list, claude mcp get et /mcp affichent lorsqu’une connexion échoue, consultez Détail du statut du serveur.
Exemples pratiques
Exemple : Se connecter à GitHub pour les révisions de code
Le serveur MCP distant de GitHub s’authentifie avec un jeton d’accès personnel GitHub transmis en tant qu’en-tête. Pour en obtenir un, ouvrez vos paramètres de jeton GitHub, générez un nouveau jeton à granularité fine avec accès aux référentiels avec lesquels vous souhaitez que Claude travaille, puis ajoutez le serveur :YOUR_GITHUB_PAT par votre jeton d’accès personnel. La commande claude mcp add enregistre la configuration sans valider les identifiants, donc une valeur d’espace réservé est acceptée ici mais le serveur ne parvient pas à se connecter ultérieurement. Pour vérifier la connexion, exécutez /mcp et vérifiez que le serveur affiche connected. Un serveur avec de mauvais identifiants affiche failed, et le détail de l’échec inclut le statut HTTP que le serveur a renvoyé, comme un 401.
Ensuite, travaillez avec GitHub :
Exemple : Interroger votre base de données PostgreSQL
DBHub, le package@bytebase/dbhub, est un serveur MCP qui connecte Claude à une base de données relationnelle via la chaîne de connexion que vous transmettez dans --dsn. Utilisez un utilisateur de base de données en lecture seule dans la chaîne de connexion afin que les requêtes que Claude exécute ne puissent pas modifier les données :
/mcp et vérifiez que db affiche connected.
Ensuite, interrogez votre base de données naturellement :
S’authentifier auprès des serveurs MCP distants
De nombreux serveurs MCP basés sur le cloud nécessitent une authentification. Claude Code supporte OAuth 2.0 pour les connexions sécurisées. Claude Code marque un serveur distant comme nécessitant une authentification lorsque le serveur répond avec401 Unauthorized ou 403 Forbidden. Ce que Claude Code affiche dépend du serveur :
- Pour un serveur auprès duquel vous ne vous êtes pas connecté, l’un ou l’autre code de statut le signale dans
/mcpafin que vous puissiez compléter le flux OAuth. - Pour un connecteur claude.ai, un
401causé par le rejet de votre jeton de session par claude.ai ne signale pas le connecteur, car la réautorisation du connecteur ne peut pas corriger votre connexion. Claude Code affiche plutôt l’état de rejet du jeton de session. - Pour un serveur dont vous avez configuré l’en-tête
Authorization, dansheadersou via unheadersHelper, un401ou403lors de la connexion ne signale pas le serveur, car l’identifiant à corriger est celui que vous avez configuré. Claude Code signale plutôt la connexion comme échouée. Si vous avez défini cet en-tête à partir d’une référence${VAR}, vérifiez si cette variable est l’une que Claude Code lit comme vide. - Pour un connecteur livré à une session cloud, Claude Code n’exécute pas de flux de connexion, car le proxy de la session s’authentifie auprès du connecteur avec l’autorisation que vous avez accordée dans claude.ai. Lorsqu’un connecteur là-bas a besoin d’être autorisé à nouveau, reconnectez-le à claude.ai/customize/connectors plutôt que depuis la session.
401 Unauthorized, Claude Code actualise le jeton stocké, se reconnecte et réessaie la demande une fois. Il signale le serveur dans /mcp uniquement si cette nouvelle tentative échoue également. Avant la v2.1.206, une actualisation de jeton qui échouait pour une raison transitoire, comme une erreur réseau, signalait un serveur OAuth comme nécessitant une authentification pour le reste de la session même si son jeton d’actualisation était toujours valide.
Lorsque le serveur rejette le jeton d’actualisation stocké, Claude Code affiche immédiatement un avis pointant vers /mcp. Ouvrez /mcp et sélectionnez Re-authenticate sur le serveur pour vous connecter à nouveau avant que le prochain appel d’outil échoue.
Un serveur personnalisé qui retourne un en-tête WWW-Authenticate pointant vers son serveur d’autorisation obtient la même découverte automatique que tout autre serveur distant.
Claude Code affiche également un avis de démarrage lorsqu’un ou plusieurs serveurs configurés nécessitent une authentification, vous n’avez donc pas besoin d’ouvrir /mcp pour découvrir quels serveurs nécessitent une connexion. L’avis nécessite Claude Code v2.1.193 ou ultérieur. Il compte uniquement les serveurs auprès desquels vous pouvez vous connecter à partir de Claude Code. Avant la v2.1.218, il comptait également les connecteurs claude.ai qui n’étaient pas connectés dans claude.ai, que vous pouvez connecter uniquement à partir des paramètres claude.ai.
L’avis annonce chaque serveur une fois et l’exclut du décompte aux lancements ultérieurs jusqu’à ce que ce serveur se soit connecté et ait besoin d’une connexion à nouveau. /mcp liste toujours chaque serveur qui nécessite une connexion.
En mode non interactif, il n’y a pas de panneau /mcp, donc Claude Code ne peut pas exécuter le flux OAuth pour vous. À partir de la v2.1.196, lorsqu’un serveur configuré nécessite une authentification lors d’une exécution claude -p ou Agent SDK avec recherche d’outils activée, ce qui est la valeur par défaut, Claude Code indique à Claude que les outils du serveur ne sont pas disponibles jusqu’à ce que vous l’autorisiez. Claude peut alors nommer le serveur qui nécessite une connexion au lieu de répondre comme si le serveur n’était pas configuré. Complétez la connexion à partir d’une session interactive avec /mcp ou claude mcp login <name>.
Si vous avez configuré headers.Authorization pour le serveur et que le serveur rejette cet en-tête, Claude Code signale la connexion comme échouée au lieu de revenir à OAuth. Vérifiez que le jeton est valide pour le point de terminaison MCP, ou supprimez l’en-tête pour utiliser le flux OAuth.
Ajouter le serveur qui nécessite une authentification
sentry dans le démarrage rapide MCP, ignorez cette étape : exécuter claude mcp add à nouveau avec le même nom de serveur au même scope échoue avec MCP server sentry already exists in local config. Sinon, exécutez :Utiliser la commande /mcp dans Claude Code
S’authentifier à partir de la ligne de commande
À partir de la v2.1.186,claude mcp login <name> exécute le flux OAuth d’un serveur configuré directement depuis votre shell, vous n’avez donc pas besoin d’ouvrir le panneau /mcp dans une session.
claude mcp logout <name>.
À partir de la v2.1.191, la commande détecte lorsqu’aucun navigateur local n’est disponible, par exemple lors d’une session SSH ou sur Linux sans serveur d’affichage, et imprime l’URL d’autorisation au lieu d’essayer d’ouvrir un navigateur. Ouvrez l’URL sur votre machine locale, puis collez l’URL de redirection complète de la barre d’adresse de votre navigateur à l’invite. La commande a besoin d’un terminal interactif pour l’étape de collage, donc connectez-vous avec ssh -t. Passez --no-browser pour forcer l’invite d’URL même lorsqu’un navigateur local est détecté.
Utiliser un port de rappel OAuth fixe
Certains serveurs MCP nécessitent un URI de redirection spécifique enregistré à l’avance. Par défaut, Claude Code choisit un port disponible aléatoire pour le rappel OAuth. Utilisez--callback-port pour fixer le port afin qu’il corresponde à un URI de redirection pré-enregistré de la forme http://localhost:PORT/callback. Si la connexion échoue sur Claude Code v2.1.229 avec une erreur de non-concordance d’URI de redirection, consultez la note de version sous Utiliser les identifiants OAuth pré-configurés.
Vous pouvez utiliser --callback-port seul (avec l’enregistrement dynamique du client) ou ensemble avec --client-id (avec les identifiants pré-configurés).
Utiliser les identifiants OAuth pré-configurés
Certains serveurs MCP ne supportent pas la configuration OAuth automatique via l’enregistrement dynamique du client. Si vous voyez une erreur comme « Incompatible auth server: does not support dynamic client registration », le serveur nécessite des identifiants pré-configurés. Claude Code supporte également les serveurs qui utilisent un document de métadonnées d’ID client (CIMD) au lieu de l’enregistrement dynamique du client, et les découvre automatiquement. Si la découverte automatique échoue, enregistrez d’abord une application OAuth via le portail des développeurs du serveur, puis fournissez les identifiants lors de l’ajout du serveur.Enregistrer une application OAuth auprès du serveur
http://localhost:PORT/callback. Utilisez ce même port avec --callback-port à l’étape suivante.Dans la v2.1.229, Claude Code envoyait http://127.0.0.1:PORT/callback à la place, et les serveurs qui correspondent exactement à l’URI de redirection enregistré rejetaient la connexion avec une erreur de non-concordance d’URI de redirection. Claude Code v2.1.231 a restauré la forme localhost. Pour récupérer sur la v2.1.229, mettez à niveau Claude Code, ou ajoutez temporairement la forme http://127.0.0.1:PORT/callback aux URI de redirection enregistrés du serveur.Ajouter le serveur avec vos identifiants
--callback-port peut être n’importe quel port disponible. Il doit correspondre à l’URI de redirection que vous avez enregistré à l’étape précédente.- claude mcp add
- claude mcp add-json
- claude mcp add-json (port de rappel uniquement)
- CI / variable d'environnement
--client-id pour passer l’ID client de votre application. Le drapeau --client-secret demande le secret avec une entrée masquée :S'authentifier dans Claude Code
/mcp dans Claude Code et suivez le flux de connexion du navigateur.Remplacer la découverte des métadonnées OAuth
Pointez Claude Code vers une URL de métadonnées spécifique du serveur d’autorisation OAuth pour contourner la chaîne de découverte par défaut. DéfinissezauthServerMetadataUrl lorsque les points de terminaison standard du serveur MCP génèrent des erreurs, ou lorsque vous souhaitez acheminer la découverte via un proxy interne. Par défaut, Claude Code vérifie d’abord les métadonnées de ressource protégée RFC 9728 à /.well-known/oauth-protected-resource, puis revient aux métadonnées du serveur d’autorisation RFC 8414 à /.well-known/oauth-authorization-server.
Définissez authServerMetadataUrl dans l’objet oauth de la configuration de votre serveur dans .mcp.json :
https://. Les scopes_supported de l’URL des métadonnées remplacent les portées que le serveur en amont annonce.
Restreindre les portées OAuth
Définissezoauth.scopes pour épingler les portées que Claude Code demande pendant le flux d’autorisation. C’est la façon supportée de restreindre un serveur MCP à un sous-ensemble approuvé par l’équipe de sécurité lorsque le serveur d’autorisation en amont annonce plus de portées que vous ne souhaitez accorder. La valeur est une seule chaîne séparée par des espaces, correspondant au format du paramètre scope dans RFC 6749 §3.3.
oauth.scopes a la priorité sur authServerMetadataUrl et les portées que le serveur découvre à /.well-known. Laissez-le non défini pour laisser le serveur MCP déterminer l’ensemble de portées demandées.
À partir de la v2.1.196, lorsque oauth.scopes n’est pas défini, Claude Code demande la portée fournie par l’en-tête WWW-Authenticate du serveur ou ses métadonnées de ressource protégée, et n’envoie aucun paramètre scope lorsque ni l’un ni l’autre ne fournit de portée. Il ne demande plus le catalogue complet scopes_supported à partir des métadonnées du serveur d’autorisation découvertes automatiquement. Demander ce catalogue a fait que les fournisseurs d’identité qui annoncent des portées réservées aux administrateurs ou des portées de modèle rejettent la demande d’autorisation avec une erreur invalid_scope. Les métadonnées récupérées à partir d’une authServerMetadataUrl configurée fournissent toujours ses scopes_supported comme portées demandées.
Si le serveur d’autorisation annonce offline_access dans scopes_supported, Claude Code l’ajoute aux portées épinglées afin que le jeton d’accès puisse être actualisé sans une nouvelle connexion au navigateur.
Si le serveur retourne ultérieurement un 403 insufficient_scope pour un appel d’outil, l’appel échoue avec un message needs additional permissions qui nomme la portée que le serveur demande. Le serveur s’affiche comme nécessitant une authentification dans /mcp.
Si cette portée ne figure pas dans votre oauth.scopes épinglé, ajoutez-la, puis exécutez /mcp et authentifiez le serveur à nouveau. Claude Code demande les portées épinglées plutôt que la portée que le serveur a nommée, donc si vous vous authentifiez à nouveau sans l’ajouter, le jeton que vous obtenez ne l’a toujours pas.
Utiliser des en-têtes dynamiques pour l’authentification personnalisée
Si votre serveur MCP utilise un schéma d’authentification autre que OAuth, tel que Kerberos, jetons de courte durée ou un SSO interne, utilisezheadersHelper pour générer des en-têtes de requête au moment de la connexion. Claude Code exécute la commande et fusionne sa sortie dans les en-têtes de connexion.
- La commande doit écrire un objet JSON de paires clé-valeur de chaîne sur stdout
- Claude Code exécute la commande dans un shell et abandonne après 10 secondes
- Claude Code choisit le répertoire de travail de la commande en fonction de l’endroit où vous avez configuré le serveur, donc fournissez le script comme chemin absolu ou mettez-le sur
PATH - Les en-têtes dynamiques remplacent tous les
headersstatiques portant le même nom
401 Unauthorized ou 403 Forbidden, Claude Code réexécute automatiquement l’assistant selon la même règle, se reconnecte avec les en-têtes frais et réessaie l’appel une fois. Claude Code marque le serveur comme nécessitant une authentification dans /mcp uniquement si cette nouvelle tentative échoue également.
Lorsque la sortie de l’assistant inclut un en-tête Authorization, Claude Code utilise cet identifiant comme authentification du serveur et ne revient pas à OAuth pour le serveur.
Si le serveur rejette l’identifiant de l’assistant lors de la connexion, Claude Code signale la connexion comme échouée plutôt que de marquer le serveur comme nécessitant une authentification. Corrigez l’identifiant que votre assistant retourne, puis reconnectez-vous à partir de /mcp pour réexécuter l’assistant.
Claude Code définit ces variables d’environnement lors de l’exécution de l’assistant :
headersHelper fourni par un plugin ne peut pas référencer les valeurs ${user_config.*} du plugin, car la commande s’exécute via un shell. Claude Code signale le serveur comme mal configuré avec une erreur et ne substitue pas la valeur. Mettez ${user_config.KEY} dans le champ headers du serveur à la place, qui n’est pas analysé par shell, ou faites en sorte que le script d’assistant lise la valeur à partir d’un fichier de configuration. Avant la v2.1.207, headersHelper substituait les valeurs ${user_config.*}.
Où l’assistant s’exécute
Claude Code choisit le répertoire de travail de la commandeheadersHelper à partir de la configuration qui déclare le serveur. Un cd que Claude exécute dans Bash ne le déplace pas, et /cd ne le déplace que pour les serveurs qui s’exécutent à partir du répertoire de travail principal de la session. Chaque ligne ci-dessous donne le répertoire contre lequel un chemin relatif dans votre commande headersHelper se résout.
Quelles variables un assistant peut lire
UnheadersHelper qu’un référentiel ou un plugin fournit est une commande que vous n’avez pas écrite, donc Claude Code l’exécute sans les variables d’identifiant de votre environnement, telles que ANTHROPIC_API_KEY. L’endroit où vous avez configuré le serveur détermine si cela s’applique :
- Supprimées : un serveur dans un
.mcp.jsonde projet ou dans un plugin, et un serveur en ligne dans un fichier agent de votre projet ou d’un répertoire--add-dir - Non supprimées : un serveur à portée utilisateur ou portée locale, dans MCP géré, à partir d’un connecteur claude.ai, ou fourni par le SDK ou
--mcp-config, et un serveur en ligne dans un fichier agent de~/.claude/agents/, à partir des paramètres gérés, ou passé avec--agents
GIT_CONFIG_KEY_<n> de Git, Claude Code supprime chaque variable de votre environnement dont le nom ressemble à un identifiant, comme un nom avec TOKEN, SECRET, PASSWORD, KEY ou AUTH dedans en l’une ou l’autre casse, donc ANTHROPIC_API_KEY et MY_REGISTRY_TOKEN sont tous deux supprimés. Claude Code supprime également une liste fixe de variables d’identifiant dont les noms ne suivent pas ce modèle, telles que ANTHROPIC_CUSTOM_HEADERS.
Lorsque cela s’applique à votre assistant, faites en sorte que le script lise son identifiant à partir d’un fichier ou d’un magasin d’identifiants. Si l’url du serveur développe l’une de ces variables, la valeur CLAUDE_CODE_MCP_SERVER_URL que l’assistant reçoit a cette partie remplacée par REDACTED également.
Faire confiance à un dossier avant que son headersHelper s’exécute
Claude Code exécute unheadersHelper comme une commande shell arbitraire. Pour un serveur dans un .mcp.json de projet ou à portée locale, il exécute l’assistant uniquement après que vous ayez accepté la boîte de dialogue de confiance pour le répertoire du projet dans lequel le serveur est déclaré. Avant la v2.1.238, une session claude -p ou SDK exécutait ces assistants sans vérifier la confiance, et une session interactive les exécutait une fois que vous aviez fait confiance à un dossier parent.
- Confiance qui ne compte pas : la confiance d’un dossier parent, et la confiance automatique qu’une session
claude -pou SDK obtient pour les hooks dans les fichiers de paramètres - Jusqu’à ce que vous fassiez confiance au dossier : Claude Code connecte le serveur avec ses
headersstatiques seuls. Dans une sessionclaude -pou SDK, il imprime également une ligneheadersHelper not runpar serveur sur stderr, vous indiquant comment accorder la confiance. - Confiance sans boîte de dialogue : définissez
projects["<path>"].hasTrustDialogAcceptedàtruedans~/.claude.json.<path>est le dossier sur lequel Règles d’autorisation de projet et confiance de l’espace de travail dit que Claude Code base la confiance.
.claude/agents/, ou un répertoire --add-dir. Jusqu’à ce que vous fassiez confiance à ce projet ou répertoire lui-même, Claude Code ne charge pas le serveur du tout, donc son assistant ne s’exécute jamais non plus.
Ajouter des serveurs MCP à partir de la configuration JSON
Si vous avez une configuration JSON pour un serveur MCP, vous pouvez l’ajouter directement :Ajouter un serveur MCP à partir de JSON
Vérifier que le serveur a été ajouté
Importer les serveurs MCP à partir de Claude Desktop
Si vous avez déjà configuré des serveurs MCP dans Claude Desktop, vous pouvez les importer :Importer les serveurs à partir de Claude Desktop
Sélectionner les serveurs à importer
Vérifier que les serveurs ont été importés
claude mcp ne peuvent contenir que des lettres, des chiffres, des tirets et des traits de soulignement. Claude Desktop n’applique pas cette restriction, donc un serveur Claude Desktop dont le nom contient un autre caractère, comme un espace, ne peut pas être importé. L’importation signale chaque nom qu’elle rejette et importe toujours les autres serveurs que vous avez sélectionnés. Avant la v2.1.205, le premier nom invalide arrêtait l’importation et aucun des serveurs sélectionnés n’était ajouté.
Utiliser les serveurs MCP depuis claude.ai
Si vous vous êtes connecté à Claude Code avec un compte claude.ai, les serveurs MCP que vous avez ajoutés dans claude.ai, connus sous le nom de connecteurs, sont automatiquement disponibles dans Claude Code :Configurer les serveurs MCP dans claude.ai
Authentifier le serveur MCP
Afficher et gérer les serveurs dans Claude Code
managed dans /mcp et dans le gestionnaire /plugin lorsque votre organisation gère son authentification dans claude.ai. Le statut managed ne change pas la façon dont Claude Code se connecte au connecteur ou applique les contrôles d’outils de votre organisation.
Les connecteurs auxquels vous ne vous êtes jamais connecté sont réduits derrière une ligne Show unused connectors à la fin de la section claude.ai, de sorte qu’une liste fournie par l’organisation ne remplit pas le panneau. Sélectionnez la ligne pour les développer. Un connecteur auquel vous vous êtes connecté avant reste visible même s’il a actuellement besoin d’une nouvelle authentification.
Les connecteurs de claude.ai ne sont récupérés que lorsque votre méthode d’authentification active est une connexion par abonnement claude.ai. Ils ne sont pas chargés, même si vous avez précédemment exécuté /login, lorsque :
ANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN, ouapiKeyHelperest actif- Un fournisseur tiers tel qu’Amazon Bedrock ou Agent Platform de Google Cloud est actif
ANTHROPIC_PROFILE, les variables de fédération, ou un profil Anthropic actif fournit les identifiantsCLAUDE_CODE_OAUTH_TOKENcontient un jeton declaude setup-token, qui ne peut faire que des demandes de modèle
/mcp ne liste pas un connecteur que vous avez ajouté, exécutez /status pour confirmer quelle méthode d’authentification est active. Désinscrivez cette variable d’environnement, supprimez le paramètre apiKeyHelper, ou désactivez le profil, puis exécutez /login pour sélectionner votre compte claude.ai.
Si un problème réseau temporaire empêche la liste des connecteurs de se charger au démarrage de votre session, Claude Code réessaie la récupération jusqu’à trois fois en arrière-plan, et les connecteurs apparaissent une fois qu’une tentative réussit. S’ils n’ont toujours pas apparu, redémarrez Claude Code pour récupérer la liste à nouveau.
Si /mcp affiche un connecteur comme connected · session token rejected, ou sa vue détaillée affiche claude.ai rejected the session token, claude.ai a rejeté le jeton de votre connexion Claude Code, généralement parce que la connexion a expiré et n’a pas pu être actualisée. Autoriser à nouveau le connecteur n’efface pas cet état, car l’autorisation propre du connecteur dans claude.ai n’est pas ce qui a été rejeté. Pour l’effacer :
- Exécutez
/loginpour vous reconnecter. - Reconnectez le connecteur depuis
/mcp.
/mcp liste le connecteur comme caché et montre comment supprimer le doublon si vous préférez utiliser le connecteur.
Certains connecteurs hébergés par Anthropic, tels que Microsoft 365, Gmail et Google Calendar, ne supportent pas OAuth local depuis Claude Code car le fournisseur d’identité en amont n’accepte que l’URL de redirection que claude.ai a enregistrée. Quand un serveur que vous avez ajouté avec claude mcp add ou dans .mcp.json pointe vers l’un de ces hôtes et que vous vous y connectez depuis /mcp ou avec claude mcp login, Claude Code affiche is Anthropic-hosted and doesn't support local OAuth, vous dirigeant pour connecter le service à claude.ai/customize/connectors à la place.
Après avoir supprimé votre entrée avec claude mcp remove <name> et connecté le service sur claude.ai, le connecteur apparaît dans Claude Code automatiquement.
Comment les connecteurs atteignent Claude Code
Les paramètres qui gouvernent un connecteur claude.ai dépendent de l’endroit où votre session s’exécute, car seules certaines sessions récupèrent les connecteurs de claude.ai elles-mêmes. Chaque ligne ci-dessous nomme comment les connecteurs arrivent dans un type de session et ce qui les contrôle là. Les sessions WSL de l’application de bureau n’ont pas de ligne car les connecteurs ne sont pas encore disponibles dans celles-ci.disableClaudeAiConnectors, ENABLE_CLAUDEAI_MCP_SERVERS, et allowAllClaudeAiMcps agissent uniquement sur la première ligne, les connecteurs que Claude Code récupère lui-même. Les deux autres lignes en diffèrent de ces façons :
- Sessions cloud : les entrées
allowedMcpServersetdeniedMcpServersqui atteignent la session, par exemple via les paramètres gérés par le serveur, filtrent également les connecteurs livrés. Le proxy de la session réécrit l’URL de chaque connecteur, donc un motifserverUrlécrit pour l’URL propre du connecteur ne le correspond pas. Pour admettre les connecteurs livrés aux côtés d’une liste blanche d’URL dans un environnement auto-hébergé, ajoutez les entréesserverUrllistées sous Le trafic des connecteurs quitte votre réseau. Claude Code supprime les connecteurs livrés quand unmanaged-mcp.jsonest présent sur l’hôte qui exécute la session, comme un hôte de runner auto-hébergé, que vous ayez définiallowAllClaudeAiMcpsou non. - Sessions locales et SSH de l’application de bureau : l’application de bureau enregistre les connecteurs en tant que serveurs
type: "sdk"en processus, et aucun paramètre MCP oumanaged-mcp.jsonne les atteint. Un utilisateur garde un connecteur hors de ses propres sessions en le déconnectant à claude.ai/customize/connectors. Une organisation bloque les outils d’un connecteur ou désactive entièrement Claude Code dans l’application de bureau.
Contrôles d’organisation sur les outils de connecteur
Votre organisation peut définir des contrôles par outil sur les connecteurs claude.ai. Claude Code lit ces paramètres au démarrage et les applique localement, sauf dans les sessions locales et SSH de l’application de bureau. Là, l’application de bureau retient les outilsblocked avant de livrer un connecteur, et le paramètre ask n’atteint pas Claude Code, donc il applique les règles de permission ordinaires de la session à ces outils au lieu de demander à chaque appel. Dans les sessions où Claude Code récupère les connecteurs lui-même, exécutez /mcp pour voir quel paramètre s’applique à chaque outil sur un connecteur.
- Outil défini sur
ask: Claude Code demande à chaque appel avec la raisonYour organization requires approval for this tool. L’invite apparaît même dans les modes de permissionacceptEdits,auto, etbypassPermissionsmodes de permission, et n’offre jamais une option pour mémoriser votre choix. Les règles Allow qui correspondent à l’outil ne sautent pas non plus l’invite. En modedontAsk, qui ne demande jamais, Claude Code refuse l’appel à la place. - Outil défini sur
blocked: Claude Code filtre l’outil avant que Claude ne le voie, donc il n’apparaît jamais dans la liste des outils. L’application de bureau et le chat claude.ai appliquent le même paramètreblocked, donc Claude ne peut pas utiliser l’outil là non plus, et vous ne pouvez pas retenir un outil des sessions de l’application de bureau tout en le gardant disponible dans le chat. L’application de bureau saute un connecteur dont tous les outils sont bloqués.
Désactiver les connecteurs claude.ai
Claude Code appliquedisableClaudeAiConnectors uniquement aux connecteurs qu’il récupère lui-même, pas aux connecteurs qu’un hôte cloud ou l’application de bureau livre. Pour désactiver les connecteurs qu’il récupère, définissez le paramètre sur true dans n’importe quelle portée de paramètres :
true dans n’importe quelle source de paramètres prend précédence. Un .claude/settings.json de projet enregistré peut exclure un référentiel des connecteurs que Claude Code récupère lui-même, mais un false au niveau du projet ne peut pas réactiver les connecteurs qu’un true au niveau utilisateur ou politique a désactivés. Les serveurs passés explicitement via --mcp-config ne sont pas affectés.
Vous pouvez également définir la variable d’environnement ENABLE_CLAUDEAI_MCP_SERVERS sur false, qui a le même effet pour la session shell actuelle :
deniedMcpServers par nom ou par motif d’URL. Par exemple, une entrée serverName de "claude.ai Slack" bloque le connecteur Slack. Vous pouvez également exécuter /mcp pour basculer n’importe quel connecteur que Claude Code récupère activé ou désactivé pour le projet actuel uniquement.
Utiliser Claude Code comme serveur MCP
Vous pouvez utiliser Claude Code lui-même comme serveur MCP que d’autres applications peuvent connecter :Limites de sortie MCP et avertissements
Lorsque les outils MCP produisent des sorties volumineuses, Claude Code aide à gérer l’utilisation des tokens pour éviter de surcharger le contexte de votre conversation :- Seuil d’avertissement de sortie : Claude Code affiche un avertissement lorsque la sortie de tout outil MCP dépasse 10 000 tokens
- Limite configurable : vous pouvez ajuster le nombre maximum de tokens de sortie MCP autorisés à l’aide de la variable d’environnement
MAX_MCP_OUTPUT_TOKENS - Limite par défaut : le maximum par défaut est de 25 000 tokens
- Portée : la variable d’environnement s’applique aux outils qui ne déclarent pas leur propre limite. Les outils qui définissent
anthropic/maxResultSizeCharsutilisent cette valeur à la place pour le contenu textuel, indépendamment de la valeur définie pourMAX_MCP_OUTPUT_TOKENS. Les outils qui retournent des données d’image restent soumis àMAX_MCP_OUTPUT_TOKENS - Au-delà de la limite : lorsqu’un résultat sans contenu d’image dépasse la limite, Claude Code l’enregistre dans un fichier et le remplace dans la conversation par un message qui indique le chemin du fichier, de sorte que Claude lit le fichier lorsqu’il a besoin du contenu. Le fichier se trouve dans le répertoire
tool-resultsde la session sous~/.claude/projects/.
Augmenter la limite pour un outil spécifique
Si vous créez un serveur MCP, vous pouvez permettre aux outils individuels de retourner des résultats plus volumineux que le seuil de persistance sur disque par défaut en définissant_meta["anthropic/maxResultSizeChars"] dans l’entrée de réponse tools/list de l’outil. Claude Code augmente le seuil de cet outil à la valeur annotée, jusqu’à un plafond maximal de 500 000 caractères.
Ceci est utile pour les outils qui retournent des sorties intrinsèquement volumineuses mais nécessaires, telles que les schémas de base de données ou les arbres de fichiers complets. Sans l’annotation, les résultats qui dépassent le seuil par défaut sont persistés sur disque et remplacés par une référence de fichier dans la conversation.
MAX_MCP_OUTPUT_TOKENS pour le contenu textuel, de sorte que les utilisateurs n’ont pas besoin d’augmenter la variable d’environnement pour les outils qui la déclarent. Les outils qui retournent des données d’image restent soumis à la limite de tokens.
Schémas d’entrée d’outil avec un combinateur au niveau racine
Certains serveurs MCP déclarent le schéma d’entrée d’un outil comme une union JSON Schema, avecanyOf, oneOf, ou allOf au niveau supérieur du schéma. L’API Claude n’accepte pas ces mots-clés à la racine du schéma. Elle accepte les combinateurs imbriqués dans properties, que Claude Code envoie inchangés.
Les outils avec un combinateur au niveau racine restent disponibles. Avant d’envoyer l’outil à l’API, Claude Code aplatit le schéma en un seul objet et ajoute une phrase au début de la description de l’outil qui indique à Claude quels groupes de paramètres vont ensemble :
allOf: les propriétés de chaque branche sont fusionnées, et la listerequiredde chaque branche s’applique toujoursanyOfetoneOf: les propriétés de chaque branche sont fusionnées, et la listerequiredde chaque branche est décrite dans la description de l’outil au lieu d’être appliquée par le schéma
anyOf, oneOf, ou allOf au niveau racine.
Outils avec des schémas d’entrée invalides
L’API Claude vérifie le schéma d’entrée de chaque outil dans une requête et rejette la requête entière lorsqu’un schéma échoue, donc un seul outil MCP avec un schéma malformé ferait échouer chaque requête qui l’inclut avec une erreur 400. Claude Code exécute deux des vérifications de l’API lui-même lorsqu’il charge les outils d’un serveur et exclut chaque outil qui échouerait à ces vérifications, de sorte que les autres outils du serveur continuent de fonctionner :- Les noms de propriétés au niveau supérieur doivent faire entre 1 et 64 caractères et utiliser uniquement des lettres ASCII et des chiffres,
_,.et- - Le schéma doit être valide par rapport au méta-schéma JSON Schema draft 2020-12. Claude Code applique cette vérification aux schémas qui ne déclarent pas de
$schemaet aux schémas qui déclarent draft 2020-12. Un schéma qui déclare un autre dialecte ignore cette vérification, bien que la vérification du nom de propriété ci-dessus s’applique toujours
Exiger une approbation pour un outil spécifique
Si vous créez un serveur MCP, vous pouvez marquer un outil comme nécessitant une approbation explicite à chaque appel en définissant_meta["anthropic/requiresUserInteraction"] sur true dans l’entrée de réponse tools/list de l’outil. La valeur doit être le booléen JSON true ; toute autre valeur est ignorée.
Claude Code affiche l’invite de permission de cet outil à chaque appel, même dans les modes de permission acceptEdits, auto et bypassPermissions, et n’offre pas d’option « ne plus demander » pour celui-ci. Les règles d’autorisation qui correspondent à l’outil ne contournent pas non plus l’invite. En mode dontAsk, qui ne demande jamais, Claude Code refuse l’appel à la place.
L’invite doit atteindre une personne. En mode non interactif avec --permission-prompt-tool, un résultat allow de l’outil d’invite de permission pour un outil signalé est converti en refus avec le message MCP tool requires user interaction; not supported via --permission-prompt-tool. Le callback canUseTool du SDK Agent reçoit bien ces appels et peut les approuver, car votre application SDK est censée les montrer à un utilisateur.
Utilisez ceci pour les outils dont l’invite de permission est elle-même le point, comme une étape de consentement ou d’octroi d’accès où l’approbation automatique signifierait qu’aucun humain n’a jamais accepté. Les autres outils du même serveur conservent leur comportement de permission normal.
L’entrée tools/list suivante marque un outil comme nécessitant toujours une approbation.
anthropic/requiresUserInteraction nécessite Claude Code v2.1.199 ou version ultérieure. Les versions antérieures l’ignorent et appliquent le flux de permission standard.
Certaines surfaces, comme Remote Control et les applications construites sur le SDK Agent, vous permettent normalement d’approuver les appels d’outils en un seul geste. Pour un outil marqué avec cette annotation, Claude Code retient l’action en un geste et affiche l’invite de permission complète de l’outil à la place, de sorte que l’approbation provient toujours d’une personne répondant à l’invite plutôt que d’un geste.
Claude Code retient l’approbation en un geste de la même manière pour toute demande de permission que seul le dialogue du terminal peut afficher complètement, comme celle qui porte un avertissement de sécurité ou une option d’autorisation permanente que la surface distante ne peut pas afficher. Vous répondez à cette demande dans le dialogue du terminal plutôt que depuis Remote Control. Nécessite Claude Code v2.1.214 ou version ultérieure.
Répondre aux demandes d’élicitation MCP
Les serveurs MCP peuvent vous demander une entrée structurée au cours d’une tâche en utilisant l’élicitation. Lorsqu’un serveur a besoin d’informations qu’il ne peut pas obtenir seul, Claude Code affiche un dialogue interactif et transmet votre réponse au serveur. Aucune configuration n’est requise de votre côté : les dialogues d’élicitation apparaissent automatiquement lorsqu’un serveur les demande. Les serveurs peuvent demander une entrée de deux façons :- Mode formulaire : Claude Code affiche un dialogue avec des champs de formulaire définis par le serveur (par exemple, une invite de nom d’utilisateur et de mot de passe). Remplissez les champs et soumettez.
- Mode URL : Claude Code ouvre une URL de navigateur pour l’authentification ou l’approbation. Complétez le flux dans le navigateur, puis confirmez dans l’interface de ligne de commande.
% ou &, compte quatre fois vers la limite : son propre caractère plus trois caractères d’échappement. Une URL sans aucun d’entre eux atteint la limite à environ 8 000 caractères. Une URL construite largement à partir d’échappements de pourcentage, où chaque tiers caractère est un %, l’atteint à environ 4 000.
Pour répondre automatiquement aux demandes d’élicitation sans afficher de dialogue, utilisez le hook Elicitation.
Si vous créez un serveur MCP qui utilise l’élicitation, consultez la spécification d’élicitation MCP pour les détails du protocole et les exemples de schéma.
Utiliser les ressources MCP
Les serveurs MCP peuvent exposer des ressources que vous pouvez référencer en utilisant des mentions @, de la même manière que vous référencez des fichiers.Référencer les ressources MCP
Lister les ressources disponibles
@ dans votre invite pour voir les ressources disponibles de tous les serveurs MCP connectés. Les ressources apparaissent aux côtés des fichiers dans le menu d’autocomplétion.Référencer une ressource spécifique
@server:protocol://resource/path pour référencer une ressource :Références de ressources multiples
Mettre à l’échelle avec la recherche d’outils MCP
La recherche d’outils maintient l’utilisation du contexte MCP faible en reportant les définitions d’outils jusqu’à ce que Claude en ait besoin. Seuls les noms d’outils et les instructions du serveur se chargent au démarrage de la session, donc l’ajout de plus de serveurs MCP a un impact minimal sur votre fenêtre de contexte. Claude Code n’impose pas de limite fixe d’outils par serveur ; la limite pratique est votre budget de fenêtre de contexte.ENABLE_TOOL_SEARCH ne peut pas contourner cela, puisque le rejet provient du déploiement lui-même.Pour les auteurs de serveurs MCP
Si vous créez un serveur MCP, le champ des instructions du serveur devient plus utile avec la recherche d’outils activée. Les instructions du serveur aident Claude à comprendre quand rechercher vos outils, de la même manière que les skills fonctionnent. Ajoutez des instructions de serveur claires et descriptives qui expliquent :- Quelle catégorie de tâches vos outils gèrent
- Quand Claude doit rechercher vos outils
- Les capacités clés que votre serveur fournit
Configurer la recherche d’outils
La recherche d’outils est activée par défaut : les outils MCP sont reportés et découverts à la demande. Claude Code la désactive quandANTHROPIC_BASE_URL pointe vers un hôte non-propriétaire, puisque la plupart des proxies ne transmettent pas les blocs tool_reference. Définissez ENABLE_TOOL_SEARCH explicitement pour contourner ce repli.
Définir CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS maintient la recherche d’outils désactivée. Vous ne pouvez pas la contourner en définissant ENABLE_TOOL_SEARCH vous-même. Votre organisation peut maintenir la recherche d’outils activée via les paramètres gérés, sur Claude Code v2.1.227 ou ultérieur. Désactiver les capacités de pré-version couvre où le remplacement s’applique et ce que la variable supprime.
La recherche d’outils nécessite un modèle qui prend en charge les blocs tool_reference : Claude Sonnet 4.5, Claude Haiku 4.5, Claude Opus 4.5, et les modèles ultérieurs. Consultez la compatibilité des modèles dans la documentation de l’API pour la liste actuelle.
Sur la plateforme Agent de Google Cloud, Claude Code décide par génération de modèle :
- Claude Opus 4.5, Sonnet 4.5, Haiku 4.5, et ultérieur : la recherche d’outils est activée par défaut, comme sur l’API Anthropic.
- Modèles Agent Platform antérieurs : Claude Code charge tous les outils MCP en amont, car leurs piles de service rejettent l’en-tête bêta requis.
ENABLE_TOOL_SEARCH=truene contourne pas cela.
ENABLE_TOOL_SEARCH=true.
Contrôlez le comportement de la recherche d’outils avec la variable d’environnement ENABLE_TOOL_SEARCH :
env de votre settings.json.
Vous pouvez également désactiver l’outil ToolSearch spécifiquement :
Exempter un serveur du report
Si les outils d’un serveur doivent toujours être visibles pour Claude sans une étape de recherche, définissezalwaysLoad à true dans la configuration de ce serveur. Chaque outil de ce serveur se charge alors dans le contexte au démarrage de la session indépendamment du paramètre ENABLE_TOOL_SEARCH. Utilisez ceci pour un petit nombre d’outils que Claude doit utiliser à chaque tour, puisque chaque outil en amont consomme du contexte qui serait autrement disponible pour votre conversation.
L’entrée .mcp.json suivante exempte un serveur HTTP tout en laissant les autres serveurs reportés :
alwaysLoad est disponible sur tous les types de serveurs. Un serveur MCP peut également marquer les outils individuels comme toujours chargés en incluant "anthropic/alwaysLoad": true dans l’objet _meta de l’outil, ce qui a le même effet pour cet outil uniquement.
Définir alwaysLoad: true fait également attendre le démarrage des outils du serveur, limité au délai d’expiration de connexion standard de 5 secondes, puisqu’ils doivent être présents lors de la construction de la première invite. Un serveur distant avec une entrée cached valide fournit ses outils à partir du cache sans se connecter, donc il ne retarde pas le démarrage. Les autres serveurs se connectent en arrière-plan par défaut ; définissez MCP_CONNECTION_NONBLOCKING=0 pour faire attendre le démarrage pour eux aussi.
Utiliser les invites MCP comme commandes
Les serveurs MCP peuvent exposer des invites qui deviennent disponibles en tant que commandes dans Claude Code.Exécuter les invites MCP
Découvrir les invites disponibles
/ pour voir les commandes disponibles, y compris celles des serveurs MCP. Claude Code répertorie chaque invite MCP sous la forme /servername:promptname (MCP). Taper /mcp__servername__promptname l’exécute également.Exécuter une invite sans arguments
Exécuter une invite avec des arguments
Configuration MCP gérée
Pour les organisations qui ont besoin d’un contrôle centralisé sur les serveurs MCP auxquels les utilisateurs peuvent se connecter, consultez Configuration MCP gérée. Elle couvre le déploiement d’un ensemble fixe de serveurs avecmanaged-mcp.json, la fourniture de serveurs à chaque utilisateur avec managedMcpServers, la restriction des serveurs avec allowedMcpServers et deniedMcpServers, et ce que les utilisateurs voient lorsqu’un serveur est bloqué.