Repository navigation
fix(oauth): restore long-lived ChatGPT MCP access - #102
Merged
Merged
Conversation
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.
Symptom
The ChatGPT Ground Control app worked immediately after OAuth, then later reported that it no longer had access.
GroundControl access tokens currently expire after one hour. The refresh-token endpoint required
client_idon every refresh request, even for public PKCE clients usingtoken_endpoint_auth_method=none.OAuth 2.0 does not require an unauthenticated public client to repeat
client_idin the refresh-token request. The refresh token is already bound to the GroundControl grant/client.Fix
refresh_tokenremains required.client_idbecomes optional only when the registered client usestoken_endpoint_auth_method=none.client_id, GroundControl still requires an exact match.This preserves the client binding while accepting the public-client refresh shape.
Why existing connections can recover
The previous code rejected a refresh request before rotating or revoking the stored refresh token when
client_idwas absent. Existing ChatGPT refresh credentials should therefore remain valid after this patch, unless ChatGPT has already discarded the credential and requires a reconnect.Validation
Adds regression coverage for: