Summary
The GCE-deployed server (claude-sdk-server.js) failed to initialize the Agent SDK MCP server, rejecting all research workloads with:
⚠️ Failed to build Agent SDK MCP server: Cannot read properties of undefined (reading 'courtListener')
Agent SDK stream error: Error: Agent SDK MCP server not initialized
Root Cause
Two client constructor mismatches in getClients() (lines 390-391):
| Client |
Expected Signature |
Received |
Impact |
ComprehensiveAnalysisClient |
({ courtListener, secEdgar, federalRegister, uspto }) |
(exaKey, rateLimiter) |
Constructor crash → MCP server null → all workloads blocked |
ExaClient |
(rateLimiter) |
(exaKey, rateLimiter) |
exaKey string consumed as rateLimiter; real rateLimiter discarded |
Why This Only Affected GCE (Not Local)
Two architecturally different servers exist:
| Environment |
Entry Point |
Client Init |
Local (npm start) |
index.js → EnhancedLegalMcpServer.js |
Constructs ComprehensiveAnalysisClient correctly (lines 220-225) |
| GCE (Dockerfile) |
src/server/claude-sdk-server.js directly |
Had broken constructor calls (lines 390-391) |
The Dockerfile runs claude-sdk-server.js directly, bypassing index.js. The local MCP stdio server (EnhancedLegalMcpServer) never calls getClients() in the SDK server — they share API client classes but initialize them independently.
Fix
ExaClient: (exaKey, rateLimiter) → (rateLimiter)
ComprehensiveAnalysisClient: Moved construction after clients object, passing { courtListener: clients.courtListenerWeb, secEdgar: clients.secWeb, federalRegister: clients.federalRegisterWeb, uspto: clients.usptoWeb } — matching EnhancedLegalMcpServer.js pattern
Commit: d28f483
Version: v4.12.3
Files: src/server/claude-sdk-server.js, CHANGELOG.md
Verification
Summary
The GCE-deployed server (
claude-sdk-server.js) failed to initialize the Agent SDK MCP server, rejecting all research workloads with:Root Cause
Two client constructor mismatches in
getClients()(lines 390-391):ComprehensiveAnalysisClient({ courtListener, secEdgar, federalRegister, uspto })(exaKey, rateLimiter)null→ all workloads blockedExaClient(rateLimiter)(exaKey, rateLimiter)Why This Only Affected GCE (Not Local)
Two architecturally different servers exist:
npm start)index.js→EnhancedLegalMcpServer.jsComprehensiveAnalysisClientcorrectly (lines 220-225)src/server/claude-sdk-server.jsdirectlyThe Dockerfile runs
claude-sdk-server.jsdirectly, bypassingindex.js. The local MCP stdio server (EnhancedLegalMcpServer) never callsgetClients()in the SDK server — they share API client classes but initialize them independently.Fix
ExaClient:(exaKey, rateLimiter)→(rateLimiter)ComprehensiveAnalysisClient: Moved construction afterclientsobject, passing{ courtListener: clients.courtListenerWeb, secEdgar: clients.secWeb, federalRegister: clients.federalRegisterWeb, uspto: clients.usptoWeb }— matchingEnhancedLegalMcpServer.jspatternCommit: d28f483
Version: v4.12.3
Files:
src/server/claude-sdk-server.js,CHANGELOG.mdVerification