fix(mcp): isolate callbacks for OAuth servers without response issuers - #2868
Merged
reachjalil merged 1 commit intoJul 16, 2026
Merged
Conversation
reachjalil
marked this pull request as ready for review
July 16, 2026 23:11
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
Contributor
|
@reachjalil is attempting to deploy a commit to the Different AI Team on Vercel. A member of the Team first needs to authorize it. |
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.
Summary
issas untrusted compatibility data only after the distinct redirect URI is active; it is never used to select an issuer or token endpointThis is a general protocol-level follow-up to #2853. It does not contain a provider hostname allowlist or a user-facing security toggle.
Problem
Some authorization servers do not advertise RFC 9207 authorization-response issuer support, but still return a malformed or provider-internal
issvalue. Exact issuer validation correctly stops those callbacks before token exchange, while globally ignoring issuer mismatches would weaken OAuth mix-up protection.PKCE and signed state are retained, but neither is treated as a replacement for mix-up protection.
Security model
issConnection lifecycle
isolated-v1, invalidate incompatible SDK registration/token state, and restart registration using the connection-specific callback.For a pre-registered OAuth client, the administrator must add the exact connection-specific callback and re-save the client configuration. Existing legacy callback connections remain unchanged.
Validation
pnpm --dir packages/enterprise-mcp-client test— 44 passedpnpm --dir ee/apps/den-api exec bun test test/generic-oauth-state.test.ts test/mcp-connections-connect-start.test.ts— 19 passed, 111 assertionspnpm --dir ee/apps/den-api exec tsc -p tsconfig.json --noEmit --pretty false— passedpnpm --dir ee/apps/den-web exec tsc -p tsconfig.json --noEmit --pretty false— passedgit diff --check upstream/dev...HEAD— passedThe Den route test exercises discovery, two registrations, isolated redirect selection, signed state, malformed provider
iss, PKCE token exchange, authenticated MCP initialization/tool discovery, and encrypted credential persistence. Strict shared and existing legacy callback coverage also passes.CI status
The initial GitHub Actions attempt and one failed-job retry both stopped before project code ran because
api.github.comreturned HTTP 503. Test runners failed while fetching Bun; image builds failed in Docker metadata with GitHub's 503 response. Schema/migration, Helm, and i18n checks pass. No code change was made for this external failure.Risks and limits