Codex Desktop authenticates OAuth MCP server but never imports tools into threads; auth_status stays unsupported
What version of the Codex App are you using (From “About Codex” dialog)?
Codex Desktop 0.125.0-alpha.3 is shown in local session metadata as the active CLI/app runtime.
What subscription do you have?
Unknown from the app logs on this machine.
What platform is your computer?
macOS (Darwin, Apple Silicon). The workspace is local.
What issue are you seeing?
Codex Desktop successfully adds and authenticates a streamable HTTP MCP server, but never surfaces that server's tools in any thread.
What works:
codex mcp add <server-name> --url <streamable-http-mcp-url>codex mcp login <server-name>- OAuth completes successfully multiple times
codex mcp list --jsonshows the server is present and enabled- Manually calling
tools/listwith the same bearer token Codex obtained returns the expected tool list from the MCP server
What fails:
codex mcp list --jsonreports"auth_status": "unsupported"- Codex Desktop threads never receive any dynamic tool entries for the configured MCP server
- Restarting Codex Desktop does not help
- Removing the server, re-adding it, and re-authing from scratch does not help
This makes the server look configured and authenticated, but it is never actually imported into the thread tool registry.
Steps to reproduce
- Add a streamable HTTP MCP server that advertises OAuth:
codex mcp add <server-name> --url <streamable-http-mcp-url>
- Authenticate it:
codex mcp login <server-name>
- Complete the browser OAuth flow
- Start a new Codex Desktop thread or restart Codex Desktop
- Ask the thread whether the MCP server's tools are available
Expected behavior
After successful OAuth, Codex Desktop should import the MCP server's tools into new threads.
Actual behavior
The server remains visible in MCP config, but no tools from that MCP server are exposed in threads.
Evidence
codex mcp list --json returns:
[
{
"name": "<server-name>",
"enabled": true,
"disabled_reason": null,
"transport": {
"type": "streamable_http",
"url": "<streamable-http-mcp-url>",
"bearer_token_env_var": null,
"http_headers": null,
"env_http_headers": null
},
"startup_timeout_sec": null,
"tool_timeout_sec": null,
"auth_status": "unsupported"
}
]
~/.codex/config.toml contains:
[mcp_servers.<server-name>]
url = "<streamable-http-mcp-url>"
Local thread state shows no dynamic tool entries for the configured MCP server at all. Recent threads only have built-in tools like:
automation_updateread_thread_terminalload_workspace_dependenciesinstall_workspace_dependencies
In the local SQLite state DB (~/.codex/state_5.sqlite), the thread_dynamic_tools table never gets an entry for the configured MCP server in recent threads.
Also, the server itself appears healthy:
- Unauthenticated
tools/listreturns401 Unauthorized - The server advertises OAuth metadata correctly
- Manual
tools/listwith the same Codex-issued bearer token succeeds and returns the expected MCP tool list
That suggests the server is not the problem; the issue appears to be in Codex Desktop/CLI auth classification or MCP tool import after login.
Additional notes
codex mcp login <server-name>succeeds repeatedly, butcodex mcp list --jsonstill reports"auth_status": "unsupported"- There is no legacy
~/.codex/.credentials.jsonon this machine - The visible
~/.codex/auth.jsondoes not expose a named top-level credential entry for the configured MCP server
6 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I am seeing what looks like the same MCP tool-injection failure on macOS / Codex Desktop.
Environment:
codex-cli 0.136.0-alpha.2Configured streamable HTTP MCP servers:
jt-dataxathttps://ai.winyourdata.com/mcpjobtread_nativeathttps://api.jobtread.com/mcpObserved behavior:
codex mcp listshows both servers enabled.Auth: Unsupported.codex mcp get jobtread_nativeshowsenabled: true,transport: streamable_http, and the expected URL./Users/joshmcculloch/Documents/Codex.thread_dynamic_toolstable has no JobTread MCP tools for the active thread.This does not appear to be only a server-health/config issue: after OAuth, a fresh post-login thread previously exposed the DATAx JobTread tools and successfully completed a minimal read-only organization metadata call. Later, the long-running coordination thread could no longer see either the DATAx tools or the newly configured native JobTread tools.
Impact:
Requests:
Auth: Unsupportedand fail to inject tools into threads.I have the same problem with the GitLab MCP Server authenticated with OAuth.
It's shows up connected in the mcp server overview in the desktop app, but not available in the Session.
When I do the login via console it works just one time but after that not accessible through any session or thread because of an json-parse error.
On one of my colleague's MacBook Pro this works perfectly fine with Claude Code Desktop, but not with Codex on my MacBook.
The first step works:
A mcp login then wants another OAuth again:
The mcp list shows it as enabled after that:
Now when i open the cli it shows an error:
/mcp
🔌 MCP Tools
• GitLab
• Auth: OAuth
• Tools: (none)
I've cloned this repo and asked Codex about this bug report issue, and feedback in https://gitlab.com/gitlab-org/gitlab/-/work_items/561564#note_3415658534 I cannot reproduce the problem in my environment (macOS Tahoe 26.5.1, Codex 0.131.0 - 0.136.0, GitLab.com 19.0 - 19.1. macOS Tahoe 26.5.1, Codex 0.131.0 - 0.136.0, GitLab.com 19.0 - 19.1.).
It seems that the streamable HTTP messages are directly parsed as JSON-RPC, swallowing other message formats like JSON formatted error messages from the server-side, which could help explain the current behavior in https://github.com/openai/codex/issues/20009#issuecomment-4611123594
Here's the full analysis summary with Codex help, and a suggested patch for debugging. I am a beginner with Codex 's code base, so this might not work immediately.
Adding another reproduction, this time with Webflow's official remote OAuth MCP server.
Environment:
Codex Doctor v0.140.0-alpha.19 · macos-aarch640.140.0-alpha.19Mac OS 26.5.1 [64-bit]en-GBwebflowstreamable_httphttps://mcp.webflow.com/mcpConfigured MCP server:
Observed behavior:
codex mcp listshows Webflow as configured, enabled, and OAuth-backed:codex mcp get webflowshows:codex doctor --summaryreports MCP configuration as healthy:The login flow completed successfully:
codex mcp liststill shows:returns:
I also rendered a model-visible prompt input locally and searched it for Webflow/MCP tool references. It contains no Webflow tool namespace or Webflow tool instructions, despite the server being configured and re-authenticated.
Impact:
doctorconfirms MCP config is healthy.This looks like the same class of issue described here, but with Webflow's official MCP and a current
mcp listoutput that reportsAuth: OAuthrather thanAuth: Unsupported.Expected behavior:
codex mcp login webflow, new Codex desktop threads should expose Webflow MCP tools.Actual behavior:
webflow/mcp__webflow__...namespace.This needs a thread-level MCP import state, separate from auth. For each server, show configured, auth complete, initialize ok, tools/list ok, schema accepted, injected into thread, and model-visible. Include last error at each stage. That would distinguish OAuth success from tool-registry failure without making users manually replay tools/list with the bearer token.
---
_Generated with ax._