UNPKG

@debugmcp/mcp-debugger

Version:

Run-time step-through debugging for LLM agents.

116 lines (85 loc) • 4.24 kB
# Task 10: Emergency Fix - MCP Connection Errors - Summary ## šŸŽÆ Objective Fix the catastrophic MCP connection failures that were blocking ALL E2E testing. Task 8's adapter registry changes broke server initialization in test environments, causing 25+ E2E tests to fail with "MCP error -32000: Connection closed". ## šŸ“‹ Problem Analysis ### Root Cause Identified The adapter registry was being created in `src/container/dependencies.ts` but was **never connected** to the SessionManager that needed it. This created an orphaned component: 1. `dependencies.ts` created the adapter registry and registered adapters 2. The registry was returned but not passed to SessionManager 3. Server tried to access it through a hacky workaround that failed 4. All E2E tests failed with connection errors ### Error Pattern ``` MCP error -32000: Connection closed at McpError.fromError (src/client.ts:150:12) ``` ## šŸ”§ Implementation Summary ### Surgical Fix Applied The fix was minimal and focused only on connecting the existing components: 1. **Updated SessionManagerDependencies interface** (`src/session/session-manager.ts`) - Added `adapterRegistry: IAdapterRegistry` to the interface - Added import for `IAdapterRegistry` 2. **Initialized adapter registry in constructor** (`src/session/session-manager.ts`) - Added `public adapterRegistry: IAdapterRegistry` property - Set `this.adapterRegistry = dependencies.adapterRegistry` in constructor 3. **Simplified server access** (`src/server.ts`) - Removed hacky workaround in `getAdapterRegistry()` - Changed to direct access: `return this.sessionManager.adapterRegistry` 4. **Test utilities already correct** (`tests/core/unit/session/session-manager-test-utils.ts`) - Already included mock adapter registry in dependencies ## āœ… Verification Results ### Build Success ```bash npm run build # āœ“ TypeScript compilation successful # āœ“ Proxy files copied ``` ### E2E Test Success ```bash npm test -- tests/e2e/mcp-server-smoke-sse.test.ts āœ“ tests/e2e/mcp-server-smoke-sse.test.ts (2 tests) 17767ms āœ“ should successfully debug fibonacci.py via SSE transport 8994ms āœ“ should work when SSE server is spawned from different working directory 8772ms Test Files 1 passed (1) Tests 2 passed (2) ``` ## šŸ“Š Impact ### Before Fix - **67 test failures** (>100% - entire test files failing) - **0% E2E test success rate** - All MCP connections failed immediately - Blocked all E2E testing and dependent tasks ### After Fix - **E2E tests passing** - MCP connections established successfully - Debug sessions working correctly - Tasks 11, 12, and 13 unblocked ## šŸ”‘ Key Takeaways 1. **Dependency Injection Chain**: Always verify the entire dependency chain from creation to usage 2. **Minimal Fix Approach**: Emergency fixes should be surgical - fix only what's broken 3. **Test Early**: A single E2E test can verify the entire connection chain 4. **No Refactoring During Emergency**: Resist the temptation to improve code during critical fixes ## šŸ Definition of Done āœ… - [x] At least one E2E test successfully connects to MCP server - [x] Root cause documented (orphaned adapter registry) - [x] Fix is minimal and focused (3 files, ~5 lines changed) - [x] No regression in currently passing tests - [x] Brief explanation of what was fixed ## šŸ“ Files Modified 1. `src/session/session-manager.ts` - Added IAdapterRegistry import - Added adapterRegistry to dependencies interface - Added public adapterRegistry property - Initialized in constructor 2. `src/server.ts` - Simplified getAdapterRegistry() method - Removed hacky any-cast workaround 3. `tests/core/unit/session/session-manager-test-utils.ts` - No changes needed (already had mock adapter registry) ## ✨ Summary The emergency fix successfully restored MCP connectivity by connecting the orphaned adapter registry to the components that needed it. This minimal, surgical fix: - Restored E2E test functionality - Maintained backward compatibility - Avoided architectural changes - Unblocked dependent tasks The fix demonstrates the importance of verifying dependency chains and the value of targeted solutions during emergency situations.