You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: resolve SSE connection issues and prevent stack overflow on cleanup
This commit addresses three critical issues and adds comprehensive test coverage:
## Fixes
1. **SSE Connection Routing** - Fixed 406 errors for SSE clients with non-standard Accept headers
- Changed GET /mcp routing logic to default to SSE transport for any sessionless request
- Previously rejected clients sending `Accept: */*` instead of `Accept: text/event-stream`
- Now properly supports legacy clients like Kilo Code that don't send proper Accept headers
- Resolves "SSE error: Non-200 status code (406)" connection failures
2. **Transport Cleanup Stack Overflow** - Fixed infinite recursion in cleanup handlers
- Added cleanup guard flags to prevent circular cleanup calls
- Issue occurred when `cleanup()` → `server.close()` → `transport.close()` → `onclose` → `cleanup()` created infinite loop
- Affected both SSE and Streamable HTTP transports during graceful shutdown
- Resolves "RangeError: Maximum call stack size exceeded" errors on client disconnect
3. **MCP Server Logging** - Improved stderr logging level for MCP server output
- Changed MCP server stderr output from `warn` to `debug` level
- Prevents normal informational messages from appearing as warnings
- Improves log clarity by distinguishing between actual warnings and routine server output
## Tests
Added comprehensive test coverage (20 passing tests):
- **tests/server-routing.test.js** (13 tests)
- Tests GET /mcp endpoint routing logic
- Verifies SSE routing for sessionless requests regardless of Accept header
- Tests backward compatibility with clients sending `Accept: */*`
- Validates 406 error prevention for legacy clients
- **tests/mcp-server.test.js** (7 tests)
- Tests cleanup guard flags in both SSE and Streamable HTTP transports
- Verifies prevention of infinite recursion during cleanup
- Tests session management and cleanup behavior
- **tests/MCPConnection.test.js** (updated)
- Enhanced logger mock with debug method
- Updated stderr test to verify debug logging instead of warn
## Changes
- src/server.js: Updated GET /mcp routing to default to SSE for sessionless requests
- src/mcp/server.js: Added cleanup guard flags to prevent recursion
- src/MCPConnection.js: Changed stderr logging from warn to debug level
- CHANGELOG.md: Added release notes for v5.0.3
- package.json: Bumped version to 5.0.3
- README.md: Updated transport documentation
- tests/: Added comprehensive test coverage
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
0 commit comments