Skip to main content

MCP fixes and known issues in Codex

If you are running into MCP problems with Codex, this page documents the known issues and the releases that fixed them.

Known issues

codex mcp login fails with "No authorization support detected" on macOS, from 2026-07-22. Against a spec-compliant OAuth MCP server, the same Codex version completes login on Linux but fails discovery on macOS. Tracked in openai/codex#34684. Reach the server through an mcp-remote stdio bridge, which moves the OAuth flow out of Codex.

OAuth discovery and callback handling

Codex added the pieces of OAuth separately: scopes in config first, then the callback URL, then protected resource metadata discovery. A server that works against the newest build can fail on a release from two months earlier because discovery took a different path.

rust-v0.142.0 introduced RFC 9728 protected resource discovery. Require it if your authorization server is found that way; on earlier releases point Codex at the authorization server directly with a pre-registered client.

ReleaseChange
rust-v0.145.0
2026-07-21
Stopped blocking thread startup on MCP OAuth discovery
rust-v0.143.0
2026-07-08
ChatGPT-hosted MCP servers can explicitly use session authentication
rust-v0.142.0
2026-06-22
Added protected resource OAuth discovery (RFC 9728)
rust-v0.134.0
2026-05-26
codex mcp add supports OAuth options for streamable HTTP servers, and routes servers through explicit environments
rust-v0.131.0
2026-05-18
Added support for explicit MCP OAuth client IDs, binds local OAuth callbacks explicitly, and adds callback IDs to local redirects
Earlier OAuth discovery fixes (January 2026 to April 2026)
ReleaseChange
rust-v0.125.0
2026-04-24
Hid the unsupported MCP bearer_token field from the config schema, so it stops looking like a working option
rust-v0.105.0
2026-02-25
Added a configurable MCP OAuth callback URL for codex mcp login
rust-v0.93.0
2026-01-31
OAuth error descriptions are shown in callback responses
rust-v0.81.0
2026-01-14
Added static MCP callback URI support

Token lifecycle and credential storage

rust-v0.145.0 serializes the credential refresh itself, where rust-v0.144.0 serializes only the shared store. Require rust-v0.145.0 when several MCP servers can renew credentials at the same moment, or when your server rotates refresh tokens on every use.

rust-v0.144.0 turned on interactive re-authentication for a mid-session 401. Earlier releases surface the 401 as a failed tool call rather than a sign-in prompt.

ReleaseChange
rust-v0.145.0
2026-07-21
Serializes MCP OAuth credential refreshes, and resolves and pins MCP OAuth credential stores
rust-v0.144.0
2026-07-09
Serializes shared MCP OAuth credential stores, enables interactive authentication requests without an experimental opt-in, and refreshes expired authentication for the hosted connector in long-running sessions
rust-v0.140.0
2026-06-15
MCP OAuth credentials move to encrypted local secret storage with auth-specific namespaces, and unusable credentials are reported as logged out rather than as a connection error
rust-v0.138.0
2026-06-08
Refreshes expired OAuth-backed MCP credentials before startup instead of failing the connection

Scope, resource, and audience binding

Set oauth_resource explicitly on the server entry rather than relying on it being derived, and keep one canonical URL for your MCP endpoint across the MCP URL, the protected resource metadata resource field, the authorize request, and the token audience.

ReleaseChange
rust-v0.142.0
2026-06-22
Protected resource discovery supplies the resource identity for the authorize step
rust-v0.115.0
2026-03-16
Uses scopes_supported for OAuth when the MCP server publishes it
rust-v0.107.0
2026-03-02
MCP OAuth login forwards configured oauth_resource values for servers that require a resource parameter
rust-v0.92.0
2026-01-27
MCP servers can define OAuth scopes in config.toml, used as a fallback for OAuth login instead of passing --scopes each time

Transport and connection reliability

Codex supports stdio and streamable HTTP MCP servers, including stdio servers launched inside a remote execution environment.

rust-v0.143.0 introduced persistence for Cloudflare affinity cookies. Require it if you terminate MCP traffic behind Cloudflare and rely on that cookie to pin a session to one backend, since earlier releases can land a streamable HTTP session on a different backend mid-session.

ReleaseChange
rust-v0.145.0
2026-07-21
Serializes concurrent MCP stdin writes, and bounds remote MCP stdio line length
rust-v0.143.0
2026-07-08
Persists Cloudflare affinity cookies for MCP HTTP connections
rust-v0.142.2
2026-06-25
Remote stdio servers accept absolute working directories written in the remote platform's path format
rust-v0.142.0
2026-06-22
Exec-server processes and stdio MCP sessions survive transient disconnects, including signed-URL refresh and retry-safe stdin writes
rust-v0.136.0
2026-06-01
Updated the MCP implementation to rmcp 1.7.0
Earlier transport fixes (April 2026 to May 2026)
ReleaseChange
rust-v0.134.0
2026-05-26
Read-only MCP tools run concurrently when they advertise readOnlyHint
rust-v0.129.0
2026-05-07
Truncates large MCP tool outputs in rollouts, bounding unchecked output growth
rust-v0.128.0
2026-04-30
Terminates stdio servers on shutdown to avoid process leaks
rust-v0.124.0
2026-04-23
Fixed local stdio launches for relative commands with no explicit cwd

A server can connect and still be unusable, and a slow server can stall the session. Require rust-v0.145.0 for enforced startup timeouts, and rust-v0.141.0 for the 300-second default tool timeout.

ReleaseChange
rust-v0.145.0
2026-07-21
Enforces MCP startup timeouts during client creation
rust-v0.143.0
2026-07-08
Surfaces reauthentication-required startup failures, classifies nested MCP authentication startup errors, and retries failed hosted connector startup
rust-v0.141.0
2026-06-18
Raised the default MCP tool timeout to 300 seconds
rust-v0.140.0
2026-06-15
Retries transient MCP startup failures, and preserves explicitly disabled servers across runtime overlays
rust-v0.139.0
2026-06-09
Subagent MCP startup warnings stay in the thread that owns them, avoiding duplicate parent-thread alerts and stuck startup spinners
Earlier startup and diagnostics fixes (February 2026 to June 2026)
ReleaseChange
rust-v0.136.0
2026-06-01
Added focused diagnostics for MCP HTTP send failures, and exposed MCP server info in server status
rust-v0.123.0
2026-04-23
Added /mcp verbose for full server diagnostics, resources, and resource templates
rust-v0.119.0
2026-04-10
Skips auth probing for disabled servers, and speeds up /mcp inventory listing
rust-v0.118.0
2026-03-31
Increased the MCP startup timeout for local servers, and restored TUI warnings for failed handshakes that had been reported as clean startups
rust-v0.99.0
2026-02-11
Required MCP servers fail fast during start and resume flows instead of continuing in a broken state, and stdio servers get process-group cleanup to prevent orphan process storms

Tool discovery and tool catalogs

Codex defaults to tool search, so tool definitions are deferred and discovered on demand rather than injected upfront, and it caches tool catalogs across sessions.

rust-v0.119.0 fixed tool listing for hyphenated server names, and rust-v0.139.0 preserved oneOf and allOf in tool input schemas. rust-v0.145.0 added an opt-out from tool catalog caching, which you need if your tool list changes at runtime, otherwise a stale catalog is reused in the next session.

Keep tool names ASCII and conservative, because they are namespaced and normalized before the model sees them, and keep input schemas simple.

ReleaseChange
rust-v0.145.0
2026-07-21
Reuses MCP tool catalogs across sessions, and lets servers opt out of tool catalog caching
rust-v0.143.0
2026-07-08
Tool search is the default for MCP tools
rust-v0.142.2
2026-06-25
MCP tools use tool search by default when supported, preserving compatibility with older models and providers
rust-v0.139.0
2026-06-09
Tool and connector input schemas preserve oneOf and allOf, and large schemas keep more shallow structure when compacted
rust-v0.131.0
2026-05-18
Removed the unavailable-MCP placeholder tool backfill
Earlier tool discovery fixes (March 2026 to May 2026)
ReleaseChange
rust-v0.129.0
2026-05-07
Uses MCP server instructions in deferred namespace descriptions
rust-v0.122.0
2026-04-20
Tool discovery enabled by default, and placeholder tools added for previously called but currently missing tools
rust-v0.121.0
2026-04-15
Registers all MCP tools with a namespace, and fixed flattened deferred tool names and empty namespace descriptions
rust-v0.119.0
2026-04-10
Fixed tool listing for hyphenated server names, and expanded tool search to custom MCP servers
rust-v0.118.0
2026-03-31
Normalizes /mcp tool grouping for hyphenated server names
rust-v0.115.0
2026-03-16
Normalizes MCP tool names to a code-mode safe form

Approvals, policy, and governance

Codex approval prompts run on the client, so a user can always answer yes.

ReleaseChange
rust-v0.143.0
2026-07-08
Added managed MCP server matchers
rust-v0.128.0
2026-04-30
Fixed plugin MCP approval policy persistence
rust-v0.125.0
2026-04-24
Permission profiles round-trip through MCP sandbox state
rust-v0.124.0
2026-04-23
Hooks can observe MCP tools
rust-v0.122.0
2026-04-20
Added server-level approval defaults for custom MCP servers
Earlier approval and policy changes (January 2026 to April 2026)
ReleaseChange
rust-v0.119.0
2026-04-10
codex mcp-server respects data residency requirements
rust-v0.113.0
2026-03-10
Approval prompts use the MCP-style elicitation payload, with an always-allow option
rust-v0.105.0
2026-02-25
Requires approval for destructive MCP tool calls
rust-v0.97.0
2026-02-05
Added a session-scoped "Allow and remember" option for MCP and app tool approvals
rust-v0.93.0
2026-01-31
Smart approvals on by default, with explicit approval prompts for MCP tool calls
rust-v0.81.0
2026-01-14
Restricts which MCP servers can be declared in requirements.toml, and adds hot reload for MCP servers

Protocol features

ReleaseChange
rust-v0.145.0
2026-07-21
Preserves encrypted content in MCP tool outputs
rust-v0.132.0
2026-05-20
Preserves MCP result metadata in tool call results
rust-v0.129.0
2026-05-07
Routes opted-in MCP elicitations through Guardian review
rust-v0.121.0
2026-04-15
Fixed elicitation timeout accounting, so the timer pauses while waiting on the user
rust-v0.119.0
2026-04-10
Added support for server-driven elicitations and file-parameter uploads
Earlier protocol feature support (January 2026 to March 2026)
ReleaseChange
rust-v0.111.0
2026-03-05
App-server exposes MCP elicitation as a structured request and response flow
rust-v0.99.0
2026-02-11
Sanitizes MCP image output for text-only models
rust-v0.93.0
2026-01-31
Tool image outputs render reliably even when image blocks are not first or are partially malformed
rust-v0.86.0
2026-01-16
Accepting an elicitation sends an empty JSON payload instead of null, satisfying servers that expect content

Next steps