diff options
| author | Paolo Ricciuti <[email protected]> | 2025-12-17 17:26:23 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-17 10:26:23 -0600 |
| commit | 57c3cf1f8b203f9e75914d20e40ecd6cbca77465 (patch) | |
| tree | b320fb4ebfe0a873db06642e53687b2b93ab41f8 | |
| parent | f9d0850c5eb8d8c97a248552551bb290baeac7fe (diff) | |
| download | opencode-57c3cf1f8b203f9e75914d20e40ecd6cbca77465.tar.gz opencode-57c3cf1f8b203f9e75914d20e40ecd6cbca77465.zip | |
fix: send `mcpName` as state if authUrl doesn't have `state` (#5681)
| -rw-r--r-- | packages/opencode/src/mcp/index.ts | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/packages/opencode/src/mcp/index.ts b/packages/opencode/src/mcp/index.ts index 7b5f81650..41d59097b 100644 --- a/packages/opencode/src/mcp/index.ts +++ b/packages/opencode/src/mcp/index.ts @@ -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) |
