fix: send `mcpName` as state if authUrl doesn't have `state` (#5681)

pull/5955/head
Paolo Ricciuti 2025-12-17 17:26:23 +01:00 committed by GitHub
parent f9d0850c5e
commit 57c3cf1f8b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 10 additions and 3 deletions

View File

@ -494,11 +494,18 @@ export namespace MCP {
// Extract state from authorization URL to use as callback key
// If no state parameter, use mcpName as fallback
const authUrl = new URL(authorizationUrl)
const oauthState = authUrl.searchParams.get("state") ?? mcpName
let oauthState = mcpName
if (authUrl.searchParams.has("state")) {
oauthState = authUrl.searchParams.get("state")!
} else {
log.info("no state parameter in authorization URL, using mcpName as state", { mcpName })
authUrl.searchParams.set("state", oauthState)
}
// Open browser
log.info("opening browser for oauth", { mcpName, url: authorizationUrl, state: oauthState })
await open(authorizationUrl)
log.info("opening browser for oauth", { mcpName, url: authUrl.toString(), state: oauthState })
await open(authUrl.toString())
// Wait for callback using the OAuth state parameter (or mcpName as fallback)
const code = await McpOAuthCallback.waitForCallback(oauthState)