Skip to content

feat(server): outside agents sign in to the T3 MCP server with OAuth - #15220

Closed
juliusmarminge wants to merge 11 commits into
mainfrom
t3code/mcp-oauth/sign-in
Closed

juliusmarminge wants to merge 11 commits into
mainfrom
t3code/mcp-oauth/sign-in

refactor(server): follow Effect error conventions in MCP OAuth

de97505
Select commit
Loading
Failed to load commit list.
MacroscopeApp / Macroscope - Correctness Check completed Oct 6, 2026 in 3m 10s

1 issue identified (77 code objects reviewed).

• Merge Base: 204a639
• Head: de97505

Details

✅ File Path U3 Bytes Comments Posted Reason
✅ apps/server/src/auth/McpOAuth.ts 22916 0
✅ apps/server/src/auth/mcpOAuthHtml.ts 1626
✅ apps/web/src/routes/connect-agent.tsx 240
✅ apps/server/src/auth/mcpOAuthHttp.ts 6238 0
✅ apps/server/src/mcp/McpToolAccess.ts 7353 0
➖ apps/server/src/auth/McpOAuth.test.ts 19999 Excluded by macroscope ignore file
➖ apps/server/src/mcp/McpToolAccess.test.ts 9795 Excluded by macroscope ignore file
✅ apps/server/src/mcp/McpToolAccess.testkit.ts 2359 0
✅ apps/web/src/components/auth/ConnectAgentSurface.tsx 11242
✅ packages/contracts/src/auth.ts 6986
✅ apps/server/src/vcs/GitVcsDriver.ts 435
✅ apps/server/src/server.ts 1011 0
✅ packages/shared/src/devProxy.ts 800
✅ apps/web/src/routes/__root.tsx 233
✅ docs/internals/environment-auth.md 2298 0
✅ apps/web/vite.config.ts 803
➖ apps/server/src/auth/SessionStore.test.ts 943 Excluded by macroscope ignore file
✅ apps/server/src/vcs/GitVcsDriverCore.ts 781 0
✅ apps/server/src/mcp/toolkits/html/tools.ts 371 0
➖ apps/server/src/mcp/ThreadMetadataMcpService.test.ts 2646 Excluded by macroscope ignore file
✅ apps/server/src/mcp/ThreadMetadataMcpService.ts 2329 0
✅ packages/contracts/src/environmentHttp.ts 2799 0
➖ apps/server/src/mcp/McpInvocationContext.test.ts 376 Excluded by macroscope ignore file
➖ apps/server/src/mcp/McpDeviceToolkit.test.ts 1024 Excluded by macroscope ignore file
✅ apps/server/src/mcp/OrchestratorMcpService.ts 653 0
✅ apps/server/src/mcp/McpInvocationContext.ts 948 0
✅ apps/server/src/mcp/toolkits/orchestrator/tools.ts 776 0
✅ apps/server/src/mcp/toolkits/project/tools.ts 1606
✅ apps/server/src/mcp/toolkits/previewControls/tools.ts 822 0
➖ apps/server/src/mcp/toolkits/pullRequests/handlers.test.ts 739 Excluded by macroscope ignore file
✅ apps/server/src/auth/SessionStore.ts 1736
➖ apps/server/src/mcp/toolkits/previewControls/handlers.test.ts 731 Excluded by macroscope ignore file
✅ apps/server/src/mcp/toolkits/attachment/handlers.ts 4587 0
✅ apps/server/src/mcp/toolkits/worktree/tools.ts 1836 0
✅ apps/server/src/mcp/toolkits/pullRequests/tools.ts 1626 0
➖ apps/server/src/mcp/McpHttpServer.test.ts 7594 Excluded by macroscope ignore file
✅ apps/server/src/mcp/toolkits/previewControls/handlers.ts 1214 0
✅ apps/server/src/mcp/threadAccess.ts 3665 0
➖ apps/web/src/routeTree.gen.ts 2827 Excluded by macroscope ignore file
✅ apps/server/src/mcp/toolkits/device/tools.ts 2145 0
✅ apps/server/src/mcp/toolkits/worktree/handlers.ts 1608 0
✅ apps/server/src/mcp/toolkits/environment/handlers.ts 3033 0
✅ apps/server/src/auth/EnvironmentAuth.ts 9813
✅ apps/server/src/mcp/toolkits/html/handlers.ts 2458 0
➖ apps/server/src/mcp/toolkits/core.test.ts 5052 Excluded by macroscope ignore file
✅ apps/server/src/mcp/toolkits/device/handlers.ts 2418 0
➖ apps/server/src/mcp/toolkits/project/handlers.test.ts 5929 Excluded by macroscope ignore file
✅ apps/server/src/mcp/toolkits/pullRequests/handlers.ts 5307 0
✅ apps/server/src/mcp/toolkits/preview/handlers.ts 4310 0
✅ apps/server/src/mcp/toolkits/orchestrator/handlers.ts 7285 0
❌ apps/server/src/mcp/toolkits/project/handlers.ts 13477 1
✅ apps/server/src/mcp/toolkits/preview/tools.ts 7096 0
✅ apps/server/src/mcp/McpHttpServer.ts 14430 0
✅ apps/server/src/mcp/toolkits/thread/handlers.ts 9666 0

Billed Total: 135.18KB of diff | $5.41

Filtered Issues Details

apps/server/src/mcp/toolkits/project/handlers.ts
  • line 104: assertProjectWorktree validates the resolved path but launchThread is still given the original input.workspaceStrategy.worktreePath (line 125). A caller can submit a symlink that initially points at a listed worktree, pass this check, then replace that symlink before asynchronous launch preparation uses the stored raw path; ThreadLaunchService persists and supplies that raw path as the provider working directory. The new outside-agent boundary can therefore still launch an agent in an arbitrary directory. Pass the canonical path onward (or revalidate immediately at the point it is opened/used) rather than only comparing it. [ Already posted ]