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

This commit is contained in:
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

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)