@monoes/mcp 1.0.1 → 1.0.3

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 +27 -0
  40. package/dist/server.d.ts.map +1 -1
  41. package/dist/server.js +241 -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;
@@ -116,6 +141,8 @@ export declare class MCPServer extends EventEmitter implements IMCPServer {
116
141
  private getOrCreateSession;
117
142
  private createErrorResponse;
118
143
  private registerBuiltInTools;
144
+ private registerBuiltInResources;
145
+ private registerBuiltInPrompts;
119
146
  private setupEventHandlers;
120
147
  }
121
148
  export declare function createMCPServer(config: Partial<MCPServerConfig>, logger: ILogger, orchestrator?: unknown, swarmCoordinator?: unknown): MCPServer;
@@ -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,14 +175,23 @@ 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();
193
+ this.registerBuiltInResources();
194
+ this.registerBuiltInPrompts();
174
195
  this.running = true;
175
196
  this.startupDuration = performance.now() - startTime;
176
197
  this.logger.info('MCP server started', {
@@ -197,8 +218,16 @@ export class MCPServer extends EventEmitter {
197
218
  await this.transport.stop();
198
219
  this.transport = undefined;
199
220
  }
200
- this.sessionManager.clearAll();
221
+ // PKG-1: destroy() runs stopCleanupTimer + clearAll + removeAllListeners.
222
+ // clearAll() alone left the SessionManager cleanup interval (setInterval
223
+ // at session-manager.ts:303) firing forever after stop().
224
+ this.sessionManager.destroy();
201
225
  this.taskManager.destroy();
226
+ // Safety net: detach any subscription whose session already vanished
227
+ // without a session:closed event reaching the purge handler.
228
+ for (const sessionId of [...this.resourceSubscriptions.keys()]) {
229
+ this.purgeSessionSubscriptions(sessionId);
230
+ }
202
231
  this.resourceSubscriptions.clear();
203
232
  this.rateLimiter.destroy();
204
233
  if (this.connectionPool) {
@@ -206,6 +235,7 @@ export class MCPServer extends EventEmitter {
206
235
  }
207
236
  this.running = false;
208
237
  this.currentSession = undefined;
238
+ this.connectionSessions.clear();
209
239
  this.logger.info('MCP server stopped');
210
240
  this.emit('server:stopped');
211
241
  }
@@ -286,9 +316,67 @@ export class MCPServer extends EventEmitter {
286
316
  if (this.currentSession?.id === sessionId) {
287
317
  this.currentSession = undefined;
288
318
  }
319
+ for (const [connectionId, session] of this.connectionSessions) {
320
+ if (session.id === sessionId) {
321
+ this.connectionSessions.delete(connectionId);
322
+ }
323
+ }
289
324
  return result;
290
325
  }
291
- async handleRequest(request) {
326
+ /**
327
+ * Resolve the session bound to a connection without creating one.
328
+ * Multi-client transports (http, websocket) pass a `connectionId`, which is
329
+ * looked up in `connectionSessions`. Single-client transports (stdio,
330
+ * in-process) omit it, falling back to the `currentSession` singleton.
331
+ */
332
+ getSessionForConnection(connectionId) {
333
+ if (connectionId) {
334
+ return this.connectionSessions.get(connectionId);
335
+ }
336
+ return this.currentSession;
337
+ }
338
+ /**
339
+ * Bind a newly-created session to a connection: per-connectionId when the
340
+ * transport supports multiple clients, otherwise the singleton fallback.
341
+ */
342
+ bindSessionToConnection(session, connectionId) {
343
+ if (connectionId) {
344
+ this.connectionSessions.set(connectionId, session);
345
+ }
346
+ else {
347
+ this.currentSession = session;
348
+ }
349
+ }
350
+ /**
351
+ * Tear down the session owned by a connection when the transport reports
352
+ * that connection has closed — prevents closed clients' sessions (and any
353
+ * resource subscriptions) from lingering until the idle-timeout sweep.
354
+ */
355
+ closeConnectionSession(connectionId) {
356
+ const session = this.connectionSessions.get(connectionId);
357
+ this.connectionSessions.delete(connectionId);
358
+ if (session) {
359
+ // closeSession emits 'session:closed', which purges the session's
360
+ // resource subscriptions (see setupEventHandlers).
361
+ this.sessionManager.closeSession(session.id, 'Connection closed');
362
+ }
363
+ }
364
+ /**
365
+ * Detach every registry subscription owned by a session. Called whenever a
366
+ * session ends (terminated, connection closed, expired, server stopped) so
367
+ * no update callback outlives its session (issue #92).
368
+ */
369
+ purgeSessionSubscriptions(sessionId) {
370
+ const sessionSubs = this.resourceSubscriptions.get(sessionId);
371
+ if (!sessionSubs) {
372
+ return;
373
+ }
374
+ for (const subscriptionId of sessionSubs.values()) {
375
+ this.resourceRegistry.unsubscribe(subscriptionId);
376
+ }
377
+ this.resourceSubscriptions.delete(sessionId);
378
+ }
379
+ async handleRequest(request, connectionId) {
292
380
  const startTime = performance.now();
293
381
  this.requestStats.total++;
294
382
  this.logger.debug('Handling request', {
@@ -297,7 +385,7 @@ export class MCPServer extends EventEmitter {
297
385
  });
298
386
  // Rate limiting check (skip for initialize)
299
387
  if (request.method !== 'initialize') {
300
- const sessionId = this.currentSession?.id;
388
+ const sessionId = this.getSessionForConnection(connectionId)?.id;
301
389
  const rateLimitResult = this.rateLimiter.check(sessionId);
302
390
  if (!rateLimitResult.allowed) {
303
391
  this.requestStats.failed++;
@@ -315,14 +403,14 @@ export class MCPServer extends EventEmitter {
315
403
  }
316
404
  try {
317
405
  if (request.method === 'initialize') {
318
- return await this.handleInitialize(request);
406
+ return await this.handleInitialize(request, connectionId);
319
407
  }
320
- const session = this.getOrCreateSession();
408
+ const session = this.getOrCreateSession(connectionId);
321
409
  if (!session.isInitialized && request.method !== 'initialized') {
322
410
  return this.createErrorResponse(request.id, ErrorCodes.SERVER_NOT_INITIALIZED, 'Server not initialized');
323
411
  }
324
412
  this.sessionManager.updateActivity(session.id);
325
- const response = await this.routeRequest(request);
413
+ const response = await this.routeRequest(request, connectionId);
326
414
  const duration = performance.now() - startTime;
327
415
  this.requestStats.successful++;
328
416
  this.requestStats.totalResponseTime += duration;
@@ -345,7 +433,7 @@ export class MCPServer extends EventEmitter {
345
433
  return this.createErrorResponse(request.id, ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Internal error');
346
434
  }
347
435
  }
348
- async handleNotification(notification) {
436
+ async handleNotification(notification, connectionId) {
349
437
  this.logger.debug('Handling notification', { method: notification.method });
350
438
  switch (notification.method) {
351
439
  case 'initialized':
@@ -358,14 +446,14 @@ export class MCPServer extends EventEmitter {
358
446
  this.logger.debug('Unknown notification', { method: notification.method });
359
447
  }
360
448
  }
361
- async handleInitialize(request) {
449
+ async handleInitialize(request, connectionId) {
362
450
  const params = request.params;
363
451
  if (!params) {
364
452
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Invalid params');
365
453
  }
366
454
  const session = this.sessionManager.createSession(this.config.transport);
367
455
  this.sessionManager.initializeSession(session.id, params);
368
- this.currentSession = session;
456
+ this.bindSessionToConnection(session, connectionId);
369
457
  const result = {
370
458
  protocolVersion: this.protocolVersion,
371
459
  capabilities: this.capabilities,
@@ -382,22 +470,22 @@ export class MCPServer extends EventEmitter {
382
470
  result,
383
471
  };
384
472
  }
385
- async routeRequest(request) {
473
+ async routeRequest(request, connectionId) {
386
474
  switch (request.method) {
387
475
  // Tool methods
388
476
  case 'tools/list':
389
477
  return this.handleToolsList(request);
390
478
  case 'tools/call':
391
- return this.handleToolsCall(request);
479
+ return this.handleToolsCall(request, connectionId);
392
480
  // Resource methods (MCP 2025-11-25)
393
481
  case 'resources/list':
394
482
  return this.handleResourcesList(request);
395
483
  case 'resources/read':
396
484
  return this.handleResourcesRead(request);
397
485
  case 'resources/subscribe':
398
- return this.handleResourcesSubscribe(request);
486
+ return this.handleResourcesSubscribe(request, connectionId);
399
487
  case 'resources/unsubscribe':
400
- return this.handleResourcesUnsubscribe(request);
488
+ return this.handleResourcesUnsubscribe(request, connectionId);
401
489
  // Prompt methods (MCP 2025-11-25)
402
490
  case 'prompts/list':
403
491
  return this.handlePromptsList(request);
@@ -416,7 +504,7 @@ export class MCPServer extends EventEmitter {
416
504
  return this.handleLoggingSetLevel(request);
417
505
  // Sampling (MCP 2025-11-25)
418
506
  case 'sampling/createMessage':
419
- return this.handleSamplingCreateMessage(request);
507
+ return this.handleSamplingCreateMessage(request, connectionId);
420
508
  // Utility
421
509
  case 'ping':
422
510
  return {
@@ -427,7 +515,7 @@ export class MCPServer extends EventEmitter {
427
515
  default:
428
516
  // Check if it's a direct tool call
429
517
  if (this.toolRegistry.hasTool(request.method)) {
430
- return this.handleToolExecution(request);
518
+ return this.handleToolExecution(request, connectionId);
431
519
  }
432
520
  return this.createErrorResponse(request.id, ErrorCodes.METHOD_NOT_FOUND, `Method not found: ${request.method}`);
433
521
  }
@@ -444,13 +532,13 @@ export class MCPServer extends EventEmitter {
444
532
  result: { tools },
445
533
  };
446
534
  }
447
- async handleToolsCall(request) {
535
+ async handleToolsCall(request, connectionId) {
448
536
  const params = request.params;
449
537
  if (!params?.name) {
450
538
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Tool name is required');
451
539
  }
452
540
  const context = {
453
- sessionId: this.currentSession?.id || 'unknown',
541
+ sessionId: this.getSessionForConnection(connectionId)?.id || 'unknown',
454
542
  requestId: request.id,
455
543
  orchestrator: this.orchestrator,
456
544
  swarmCoordinator: this.swarmCoordinator,
@@ -462,9 +550,9 @@ export class MCPServer extends EventEmitter {
462
550
  result,
463
551
  };
464
552
  }
465
- async handleToolExecution(request) {
553
+ async handleToolExecution(request, connectionId) {
466
554
  const context = {
467
- sessionId: this.currentSession?.id || 'unknown',
555
+ sessionId: this.getSessionForConnection(connectionId)?.id || 'unknown',
468
556
  requestId: request.id,
469
557
  orchestrator: this.orchestrator,
470
558
  swarmCoordinator: this.swarmCoordinator,
@@ -505,9 +593,9 @@ export class MCPServer extends EventEmitter {
505
593
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, error instanceof Error ? error.message : 'Resource read failed');
506
594
  }
507
595
  }
508
- handleResourcesSubscribe(request) {
596
+ handleResourcesSubscribe(request, connectionId) {
509
597
  const params = request.params;
510
- const sessionId = this.currentSession?.id;
598
+ const sessionId = this.getSessionForConnection(connectionId)?.id;
511
599
  if (!params?.uri) {
512
600
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Resource URI is required');
513
601
  }
@@ -518,14 +606,20 @@ export class MCPServer extends EventEmitter {
518
606
  // Track subscription for this session
519
607
  let sessionSubs = this.resourceSubscriptions.get(sessionId);
520
608
  if (!sessionSubs) {
521
- sessionSubs = new Set();
609
+ sessionSubs = new Map();
522
610
  this.resourceSubscriptions.set(sessionId, sessionSubs);
523
611
  }
612
+ // Re-subscribing the same URI replaces the previous subscription —
613
+ // otherwise the old callback would keep firing with no way to reach it.
614
+ const existingId = sessionSubs.get(params.uri);
615
+ if (existingId) {
616
+ this.resourceRegistry.unsubscribe(existingId);
617
+ }
524
618
  const subscriptionId = this.resourceRegistry.subscribe(params.uri, (uri, content) => {
525
619
  // Send notification when resource updates
526
620
  this.sendNotification('notifications/resources/updated', { uri });
527
621
  });
528
- sessionSubs.add(params.uri);
622
+ sessionSubs.set(params.uri, subscriptionId);
529
623
  return {
530
624
  jsonrpc: '2.0',
531
625
  id: request.id,
@@ -536,16 +630,24 @@ export class MCPServer extends EventEmitter {
536
630
  return this.createErrorResponse(request.id, ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Subscription failed');
537
631
  }
538
632
  }
539
- handleResourcesUnsubscribe(request) {
633
+ handleResourcesUnsubscribe(request, connectionId) {
540
634
  const params = request.params;
541
- const sessionId = this.currentSession?.id;
635
+ const sessionId = this.getSessionForConnection(connectionId)?.id;
542
636
  if (!params?.uri) {
543
637
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Resource URI is required');
544
638
  }
545
639
  if (sessionId) {
546
640
  const sessionSubs = this.resourceSubscriptions.get(sessionId);
547
- if (sessionSubs) {
641
+ const subscriptionId = sessionSubs?.get(params.uri);
642
+ if (sessionSubs && subscriptionId) {
643
+ // Actually detach the registry callback — just forgetting the URI
644
+ // locally left the callback live, producing phantom notifications
645
+ // (issue #92).
646
+ this.resourceRegistry.unsubscribe(subscriptionId);
548
647
  sessionSubs.delete(params.uri);
648
+ if (sessionSubs.size === 0) {
649
+ this.resourceSubscriptions.delete(sessionId);
650
+ }
549
651
  }
550
652
  }
551
653
  return {
@@ -680,7 +782,7 @@ export class MCPServer extends EventEmitter {
680
782
  // ============================================================================
681
783
  // Sampling Handler (MCP 2025-11-25)
682
784
  // ============================================================================
683
- async handleSamplingCreateMessage(request) {
785
+ async handleSamplingCreateMessage(request, connectionId) {
684
786
  const params = request.params;
685
787
  if (!params?.messages || !params?.maxTokens) {
686
788
  return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'messages and maxTokens are required');
@@ -704,7 +806,7 @@ export class MCPServer extends EventEmitter {
704
806
  stopSequences: params.stopSequences,
705
807
  metadata: params.metadata,
706
808
  }, {
707
- sessionId: this.currentSession?.id || 'unknown',
809
+ sessionId: this.getSessionForConnection(connectionId)?.id || 'unknown',
708
810
  serverId: this.serverInfo.name,
709
811
  });
710
812
  return {
@@ -729,12 +831,17 @@ export class MCPServer extends EventEmitter {
729
831
  });
730
832
  }
731
833
  }
732
- getOrCreateSession() {
733
- if (this.currentSession) {
734
- return this.currentSession;
834
+ getOrCreateSession(connectionId) {
835
+ const existing = this.getSessionForConnection(connectionId);
836
+ if (existing) {
837
+ return existing;
735
838
  }
839
+ // A client is calling a non-initialize method on a connection that never
840
+ // sent `initialize` (or whose session already expired). Create a fresh
841
+ // session bound to this specific connection rather than reusing/
842
+ // overwriting another client's session.
736
843
  const session = this.sessionManager.createSession(this.config.transport);
737
- this.currentSession = session;
844
+ this.bindSessionToConnection(session, connectionId);
738
845
  return session;
739
846
  }
740
847
  createErrorResponse(id, code, message) {
@@ -799,6 +906,88 @@ export class MCPServer extends EventEmitter {
799
906
  count: 4,
800
907
  });
801
908
  }
909
+ // P2-1: Populate the Resources registry with system-level resources.
910
+ // The registry scaffolding always shipped empty — these adapter registrations
911
+ // surface monomind's state to MCP clients as app-driven context.
912
+ registerBuiltInResources() {
913
+ this.resourceRegistry.registerResource({
914
+ uri: 'monomind://system/status',
915
+ name: 'System Status',
916
+ description: 'Current monomind MCP server health, uptime, and tool count',
917
+ mimeType: 'application/json',
918
+ }, async (uri) => [{
919
+ uri,
920
+ mimeType: 'application/json',
921
+ text: JSON.stringify({
922
+ status: 'running',
923
+ uptime: this.startTime ? Date.now() - this.startTime.getTime() : 0,
924
+ tools: this.toolRegistry.listTools().length,
925
+ version: this.serverInfo.version,
926
+ }, null, 2),
927
+ }]);
928
+ this.resourceRegistry.registerResource({
929
+ uri: 'monomind://system/metrics',
930
+ name: 'Server Metrics',
931
+ description: 'Request count, cache hit rate, error rate',
932
+ mimeType: 'application/json',
933
+ }, async (uri) => [{
934
+ uri,
935
+ mimeType: 'application/json',
936
+ text: JSON.stringify(this.getMetrics(), null, 2),
937
+ }]);
938
+ this.resourceRegistry.registerResource({
939
+ uri: 'monomind://system/tools',
940
+ name: 'Tool Inventory',
941
+ description: 'Complete list of registered MCP tools with categories',
942
+ mimeType: 'application/json',
943
+ }, async (uri) => [{
944
+ uri,
945
+ mimeType: 'application/json',
946
+ text: JSON.stringify(this.toolRegistry.listTools(), null, 2),
947
+ }]);
948
+ this.logger.info('Built-in resources registered', { count: 3 });
949
+ }
950
+ // P2-2: Populate the Prompts registry with curated workflow templates.
951
+ // These give MCP clients pre-built prompt structures for common dev tasks.
952
+ registerBuiltInPrompts() {
953
+ this.promptRegistry.register({
954
+ name: 'monomind:research-plan',
955
+ description: 'Generate a structured research plan for a topic',
956
+ arguments: [{ name: 'topic', description: 'The research topic', required: true }],
957
+ handler: async (args) => [{
958
+ role: 'user',
959
+ content: {
960
+ type: 'text',
961
+ text: `Research plan for: ${args.topic ?? '(unspecified)'}\n\n1. Define scope and key questions\n2. Identify sources and prior work\n3. Outline methodology\n4. Execute research (parallel agents if appropriate)\n5. Synthesize findings\n6. Review and refine`,
962
+ },
963
+ }],
964
+ });
965
+ this.promptRegistry.register({
966
+ name: 'monomind:pr-review',
967
+ description: 'Structured pull-request review checklist',
968
+ arguments: [{ name: 'changes', description: 'Description of the changes', required: true }],
969
+ handler: async (args) => [{
970
+ role: 'user',
971
+ content: {
972
+ type: 'text',
973
+ text: `PR Review checklist for: ${args.changes ?? '(unspecified)'}\n\n- [ ] Correctness: does the code do what it claims?\n- [ ] Tests: are there tests covering the changes?\n- [ ] Security: any input validation gaps?\n- [ ] Performance: any O(n²) or unnecessary allocations?\n- [ ] Docs: are relevant docs updated?\n- [ ] Breaking changes: any removed APIs or changed behavior?\n- [ ] Honesty: any fabricated metrics or misleading output?`,
974
+ },
975
+ }],
976
+ });
977
+ this.promptRegistry.register({
978
+ name: 'monomind:debug-protocol',
979
+ description: 'Systematic root-cause debugging protocol (4-phase)',
980
+ arguments: [{ name: 'symptom', description: 'Description of the bug or unexpected behavior', required: true }],
981
+ handler: async (args) => [{
982
+ role: 'user',
983
+ content: {
984
+ type: 'text',
985
+ text: `Debug protocol for: ${args.symptom ?? '(unspecified)'}\n\nPhase 1 — REPRODUCE: Write a test that triggers the bug. Verify it fails.\nPhase 2 — ISOLATE: Binary-search the cause. What's the smallest change that triggers it?\nPhase 3 — FIX: Make the test pass with the minimal code change.\nPhase 4 — VERIFY: Run the full test suite. Confirm no regressions.`,
986
+ },
987
+ }],
988
+ });
989
+ this.logger.info('Built-in prompts registered', { count: 3 });
990
+ }
802
991
  setupEventHandlers() {
803
992
  this.toolRegistry.on('tool:registered', (name) => {
804
993
  this.emit('tool:registered', name);
@@ -816,9 +1005,23 @@ export class MCPServer extends EventEmitter {
816
1005
  this.emit('session:created', session);
817
1006
  });
818
1007
  this.sessionManager.on('session:closed', (data) => {
1008
+ this.purgeSessionSubscriptions(data.session.id);
819
1009
  this.emit('session:closed', data);
820
1010
  });
821
1011
  this.sessionManager.on('session:expired', (session) => {
1012
+ this.purgeSessionSubscriptions(session.id);
1013
+ // Drop references to the expired session — otherwise `currentSession` /
1014
+ // `connectionSessions` keep pointing at a session the manager has
1015
+ // already reaped, and subsequent updateActivity calls fail silently
1016
+ // against the ghost (issue #93).
1017
+ if (this.currentSession?.id === session.id) {
1018
+ this.currentSession = undefined;
1019
+ }
1020
+ for (const [connectionId, s] of this.connectionSessions) {
1021
+ if (s.id === session.id) {
1022
+ this.connectionSessions.delete(connectionId);
1023
+ }
1024
+ }
822
1025
  this.emit('session:expired', session);
823
1026
  });
824
1027
  }