[rmcp-client] Refresh OAuth tokens before initialize - #26237
Closed
caseychow-oai wants to merge 5 commits into
Closed
[rmcp-client] Refresh OAuth tokens before initialize#26237caseychow-oai wants to merge 5 commits into
caseychow-oai wants to merge 5 commits into
Conversation
caseychow-oai
force-pushed
the
caseychow/codex/fix-rmcp-oauth-refresh
branch
from
June 3, 2026 21:10
9afcaed to
afdf109
Compare
Contributor
|
@codex review |
Contributor
|
Codex Review: Didn't find any major issues. Chef's kiss. ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
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". |
caseychow-oai
force-pushed
the
caseychow/codex/fix-rmcp-oauth-refresh
branch
from
June 4, 2026 21:41
12ace90 to
5850ca4
Compare
Contributor
Author
|
superceded by #26482 |
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Context
Runlayer exposed a Desktop-only failure where persisted OAuth credentials contained an expired access token and a still-valid refresh token. New Codex Desktop sessions loaded those credentials and attempted the first Streamable HTTP MCP initialize with the expired access token, so the server returned
401 invalid_tokenuntil the user fully reauthenticated.The owning failure was in
rmcp-client: OAuth-backed Streamable HTTP clients reconstructed persisted credentials but did not refresh them before the initial initialize handshake. The follow-up hardening in this PR also closes races around refresh-token rotation, logout, concurrent processes, and the shared fallback credential store.Changes
expires_inmetadata while retaining the absolute persisted expiry.invalid_grantor a missing refresh token as auth-required; transient provider and transport failures remain initialization errors.Key Decisions
rmcp-clientat the pending transport connection point, so only OAuth-backed Streamable HTTP transports are affected.invalid_tokenresponse remains defense-in-depth and separate from this primary startup fix.Validation
cargo test -p codex-rmcp-client --test streamable_http_recovery(17 passed)cargo test -p codex-rmcp-client oauth::tests --lib(12 passed)cargo +1.95.0 check -p codex-clijust bazel-lock-updatejust bazel-lock-checkjust fmtjust fix -p codex-rmcp-clientgit diff --checkThe focused tests passed before the final required
just fmtandjust fix; per repository instructions they were not rerun afterward.Codex Thread