From 3628619297e678435d99fa5b3801c4e25d2eb6d6 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 24 Nov 2025 19:57:29 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=B0=EF=B8=8F=20fix:=20MCP=20SSE=20&=20?= =?UTF-8?q?Ping=20Error=20Handling=20(#10635)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Peter Rothlaender --- packages/api/src/mcp/connection.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/api/src/mcp/connection.ts b/packages/api/src/mcp/connection.ts index c130b3a467..ae4fc72324 100644 --- a/packages/api/src/mcp/connection.ts +++ b/packages/api/src/mcp/connection.ts @@ -595,17 +595,27 @@ export class MCPConnection extends EventEmitter { private setupTransportErrorHandlers(transport: Transport): void { transport.onerror = (error) => { - logger.error(`${this.getLogPrefix()} Transport error:`, error); - - // Check if it's an OAuth authentication error if (error && typeof error === 'object' && 'code' in error) { const errorCode = (error as unknown as { code?: number }).code; + + // Ignore SSE 404 errors for servers that don't support SSE + if ( + errorCode === 404 && + String(error?.message).toLowerCase().includes('failed to open sse stream') + ) { + logger.warn(`${this.getLogPrefix()} SSE stream not available (404). Ignoring.`); + return; + } + + // Check if it's an OAuth authentication error if (errorCode === 401 || errorCode === 403) { logger.warn(`${this.getLogPrefix()} OAuth authentication error detected`); this.emit('oauthError', error); } } + logger.error(`${this.getLogPrefix()} Transport error:`, error); + this.emit('connectionChange', 'error'); }; } @@ -678,7 +688,9 @@ export class MCPConnection extends EventEmitter { const pingUnsupported = error instanceof Error && ((error as Error)?.message.includes('-32601') || + (error as Error)?.message.includes('-32602') || (error as Error)?.message.includes('invalid method ping') || + (error as Error)?.message.includes('Unsupported method: ping') || (error as Error)?.message.includes('method not found')); if (!pingUnsupported) {