Erreur de connexion MCP dans Codex : comment corriger Auth Unsupported
Codex affiche Auth Unsupported à côté d’un serveur MCP, et codex mcp login refuse de s’exécuter ou signale qu’aucune prise en charge de l’autorisation n’a été détectée. Cet article montre quand ce libellé est sans gravité, comment distinguer un serveur stdio d’un serveur HTTP, et trois solutions : une variable de jeton bearer, une connexion OAuth propre et un pont mcp-remote. Il traite aussi la régression sur macOS et une erreur de connexion qui lui ressemble.
Vous lancez codex mcp list, le nouveau serveur apparaît, et la colonne Auth affiche Unsupported. Ensuite, codex mcp login refuse soit de démarrer, soit s’arrête avec un message indiquant l’absence de prise en charge de l’autorisation. Les outils n’apparaissent jamais dans votre session, et rien dans la sortie ne vous indique lequel de plusieurs problèmes différents vous rencontrez.
Cette page les classe dans l’ordre où vous devez les vérifier. D’abord, savoir si Unsupported pose réellement un problème, car pour certains serveurs c’est le libellé correct. Ensuite, trois solutions (un jeton bearer, une connexion OAuth propre, un pont stdio), une régression sur macOS signalée en juillet 2026, et une erreur qui ressemble à un problème de connexion sans en être un.
💡 Réponse rapide :Unsupported signifie que Codex n’a trouvé aucun élément pour s’authentifier. Pour un serveur stdio, c’est normal. Pour un serveur HTTP qui exige des identifiants, donnez à Codex une variable de jeton bearer, relancez codex mcp login <name> sur une version récente, ou faites passer le serveur par mcp-remote.
Ce que signifie Auth Unsupported
D’où vient le libellé
Codex calcule lui-même la colonne Auth. D’après un guide de la sous-commande codex mcp, list et get vérifient trois éléments pour chaque serveur :
Une variable d’environnement de jeton bearer est-elle configurée, et est-elle réellement définie ?
Des jetons OAuth enregistrés se trouvent-ils dans le magasin d’identifiants ?
Le point de terminaison HTTP annonce-t-il des métadonnées OAuth ?
Si aucun des trois ne s’applique, la colonne affiche Unsupported. Ce libellé décrit ce que Codex peut voir, et non ce dont le serveur a besoin. Un serveur peut exiger une connexion et afficher quand même Unsupported si ses métadonnées sont absentes, mal formées ou inaccessibles depuis votre machine.
Les valeurs de statut en un coup d’œil
Ce que vous voyez
Ce que cela signifie
Étape suivante
Unsupported
Ni variable de jeton, ni jetons enregistrés, ni métadonnées OAuth (ou serveur stdio)
Vérifiez le type de serveur ci-dessous
Authenticated
Une variable de jeton est définie ou des jetons OAuth sont enregistrés
Rien à corriger, vérifiez que les outils se chargent
Un libellé de déconnexion
Le serveur annonce OAuth, mais aucun jeton n’est enregistré
Lancez codex mcp login <name>
Les exemples officiels montrent authenticated et unsupported. La formulation de l’état déconnecté change d’une version à l’autre. Considérez donc la colonne comme une indication, et vérifiez avec /mcp dans le TUI de Codex, qui liste vos serveurs MCP actifs. La documentation officielle de Codex sur MCP détaille l’ensemble des paramètres de serveur.
Pour un copier-coller propre dans un ticket ou un script, codex mcp list --json et codex mcp get my-server --json affichent les mêmes données de statut sous une forme lisible par une machine. C’est aussi le moyen le plus rapide de comparer une machine où la connexion fonctionne avec une machine où elle échoue.
Stdio ou HTTP : vérifier le type de serveur
Avant de modifier quoi que ce soit, identifiez le type de serveur que vous avez enregistré. Ouvrez ~/.codex/config.toml et regardez l’entrée. Une ligne command indique stdio. Une ligne url indique HTTP streamable. La solution dépend entièrement de cette différence.
Serveurs stdio : Unsupported est normal
Un serveur stdio est un processus local que Codex démarre et avec lequel il communique via l’entrée et la sortie standard :
OAuth relève du transport HTTP. La référence l’indique clairement : « La connexion OAuth n’est prise en charge que pour les serveurs HTTP streamable. » Donc codex mcp login local-tools est rejeté par conception, et Unsupported est le libellé attendu. Si ce serveur nécessite un identifiant, transmettez-le via env ou env_vars dans le même tableau, au lieu d’essayer de vous connecter.
💡 Un serveur public qui ne demande aucune authentification affichera lui aussi Unsupported. Si les outils apparaissent dans votre session, il n’y a rien à corriger.
Si ce serveur attend des identifiants et que la colonne affiche toujours Unsupported, l’une de trois causes est probable :
Le serveur utilise des jetons statiques, et non OAuth, et vous n’en avez pas fourni.
Le serveur utilise OAuth, mais Codex ne peut ni joindre ni analyser ses métadonnées.
Votre version de Codex est trop ancienne pour la recherche de métadonnées dont le serveur a besoin.
Chaque cause a sa solution ci-dessous.
Solution 1 : envoyer un jeton bearer
Si le fournisseur vous remet un jeton API depuis un tableau de bord, c’est le chemin le plus court. Pas de navigateur, pas de callback, pas de recherche de métadonnées.
Exporter la variable
Placez le jeton dans une variable d’environnement, puis enregistrez le serveur avec le nom de la variable :
Quatre erreurs d’inattention expliquent la plupart des échecs :
Coller le jeton dans bearer_token_env_var. Ce champ attend le nom de la variable, pas le secret.
Exporter dans le mauvais shell. Une variable définie dans un onglet de terminal est invisible depuis un autre.
Lancer Codex depuis une icône d’éditeur ou du dock. Ces processus ne voient souvent pas les variables exportées dans votre profil shell. Démarrez Codex depuis le terminal qui contient la variable, ou définissez-la au niveau du système.
Enregistrer toute la ligne d’en-tête. Gardez uniquement la valeur du jeton, puisque Codex l’envoie lui-même dans l’en-tête Authorization.
Relancez codex mcp list. La colonne doit quitter Unsupported dès que la variable est définie.
En CI, stockez le jeton comme secret masqué et exportez-le dans l’étape du job qui lance Codex. Le nom de variable dans config.toml reste le même, donc le fichier peut vivre dans le dépôt sans rien divulguer.
Solution 2 : lancer la connexion OAuth
Quand le serveur attend OAuth, il n’y a pas de jeton à coller. Codex doit passer par une connexion dans le navigateur et enregistrer le résultat.
La première commande ouvre votre navigateur. Approuvez la demande et revenez au terminal. La deuxième demande des scopes spécifiques lorsque les valeurs par défaut du serveur sont trop restreintes. La troisième efface les identifiants enregistrés et affiche soit Removed OAuth credentials for 'my-server', soit No OAuth credentials stored for 'my-server'.
Travailler en SSH ou sur une machine sans écran est le piège classique. La page de connexion s’ouvre dans un navigateur, puis le fournisseur redirige vers une adresse de callback qui doit atteindre la machine qui exécute Codex. Sur un hôte distant, cette redirection aboutit souvent sur votre ordinateur portable, et la connexion ne se termine jamais. Transférez le port du callback, ou choisissez la solution 1 ou 3 pour cette machine.
Quand une connexion échoue sans cesse, déconnectez-vous d’abord, puis reconnectez-vous, pour ne pas lutter contre une session périmée. Faites de même avant de supprimer une entrée de serveur, car supprimer l’entrée ne révoque ni ne supprime les jetons déjà enregistrés.
Figer la ressource et le callback
Les fournisseurs qui suivent les règles OAuth les plus récentes lient chaque jeton à une seule URL de ressource canonique. Les notes Codex de MintMCP recommandent de définir oauth_resource explicitement dans l’entrée du serveur plutôt que de laisser Codex la déduire, et de garder la même URL pour le point de terminaison MCP, les métadonnées de ressource, la demande d’autorisation et l’audience du jeton :
Ajoutez la table oauth seulement lorsque le fournisseur vous a remis un ID client préenregistré. L’URL de callback doit correspondre, caractère pour caractère, à celle que le fournisseur a enregistrée.
La prise en charge d’OAuth est arrivée dans Codex par étapes, donc votre version compte :
Version
Date
Ce qui a changé
rust-v0.131.0
2026-05-18
ID clients OAuth MCP explicites et liaison du callback
rust-v0.134.0
2026-05-26
codex mcp add accepte les options OAuth pour les serveurs HTTP
rust-v0.142.0
2026-06-22
Recherche des métadonnées de ressource protégée (RFC 9728)
rust-v0.144.0
2026-07-09
Réauthentification interactive après un 401 en cours de session
rust-v0.145.0
2026-07-21
Le démarrage ne bloque plus sur les recherches OAuth ; les rafraîchissements d’identifiants s’exécutent un à la fois
Un serveur qui fonctionne sur la version la plus récente peut échouer sur une version vieille de deux mois, car la recherche a emprunté un autre chemin. Vérifiez avec codex --version, puis mettez à jour via l’installateur que vous avez utilisé, par exemple npm i -g @openai/codex@latest.
Solution 3 : placer mcp-remote au milieu
Parfois le serveur est en ordre, votre jeton aussi, et Codex affiche quand même Unsupported. La solution la plus propre consiste à ne plus demander à Codex de faire OAuth. Le paquet mcp-remote est un petit proxy stdio qui dialogue avec le serveur distant et gère lui-même la connexion dans le navigateur, si bien que Codex ne voit jamais qu’un processus local.
Augmentez startup_timeout_sec au-delà de sa valeur par défaut de 10 secondes. Le premier lancement attend que vous terminiez la connexion dans le navigateur, et un délai trop court tuerait le processus avant que vous puissiez cliquer. Supprimez d’abord toute ancienne entrée portant le même nom, pour que les deux n’entrent pas en conflit.
Compromis à accepter
La colonne Auth continuera d’afficher Unsupported. C’est attendu : Codex voit maintenant un serveur stdio, et le pont gère l’authentification.
Vous dépendez de la disponibilité de Node et de npx là où Codex s’exécute.
Les jetons vivent dans le cache propre du pont (généralement ~/.mcp-auth), et non dans Codex. Si une mauvaise connexion se répète, videz ce dossier.
Vous contournez le chemin OAuth de Codex, ce qui signifie pas de réauthentification gérée par Codex après un 401 en cours de session.
Pour un serveur que vous utilisez tous les jours, c’est une configuration permanente raisonnable. Pour un simple test ponctuel, la solution 1 est plus rapide.
Toujours en échec après la correction ?
macOS : aucune prise en charge de l’autorisation détectée
Une panne mérite sa propre section. MintMCP documente un cas où codex mcp login s’arrête avec No authorization support detected sur macOS, à partir des versions du 2026-07-22. Face à un serveur OAuth conforme aux spécifications, la même version de Codex se connecte sous Linux mais échoue à l’étape des métadonnées sous macOS. Le problème est suivi dans openai/codex#34684.
Avant d’accuser le serveur, testez ses métadonnées depuis la machine qui échoue :
Un corps JSON signifie que le serveur publie ce que la spécification demande, et que le problème se situe côté Codex. Certains serveurs ajoutent à la place le chemin du point de terminaison, comme /.well-known/oauth-protected-resource/mcp. Vos options, de la moins coûteuse à la plus lourde :
Mettez à jour Codex et réessayez, car les correctifs arrivent souvent.
Utilisez un jeton bearer (solution 1) si le fournisseur en propose un.
Passez par mcp-remote (solution 3), qui sort le flux OAuth de Codex.
Connexion fermée à l’initialisation
Certaines erreurs ressemblent à des échecs d’authentification sans en être. Un signalement sur le ticket GitHub n° 5619 décrit Codex CLI v0.47.0 se connectant à un serveur HTTP streamable avec un jeton bearer et se terminant par connection closed: initialize response. Le client annonçait la version de protocole 2025-06-18 mais se comportait comme l’ancien transport 2024-11-05 : il fermait la connexion juste après l’événement endpoint sans attendre la réponse d’initialisation. Le même serveur fonctionnait dans Cursor.
Si votre erreur indique connection closed au lieu de unsupported, aucun changement de jeton ne servira. Mettez Codex à jour vers une version récente, et vérifiez quel transport le serveur parle réellement, car un ancien point de terminaison de style SSE et un point de terminaison HTTP streamable ne sont pas interchangeables.
La liste de contrôle en cinq minutes
Lancez codex --version et mettez à jour si la version a plus de deux mois.
Lancez codex mcp get my-server et notez si l’entrée utilise command ou url.
Pour les entrées command, acceptez Unsupported et corrigez plutôt le processus du serveur.
Pour les entrées url, définissez bearer_token_env_var ou lancez codex mcp login my-server.
Testez les métadonnées avec curl contre /.well-known/oauth-protected-resource.
Sur macOS, essayez le pont mcp-remote avant de perdre une heure en hypothèses.
Ouvrez /mcp dans le TUI et vérifiez que le serveur apparaît.
Déboguer avec GPT 5.6 Sol sur PicassoIA
Quand la configuration semble correcte et que l’erreur persiste, un second regard aide. GPT 5.6 Sol est conçu pour les tâches de programmation et le raisonnement en plusieurs étapes, et il accepte les captures d’écran, si bien que vous pouvez lui transmettre directement la sortie du terminal. Il ne lancera pas Codex et ne touchera pas à votre machine. Il lit seulement ce que vous collez.
Dans System Prompt, définissez le rôle : « Vous êtes un dépanneur de Codex CLI et MCP. Demandez les informations manquantes avant de deviner. »
Dans Prompt, collez votre tableau [mcp_servers.my-server] et la sortie de codex mcp get my-server.
Ajoutez une capture d’écran du terminal en échec sous Image Input.
Réglez Reasoning Effort sur medium pour la plupart des cas, ou sur high pour une configuration OAuth complexe. La valeur par défaut, none, privilégie la vitesse.
Augmentez Max Completion Tokens lorsque vous utilisez high ou xhigh, car un raisonnement poussé peut consommer tout le budget et renvoyer une réponse vide.
Choisissez Verbositylow pour une courte liste de corrections ou high pour un guide complet.
💡 Remplacez chaque jeton réel, secret client et nom d’hôte interne par REDACTED avant de coller quoi que ce soit.
Des prompts qui valent le coup
« Voici mon entrée de configuration et la sortie de codex mcp get. Lequel des trois contrôles d’authentification échoue, et pourquoi ? »
« Ce serveur est stdio. Réécrivez l’entrée pour que l’identifiant atteigne le processus via env_vars. »
« Comparez ma configuration OAuth à cette URL de ressource et dites-moi où l’audience pourrait ne pas correspondre. »
Pour un second avis, Claude Sonnet 5 sur la même plateforme est une autre option solide pour lire des configurations et des sorties d’erreur.
Créer vos propres images sur PicassoIA
Corriger une erreur de connexion est une bonne occasion de créer quelque chose avec les outils qui fonctionnent désormais. Chaque photo de cet article a été générée avec P Image sur PicassoIA, à partir de prompts qui précisent l’optique, la lumière et les textures. Vous pouvez faire de même pour vos propres documentations, notes de version ou bannières de projet.
Trois modèles à essayer ensuite :
Seedream 4.5 pour des images 4K nettes à partir d’une description simple
Flux 2 Pro pour la génération texte vers image et les retouches à partir de photos
Rédigez un prompt, générez, ajustez l’éclairage ou l’angle, puis générez à nouveau. Une fois qu’une image vous semble juste, les outils vidéo de la plateforme peuvent la transformer en mouvement. Ouvrez PicassoIA, choisissez un modèle et créez votre première image dès aujourd’hui.