Skip to content

Commit f10d1ff

Browse files
committed
change sessionIdGenerator to be either undefined or generate a string
1 parent 1781d31 commit f10d1ff

File tree

5 files changed

+14
-14
lines changed

5 files changed

+14
-14
lines changed

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,10 +325,9 @@ app.use(express.json());
325325

326326
// Handle all MCP requests (GET, POST, DELETE) at a single endpoint
327327
app.all('/mcp', async (req, res) => {
328-
// Create a transport with sessionIdGenerator set to return undefined
329-
// This disables session tracking completely
328+
// Disable session tracking by setting sessionIdGenerator to undefined
330329
const transport = new StreamableHTTPServerTransport({
331-
sessionIdGenerator: () => undefined,
330+
sessionIdGenerator: undefined,
332331
req,
333332
res
334333
});

src/examples/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ The Streamable HTTP transport can be configured to operate without tracking sess
134134

135135
To enable stateless mode, configure the `StreamableHTTPServerTransport` with:
136136
```typescript
137-
sessionIdGenerator: () => undefined
137+
sessionIdGenerator: undefined
138138
```
139139

140140
This disables session management entirely, and the server won't generate or expect session IDs.

src/integration-tests/stateManagementStreamableHttp.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ describe('Streamable HTTP Transport Session Management', () => {
6868
const serverTransport = new StreamableHTTPServerTransport({
6969
sessionIdGenerator: withSessionManagement
7070
? () => randomUUID() // With session management, generate UUID
71-
: () => undefined // Without session management, return undefined
71+
: undefined // Without session management, return undefined
7272
});
7373

7474
await mcpServer.connect(serverTransport);

src/server/streamableHttp.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { z } from "zod";
1010
* Test server configuration for StreamableHTTPServerTransport tests
1111
*/
1212
interface TestServerConfig {
13-
sessionIdGenerator?: () => string | undefined;
13+
sessionIdGenerator: (() => string) | undefined;
1414
enableJsonResponse?: boolean;
1515
customRequestHandler?: (req: IncomingMessage, res: ServerResponse, parsedBody?: unknown) => Promise<void>;
1616
eventStore?: EventStore;
@@ -19,7 +19,7 @@ interface TestServerConfig {
1919
/**
2020
* Helper to create and start test HTTP server with MCP setup
2121
*/
22-
async function createTestServer(config: TestServerConfig = {}): Promise<{
22+
async function createTestServer(config: TestServerConfig = { sessionIdGenerator: (() => randomUUID()) }): Promise<{
2323
server: Server;
2424
transport: StreamableHTTPServerTransport;
2525
mcpServer: McpServer;
@@ -40,7 +40,7 @@ async function createTestServer(config: TestServerConfig = {}): Promise<{
4040
);
4141

4242
const transport = new StreamableHTTPServerTransport({
43-
sessionIdGenerator: config.sessionIdGenerator ?? (() => randomUUID()),
43+
sessionIdGenerator: config.sessionIdGenerator,
4444
enableJsonResponse: config.enableJsonResponse ?? false,
4545
eventStore: config.eventStore
4646
});
@@ -681,7 +681,7 @@ describe("StreamableHTTPServerTransport with JSON Response Mode", () => {
681681
let sessionId: string;
682682

683683
beforeEach(async () => {
684-
const result = await createTestServer({ enableJsonResponse: true });
684+
const result = await createTestServer({ sessionIdGenerator: (() => randomUUID()), enableJsonResponse: true });
685685
server = result.server;
686686
transport = result.transport;
687687
baseUrl = result.baseUrl;
@@ -784,7 +784,8 @@ describe("StreamableHTTPServerTransport with pre-parsed body", () => {
784784
console.error("Error handling request:", error);
785785
if (!res.headersSent) res.writeHead(500).end();
786786
}
787-
}
787+
},
788+
sessionIdGenerator: (() => randomUUID())
788789
});
789790

790791
server = result.server;
@@ -1063,7 +1064,7 @@ describe("StreamableHTTPServerTransport in stateless mode", () => {
10631064
let baseUrl: URL;
10641065

10651066
beforeEach(async () => {
1066-
const result = await createTestServer({ sessionIdGenerator: () => undefined });
1067+
const result = await createTestServer({ sessionIdGenerator: undefined });
10671068
server = result.server;
10681069
transport = result.transport;
10691070
baseUrl = result.baseUrl;

src/server/streamableHttp.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export interface StreamableHTTPServerTransportOptions {
3737
*
3838
* Return undefined to disable session management.
3939
*/
40-
sessionIdGenerator: () => string | undefined;
40+
sessionIdGenerator: (() => string) | undefined;
4141

4242
/**
4343
* A callback for session initialization events
@@ -98,7 +98,7 @@ export interface StreamableHTTPServerTransportOptions {
9898
*/
9999
export class StreamableHTTPServerTransport implements Transport {
100100
// when sessionId is not set (undefined), it means the transport is in stateless mode
101-
private sessionIdGenerator: () => string | undefined;
101+
private sessionIdGenerator: (() => string) | undefined;
102102
private _started: boolean = false;
103103
private _streamMapping: Map<string, ServerResponse> = new Map();
104104
private _requestToStreamMapping: Map<RequestId, string> = new Map();
@@ -365,7 +365,7 @@ export class StreamableHTTPServerTransport implements Transport {
365365
}));
366366
return;
367367
}
368-
this.sessionId = this.sessionIdGenerator();
368+
this.sessionId = this.sessionIdGenerator?.();
369369
this._initialized = true;
370370

371371
// If we have a session ID and an onsessioninitialized handler, call it immediately

0 commit comments

Comments
 (0)