@@ -282,10 +282,19 @@ if (useHttp) {
282
282
if ( sessionId && transports [ sessionId ] ) {
283
283
// Reuse existing transport
284
284
transport = transports [ sessionId ] ;
285
- } else if ( ! sessionId && isInitializeRequest ( jsonData ) ) {
286
- // New initialization request
285
+ } else if ( ! sessionId ) {
286
+ // Create new session (either for initialize request or fallback)
287
+ const newSessionId = randomUUID ( ) ;
288
+ const isInit = isInitializeRequest ( jsonData ) ;
289
+
290
+ if ( isInit ) {
291
+ logger . info ( `Creating new session for initialize request: ${ newSessionId } ` ) ;
292
+ } else {
293
+ logger . warn ( `Creating fallback session for non-initialize request: ${ newSessionId } ` ) ;
294
+ }
295
+
287
296
transport = new StreamableHTTPServerTransport ( {
288
- sessionIdGenerator : ( ) => randomUUID ( ) ,
297
+ sessionIdGenerator : ( ) => newSessionId ,
289
298
onsessioninitialized : ( id ) => {
290
299
transports [ id ] = transport ;
291
300
logger . info ( `Session initialized: ${ id } ` ) ;
@@ -304,12 +313,16 @@ if (useHttp) {
304
313
await transport . handleRequest ( req , res , jsonData ) ;
305
314
return ;
306
315
} else {
307
- // Invalid request
316
+ // Invalid request - session ID provided but not found
317
+ logger . error ( `Invalid session ID: ${ sessionId } . Active sessions count: ${ Object . keys ( transports ) . length } ` ) ;
308
318
res . writeHead ( 400 ) ;
309
319
res . end ( JSON . stringify ( {
310
320
jsonrpc : '2.0' ,
311
- error : { code : - 32000 , message : 'Bad Request: No valid session ID' } ,
312
- id : null
321
+ error : {
322
+ code : - 32000 ,
323
+ message : `Bad Request: Invalid session ID. Please initialize a new session first.`
324
+ } ,
325
+ id : jsonData . id || null
313
326
} ) ) ;
314
327
return ;
315
328
}
0 commit comments