Error de login MCP en Codex: cómo solucionar Auth Unsupported
Codex muestra Auth Unsupported junto a un servidor MCP, y codex mcp login se niega a ejecutarse o informa de que no se detectó soporte de autorización. Este artículo explica cuándo la etiqueta es inofensiva, cómo distinguir un servidor stdio de uno HTTP y tres soluciones: una variable con el bearer token, un login OAuth limpio y un puente mcp-remote. También aborda la regresión en macOS y un error de conexión parecido.
Ejecutas codex mcp list, aparece el nuevo servidor y la columna Auth dice Unsupported. Luego codex mcp login se niega a arrancar o se detiene con un aviso sobre la falta de soporte de autorización. Las herramientas nunca aparecen en tu sesión, y nada en la salida te dice cuál de varios problemas distintos tienes.
Esta página los ordena en el orden en que conviene revisarlos. Primero, si Unsupported es realmente un problema, porque en algunos servidores es la etiqueta correcta. Después, tres soluciones (un bearer token, un login OAuth limpio y un puente stdio), una regresión en macOS reportada en julio de 2026 y un error parecido que no tiene nada que ver con el login.
💡 Respuesta corta:Unsupported significa que Codex no encontró nada con lo que autenticarse. En un servidor stdio eso es normal. En un servidor HTTP que necesita credenciales, dale a Codex una variable de bearer token, vuelve a ejecutar codex mcp login <name> en una versión actual o pasa el servidor por mcp-remote.
Qué significa Auth Unsupported
De dónde sale la etiqueta
Codex calcula la columna Auth por sí mismo. Según una guía del subcomando codex mcp, tanto list como get comprueban tres cosas para cada servidor:
¿Hay una variable de entorno de bearer token configurada y realmente definida?
¿Hay tokens OAuth guardados en el almacén de credenciales?
¿El endpoint HTTP anuncia metadatos OAuth?
Si ninguna de las tres se cumple, la columna muestra Unsupported. La etiqueta describe lo que Codex puede ver, no lo que necesita el servidor. Un servidor puede exigir un login y aun así mostrar Unsupported cuando sus metadatos faltan, están mal formados o no son accesibles desde tu equipo.
Valores de estado de un vistazo
Lo que ves
Qué significa
Siguiente paso
Unsupported
Sin variable de token, sin tokens guardados, sin metadatos OAuth (o un servidor stdio)
Revisa el tipo de servidor más abajo
Authenticated
Hay una variable de token definida o hay tokens OAuth guardados
Nada que arreglar, confirma que las herramientas cargan
Una etiqueta de sesión cerrada
El servidor anuncia OAuth, pero no hay ningún token guardado
Ejecuta codex mcp login <name>
Los ejemplos oficiales muestran authenticated y unsupported. La redacción del estado de sesión cerrada cambia entre versiones, así que trata la columna como una pista y confirma con /mcp dentro de la TUI de Codex, que lista tus servidores MCP activos. La documentación oficial de MCP de Codex tiene la lista completa de ajustes de servidor.
Para pegar algo limpio en un ticket o un script, codex mcp list --json y codex mcp get my-server --json imprimen los mismos datos de estado en formato legible por máquina. Esa es también la forma más rápida de comparar un equipo donde el login funciona con otro donde no.
Stdio o HTTP: revisa el tipo de servidor
Antes de cambiar nada, averigua qué tipo de servidor registraste. Abre ~/.codex/config.toml y mira la entrada. Una línea command indica stdio. Una línea url indica HTTP en streaming. La solución depende por completo de esa diferencia.
Servidores stdio: Unsupported es normal
Un servidor stdio es un proceso local que Codex arranca y con el que se comunica a través de la entrada y salida estándar:
OAuth pertenece al transporte HTTP. La referencia lo dice claramente: «El login OAuth solo se admite en servidores HTTP en streaming.» Así que codex mcp login local-tools se rechaza por diseño, y Unsupported es la etiqueta esperada. Si ese servidor necesita una credencial, pásala mediante env o env_vars en la misma tabla en lugar de intentar un login.
💡 Un servidor público que no necesita autenticación también mostrará Unsupported. Si las herramientas aparecen en tu sesión, no hay nada que arreglar.
Cuatro descuidos explican la mayoría de los fallos aquí:
Pegar el token en bearer_token_env_var. Ese campo recibe el nombre de la variable, no el secreto.
Exportar en el shell equivocado. Una variable definida en una pestaña de terminal es invisible en otra.
Abrir Codex desde un icono del editor o del dock. Esos procesos a menudo no ven las variables exportadas en el perfil de tu shell. Inicia Codex desde la terminal que tiene la variable, o define la variable para todo el sistema.
Guardar la línea completa del header. Deja solo el valor del token, porque Codex lo envía en el header Authorization por ti.
Vuelve a ejecutar codex mcp list. La columna debería dejar de mostrar Unsupported en cuanto la variable esté definida.
En CI, guarda el token como secreto enmascarado y expórtalo en el paso del job que lanza Codex. El nombre de la variable en config.toml sigue siendo el mismo, así que el archivo puede vivir en el repositorio sin filtrar nada.
Solución 2: ejecuta el login OAuth
Cuando el servidor espera OAuth, no hay token que pegar. Codex tiene que recorrer un inicio de sesión en el navegador y guardar el resultado.
El primer comando abre tu navegador. Aprueba la solicitud y vuelve al terminal. El segundo pide scopes específicos cuando los valores por defecto del servidor son demasiado estrechos. El tercero borra las credenciales guardadas e imprime Removed OAuth credentials for 'my-server' o No OAuth credentials stored for 'my-server'.
Trabajar por SSH o en un equipo sin pantalla es la trampa habitual. La página de inicio de sesión se abre en un navegador y el proveedor luego redirige a una dirección de callback que debe llegar a la máquina donde corre Codex. En un host remoto, esa redirección a menudo llega a tu equipo portátil en su lugar, y el login nunca termina. Reenvía el puerto del callback, o usa la solución 1 o la 3 en esa máquina.
Cuando un login sigue fallando, cierra sesión primero y vuelve a entrar, para no pelear con una sesión caducada. Haz lo mismo antes de borrar una entrada de servidor, porque quitar la entrada no revoca ni elimina los tokens ya guardados.
Fija el recurso y el callback
Los proveedores que siguen las reglas OAuth más nuevas vinculan cada token a una única URL canónica de recurso. Las notas de Codex de MintMCP recomiendan definir oauth_resource explícitamente en la entrada del servidor en lugar de dejar que Codex lo derive, y mantener la misma URL en el endpoint MCP, los metadatos del recurso, la solicitud de autorización y la audiencia del token:
Añade la tabla oauth solo cuando el proveedor te haya dado un ID de cliente preregistrado. La URL de callback debe coincidir, carácter por carácter, con la que el proveedor tiene registrada.
El soporte OAuth llegó a Codex por partes, así que tu versión importa:
Versión
Fecha
Qué cambió
rust-v0.131.0
2026-05-18
IDs de cliente OAuth de MCP explícitos y vinculación del callback
rust-v0.134.0
2026-05-26
codex mcp add acepta opciones OAuth para servidores HTTP
rust-v0.142.0
2026-06-22
Búsqueda de metadatos de recurso protegido (RFC 9728)
rust-v0.144.0
2026-07-09
Reautenticación interactiva tras un 401 a mitad de sesión
rust-v0.145.0
2026-07-21
El arranque ya no se bloquea por búsquedas OAuth; las renovaciones de credenciales se ejecutan una a una
Un servidor que funciona en la compilación más reciente puede fallar en una versión de hace dos meses, porque la búsqueda seguía otro camino. Comprueba con codex --version y después actualiza con el instalador que usaste, por ejemplo npm i -g @openai/codex@latest.
Solución 3: pon mcp-remote en medio
A veces el servidor está bien, tu token está bien y Codex sigue mostrando Unsupported. La salida más limpia es dejar de pedirle a Codex que haga OAuth. El paquete mcp-remote es un pequeño proxy stdio que habla con el servidor remoto y ejecuta el inicio de sesión en el navegador por su cuenta, así que Codex solo ve un proceso local.
Sube startup_timeout_sec por encima de su valor por defecto de 10 segundos. El primer arranque espera a que termines el login en el navegador, y un timeout corto mata el proceso antes de que puedas hacer clic en nada. Quita antes cualquier entrada anterior con el mismo nombre, para que no entren en conflicto.
Contrapartidas que debes aceptar
La columna Auth seguirá diciendo Unsupported. Es lo esperado: Codex ahora ve un servidor stdio, y el puente gestiona la autenticación.
Dependes de que Node y npx estén disponibles donde corre Codex.
Los tokens viven en la caché propia del puente (normalmente ~/.mcp-auth), no en Codex. Si un login malo sigue reproduciéndose, borra esa carpeta.
Te saltas la vía OAuth de Codex, lo que significa que no hay reautenticación gestionada por Codex tras un 401 a mitad de sesión.
Para un servidor que usas a diario, esta es una configuración permanente razonable. Para una prueba puntual, la solución 1 es más rápida.
¿Sigue fallando después de la solución?
macOS: no se detectó soporte de autorización
Un fallo merece su propia entrada. MintMCP documenta un caso en el que codex mcp login se detiene con No authorization support detected en macOS, a partir de las versiones de 2026-07-22. Frente a un servidor OAuth que cumple la especificación, la misma versión de Codex inicia sesión en Linux y falla el paso de metadatos en macOS. Está registrado como openai/codex#34684.
Antes de culpar al servidor, prueba sus metadatos desde la máquina que falla:
Un cuerpo JSON significa que el servidor publica lo que pide la especificación, y el problema está en el lado de Codex. Algunos servidores añaden la ruta del endpoint, como /.well-known/oauth-protected-resource/mcp. Tus opciones, por orden de esfuerzo:
Actualiza Codex y reintenta, ya que las correcciones llegan con frecuencia.
Usa un bearer token (solución 1) si el proveedor lo ofrece.
Pasa por mcp-remote (solución 3), que saca el flujo OAuth de Codex.
Conexión cerrada en initialize
Algunos errores parecen fallos de autenticación y no lo son. Un reporte en el issue #5619 de GitHub describe Codex CLI v0.47.0 conectándose a un servidor HTTP en streaming con un bearer token y terminando con connection closed: initialize response. El cliente anunció la versión de protocolo 2025-06-18 pero se comportó como el transporte más antiguo 2024-11-05: cerró la conexión justo después del evento endpoint y nunca esperó la respuesta de initialize. El mismo servidor funcionaba en Cursor.
Si tu error dice connection closed en lugar de unsupported, ningún cambio de token ayudará. Actualiza a una versión actual de Codex y confirma qué transporte habla realmente el servidor, porque un endpoint estilo SSE antiguo y uno HTTP en streaming no son intercambiables.
La lista de comprobación de cinco minutos
Ejecuta codex --version y actualiza si tiene más de un par de meses.
Ejecuta codex mcp get my-server y anota si la entrada usa command o url.
En entradas command, acepta Unsupported y arregla el proceso del servidor.
En entradas url, define bearer_token_env_var o ejecuta codex mcp login my-server.
Prueba los metadatos con curl contra /.well-known/oauth-protected-resource.
En macOS, prueba el puente mcp-remote antes de gastar una hora en teorías.
Abre /mcp en la TUI y confirma que el servidor aparece.
Depura con GPT 5.6 Sol en PicassoIA
Cuando la configuración parece correcta y el error sigue apareciendo, una segunda lectura ayuda. GPT 5.6 Sol está pensado para tareas de programación y razonamiento de varios pasos, y acepta capturas de pantalla, así que puedes pasarle directamente la salida del terminal. No ejecuta Codex ni toca tu equipo. Solo lee lo que pegas.
En System Prompt, define el rol: «Eres un solucionador de problemas de Codex CLI y MCP. Pide los datos que falten antes de adivinar.»
En Prompt, pega tu tabla [mcp_servers.my-server] y la salida de codex mcp get my-server.
Añade una captura del terminal que falla bajo Image Input.
Define Reasoning Effort en medium para la mayoría de los casos, o high para una configuración OAuth enredada. El valor por defecto, none, prioriza la velocidad.
Sube Max Completion Tokens cuando uses high o xhigh, porque el razonamiento intenso puede consumir todo el presupuesto y devolver una respuesta vacía.
Elige Verbositylow para una lista corta de soluciones o high para un recorrido completo.
💡 Sustituye cada token real, secreto de cliente y nombre de host interno por REDACTED antes de pegar nada.
Prompts que vale la pena enviar
«Aquí tienes mi entrada de configuración y la salida de codex mcp get. ¿Cuál de las tres comprobaciones de auth falla, y por qué?»
«Este servidor es stdio. Reescribe la entrada para que la credencial llegue al proceso mediante env_vars.»
«Compara mi configuración OAuth con esta URL de recurso e indica dónde podría no coincidir la audiencia.»
Para una segunda opinión, Claude Sonnet 5 en la misma plataforma es otra opción sólida para leer configuraciones y salidas de error.
Crea tus propias imágenes en Picasso IA
Arreglar un error de login es un buen momento para construir algo con las herramientas que ya funcionan. Cada foto de este artículo se generó con P Image en Picasso IA, a partir de prompts que indican la lente, la luz y las texturas. Puedes hacer lo mismo con tu propia documentación, notas de versión o banners de proyecto.
Tres modelos que vale la pena abrir a continuación:
Seedream 4.5 para imágenes 4K nítidas a partir de una descripción sencilla
Flux 2 Pro para texto a imagen y ediciones basadas en fotos
Escribe un prompt, genera, ajusta la iluminación o el ángulo y genera de nuevo. Cuando una imagen fija te convenza, las herramientas de video de la plataforma pueden darle movimiento. Abre Picasso IA, elige un modelo y crea tu primera imagen hoy.