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.

Error de login MCP en Codex: cómo solucionar Auth Unsupported
Cristian Da Conceicao
Fundador de Picasso IA

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.

Candado de latón junto a un equipo portátil abierto sobre una mesa de nogal

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:

  1. ¿Hay una variable de entorno de bearer token configurada y realmente definida?
  2. ¿Hay tokens OAuth guardados en el almacén de credenciales?
  3. ¿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 vesQué significaSiguiente paso
UnsupportedSin variable de token, sin tokens guardados, sin metadatos OAuth (o un servidor stdio)Revisa el tipo de servidor más abajo
AuthenticatedHay una variable de token definida o hay tokens OAuth guardadosNada que arreglar, confirma que las herramientas cargan
Una etiqueta de sesión cerradaEl servidor anuncia OAuth, pero no hay ningún token guardadoEjecuta 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.

Desarrollador leyendo una ventana de terminal en un monitor grande

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.

Vista cenital de una libreta con dos diagramas de conexión dibujados a mano

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:

[mcp_servers.local-tools]
command = "npx"
args = ["-y", "some-mcp-package"]
env = { LOG_LEVEL = "info" }

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.

Servidores HTTP: Unsupported es una advertencia

Una entrada HTTP se ve distinta:

[mcp_servers.my-server]
url = "https://mcp.example.com/mcp"

Si este servidor espera credenciales y la columna sigue diciendo Unsupported, pasa una de tres cosas:

  • El servidor usa tokens estáticos, no OAuth, y no le has dado ninguno.
  • El servidor usa OAuth, pero Codex no puede acceder a sus metadatos ni interpretarlos.
  • Tu versión de Codex es demasiado antigua para la búsqueda de metadatos que necesita el servidor.

Cada causa tiene su solución más abajo.

Solución 1: envía un bearer token

Si el proveedor te entrega un token de API desde un panel, este es el camino más corto. Sin navegador, sin callback, sin búsqueda de metadatos.

Manos escribiendo a la luz cálida de la tarde

Exporta la variable

Guarda el token en una variable de entorno y registra el servidor con el nombre de la variable:

export MY_SERVER_TOKEN="paste-the-token-value-here"
codex mcp add my-server --url https://mcp.example.com/mcp --bearer-token-env-var MY_SERVER_TOKEN

El flag --bearer-token-env-var guarda el nombre de la variable, y el token en sí nunca se escribe en disco.

Apunta la configuración a ella

El resultado en config.toml debería mostrar:

[mcp_servers.my-server]
url = "https://mcp.example.com/mcp"
bearer_token_env_var = "MY_SERVER_TOKEN"
startup_timeout_sec = 20

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.

Equipo portátil sobre una mesa de mármol de cafetería con una página de inicio de sesión desenfocada

Inicia sesión, cierra sesión, reintenta

codex mcp login my-server
codex mcp login my-server --scopes "read,write"
codex mcp logout my-server

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:

[mcp_servers.my-server]
url = "https://mcp.example.com/mcp"
oauth_resource = "https://mcp.example.com/mcp"

[mcp_servers.my-server.oauth]
client_id = "your-preregistered-client-id"
callback_url = "http://localhost:8765/callback"

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ónFechaQué cambió
rust-v0.131.02026-05-18IDs de cliente OAuth de MCP explícitos y vinculación del callback
rust-v0.134.02026-05-26codex mcp add acepta opciones OAuth para servidores HTTP
rust-v0.142.02026-06-22Búsqueda de metadatos de recurso protegido (RFC 9728)
rust-v0.144.02026-07-09Reautenticación interactiva tras un 401 a mitad de sesión
rust-v0.145.02026-07-21El 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.

Pasillo largo de racks de servidores negros con bandejas de cables ordenadas

Conecta el puente

[mcp_servers.my-server]
command = "npx"
args = ["-y", "mcp-remote", "https://mcp.example.com/mcp"]
startup_timeout_sec = 60

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.

Equipos portátiles de plata y negro uno al lado del otro con ventanas de terminal abiertas

Antes de culpar al servidor, prueba sus metadatos desde la máquina que falla:

curl -i https://mcp.example.com/.well-known/oauth-protected-resource

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:

  1. Actualiza Codex y reintenta, ya que las correcciones llegan con frecuencia.
  2. Usa un bearer token (solución 1) si el proveedor lo ofrece.
  3. 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.

Desarrollador frente a una pizarra blanca llena de notas adhesivas y flechas de cronograma

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

Libreta con una lista de comprobación con marcas junto a un equipo portátil

  1. Ejecuta codex --version y actualiza si tiene más de un par de meses.
  2. Ejecuta codex mcp get my-server y anota si la entrada usa command o url.
  3. En entradas command, acepta Unsupported y arregla el proceso del servidor.
  4. En entradas url, define bearer_token_env_var o ejecuta codex mcp login my-server.
  5. Prueba los metadatos con curl contra /.well-known/oauth-protected-resource.
  6. En macOS, prueba el puente mcp-remote antes de gastar una hora en teorías.
  7. 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.

Configura la solicitud

  1. Abre GPT 5.6 Sol en PicassoIA.
  2. En System Prompt, define el rol: «Eres un solucionador de problemas de Codex CLI y MCP. Pide los datos que falten antes de adivinar.»
  3. En Prompt, pega tu tabla [mcp_servers.my-server] y la salida de codex mcp get my-server.
  4. Añade una captura del terminal que falla bajo Image Input.
  5. 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.
  6. Sube Max Completion Tokens cuando uses high o xhigh, porque el razonamiento intenso puede consumir todo el presupuesto y devolver una respuesta vacía.
  7. Elige Verbosity low 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
  • GPT Image 2 cuando el prompt es largo y detallado
  • 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.

Compartir este artículo

Elige tu idioma