Keep MCP elicitation routable across runtime refreshes - #30127
Merged
Conversation
Contributor
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 93a891cd88
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
jif-oai
force-pushed
the
jif/extension-owned-selected-capabilities
branch
6 times, most recently
from
June 26, 2026 00:27
690b95b to
885cdb7
Compare
Base automatically changed from
jif/extension-owned-selected-capabilities
to
main
June 26, 2026 00:36
jif-oai
force-pushed
the
jif/resolve-elicitation-after-env-refresh
branch
from
June 26, 2026 00:41
93a891c to
a66a118
Compare
sayan-oai
reviewed
Jun 26, 2026
sayan-oai
reviewed
Jun 26, 2026
sayan-oai
approved these changes
Jun 26, 2026
jif-oai
enabled auto-merge (squash)
June 26, 2026 01:15
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
An MCP tool call can still be waiting for an elicitation response when an environment update replaces the thread's MCP runtime.
Before this change:
The response is lost and the original tool call stays blocked.
What changed
All MCP runtimes for one thread now share a small elicitation router:
When Codex surfaces an MCP elicitation, it assigns a unique opaque response token. The router records which pending request owns that token. A replacement runtime reuses the same router, so the latest runtime can deliver a response to a request started by the previous runtime.
The Codex-owned token also prevents two runtime connections that reuse the same MCP server request ID from receiving each other's responses.
This does not retain or search old MCP managers. Only the pending responder map is shared.
Covered scenario
The integration test exercises the complete failure mode:
A focused routing test also creates two runtimes with the same server request ID and verifies that each response reaches the exact request that emitted its token.
Scope
This PR changes only elicitation response routing across MCP runtime replacement. It does not change when runtimes are rebuilt, which environments contribute MCP configuration, or how environment availability is detected.