Skip to content

Commit 3f9c398

Browse files
feat: MCP OAuth flow improvements (#123)
Rewrite OAuth flow handle authentication entirely in web app with secure proxy - Add MCP OAuth proxy with origin validation and callback handling - Remove auto OAuth method from authentication flow - Fix TypeScript build errors - Add directory support for MCP OAuth flows and improve config manager UI - Reload session caches after MCP connection changes
1 parent 7824d52 commit 3f9c398

31 files changed

Lines changed: 1053 additions & 482 deletions

ROADMAP.md

Lines changed: 0 additions & 65 deletions
This file was deleted.

backend/src/index.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { createTitleRoutes } from './routes/title'
1919
import { createSSERoutes } from './routes/sse'
2020
import { createSSHRoutes } from './routes/ssh'
2121
import { createNotificationRoutes } from './routes/notifications'
22+
import { createMcpOauthProxyRoutes } from './routes/mcp-oauth-proxy'
2223
import { createAuthRoutes, createAuthInfoRoutes, syncAdminFromEnv } from './routes/auth'
2324
import { createAuth } from './auth'
2425
import { createAuthMiddleware } from './auth/middleware'
@@ -27,7 +28,7 @@ import { ensureDirectoryExists, writeFileContent, fileExists, readFileContent }
2728
import { SettingsService } from './services/settings'
2829
import { opencodeServerManager } from './services/opencode-single-server'
2930
import { cleanupOrphanedDirectories } from './services/repo'
30-
import { proxyRequest } from './services/proxy'
31+
import { proxyRequest, proxyMcpAuthStart, proxyMcpAuthAuthenticate } from './services/proxy'
3132
import { NotificationService } from './services/notification'
3233
import { logger } from './utils/logger'
3334
import {
@@ -229,6 +230,7 @@ app.route('/api/auth', createAuthRoutes(auth))
229230
app.route('/api/auth-info', createAuthInfoRoutes(auth, db))
230231

231232
app.route('/api/health', createHealthRoutes(db))
233+
app.route('/api/mcp-oauth-proxy', createMcpOauthProxyRoutes(requireAuth))
232234

233235
const protectedApi = new Hono()
234236
protectedApi.use('/*', requireAuth)
@@ -247,6 +249,18 @@ protectedApi.route('/notifications', createNotificationRoutes(notificationServic
247249

248250
app.route('/api', protectedApi)
249251

252+
app.post('/api/opencode/mcp/:name/auth', requireAuth, async (c) => {
253+
const serverName = c.req.param('name')
254+
const directory = c.req.query('directory')
255+
return proxyMcpAuthStart(serverName, directory)
256+
})
257+
258+
app.post('/api/opencode/mcp/:name/auth/authenticate', requireAuth, async (c) => {
259+
const serverName = c.req.param('name')
260+
const directory = c.req.query('directory')
261+
return proxyMcpAuthAuthenticate(serverName, directory)
262+
})
263+
250264
app.all('/api/opencode/*', requireAuth, async (c) => {
251265
const request = c.req.raw
252266
return proxyRequest(request)

0 commit comments

Comments
 (0)