feat(mcp): add OAuth redirect URI configuration for MCP servers#9034
feat(mcp): add OAuth redirect URI configuration for MCP servers#9034christso wants to merge 5 commits intoanomalyco:devfrom
Conversation
Re-implements the redirectUri option for MCP OAuth configuration, allowing users to specify a custom callback URL for OAuth flows. Key difference from original PR anomalyco#7379: the OAuth callback server is now started lazily in startAuth() only when authentication is actually needed, rather than preemptively in create() for all remote servers. This fixes the regression where non-OAuth MCP servers would fail to connect. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
Thanks for your contribution! This PR doesn't have a linked issue. All PRs must reference an existing issue. Please:
See CONTRIBUTING.md for details. |
|
The following comment was made by an LLM, it may be inaccurate: No duplicate PRs found |
Ensures the debug command uses the configured redirectUri when testing OAuth flows, making it consistent with the main auth flow. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
00637c0 to
71e0ba2
Compare
f1ae801 to
08fa7f7
Compare
|
Thanks for the PR. I am directly affected that I can't set a custom redirectUri. |
|
Here's the configuration that Claude Code supports when I run It's been a while since I submitted the PR because I was happy with the workaround of running a script to copy the MCP token from CC to OpenCode. But it seems a lot of my colleagues are not happy with the workaround, so I'm revisiting this. Risk analysisThis is a v2 of #7379, which was reverted due to a regression where the OAuth callback server was started eagerly in The regression is fixed in this version. The key change is lazy initialization -- Theoretical race condition in the stop/restart logic is not a practical concern. The code stops and restarts the callback server when Ready to merge. @rekram1-node |
| // If server is running on a different port/path, stop it first | ||
| if (server && (currentPort !== port || currentPath !== path)) { | ||
| log.info("stopping oauth callback server to reconfigure", { oldPort: currentPort, newPort: port }) | ||
| await stop() | ||
| } |
There was a problem hiding this comment.
Lazy initialization fix for the regression in #7379 -- this stop/restart path is only reachable during an active OAuth flow (via startAuth()), so non-OAuth servers are never affected. The theoretical race with concurrent different-redirectUri auths is not a practical concern since authenticate() is user-initiated and sequential.
Summary
Re-implements the
redirectUrioption for MCP OAuth configuration, allowing users to specify a custom callback URL for OAuth flows.redirectUriconfig option toMcpOAuthschemaMcpOAuthProviderto use custom redirect URI when providedMcpOAuthCallback.ensureRunning()to support custom port/pathparseRedirectUri()utility functionKey difference from original PR #7379: The OAuth callback server is now started lazily in
startAuth()only when authentication is actually needed, rather than preemptively increate()for all remote servers. This fixes the regression where non-OAuth MCP servers would fail to connect.Closes #7377
Test plan
parseRedirectUritests pass (3 tests)ensureRunningwith custom redirectUri test passes (1 test)Manual test results