diff --git a/src/services/mcp/utils/__tests__/callbackServer.spec.ts b/src/services/mcp/utils/__tests__/callbackServer.spec.ts index f7e26cdd27..3159ffbae2 100644 --- a/src/services/mcp/utils/__tests__/callbackServer.spec.ts +++ b/src/services/mcp/utils/__tests__/callbackServer.spec.ts @@ -40,6 +40,9 @@ describe("startCallbackServer", () => { const mockRes = { writeHead: vi.fn(), end: vi.fn(), + on: vi.fn((event, cb) => { + if (event === "finish") setImmediate(cb) + }), } requestHandler(mockReq, mockRes) @@ -75,6 +78,9 @@ describe("startCallbackServer", () => { const mockRes = { writeHead: vi.fn(), end: vi.fn(), + on: vi.fn((event, cb) => { + if (event === "finish") setImmediate(cb) + }), } requestHandler(mockReq, mockRes) diff --git a/src/services/mcp/utils/callbackServer.ts b/src/services/mcp/utils/callbackServer.ts index 4070f6f4f3..ecc266f394 100644 --- a/src/services/mcp/utils/callbackServer.ts +++ b/src/services/mcp/utils/callbackServer.ts @@ -96,18 +96,57 @@ export function startCallbackServer( // Send HTML response res.writeHead(200, { "Content-Type": "text/html" }) res.end(` - - - - OAuth Callback - - -

OAuth Authentication ${error ? "Failed" : "Successful"}

-

- ${error ? `Error: ${error}${errorDescription ? ` - ${errorDescription}` : ""}` : "You can close this window."} -

- - + + + + OAuth Callback - Roo Code + + + + +

${error ? "Failed" : "Success!"}

+
+

+ ${ + error + ? "Authentication failed. Please check the MCP server logs." + : "MCP server authenticated successfully. You can now close this browser tab." + } +

+
The server connection is complete.
+ + + `) resolveResult({ @@ -117,8 +156,10 @@ export function startCallbackServer( state: state || undefined, }) - // Close server after a short delay to allow response to be sent - setTimeout(() => server.close(), 1000) + // Close server immediately after response drains + res.on("finish", () => { + server.close() + }) } else { res.writeHead(404) res.end("Not found")