@monoes/mcp 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +36 -7
  3. package/dist/auth.d.ts +19 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +72 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/connection-pool.d.ts +0 -0
  8. package/dist/connection-pool.d.ts.map +0 -0
  9. package/dist/connection-pool.js +0 -0
  10. package/dist/connection-pool.js.map +0 -0
  11. package/dist/index.d.ts +3 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +21 -8
  14. package/dist/index.js.map +1 -1
  15. package/dist/oauth.d.ts +21 -7
  16. package/dist/oauth.d.ts.map +1 -1
  17. package/dist/oauth.js +21 -24
  18. package/dist/oauth.js.map +1 -1
  19. package/dist/prompt-registry.d.ts +0 -0
  20. package/dist/prompt-registry.d.ts.map +0 -0
  21. package/dist/prompt-registry.js +0 -0
  22. package/dist/prompt-registry.js.map +0 -0
  23. package/dist/rate-limiter.d.ts +0 -0
  24. package/dist/rate-limiter.d.ts.map +0 -0
  25. package/dist/rate-limiter.js +0 -0
  26. package/dist/rate-limiter.js.map +0 -0
  27. package/dist/resource-registry.d.ts +0 -0
  28. package/dist/resource-registry.d.ts.map +0 -0
  29. package/dist/resource-registry.js +0 -0
  30. package/dist/resource-registry.js.map +0 -0
  31. package/dist/sampling.d.ts +0 -0
  32. package/dist/sampling.d.ts.map +0 -0
  33. package/dist/sampling.js +0 -0
  34. package/dist/sampling.js.map +0 -0
  35. package/dist/schema-validator.d.ts +0 -0
  36. package/dist/schema-validator.d.ts.map +0 -0
  37. package/dist/schema-validator.js +0 -0
  38. package/dist/schema-validator.js.map +0 -0
  39. package/dist/server.d.ts +25 -0
  40. package/dist/server.d.ts.map +1 -1
  41. package/dist/server.js +157 -38
  42. package/dist/server.js.map +1 -1
  43. package/dist/session-manager.d.ts +0 -0
  44. package/dist/session-manager.d.ts.map +0 -0
  45. package/dist/session-manager.js +0 -0
  46. package/dist/session-manager.js.map +0 -0
  47. package/dist/task-manager.d.ts +0 -0
  48. package/dist/task-manager.d.ts.map +0 -0
  49. package/dist/task-manager.js +0 -0
  50. package/dist/task-manager.js.map +0 -0
  51. package/dist/tool-registry.d.ts +0 -0
  52. package/dist/tool-registry.d.ts.map +0 -0
  53. package/dist/tool-registry.js +0 -0
  54. package/dist/tool-registry.js.map +0 -0
  55. package/dist/transport/http.d.ts +16 -5
  56. package/dist/transport/http.d.ts.map +1 -1
  57. package/dist/transport/http.js +81 -72
  58. package/dist/transport/http.js.map +1 -1
  59. package/dist/transport/index.d.ts +0 -0
  60. package/dist/transport/index.d.ts.map +0 -0
  61. package/dist/transport/index.js +0 -0
  62. package/dist/transport/index.js.map +0 -0
  63. package/dist/transport/stdio.d.ts +0 -0
  64. package/dist/transport/stdio.d.ts.map +0 -0
  65. package/dist/transport/stdio.js +0 -0
  66. package/dist/transport/stdio.js.map +0 -0
  67. package/dist/transport/websocket.d.ts +14 -13
  68. package/dist/transport/websocket.d.ts.map +1 -1
  69. package/dist/transport/websocket.js +36 -37
  70. package/dist/transport/websocket.js.map +1 -1
  71. package/dist/types.d.ts +16 -2
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js +0 -0
  74. package/dist/types.js.map +1 -1
  75. package/package.json +8 -7
package/dist/oauth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/dist/sampling.js CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/dist/server.d.ts CHANGED
@@ -47,6 +47,7 @@ export declare class MCPServer extends EventEmitter implements IMCPServer {
47
47
  private startTime?;
48
48
  private startupDuration?;
49
49
  private currentSession?;
50
+ private readonly connectionSessions;
50
51
  private resourceSubscriptions;
51
52
  private readonly serverInfo;
52
53
  private readonly protocolVersion;
@@ -94,6 +95,30 @@ export declare class MCPServer extends EventEmitter implements IMCPServer {
94
95
  getSessions(): MCPSession[];
95
96
  getSession(sessionId: string): MCPSession | undefined;
96
97
  terminateSession(sessionId: string): boolean;
98
+ /**
99
+ * Resolve the session bound to a connection without creating one.
100
+ * Multi-client transports (http, websocket) pass a `connectionId`, which is
101
+ * looked up in `connectionSessions`. Single-client transports (stdio,
102
+ * in-process) omit it, falling back to the `currentSession` singleton.
103
+ */
104
+ private getSessionForConnection;
105
+ /**
106
+ * Bind a newly-created session to a connection: per-connectionId when the
107
+ * transport supports multiple clients, otherwise the singleton fallback.
108
+ */
109
+ private bindSessionToConnection;
110
+ /**
111
+ * Tear down the session owned by a connection when the transport reports
112
+ * that connection has closed — prevents closed clients' sessions (and any
113
+ * resource subscriptions) from lingering until the idle-timeout sweep.
114
+ */
115
+ private closeConnectionSession;
116
+ /**
117
+ * Detach every registry subscription owned by a session. Called whenever a
118
+ * session ends (terminated, connection closed, expired, server stopped) so
119
+ * no update callback outlives its session (issue #92).
120
+ */
121
+ private purgeSessionSubscriptions;
97
122
  private handleRequest;
98
123
  private handleNotification;
99
124
  private handleInitialize;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -14,7 +14,7 @@ import { createPromptRegistry } from './prompt-registry.js';
14
14
  import { createTaskManager } from './task-manager.js';
15
15
  import { createTransport, createTransportManager } from './transport/index.js';
16
16
  import { createRateLimiter } from './rate-limiter.js';
17
- import { createSamplingManager } from './sampling.js';
17
+ import { createSamplingManager, } from './sampling.js';
18
18
  const DEFAULT_CONFIG = {
19
19
  name: 'Monomind MCP Server V1',
20
20
  version: '3.0.0',
@@ -46,8 +46,20 @@ export class MCPServer extends EventEmitter {
46
46
  running = false;
47
47
  startTime;
48
48
  startupDuration;
49
+ // Fallback singleton session, used only for transports that are inherently
50
+ // single-client (stdio, in-process) where the transport never supplies a
51
+ // connectionId to handleRequest/handleNotification.
49
52
  currentSession;
50
- resourceSubscriptions = new Map(); // sessionId -> subscribed URIs
53
+ // connectionId -> session, for multi-client transports (http, websocket).
54
+ // Without this, every connection shared `currentSession` above and a
55
+ // second client's `initialize` would silently reassign the session out
56
+ // from under the first client (issue #93).
57
+ connectionSessions = new Map();
58
+ // sessionId -> (uri -> subscriptionId). The registry-issued subscriptionId
59
+ // must be retained so resources/unsubscribe (and session teardown) can call
60
+ // resourceRegistry.unsubscribe(id) — without it callbacks leak and phantom
61
+ // notifications fire after unsubscribe (issue #92).
62
+ resourceSubscriptions = new Map();
51
63
  serverInfo = {
52
64
  name: 'Monomind MCP Server V1',
53
65
  version: '3.0.0',
@@ -163,11 +175,18 @@ export class MCPServer extends EventEmitter {
163
175
  maxRequestSize: String(this.config.maxRequestSize),
164
176
  requestTimeout: this.config.requestTimeout,
165
177
  });
166
- this.transport.onRequest(async (request) => {
167
- return await this.handleRequest(request);
178
+ this.transport.onRequest(async (request, connectionId) => {
179
+ return await this.handleRequest(request, connectionId);
168
180
  });
169
- this.transport.onNotification(async (notification) => {
170
- await this.handleNotification(notification);
181
+ this.transport.onNotification(async (notification, connectionId) => {
182
+ await this.handleNotification(notification, connectionId);
183
+ });
184
+ // Transports that support multiple concurrent clients (http, websocket)
185
+ // report when a connection closes so its session can be torn down —
186
+ // without this a disconnected client's session (and any resource
187
+ // subscriptions) would leak for the full sessionTimeout.
188
+ this.transport.onConnectionClose?.((connectionId) => {
189
+ this.closeConnectionSession(connectionId);
171
190
  });
172
191
  await this.transport.start();
173
192
  await this.registerBuiltInTools();
@@ -197,8 +216,16 @@ export class MCPServer extends EventEmitter {
197
216
  await this.transport.stop();
198
217
  this.transport = undefined;
199
218
  }
200
- this.sessionManager.clearAll();
219
+ // PKG-1: destroy() runs stopCleanupTimer + clearAll + removeAllListeners.
220
+ // clearAll() alone left the SessionManager cleanup interval (setInterval
221
+ // at session-manager.ts:303) firing forever after stop().
222
+ this.sessionManager.destroy();
201
223
  this.taskManager.destroy();
224
+ // Safety net: detach any subscription whose session already vanished
225
+ // without a session:closed event reaching the purge handler.
226
+ for (const sessionId of [...this.resourceSubscriptions.keys()]) {
227
+ this.purgeSessionSubscriptions(sessionId);
228
+ }
202
229
  this.resourceSubscriptions.clear();
203
230
  this.rateLimiter.destroy();
204
231
  if (this.connectionPool) {
@@ -206,6 +233,7 @@ export class MCPServer extends EventEmitter {
206
233
  }
207
234
  this.running = false;
208
235
  this.currentSession = undefined;
236
+ this.connectionSessions.clear();
209
237
  this.logger.info('MCP server stopped');
210
238
  this.emit('server:stopped');
211
239
  }
@@ -286,9 +314,67 @@ export class MCPServer extends EventEmitter {
286
314
  if (this.currentSession?.id === sessionId) {
287
315
  this.currentSession = undefined;
288
316
  }
317
+ for (const [connectionId, session] of this.connectionSessions) {
318
+ if (session.id === sessionId) {
319
+ this.connectionSessions.delete(connectionId);
320
+ }
321
+ }
289
322
  return result;
290
323
  }
291
- async handleRequest(request) {
324
+ /**
325
+ * Resolve the session bound to a connection without creating one.
326
+ * Multi-client transports (http, websocket) pass a `connectionId`, which is
327
+ * looked up in `connectionSessions`. Single-client transports (stdio,
328
+ * in-process) omit it, falling back to the `currentSession` singleton.
329
+ */
330
+ getSessionForConnection(connectionId) {
331
+ if (connectionId) {
332
+ return this.connectionSessions.get(connectionId);
333
+ }
334
+ return this.currentSession;
335
+ }
336
+ /**
337
+ * Bind a newly-created session to a connection: per-connectionId when the
338
+ * transport supports multiple clients, otherwise the singleton fallback.
339
+ */
340
+ bindSessionToConnection(session, connectionId) {
341
+ if (connectionId) {
342
+ this.connectionSessions.set(connectionId, session);
343
+ }
344
+ else {
345
+ this.currentSession = session;
346
+ }
347
+ }
348
+ /**
349
+ * Tear down the session owned by a connection when the transport reports
350
+ * that connection has closed — prevents closed clients' sessions (and any
351
+ * resource subscriptions) from lingering until the idle-timeout sweep.
352
+ */
353
+ closeConnectionSession(connectionId) {
354
+ const session = this.connectionSessions.get(connectionId);
355
+ this.connectionSessions.delete(connectionId);
356
+ if (session) {
357
+ // closeSession emits 'session:closed', which purges the session's
358
+ // resource subscriptions (see setupEventHandlers).
359
+ this.sessionManager.closeSession(session.id, 'Connection closed');
360
+ }
361
+ }
362
+ /**
363
+ * Detach every registry subscription owned by a session. Called whenever a
364
+ * session ends (terminated, connection closed, expired, server stopped) so
365
+ * no update callback outlives its session (issue #92).
366
+ */
367
+ purgeSessionSubscriptions(sessionId) {
368
+ const sessionSubs = this.resourceSubscriptions.get(sessionId);
369
+ if (!sessionSubs) {
370
+ return;
371
+ }
372
+ for (const subscriptionId of sessionSubs.values()) {
373
+ this.resourceRegistry.unsubscribe(subscriptionId);
374
+ }
375
+ this.resourceSubscriptions.delete(sessionId);
376
+ }
377
+ async handleRequest(request, connectionId) {
292
378
  const startTime = performance.now();
293
379
  this.requestStats.total++;
294
380
  this.logger.debug('Handling request', {
@@ -297,7 +383,7 @@ export class MCPServer extends EventEmitter {
297
383
  });
298
384
  // Rate limiting check (skip for initialize)
299
385
  if (request.method !== 'initialize') {
300
- const sessionId = this.currentSession?.id;
386
+ const sessionId = this.getSessionForConnection(connectionId)?.id;
301
387
  const rateLimitResult = this.rateLimiter.check(sessionId);
302
388
  if (!rateLimitResult.allowed) {
303
389
  this.requestStats.failed++;
@@ -315,14 +401,14 @@ export class MCPServer extends EventEmitter {
315
401
  }
316
402
  try {
317
403
  if (request.method === 'initialize') {
318
- return await this.handleInitialize(request);
404
+ return await this.handleInitialize(request, connectionId);
319
405
  }
320
- const session = this.getOrCreateSession();
406
+ const session = this.getOrCreateSession(connectionId);
321
407
  if (!session.isInitialized && request.method !== 'initialized') {
322
408
  return this.createErrorResponse(request.id, ErrorCodes.SERVER_NOT_INITIALIZED, 'Server not initialized');
323
409
  }
324
410
  this.sessionManager.updateActivity(session.id);
325
- const response = await this.routeRequest(request);
411
+ const response = await this.routeRequest(request, connectionId);
326
412
  const duration = performance.now() - startTime;
327
413
  this.requestStats.successful++;
328
414
  this.requestStats.totalResponseTime += duration;
@@ -345,7 +431,7 @@ export class MCPServer extends EventEmitter {
345
431
  return this.createErrorResponse(request.id, ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Internal error');
346
432
  }
347
433
  }
348
- async handleNotification(notification) {
434
+ async handleNotification(notification, connectionId) {
349
435
  this.logger.debug('Handling notification', { method: notification.method });
350
436
  switch (notification.method) {
351
437
  case 'initialized':
@@ -358,14 +444,14 @@ export class MCPServer extends EventEmitter {
358
444
  this.logger.debug('Unknown notification', { method: notification.method });
359
445
  }
360
446
  }
361
- async handleInitialize(request) {
447
+ async handleInitialize(request, connectionId) {
362
448
  const params = request.params;
363
449
  if (!params) {
364
450
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Invalid params');
365
451
  }
366
452
  const session = this.sessionManager.createSession(this.config.transport);
367
453
  this.sessionManager.initializeSession(session.id, params);
368
- this.currentSession = session;
454
+ this.bindSessionToConnection(session, connectionId);
369
455
  const result = {
370
456
  protocolVersion: this.protocolVersion,
371
457
  capabilities: this.capabilities,
@@ -382,22 +468,22 @@ export class MCPServer extends EventEmitter {
382
468
  result,
383
469
  };
384
470
  }
385
- async routeRequest(request) {
471
+ async routeRequest(request, connectionId) {
386
472
  switch (request.method) {
387
473
  // Tool methods
388
474
  case 'tools/list':
389
475
  return this.handleToolsList(request);
390
476
  case 'tools/call':
391
- return this.handleToolsCall(request);
477
+ return this.handleToolsCall(request, connectionId);
392
478
  // Resource methods (MCP 2025-11-25)
393
479
  case 'resources/list':
394
480
  return this.handleResourcesList(request);
395
481
  case 'resources/read':
396
482
  return this.handleResourcesRead(request);
397
483
  case 'resources/subscribe':
398
- return this.handleResourcesSubscribe(request);
484
+ return this.handleResourcesSubscribe(request, connectionId);
399
485
  case 'resources/unsubscribe':
400
- return this.handleResourcesUnsubscribe(request);
486
+ return this.handleResourcesUnsubscribe(request, connectionId);
401
487
  // Prompt methods (MCP 2025-11-25)
402
488
  case 'prompts/list':
403
489
  return this.handlePromptsList(request);
@@ -416,7 +502,7 @@ export class MCPServer extends EventEmitter {
416
502
  return this.handleLoggingSetLevel(request);
417
503
  // Sampling (MCP 2025-11-25)
418
504
  case 'sampling/createMessage':
419
- return this.handleSamplingCreateMessage(request);
505
+ return this.handleSamplingCreateMessage(request, connectionId);
420
506
  // Utility
421
507
  case 'ping':
422
508
  return {
@@ -427,7 +513,7 @@ export class MCPServer extends EventEmitter {
427
513
  default:
428
514
  // Check if it's a direct tool call
429
515
  if (this.toolRegistry.hasTool(request.method)) {
430
- return this.handleToolExecution(request);
516
+ return this.handleToolExecution(request, connectionId);
431
517
  }
432
518
  return this.createErrorResponse(request.id, ErrorCodes.METHOD_NOT_FOUND, `Method not found: ${request.method}`);
433
519
  }
@@ -444,13 +530,13 @@ export class MCPServer extends EventEmitter {
444
530
  result: { tools },
445
531
  };
446
532
  }
447
- async handleToolsCall(request) {
533
+ async handleToolsCall(request, connectionId) {
448
534
  const params = request.params;
449
535
  if (!params?.name) {
450
536
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Tool name is required');
451
537
  }
452
538
  const context = {
453
- sessionId: this.currentSession?.id || 'unknown',
539
+ sessionId: this.getSessionForConnection(connectionId)?.id || 'unknown',
454
540
  requestId: request.id,
455
541
  orchestrator: this.orchestrator,
456
542
  swarmCoordinator: this.swarmCoordinator,
@@ -462,9 +548,9 @@ export class MCPServer extends EventEmitter {
462
548
  result,
463
549
  };
464
550
  }
465
- async handleToolExecution(request) {
551
+ async handleToolExecution(request, connectionId) {
466
552
  const context = {
467
- sessionId: this.currentSession?.id || 'unknown',
553
+ sessionId: this.getSessionForConnection(connectionId)?.id || 'unknown',
468
554
  requestId: request.id,
469
555
  orchestrator: this.orchestrator,
470
556
  swarmCoordinator: this.swarmCoordinator,
@@ -505,9 +591,9 @@ export class MCPServer extends EventEmitter {
505
591
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, error instanceof Error ? error.message : 'Resource read failed');
506
592
  }
507
593
  }
508
- handleResourcesSubscribe(request) {
594
+ handleResourcesSubscribe(request, connectionId) {
509
595
  const params = request.params;
510
- const sessionId = this.currentSession?.id;
596
+ const sessionId = this.getSessionForConnection(connectionId)?.id;
511
597
  if (!params?.uri) {
512
598
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Resource URI is required');
513
599
  }
@@ -518,14 +604,20 @@ export class MCPServer extends EventEmitter {
518
604
  // Track subscription for this session
519
605
  let sessionSubs = this.resourceSubscriptions.get(sessionId);
520
606
  if (!sessionSubs) {
521
- sessionSubs = new Set();
607
+ sessionSubs = new Map();
522
608
  this.resourceSubscriptions.set(sessionId, sessionSubs);
523
609
  }
610
+ // Re-subscribing the same URI replaces the previous subscription —
611
+ // otherwise the old callback would keep firing with no way to reach it.
612
+ const existingId = sessionSubs.get(params.uri);
613
+ if (existingId) {
614
+ this.resourceRegistry.unsubscribe(existingId);
615
+ }
524
616
  const subscriptionId = this.resourceRegistry.subscribe(params.uri, (uri, content) => {
525
617
  // Send notification when resource updates
526
618
  this.sendNotification('notifications/resources/updated', { uri });
527
619
  });
528
- sessionSubs.add(params.uri);
620
+ sessionSubs.set(params.uri, subscriptionId);
529
621
  return {
530
622
  jsonrpc: '2.0',
531
623
  id: request.id,
@@ -536,16 +628,24 @@ export class MCPServer extends EventEmitter {
536
628
  return this.createErrorResponse(request.id, ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Subscription failed');
537
629
  }
538
630
  }
539
- handleResourcesUnsubscribe(request) {
631
+ handleResourcesUnsubscribe(request, connectionId) {
540
632
  const params = request.params;
541
- const sessionId = this.currentSession?.id;
633
+ const sessionId = this.getSessionForConnection(connectionId)?.id;
542
634
  if (!params?.uri) {
543
635
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Resource URI is required');
544
636
  }
545
637
  if (sessionId) {
546
638
  const sessionSubs = this.resourceSubscriptions.get(sessionId);
547
- if (sessionSubs) {
639
+ const subscriptionId = sessionSubs?.get(params.uri);
640
+ if (sessionSubs && subscriptionId) {
641
+ // Actually detach the registry callback — just forgetting the URI
642
+ // locally left the callback live, producing phantom notifications
643
+ // (issue #92).
644
+ this.resourceRegistry.unsubscribe(subscriptionId);
548
645
  sessionSubs.delete(params.uri);
646
+ if (sessionSubs.size === 0) {
647
+ this.resourceSubscriptions.delete(sessionId);
648
+ }
549
649
  }
550
650
  }
551
651
  return {
@@ -680,7 +780,7 @@ export class MCPServer extends EventEmitter {
680
780
  // ============================================================================
681
781
  // Sampling Handler (MCP 2025-11-25)
682
782
  // ============================================================================
683
- async handleSamplingCreateMessage(request) {
783
+ async handleSamplingCreateMessage(request, connectionId) {
684
784
  const params = request.params;
685
785
  if (!params?.messages || !params?.maxTokens) {
686
786
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'messages and maxTokens are required');
@@ -704,7 +804,7 @@ export class MCPServer extends EventEmitter {
704
804
  stopSequences: params.stopSequences,
705
805
  metadata: params.metadata,
706
806
  }, {
707
- sessionId: this.currentSession?.id || 'unknown',
807
+ sessionId: this.getSessionForConnection(connectionId)?.id || 'unknown',
708
808
  serverId: this.serverInfo.name,
709
809
  });
710
810
  return {
@@ -729,12 +829,17 @@ export class MCPServer extends EventEmitter {
729
829
  });
730
830
  }
731
831
  }
732
- getOrCreateSession() {
733
- if (this.currentSession) {
734
- return this.currentSession;
832
+ getOrCreateSession(connectionId) {
833
+ const existing = this.getSessionForConnection(connectionId);
834
+ if (existing) {
835
+ return existing;
735
836
  }
837
+ // A client is calling a non-initialize method on a connection that never
838
+ // sent `initialize` (or whose session already expired). Create a fresh
839
+ // session bound to this specific connection rather than reusing/
840
+ // overwriting another client's session.
736
841
  const session = this.sessionManager.createSession(this.config.transport);
737
- this.currentSession = session;
842
+ this.bindSessionToConnection(session, connectionId);
738
843
  return session;
739
844
  }
740
845
  createErrorResponse(id, code, message) {
@@ -816,9 +921,23 @@ export class MCPServer extends EventEmitter {
816
921
  this.emit('session:created', session);
817
922
  });
818
923
  this.sessionManager.on('session:closed', (data) => {
924
+ this.purgeSessionSubscriptions(data.session.id);
819
925
  this.emit('session:closed', data);
820
926
  });
821
927
  this.sessionManager.on('session:expired', (session) => {
928
+ this.purgeSessionSubscriptions(session.id);
929
+ // Drop references to the expired session — otherwise `currentSession` /
930
+ // `connectionSessions` keep pointing at a session the manager has
931
+ // already reaped, and subsequent updateActivity calls fail silently
932
+ // against the ghost (issue #93).
933
+ if (this.currentSession?.id === session.id) {
934
+ this.currentSession = undefined;
935
+ }
936
+ for (const [connectionId, s] of this.connectionSessions) {
937
+ if (s.id === session.id) {
938
+ this.connectionSessions.delete(connectionId);
939
+ }
940
+ }
822
941
  this.emit('session:expired', session);
823
942
  });
824
943
  }