From 4cbeade6cf28fae4c2f43c171b8a6c8e412a7375 Mon Sep 17 00:00:00 2001 From: Christian Sidak Date: Sun, 5 Apr 2026 21:03:57 -0700 Subject: [PATCH 1/2] fix: add | undefined to optional callback types for exactOptionalPropertyTypes support Optional properties sessionIdGenerator, onsessioninitialized, and onsessionclosed in WebStandardStreamableHTTPServerTransportOptions need the | undefined union to support TypeScript projects with exactOptionalPropertyTypes: true. Fixes #1397 --- packages/middleware/node/test/streamableHttp.test.ts | 4 ++-- packages/server/src/server/streamableHttp.ts | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/middleware/node/test/streamableHttp.test.ts b/packages/middleware/node/test/streamableHttp.test.ts index 460f72d93..c427aa2ee 100644 --- a/packages/middleware/node/test/streamableHttp.test.ts +++ b/packages/middleware/node/test/streamableHttp.test.ts @@ -42,8 +42,8 @@ interface TestServerConfig { enableJsonResponse?: boolean; customRequestHandler?: (req: IncomingMessage, res: ServerResponse, parsedBody?: unknown) => Promise; eventStore?: EventStore; - onsessioninitialized?: (sessionId: string) => void | Promise; - onsessionclosed?: (sessionId: string) => void | Promise; + onsessioninitialized?: ((sessionId: string) => void | Promise) | undefined; + onsessionclosed?: ((sessionId: string) => void | Promise) | undefined; retryInterval?: number; } diff --git a/packages/server/src/server/streamableHttp.ts b/packages/server/src/server/streamableHttp.ts index 6284189dd..fd3563a07 100644 --- a/packages/server/src/server/streamableHttp.ts +++ b/packages/server/src/server/streamableHttp.ts @@ -77,7 +77,7 @@ export interface WebStandardStreamableHTTPServerTransportOptions { * * If not provided, session management is disabled (stateless mode). */ - sessionIdGenerator?: () => string; + sessionIdGenerator?: (() => string) | undefined; /** * A callback for session initialization events @@ -86,7 +86,7 @@ export interface WebStandardStreamableHTTPServerTransportOptions { * and need to keep track of them. * @param sessionId The generated session ID */ - onsessioninitialized?: (sessionId: string) => void | Promise; + onsessioninitialized?: ((sessionId: string) => void | Promise) | undefined; /** * A callback for session close events @@ -98,7 +98,7 @@ export interface WebStandardStreamableHTTPServerTransportOptions { * session open/running. * @param sessionId The session ID that was closed */ - onsessionclosed?: (sessionId: string) => void | Promise; + onsessionclosed?: ((sessionId: string) => void | Promise) | undefined; /** * If `true`, the server will return JSON responses instead of starting an SSE stream. @@ -233,8 +233,8 @@ export class WebStandardStreamableHTTPServerTransport implements Transport { private _enableJsonResponse: boolean = false; private _standaloneSseStreamId: string = '_GET_stream'; private _eventStore?: EventStore; - private _onsessioninitialized?: (sessionId: string) => void | Promise; - private _onsessionclosed?: (sessionId: string) => void | Promise; + private _onsessioninitialized?: ((sessionId: string) => void | Promise) | undefined; + private _onsessionclosed?: ((sessionId: string) => void | Promise) | undefined; private _allowedHosts?: string[]; private _allowedOrigins?: string[]; private _enableDnsRebindingProtection: boolean; From 14e574424867f87acca64f3c7007fcc92d71d440 Mon Sep 17 00:00:00 2001 From: Christian Sidak Date: Thu, 9 Apr 2026 19:00:54 -0700 Subject: [PATCH 2/2] Add changeset for server package exactOptionalPropertyTypes fix Co-Authored-By: Claude Opus 4.6 (1M context) --- .changeset/gentle-planets-rest.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/gentle-planets-rest.md diff --git a/.changeset/gentle-planets-rest.md b/.changeset/gentle-planets-rest.md new file mode 100644 index 000000000..21255a6b6 --- /dev/null +++ b/.changeset/gentle-planets-rest.md @@ -0,0 +1,7 @@ +--- +'@modelcontextprotocol/server': patch +--- + +Add `| undefined` to optional callback and function properties on `WebStandardStreamableHTTPServerTransportOptions` (`sessionIdGenerator`, `onsessioninitialized`, `onsessionclosed`) and corresponding private fields. + +This fixes TS2430 errors for consumers using `exactOptionalPropertyTypes: true` without `skipLibCheck`, where optional properties with function types need explicit `| undefined` to match their emitted declarations.