From d8618ef2ec24f465bfddc889a6667a644cbe977d Mon Sep 17 00:00:00 2001 From: Jonah Snider Date: Thu, 5 Mar 2026 16:32:34 -0800 Subject: [PATCH] fix(mcp): generate OAuth state on-the-fly during initial connection --- packages/opencode/src/mcp/oauth-provider.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/mcp/oauth-provider.ts b/packages/opencode/src/mcp/oauth-provider.ts index 164b1d1f143..9404fa312f3 100644 --- a/packages/opencode/src/mcp/oauth-provider.ts +++ b/packages/opencode/src/mcp/oauth-provider.ts @@ -144,10 +144,15 @@ export class McpOAuthProvider implements OAuthClientProvider { async state(): Promise { const entry = await McpAuth.get(this.mcpName) - if (!entry?.oauthState) { - throw new Error(`No OAuth state saved for MCP server: ${this.mcpName}`) + if (entry?.oauthState) { + return entry.oauthState } - return entry.oauthState + // Generate and persist a new state if none exists (e.g. during initial connection) + const generated = Array.from(crypto.getRandomValues(new Uint8Array(32))) + .map((b) => b.toString(16).padStart(2, "0")) + .join("") + await McpAuth.updateOAuthState(this.mcpName, generated) + return generated } async invalidateCredentials(type: "all" | "client" | "tokens"): Promise {