Codex Desktop codex_apps MCP handshake times out while direct wham/apps calls succeed

Open 💬 3 comments Opened May 27, 2026 by haoofun

Codex Desktop codex_apps MCP handshake times out, while direct wham/apps calls with the same token succeed

Summary

Codex Desktop cannot invoke Gmail/GitHub connector tools through the built-in mcp__codex_apps__... tool path. Every connector call fails immediately with:

tool call error: failed to get client

Caused by:
    MCP startup failed: timed out handshaking with MCP server after 30s

This appears to be a Codex Desktop codex_apps MCP client/handshake issue, not a connector authorization issue. Using the same Codex ChatGPT auth token, direct JSON-RPC calls to https://chatgpt.com/backend-api/wham/apps succeed.

Environment

  • OS: macOS 26.5, build 25F71
  • Codex Desktop app bundle version: 26.519.81530
  • Codex app version seen in logs: 0.133.0
  • Model in affected Codex turns: gpt-5.5
  • Reasoning effort in affected Codex turns: high
  • Auth mode: ChatGPT
  • Affected connectors:
  • Gmail: connector_2128aebfecb84f64a069897515042a44
  • GitHub: connector_76869538009648d5b282a4bb21c3d157
  • Plugins enabled in ~/.codex/config.toml:
  • gmail@openai-curated
  • github@openai-curated
  • Reinstalling the latest Codex Desktop did not fix the issue.
  • Recreating/rebuilding ~/.codex state did not fix the issue.

Reproduction

  1. Install/login to Codex Desktop with ChatGPT auth.
  2. Enable/install Gmail and GitHub connectors.
  3. Authorize the connectors successfully through the browser flow.
  4. Start a Codex Desktop thread.
  5. Ask Codex to call a read-only connector tool, for example:
  • Gmail get_profile
  • GitHub list_user_orgs

Actual Behavior

Both connector calls fail through Codex Desktop's built-in tool path:

tool call error: failed to get client

Caused by:
    MCP startup failed: timed out handshaking with MCP server after 30s

Log excerpt:

tool_name=mcp__codex_apps__gmail_get_profile
success=false
output=Wall time: 0.0051 seconds
Output:
[{"type":"text","text":"tool call error: failed to get client\n\nCaused by:\n    MCP startup failed: timed out handshaking with MCP server after 30s"}]
mcp_server=codex_apps
mcp_server_origin=https://chatgpt.com
app.version=0.133.0
auth_mode="Chatgpt"
originator=Codex_Desktop
model=gpt-5.5
slug=gpt-5.5

Expected Behavior

Codex Desktop should initialize the codex_apps MCP server and invoke Gmail/GitHub connector tools successfully.

Evidence That Connector Auth And Backend Work

Using the same Codex auth token from the local Codex session, direct requests to the remote MCP endpoint succeed.

Endpoint:

POST https://chatgpt.com/backend-api/wham/apps

Results:

initialize: HTTP 200
serverInfo.name: codex-connectors-mcp
serverInfo.version: 0.1.0
tools/list: HTTP 200
tool_count: 111
first_tool.name: github_add_comment_to_issue
tools/call gmail_get_profile: HTTP 200
isError: false
returns the Gmail profile for the connected account
tools/call github_list_user_orgs: HTTP 200
isError: false
returns {"orgs": []}

This suggests:

  • The wham/apps backend is reachable.
  • The Codex ChatGPT auth token is valid.
  • The token has connector scopes.
  • Gmail and GitHub connector links exist and can be invoked.
  • The failure is specific to Codex Desktop's built-in codex_apps MCP client/handshake path.

Additional Local State

The plugin app manifests point to the expected connector IDs:

{
  "apps": {
    "github": {
      "id": "connector_76869538009648d5b282a4bb21c3d157"
    }
  }
}
{
  "apps": {
    "gmail": {
      "id": "connector_2128aebfecb84f64a069897515042a44"
    }
  }
}

The local codex_apps_tools cache contains 111 tools, including 90 GitHub tools and 21 Gmail tools, matching the successful direct tools/list result.

Related Issues

This looks similar to:

  • #16550
  • #20167
  • #21995
  • #16360

The closest match appears to be #16550: the endpoint is directly reachable and usable, but Codex's RMCP streamable HTTP handshake path fails.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗