# Task ID: 34 **Title:** Connect mcplocal MCP router to mcpd proxy endpoint **Status:** done **Dependencies:** 28 ✓, 29 ✓ **Priority:** high **Description:** Update mcplocal's MCP router to forward tool calls to mcpd's new /api/v1/mcp/proxy endpoint instead of connecting to MCP servers directly. **Details:** 1. Update `src/mcplocal/src/router.ts` to use mcpd proxy: ```typescript class Router { private mcpdClient: McpdClient; async handleToolsCall(request: JsonRpcRequest) { const { name, arguments: args } = request.params; const [serverName, toolName] = name.split('/'); // Pre-process with LLM if enabled const processedArgs = this.config.enablePreprocessing ? await this.llmProcessor.preprocessRequest(toolName, args) : args; // Call mcpd proxy endpoint const result = await this.mcpdClient.post('/api/v1/mcp/proxy', { serverId: serverName, method: 'tools/call', params: { name: toolName, arguments: processedArgs } }); // Post-process response with LLM if enabled return this.config.enablePreprocessing ? await this.llmProcessor.filterResponse(toolName, args, result) : result; } } ``` 2. Update upstream configuration: - Remove direct upstream connections for managed servers - Keep option for local/unmanaged upstreams 3. Add server discovery from mcpd: ```typescript async refreshServerList() { const servers = await this.mcpdClient.get('/api/v1/servers'); this.updateAvailableTools(servers); } ``` 4. Handle tools/list by aggregating from mcpd servers 5. Handle resources/list and prompts/list similarly **Test Strategy:** 1. Unit test: Tool calls are forwarded to mcpd proxy correctly 2. Unit test: Server name is extracted from namespaced tool name 3. Integration test: Full flow Claude -> mcplocal -> mcpd -> container 4. Test tools/list aggregates from all mcpd servers 5. Test error handling when mcpd is unreachable 6. Test LLM preprocessing is applied when enabled