Adding invalidateCredentials() to OAuthClientProvider#570
Merged
pcarleton merged 2 commits intomodelcontextprotocol:mainfrom Jul 14, 2025
Merged
Adding invalidateCredentials() to OAuthClientProvider#570pcarleton merged 2 commits intomodelcontextprotocol:mainfrom
invalidateCredentials() to OAuthClientProvider#570pcarleton merged 2 commits intomodelcontextprotocol:mainfrom
Conversation
This was referenced May 30, 2025
Member
|
I like this idea! a few notes on the approach:
alternative to avoid recursion + nested try/catch: |
3d1aaa6 to
ecb41f5
Compare
Contributor
Author
|
Updated. Available for testing on I'm going to cut an mcp-remote release using this now, since it seems to make a big difference to have any invalid data automatically cleaned |
geelen
added a commit
to geelen/mcp-remote
that referenced
this pull request
Jun 6, 2025
geelen
added a commit
to geelen/mcp-remote
that referenced
this pull request
Jun 6, 2025
geelen
added a commit
to geelen/mcp-remote
that referenced
this pull request
Jun 6, 2025
pcarleton
reviewed
Jun 10, 2025
Member
pcarleton
left a comment
There was a problem hiding this comment.
this looks good to me, one open question about the double errorCode declaration, and I'm wondering if there's a more idiomatic way to do that. I'll try to chase that down and if we don't come up with anything, merge as is.
ecb41f5 to
4352f69
Compare
Contributor
Author
|
Rebased and tweaked based on feedback above, should be good to go |
pcarleton
requested changes
Jun 20, 2025
This was referenced Jun 20, 2025
Closed
4352f69 to
0f4b666
Compare
This makes it possible to parse them from JSON, using OAUTH_ERRORS Invalidating credentials & retrying when server OAuth errors occur Updated existing tests Added some initial test coverage refactored to avoid recursion as recommended
0f4b666 to
e36695b
Compare
pcarleton
approved these changes
Jul 14, 2025
chenxi-null
pushed a commit
to chenxi-null/typescript-sdk
that referenced
this pull request
Jul 28, 2025
…xtprotocol#570) Co-authored-by: Paul Carleton <[email protected]>
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.
From working on
mcp-remote, I'm seeing a lot of cases where the local state and the server state drift apart. It's especially common when iterating locally (see geelen/mcp-remote#36), but seems to be happening with production servers too.The issue was that while the SDK defines a series of specific OAuthError types, they're only used on the server side of things. At the crucial point, where
POST /tokenis being called and ainvalid_clientorinvalid_grantare being received, the client simply logs that the request failed and continues: https://github.com/modelcontextprotocol/typescript-sdk/blob/main/src/client/auth.ts#L166This PR addresses this by looking for those particular error codes and invoking a new method on the
OAuthClientProvider(if present):invalidateCredentials. This takes an argument of'all' | 'client' | 'tokens' | 'verifier', but currently onlyallandtokensare used.How Has This Been Tested?
Some tests have been added (generated by Amp, I'm not entirely happy with them but ran out of time and wanted to submit for feedback).
mcp-remotehas been released in preview underhttps://pkg.pr.new/mcp-remote@96with these changes and has confirmed that the errors in geelen/mcp-remote#36 are fixed.Breaking Changes
Any error other than
invalid_clientorinvalid_grantare now re-thrown, rather than silently swallowed. But those errors were likely unrecoverable anyway so this would arguably just change the kind of crash message.Types of changes
Checklist
Additional context
Marked as draft as
mainhas moved on so merging isn't possible yet. Would love reviews on the approach though. I will clean up and merge next week.