From ac0a1e65d1971bca06a48e3939afda9390d7c4a1 Mon Sep 17 00:00:00 2001 From: Niels Kaspers Date: Thu, 5 Mar 2026 00:12:57 +0200 Subject: [PATCH] fix(transport): call onerror for silently swallowed parse errors Several nested try/catch blocks in StreamableHTTPServerTransport.handlePostRequest returned error responses without calling the onerror callback, making it impossible to observe or log those errors. Add onerror calls before returning 400 responses for invalid JSON and invalid JSON-RPC message parse failures, consistent with the outer catch block that already calls onerror. Fixes #1395 --- packages/server/src/server/streamableHttp.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/server/src/server/streamableHttp.ts b/packages/server/src/server/streamableHttp.ts index 74e689892..5b22b0ace 100644 --- a/packages/server/src/server/streamableHttp.ts +++ b/packages/server/src/server/streamableHttp.ts @@ -635,7 +635,8 @@ export class WebStandardStreamableHTTPServerTransport implements Transport { if (options?.parsedBody === undefined) { try { rawMessage = await req.json(); - } catch { + } catch (parseError) { + this.onerror?.(parseError as Error); return this.createJsonErrorResponse(400, -32_700, 'Parse error: Invalid JSON'); } } else { @@ -649,7 +650,8 @@ export class WebStandardStreamableHTTPServerTransport implements Transport { messages = Array.isArray(rawMessage) ? rawMessage.map(msg => JSONRPCMessageSchema.parse(msg)) : [JSONRPCMessageSchema.parse(rawMessage)]; - } catch { + } catch (parseError) { + this.onerror?.(parseError as Error); return this.createJsonErrorResponse(400, -32_700, 'Parse error: Invalid JSON-RPC message'); }