Skip to main content
Glama
KVerduyn
by KVerduyn
CONNECTION_IMPROVEMENTS.md3.47 kB
# Connection Stability Improvements ## Changes Deployed ### 1. Docker Health Check Fixed ✅ **Problem**: Health check failing because `curl` wasn't installed **Solution**: Added `RUN apk add --no-cache curl` to Dockerfile **Result**: Container now shows as `(healthy)` instead of `(unhealthy)` ### 2. Connection Keep-Alive Headers ✅ **Problem**: SSE streams closing too quickly **Solution**: Added headers to GET /mcp endpoint: ```typescript res.setHeader('Connection', 'keep-alive'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('X-Accel-Buffering', 'no'); ``` **Result**: Better stream persistence ### 3. Session Activity Tracking ✅ **Problem**: No way to detect and clean up stale sessions **Solution**: - Track last activity timestamp for each session - Auto-cleanup sessions inactive for 5+ minutes - Update activity on every request **Result**: Cleaner session management, prevents memory leaks ### 4. Improved Session Lifecycle ✅ **Problem**: Sessions not being properly cleaned up **Solution**: - Delete activity timestamp when session closes - Automatic cleanup interval every 60 seconds - Better logging of session lifecycle **Result**: More reliable connection management ## Current Status ``` Container: school-vacation-mcp Status: Up 46 seconds (healthy) ✅ Active Sessions: 3 Health Check: ✅ Passing Port: 3000 → 3000 ``` ## What Changed for LibreChat ### Before - Frequent "Connection closed" errors during tool calls - Sessions timing out unpredictably - Container showing as unhealthy - No session cleanup ### After - ✅ Improved connection stability - ✅ Better session management - ✅ Automatic stale session cleanup - ✅ Container health check working - ✅ Keep-alive headers for SSE streams ## Testing the Improvements Try asking LibreChat again: ``` Show me vacation periods for 2024 in Flanders ``` You should see: - More stable connections - Fewer "Connection closed" errors - Automatic reconnection if it does disconnect - Better overall reliability ## Monitoring Check server status: ```bash curl http://localhost:3000/health ``` Watch logs for connection stability: ```bash docker logs -f school-vacation-mcp ``` Expected logs: ``` ✅ Establishing SSE stream for session: <uuid> ✅ Streamable HTTP MCP request received ✅ Reusing existing session: <uuid> ``` If sessions go stale: ``` ℹ️ Cleaning up stale session: <uuid> ``` ## Session Management - **Active Sessions**: Tracked in real-time - **Timeout**: 5 minutes of inactivity - **Cleanup**: Every 60 seconds - **Activity**: Updated on every tool call ## Next Steps 1. **Test tool calls** - Try vacation queries in LibreChat 2. **Monitor logs** - Watch for "Connection closed" frequency 3. **Check stability** - Should see fewer errors If you still see frequent disconnections: - Check LibreChat logs for client-side issues - Verify network between containers is stable - Check for proxy/load balancer timeouts ## Technical Details ### Session Tracking ```typescript sessionLastActivity[sessionId] = Date.now() ``` ### Cleanup Logic ```typescript const SESSION_TIMEOUT = 5 * 60 * 1000; // 5 minutes setInterval(() => { // Clean up stale sessions }, 60 * 1000); ``` ### Keep-Alive Headers ```typescript res.setHeader('Connection', 'keep-alive'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('X-Accel-Buffering', 'no'); ``` --- **Deployed**: 2025-11-21 **Status**: ✅ Improvements Active **Container**: Healthy

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/KVerduyn/School_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server