Erro de login no MCP do Codex: como corrigir Auth Unsupported

O Codex exibe Auth Unsupported ao lado de um servidor MCP, e o comando codex mcp login ou não executa ou informa que nenhum suporte de autorização foi detectado. Este artigo mostra quando o aviso é inofensivo, como diferenciar um servidor stdio de um HTTP e três correções: uma variável de token bearer, um login OAuth limpo e uma ponte com mcp-remote. Também trata da regressão no macOS e de um erro de conexão parecido.

Erro de login no MCP do Codex: como corrigir Auth Unsupported
Cristian Da Conceicao
Fundador do Picasso IA

Você executa codex mcp list, o novo servidor aparece e a coluna Auth mostra Unsupported. Depois, codex mcp login ou não inicia ou para com uma reclamação sobre falta de suporte de autorização. As ferramentas nunca aparecem na sua sessão, e nada na saída indica qual dos vários problemas diferentes você encontrou.

Esta página organiza os problemas na ordem em que você deve verificá-los. Primeiro, se Unsupported é realmente um problema, porque em alguns servidores é o rótulo correto. Depois, três correções (um token bearer, um login OAuth limpo e uma ponte stdio), uma regressão no macOS relatada em julho de 2026 e um erro parecido que não tem nada a ver com login.

💡 Resposta rápida: Unsupported significa que o Codex não encontrou nada com que se autenticar. Para um servidor stdio isso é normal. Para um servidor HTTP que exige credenciais, forneça ao Codex uma variável de token bearer, rode novamente codex mcp login <name> em uma versão atual ou direcione o servidor por meio de mcp-remote.

Cadeado de latão ao lado de um notebook aberto sobre uma mesa de nogueira

O que significa Auth Unsupported

De onde vem o rótulo

O próprio Codex calcula a coluna Auth. Segundo um guia passo a passo do subcomando codex mcp, tanto list quanto get verificam três coisas para cada servidor:

  1. Há uma variável de ambiente de token bearer configurada, e ela está de fato definida?
  2. Há tokens OAuth armazenados no cofre de credenciais?
  3. O endpoint HTTP anuncia metadados OAuth?

Se nenhuma das três condições se aplica, a coluna mostra Unsupported. O rótulo descreve o que o Codex consegue ver, não o que o servidor exige. Um servidor pode exigir login e, ainda assim, mostrar Unsupported quando os metadados estão ausentes, malformados ou inacessíveis a partir da sua máquina.

Valores de status em resumo

O que você vêO que significaPróximo passo
UnsupportedSem variável de token, sem tokens armazenados, sem metadados OAuth (ou um servidor stdio)Verifique o tipo de servidor abaixo
AuthenticatedUma variável de token está definida ou há tokens OAuth armazenadosNada a corrigir, confirme se as ferramentas carregam
Um rótulo de sessão encerradaO servidor anuncia OAuth, mas nenhum token está armazenadoExecute codex mcp login <name>

Os exemplos oficiais mostram authenticated e unsupported. A redação do estado de sessão encerrada muda entre versões, então trate a coluna como uma dica e confirme com /mcp dentro da TUI do Codex, que lista os servidores MCP ativos. A documentação oficial do MCP no Codex traz a lista completa de configurações de servidor.

Para colar de forma limpa em um chamado ou em um script, codex mcp list --json e codex mcp get my-server --json imprimem os mesmos dados de status em formato legível por máquina. Essa também é a forma mais rápida de comparar uma máquina em que o login funciona com outra em que não funciona.

Desenvolvedor lendo uma janela de terminal em um monitor grande

Stdio ou HTTP: verifique o tipo de servidor

Antes de mudar qualquer coisa, descubra qual tipo de servidor você registrou. Abra ~/.codex/config.toml e observe a entrada. Uma linha command indica stdio. Uma linha url indica HTTP streamable. A correção depende inteiramente dessa diferença.

Vista de cima de um notebook com dois diagramas de conexão desenhados à mão

Servidores stdio: Unsupported é normal

Um servidor stdio é um processo local que o Codex inicia e com o qual se comunica por entrada e saída padrão:

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

OAuth pertence ao transporte HTTP. A referência diz isso claramente: "OAuth login is only supported for streamable HTTP servers." Portanto, codex mcp login local-tools é rejeitado por design, e Unsupported é o rótulo esperado. Se esse servidor precisar de uma credencial, entregue-a por meio de env ou env_vars na mesma tabela, em vez de tentar fazer login.

💡 Um servidor público que não exige autenticação também mostrará Unsupported. Se as ferramentas aparecerem na sua sessão, não há nada a corrigir.

Servidores HTTP: Unsupported é um alerta

Uma entrada HTTP tem outra aparência:

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

Se esse servidor espera credenciais e a coluna ainda mostra Unsupported, há uma de três causas:

  • O servidor usa tokens estáticos, não OAuth, e você não forneceu um.
  • O servidor usa OAuth, mas o Codex não consegue acessar ou interpretar seus metadados.
  • Sua versão do Codex é antiga demais para a consulta de metadados que o servidor precisa.

Cada causa tem a correção correspondente abaixo.

Correção 1: envie um token bearer

Se o provedor entregar um token de API em um painel, este é o caminho mais curto. Sem navegador, sem callback e sem consulta de metadados.

Mãos digitando sob a luz quente da tarde

Exporte a variável

Coloque o token em uma variável de ambiente e registre o servidor com o nome da variável:

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

A opção --bearer-token-env-var armazena o nome da variável, e o próprio token nunca é gravado em disco.

Aponte a configuração para ela

O resultado em config.toml deve mostrar:

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

Quatro deslizes explicam a maioria das falhas aqui:

  • Colar o token em bearer_token_env_var. Esse campo recebe o nome da variável, não o segredo.
  • Exportar no shell errado. Uma variável definida em uma aba do terminal fica invisível em outra.
  • Iniciar o Codex por um ícone do editor ou do dock. Esses processos costumam não enxergar variáveis exportadas no perfil do seu shell. Inicie o Codex pelo terminal que tem a variável, ou defina a variável no sistema inteiro.
  • Guardar a linha de cabeçalho inteira. Mantenha apenas o valor do token, já que o Codex o envia no cabeçalho Authorization por você.

Execute codex mcp list novamente. A coluna deve deixar Unsupported assim que a variável estiver definida.

Em CI, guarde o token como um segredo mascarado e exporte-o na etapa do job que inicia o Codex. O nome da variável em config.toml permanece o mesmo, então o arquivo pode ficar no repositório sem vazar nada.

Correção 2: execute o login OAuth

Quando o servidor espera OAuth, não há token para colar. O Codex precisa passar por um login no navegador e armazenar o resultado.

Notebook sobre uma mesa de café de mármore mostrando uma página de login desfocada

Entre, saia, tente de novo

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

O primeiro comando abre o navegador. Aprove a solicitação e volte ao terminal. O segundo pede escopos específicos quando os padrões do servidor são restritos demais. O terceiro apaga as credenciais armazenadas e imprime Removed OAuth credentials for 'my-server' ou No OAuth credentials stored for 'my-server'.

Trabalhar por SSH ou em uma máquina sem interface gráfica é a armadilha mais comum. A página de login abre em um navegador, e o provedor então redireciona para um endereço de callback que precisa alcançar a máquina onde o Codex está rodando. Em um host remoto, esse redirecionamento costuma cair no seu notebook, e o login nunca termina. Encaminhe a porta do callback ou use a Correção 1 ou a Correção 3 nessa máquina.

Quando um login continua falhando, saia primeiro e entre de novo, para não lutar contra uma sessão antiga. Faça o mesmo antes de excluir a entrada de um servidor, porque remover a entrada não revoga nem apaga os tokens já armazenados.

Fixe o recurso e o callback

Provedores que seguem as regras mais novas de OAuth vinculam cada token a uma URL canônica de recurso. As notas do Codex da MintMCP recomendam definir oauth_resource explicitamente na entrada do servidor, em vez de deixar o Codex deduzi-la, e manter a mesma URL no endpoint MCP, nos metadados do recurso, na solicitação de autorização e no público do 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"

Adicione a tabela oauth somente quando o provedor tiver fornecido um ID de cliente pré-registrado. A URL de callback precisa coincidir, caractere por caractere, com o que o provedor tem registrado.

O suporte a OAuth chegou ao Codex aos poucos, então a sua versão importa:

VersãoDataO que mudou
rust-v0.131.02026-05-18IDs de cliente OAuth explícitos para MCP e vinculação de callback
rust-v0.134.02026-05-26codex mcp add aceita opções de OAuth para servidores HTTP
rust-v0.142.02026-06-22Consulta de metadados de recurso protegido (RFC 9728)
rust-v0.144.02026-07-09Reautenticação interativa após um 401 durante a sessão
rust-v0.145.02026-07-21A inicialização não é mais bloqueada por consultas OAuth; as renovações de credenciais rodam uma por vez

Um servidor que funciona na versão mais nova pode falhar em uma versão de dois meses antes, porque a consulta seguiu outro caminho. Verifique com codex --version e depois atualize pelo instalador que você usou, por exemplo npm i -g @openai/codex@latest.

Correção 3: coloque o mcp-remote no meio

Às vezes o servidor está bem, seu token está bem, e o Codex ainda informa Unsupported. A saída mais limpa é deixar de pedir ao Codex que faça OAuth. O pacote mcp-remote é um pequeno proxy stdio que conversa com o servidor remoto e executa o login no navegador por conta própria, então o Codex só enxerga um processo local.

Longo corredor de racks de servidores pretos com bandejas de cabos organizadas

Monte a ponte

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

Aumente startup_timeout_sec acima do padrão de 10 segundos. A primeira inicialização espera você concluir o login no navegador, e um tempo limite curto mata o processo antes que você consiga clicar em qualquer coisa. Remova antes qualquer entrada antiga com o mesmo nome, para que as duas não entrem em conflito.

Contrapartidas a aceitar

  • A coluna Auth continuará dizendo Unsupported. Isso é esperado: o Codex agora enxerga um servidor stdio, e a ponte cuida da autenticação.
  • Você depende de Node e de npx estarem disponíveis onde o Codex roda.
  • Os tokens ficam no cache próprio da ponte (geralmente ~/.mcp-auth), não no Codex. Se um login ruim continuar sendo reaproveitado, apague essa pasta.
  • Você deixa de usar o caminho OAuth do Codex, o que significa que não há reautenticação gerenciada pelo Codex após um 401 durante a sessão.

Para um servidor que você usa todo dia, esta é uma configuração permanente razoável. Para um teste pontual, a Correção 1 é mais rápida.

Ainda falhando depois da correção?

macOS: nenhum suporte de autorização detectado

Uma falha merece entrada própria. A MintMCP documenta um caso em que codex mcp login para com No authorization support detected no macOS, a partir das versões de 2026-07-22. Contra um servidor OAuth que segue a especificação, a mesma versão do Codex faz login no Linux e falha na etapa de metadados no macOS. O problema é rastreado como openai/codex#34684.

Notebooks prateados e pretos lado a lado executando janelas de terminal

Antes de culpar o servidor, teste os metadados dele a partir da máquina que falha:

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

Um corpo JSON significa que o servidor publica o que a especificação pede, e o problema está do lado do Codex. Alguns servidores acrescentam o caminho do endpoint, como /.well-known/oauth-protected-resource/mcp. Suas opções, em ordem de esforço:

  1. Atualize o Codex e tente de novo, já que as correções saem com frequência.
  2. Use um token bearer (Correção 1), se o provedor oferecer um.
  3. Passe pelo mcp-remote (Correção 3), que tira o fluxo OAuth do Codex.

Conexão encerrada na inicialização

Alguns erros parecem falhas de autenticação e não são. Um relato na issue #5619 do GitHub descreve o Codex CLI v0.47.0 conectando a um servidor HTTP streamable com um token bearer e terminando com connection closed: initialize response. O cliente anunciou a versão de protocolo 2025-06-18, mas se comportou como o transporte 2024-11-05 mais antigo: fechou a conexão logo após o evento endpoint e nunca esperou a resposta de inicialização. O mesmo servidor funcionou no Cursor.

Desenvolvedor diante de um quadro branco cheio de notas adesivas e setas de linha do tempo

Se o seu erro diz connection closed em vez de unsupported, nenhuma mudança de token vai ajudar. Atualize para uma versão atual do Codex e confirme qual transporte o servidor realmente usa, porque um endpoint antigo no estilo SSE e um endpoint HTTP streamable não são intercambiáveis.

O checklist de cinco minutos

Caderno com checklist, com marcas de verificação ao lado de um notebook

  1. Execute codex --version e atualize se a versão tiver mais de dois meses.
  2. Execute codex mcp get my-server e anote se a entrada usa command ou url.
  3. Para entradas command, aceite Unsupported e corrija o processo do servidor.
  4. Para entradas url, defina bearer_token_env_var ou execute codex mcp login my-server.
  5. Teste os metadados com curl contra /.well-known/oauth-protected-resource.
  6. No macOS, experimente a ponte mcp-remote antes de gastar uma hora com teorias.
  7. Abra /mcp na TUI e confirme que o servidor aparece.

Depure com o GPT 5.6 Sol na PicassoIA

Quando a configuração parece certa e o erro continua aparecendo, uma segunda leitura ajuda. O GPT 5.6 Sol é feito para tarefas de programação e raciocínio em várias etapas, e aceita capturas de tela, então você pode entregar a saída do terminal diretamente. Ele não executa o Codex nem mexe na sua máquina. Ele apenas lê o que você cola.

Monte a solicitação

  1. Abra o GPT 5.6 Sol na PicassoIA.
  2. Em System Prompt, defina o papel: "Você é um especialista em solução de problemas do Codex CLI e do MCP. Pergunte os dados que faltam antes de chutar."
  3. Em Prompt, cole sua tabela [mcp_servers.my-server] e a saída de codex mcp get my-server.
  4. Adicione uma captura de tela do terminal com erro em Image Input.
  5. Defina Reasoning Effort como medium na maioria dos casos, ou high para uma configuração de OAuth emaranhada. O padrão, none, prioriza velocidade.
  6. Aumente Max Completion Tokens quando usar high ou xhigh, porque um raciocínio pesado pode consumir todo o limite e devolver uma resposta vazia.
  7. Escolha Verbosity low para uma lista curta de correções ou high para um passo a passo completo.

💡 Substitua todo token real, segredo de cliente e nome de host interno por REDACTED antes de colar qualquer coisa.

Prompts que valem a pena enviar

  • "Aqui estão a entrada da minha configuração e a saída de codex mcp get. Qual das três verificações de autenticação está falhando, e por quê?"
  • "Este servidor é stdio. Reescreva a entrada para que a credencial chegue ao processo por meio de env_vars."
  • "Compare minha configuração de OAuth com esta URL de recurso e diga onde o público poderia não bater."

Para uma segunda opinião, o Claude Sonnet 5 na mesma plataforma é outra opção forte para ler configurações e saídas de erro.

Crie suas próprias imagens na Picasso IA

Corrigir um erro de login é um bom momento para criar algo com as ferramentas que agora funcionam. Cada foto deste artigo foi gerada com o P Image na Picasso IA, a partir de prompts que nomeiam a lente, a luz e as texturas. Você pode fazer o mesmo para sua própria documentação, notas de versão ou banners de projeto.

Três modelos que valem a pena abrir em seguida:

  • Seedream 4.5 para imagens 4K nítidas a partir de uma descrição simples
  • GPT Image 2 quando o prompt é longo e detalhado
  • Flux 2 Pro para texto para imagem e edições baseadas em fotos

Escreva um prompt, gere, ajuste a iluminação ou o ângulo e gere de novo. Quando uma imagem parecer certa, as ferramentas de vídeo da plataforma podem transformá-la em movimento. Abra a Picasso IA, escolha um modelo e crie sua primeira imagem hoje.

Compartilhe este artigo

Escolha seu idioma