Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.

Commit 035a53e

Browse files
committed
feat: OAuth 2.1 authorization flow for MCP servers\n\nImplements automatic OAuth 2.1 authorization flow when Roo connects\nto protected HTTP-based MCP servers, leveraging the existing\n@modelcontextprotocol/sdk v1.29.0 OAuth client orchestrator.\n\nNew file:\n- src/services/mcp/McpOAuthProvider.ts — Implements the SDK's\n OAuthClientProvider interface as a VS Code adapter using\n SecretStorage for per-server token persistence, localhost\n callback server for authorization code flow, and\n vscode.env.openExternal() for browser launch.\n\nModified files:\n- packages/types/src/mcp.ts — Added authStatus field to McpServer\n- src/services/mcp/McpHub.ts — Wired authProvider into HTTP transport\n- src/activate/handleUri.ts — Added /mcp-auth/callback route\n- webview-ui/src/components/mcp/McpView.tsx — Auth status display\n- i18n: OAuth-related keys in all 18 locales (backend + frontend)\n\nTests:\n- src/services/mcp/__tests__/McpOAuthProvider.spec.ts — 35 unit tests
1 parent cb83656 commit 035a53e

42 files changed

Lines changed: 1321 additions & 70 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/types/src/mcp.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export type McpServer = {
5555
name: string
5656
config: string
5757
status: "connected" | "connecting" | "disconnected"
58+
authStatus?: "unauthenticated" | "awaiting_auth" | "authenticated"
5859
error?: string
5960
errorHistory?: McpErrorEntry[]
6061
tools?: McpTool[]

src/activate/handleUri.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,17 @@ export const handleUri = async (uri: vscode.Uri) => {
4343
)
4444
break
4545
}
46+
case "/mcp-auth/callback": {
47+
const code = query.get("code")
48+
const state = query.get("state")
49+
if (code && state) {
50+
const mcpHub = visibleProvider.getMcpHub()
51+
if (mcpHub) {
52+
mcpHub.handleOAuthCallback(code, state)
53+
}
54+
}
55+
break
56+
}
4657
default:
4758
break
4859
}

src/i18n/locales/ca/mcp.json

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/i18n/locales/de/mcp.json

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/i18n/locales/en/mcp.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
"already_refreshing": "MCP servers are already refreshing.",
2424
"refreshing_all": "Refreshing all MCP servers...",
2525
"all_refreshed": "All MCP servers have been refreshed.",
26-
"project_config_deleted": "Project MCP configuration file deleted. All project MCP servers have been disconnected."
26+
"project_config_deleted": "Project MCP configuration file deleted. All project MCP servers have been disconnected.",
27+
"server_requires_auth": "{{serverName}} requires authentication. Please complete the sign-in flow in your browser.",
28+
"server_auth_failed": "{{serverName}} authentication failed: {{reason}}"
2729
}
2830
}

src/i18n/locales/es/mcp.json

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/i18n/locales/fr/mcp.json

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/i18n/locales/hi/mcp.json

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/i18n/locales/id/mcp.json

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/i18n/locales/it/mcp.json

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)