Codex Desktop does not dismiss server-originated MCP elicitation after notifications/cancelled
Open
Nobody has claimed this yet.
app
bug
mcp
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What version of the Codex App are you using (From “About Codex” dialog)?
codex-mcp-client/0.149.0-alpha.4.3
What subscription do you have?
A valid one
What platform is your computer?
MacOS 26.5.2
What issue are you seeing?
Environment
- Codex MCP client: codex-mcp-client/0.149.0-alpha.4.3
- MCP protocol: 2025-06-18
- Transport: Streamable HTTP
Upstream is unable to cancel created elicitation by sending a cancel notification.
- The elicitation remains open.
- The completed tool result is not surfaced.
- Manually clicking Cancel dismisses the stale form and immediately reveals the already-completed result.
What steps can reproduce the bug?
- A tools/call triggers a server-originated elicitation/create.
- Codex displays the elicitation form.
- The user approves the action through an external dashboard or upstream decides to abort.
- The MCP server sends notifications/cancelled with requestId exactly matching the pending elicitation/create JSON-RPC string ID.
- The server continues execution and returns the tools/call result.
What is the expected behavior?
- Codex dismisses the cancelled elicitation.
- The parent tool call continues and displays its result.
Additional information
- The same server behavior dismisses the elicitation correctly in Claude Code.
- Normal upstream elicitation submission works correctly in Codex, the issue happens only when upstream decided to withdraw the elicitation request by sending a cancellation.
- Logged frames indicate that requestID matches the ID in the elicitation/create frame.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing handling of MCP tools/call, elicitation/create, and notifications/cancelled request IDs in the Rust client, then reproduce the Streamable HTTP sequence described in the issue. Done means a matching cancellation dismisses the elicitation and the parent tools/call result becomes visible without manual interaction.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop-dev, networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100