@modelcontextprotocol/sdk 1.9.0 → 1.10.1

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 (144) hide show
  1. package/README.md +321 -28
  2. package/dist/cjs/client/index.d.ts.map +1 -1
  3. package/dist/cjs/client/index.js +5 -0
  4. package/dist/cjs/client/index.js.map +1 -1
  5. package/dist/cjs/client/streamableHttp.d.ts +124 -0
  6. package/dist/cjs/client/streamableHttp.d.ts.map +1 -0
  7. package/dist/cjs/client/streamableHttp.js +353 -0
  8. package/dist/cjs/client/streamableHttp.js.map +1 -0
  9. package/dist/cjs/examples/client/simpleStreamableHttp.d.ts +2 -0
  10. package/dist/cjs/examples/client/simpleStreamableHttp.d.ts.map +1 -0
  11. package/dist/cjs/examples/client/simpleStreamableHttp.js +448 -0
  12. package/dist/cjs/examples/client/simpleStreamableHttp.js.map +1 -0
  13. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.d.ts +2 -0
  14. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.d.ts.map +1 -0
  15. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.js +168 -0
  16. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.js.map +1 -0
  17. package/dist/cjs/examples/server/jsonResponseStreamableHttp.d.ts +2 -0
  18. package/dist/cjs/examples/server/jsonResponseStreamableHttp.d.ts.map +1 -0
  19. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js +139 -0
  20. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js.map +1 -0
  21. package/dist/cjs/examples/server/simpleSseServer.d.ts +2 -0
  22. package/dist/cjs/examples/server/simpleSseServer.d.ts.map +1 -0
  23. package/dist/cjs/examples/server/simpleSseServer.js +148 -0
  24. package/dist/cjs/examples/server/simpleSseServer.js.map +1 -0
  25. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.d.ts +2 -0
  26. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.d.ts.map +1 -0
  27. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js +149 -0
  28. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js.map +1 -0
  29. package/dist/cjs/examples/server/simpleStreamableHttp.d.ts +2 -0
  30. package/dist/cjs/examples/server/simpleStreamableHttp.d.ts.map +1 -0
  31. package/dist/cjs/examples/server/simpleStreamableHttp.js +250 -0
  32. package/dist/cjs/examples/server/simpleStreamableHttp.js.map +1 -0
  33. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.d.ts +2 -0
  34. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.d.ts.map +1 -0
  35. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js +229 -0
  36. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -0
  37. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.d.ts +2 -0
  38. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.d.ts.map +1 -0
  39. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js +112 -0
  40. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -0
  41. package/dist/cjs/examples/shared/inMemoryEventStore.d.ts +31 -0
  42. package/dist/cjs/examples/shared/inMemoryEventStore.d.ts.map +1 -0
  43. package/dist/cjs/examples/shared/inMemoryEventStore.js +69 -0
  44. package/dist/cjs/examples/shared/inMemoryEventStore.js.map +1 -0
  45. package/dist/cjs/inMemory.d.ts +13 -3
  46. package/dist/cjs/inMemory.d.ts.map +1 -1
  47. package/dist/cjs/inMemory.js +9 -7
  48. package/dist/cjs/inMemory.js.map +1 -1
  49. package/dist/cjs/server/auth/types.d.ts +5 -0
  50. package/dist/cjs/server/auth/types.d.ts.map +1 -1
  51. package/dist/cjs/server/mcp.d.ts +100 -19
  52. package/dist/cjs/server/mcp.d.ts.map +1 -1
  53. package/dist/cjs/server/mcp.js +154 -12
  54. package/dist/cjs/server/mcp.js.map +1 -1
  55. package/dist/cjs/server/sse.d.ts +10 -3
  56. package/dist/cjs/server/sse.d.ts.map +1 -1
  57. package/dist/cjs/server/sse.js +13 -4
  58. package/dist/cjs/server/sse.js.map +1 -1
  59. package/dist/cjs/server/streamableHttp.d.ts +146 -0
  60. package/dist/cjs/server/streamableHttp.d.ts.map +1 -0
  61. package/dist/cjs/server/streamableHttp.js +538 -0
  62. package/dist/cjs/server/streamableHttp.js.map +1 -0
  63. package/dist/cjs/shared/protocol.d.ts +31 -5
  64. package/dist/cjs/shared/protocol.d.ts.map +1 -1
  65. package/dist/cjs/shared/protocol.js +23 -15
  66. package/dist/cjs/shared/protocol.js.map +1 -1
  67. package/dist/cjs/shared/transport.d.ts +32 -3
  68. package/dist/cjs/shared/transport.d.ts.map +1 -1
  69. package/dist/cjs/types.d.ts +6 -0
  70. package/dist/cjs/types.d.ts.map +1 -1
  71. package/dist/cjs/types.js +14 -2
  72. package/dist/cjs/types.js.map +1 -1
  73. package/dist/esm/client/index.d.ts.map +1 -1
  74. package/dist/esm/client/index.js +5 -0
  75. package/dist/esm/client/index.js.map +1 -1
  76. package/dist/esm/client/streamableHttp.d.ts +124 -0
  77. package/dist/esm/client/streamableHttp.d.ts.map +1 -0
  78. package/dist/esm/client/streamableHttp.js +348 -0
  79. package/dist/esm/client/streamableHttp.js.map +1 -0
  80. package/dist/esm/examples/client/simpleStreamableHttp.d.ts +2 -0
  81. package/dist/esm/examples/client/simpleStreamableHttp.d.ts.map +1 -0
  82. package/dist/esm/examples/client/simpleStreamableHttp.js +446 -0
  83. package/dist/esm/examples/client/simpleStreamableHttp.js.map +1 -0
  84. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.d.ts +2 -0
  85. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.d.ts.map +1 -0
  86. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.js +166 -0
  87. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.js.map +1 -0
  88. package/dist/esm/examples/server/jsonResponseStreamableHttp.d.ts +2 -0
  89. package/dist/esm/examples/server/jsonResponseStreamableHttp.d.ts.map +1 -0
  90. package/dist/esm/examples/server/jsonResponseStreamableHttp.js +134 -0
  91. package/dist/esm/examples/server/jsonResponseStreamableHttp.js.map +1 -0
  92. package/dist/esm/examples/server/simpleSseServer.d.ts +2 -0
  93. package/dist/esm/examples/server/simpleSseServer.d.ts.map +1 -0
  94. package/dist/esm/examples/server/simpleSseServer.js +143 -0
  95. package/dist/esm/examples/server/simpleSseServer.js.map +1 -0
  96. package/dist/esm/examples/server/simpleStatelessStreamableHttp.d.ts +2 -0
  97. package/dist/esm/examples/server/simpleStatelessStreamableHttp.d.ts.map +1 -0
  98. package/dist/esm/examples/server/simpleStatelessStreamableHttp.js +144 -0
  99. package/dist/esm/examples/server/simpleStatelessStreamableHttp.js.map +1 -0
  100. package/dist/esm/examples/server/simpleStreamableHttp.d.ts +2 -0
  101. package/dist/esm/examples/server/simpleStreamableHttp.d.ts.map +1 -0
  102. package/dist/esm/examples/server/simpleStreamableHttp.js +245 -0
  103. package/dist/esm/examples/server/simpleStreamableHttp.js.map +1 -0
  104. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.d.ts +2 -0
  105. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.d.ts.map +1 -0
  106. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js +224 -0
  107. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -0
  108. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.d.ts +2 -0
  109. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.d.ts.map +1 -0
  110. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js +107 -0
  111. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -0
  112. package/dist/esm/examples/shared/inMemoryEventStore.d.ts +31 -0
  113. package/dist/esm/examples/shared/inMemoryEventStore.d.ts.map +1 -0
  114. package/dist/esm/examples/shared/inMemoryEventStore.js +65 -0
  115. package/dist/esm/examples/shared/inMemoryEventStore.js.map +1 -0
  116. package/dist/esm/inMemory.d.ts +13 -3
  117. package/dist/esm/inMemory.d.ts.map +1 -1
  118. package/dist/esm/inMemory.js +9 -7
  119. package/dist/esm/inMemory.js.map +1 -1
  120. package/dist/esm/server/auth/types.d.ts +5 -0
  121. package/dist/esm/server/auth/types.d.ts.map +1 -1
  122. package/dist/esm/server/mcp.d.ts +100 -19
  123. package/dist/esm/server/mcp.d.ts.map +1 -1
  124. package/dist/esm/server/mcp.js +154 -12
  125. package/dist/esm/server/mcp.js.map +1 -1
  126. package/dist/esm/server/sse.d.ts +10 -3
  127. package/dist/esm/server/sse.d.ts.map +1 -1
  128. package/dist/esm/server/sse.js +13 -4
  129. package/dist/esm/server/sse.js.map +1 -1
  130. package/dist/esm/server/streamableHttp.d.ts +146 -0
  131. package/dist/esm/server/streamableHttp.d.ts.map +1 -0
  132. package/dist/esm/server/streamableHttp.js +531 -0
  133. package/dist/esm/server/streamableHttp.js.map +1 -0
  134. package/dist/esm/shared/protocol.d.ts +31 -5
  135. package/dist/esm/shared/protocol.d.ts.map +1 -1
  136. package/dist/esm/shared/protocol.js +24 -16
  137. package/dist/esm/shared/protocol.js.map +1 -1
  138. package/dist/esm/shared/transport.d.ts +32 -3
  139. package/dist/esm/shared/transport.d.ts.map +1 -1
  140. package/dist/esm/types.d.ts +6 -0
  141. package/dist/esm/types.d.ts.map +1 -1
  142. package/dist/esm/types.js +6 -0
  143. package/dist/esm/types.js.map +1 -1
  144. package/package.json +1 -1
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Simple in-memory implementation of the EventStore interface for resumability
3
+ * This is primarily intended for examples and testing, not for production use
4
+ * where a persistent storage solution would be more appropriate.
5
+ */
6
+ export class InMemoryEventStore {
7
+ constructor() {
8
+ this.events = new Map();
9
+ }
10
+ /**
11
+ * Generates a unique event ID for a given stream ID
12
+ */
13
+ generateEventId(streamId) {
14
+ return `${streamId}_${Date.now()}_${Math.random().toString(36).substring(2, 10)}`;
15
+ }
16
+ /**
17
+ * Extracts the stream ID from an event ID
18
+ */
19
+ getStreamIdFromEventId(eventId) {
20
+ const parts = eventId.split('_');
21
+ return parts.length > 0 ? parts[0] : '';
22
+ }
23
+ /**
24
+ * Stores an event with a generated event ID
25
+ * Implements EventStore.storeEvent
26
+ */
27
+ async storeEvent(streamId, message) {
28
+ const eventId = this.generateEventId(streamId);
29
+ this.events.set(eventId, { streamId, message });
30
+ return eventId;
31
+ }
32
+ /**
33
+ * Replays events that occurred after a specific event ID
34
+ * Implements EventStore.replayEventsAfter
35
+ */
36
+ async replayEventsAfter(lastEventId, { send }) {
37
+ if (!lastEventId || !this.events.has(lastEventId)) {
38
+ return '';
39
+ }
40
+ // Extract the stream ID from the event ID
41
+ const streamId = this.getStreamIdFromEventId(lastEventId);
42
+ if (!streamId) {
43
+ return '';
44
+ }
45
+ let foundLastEvent = false;
46
+ // Sort events by eventId for chronological ordering
47
+ const sortedEvents = [...this.events.entries()].sort((a, b) => a[0].localeCompare(b[0]));
48
+ for (const [eventId, { streamId: eventStreamId, message }] of sortedEvents) {
49
+ // Only include events from the same stream
50
+ if (eventStreamId !== streamId) {
51
+ continue;
52
+ }
53
+ // Start sending events after we find the lastEventId
54
+ if (eventId === lastEventId) {
55
+ foundLastEvent = true;
56
+ continue;
57
+ }
58
+ if (foundLastEvent) {
59
+ await send(eventId, message);
60
+ }
61
+ }
62
+ return streamId;
63
+ }
64
+ }
65
+ //# sourceMappingURL=inMemoryEventStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inMemoryEventStore.js","sourceRoot":"","sources":["../../../../src/examples/shared/inMemoryEventStore.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAA/B;QACU,WAAM,GAA+D,IAAI,GAAG,EAAE,CAAC;IAmEzF,CAAC;IAjEC;;OAEG;IACK,eAAe,CAAC,QAAgB;QACtC,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACpF,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,OAAe;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,OAAuB;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EACzC,EAAE,IAAI,EAAyE;QAE/E,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,oDAAoD;QACpD,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzF,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;YAC3E,2CAA2C;YAC3C,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;gBAC/B,SAAS;YACX,CAAC;YAED,qDAAqD;YACrD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,cAAc,GAAG,IAAI,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -1,5 +1,6 @@
1
1
  import { Transport } from "./shared/transport.js";
2
- import { JSONRPCMessage } from "./types.js";
2
+ import { JSONRPCMessage, RequestId } from "./types.js";
3
+ import { AuthInfo } from "./server/auth/types.js";
3
4
  /**
4
5
  * In-memory transport for creating clients and servers that talk to each other within the same process.
5
6
  */
@@ -8,7 +9,9 @@ export declare class InMemoryTransport implements Transport {
8
9
  private _messageQueue;
9
10
  onclose?: () => void;
10
11
  onerror?: (error: Error) => void;
11
- onmessage?: (message: JSONRPCMessage) => void;
12
+ onmessage?: (message: JSONRPCMessage, extra?: {
13
+ authInfo?: AuthInfo;
14
+ }) => void;
12
15
  sessionId?: string;
13
16
  /**
14
17
  * Creates a pair of linked in-memory transports that can communicate with each other. One should be passed to a Client and one to a Server.
@@ -16,6 +19,13 @@ export declare class InMemoryTransport implements Transport {
16
19
  static createLinkedPair(): [InMemoryTransport, InMemoryTransport];
17
20
  start(): Promise<void>;
18
21
  close(): Promise<void>;
19
- send(message: JSONRPCMessage): Promise<void>;
22
+ /**
23
+ * Sends a message with optional auth info.
24
+ * This is useful for testing authentication scenarios.
25
+ */
26
+ send(message: JSONRPCMessage, options?: {
27
+ relatedRequestId?: RequestId;
28
+ authInfo?: AuthInfo;
29
+ }): Promise<void>;
20
30
  }
21
31
  //# sourceMappingURL=inMemory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inMemory.d.ts","sourceRoot":"","sources":["../../src/inMemory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,eAAe,CAAC,CAAoB;IAC5C,OAAO,CAAC,aAAa,CAAwB;IAE7C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAQ3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAWnD"}
1
+ {"version":3,"file":"inMemory.d.ts","sourceRoot":"","sources":["../../src/inMemory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAOlD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,eAAe,CAAC,CAAoB;IAC5C,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAQ3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAWpH"}
@@ -19,10 +19,8 @@ export class InMemoryTransport {
19
19
  var _a;
20
20
  // Process any messages that were queued before start was called
21
21
  while (this._messageQueue.length > 0) {
22
- const message = this._messageQueue.shift();
23
- if (message) {
24
- (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, message);
25
- }
22
+ const queuedMessage = this._messageQueue.shift();
23
+ (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, queuedMessage.message, queuedMessage.extra);
26
24
  }
27
25
  }
28
26
  async close() {
@@ -32,15 +30,19 @@ export class InMemoryTransport {
32
30
  await (other === null || other === void 0 ? void 0 : other.close());
33
31
  (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
34
32
  }
35
- async send(message) {
33
+ /**
34
+ * Sends a message with optional auth info.
35
+ * This is useful for testing authentication scenarios.
36
+ */
37
+ async send(message, options) {
36
38
  if (!this._otherTransport) {
37
39
  throw new Error("Not connected");
38
40
  }
39
41
  if (this._otherTransport.onmessage) {
40
- this._otherTransport.onmessage(message);
42
+ this._otherTransport.onmessage(message, { authInfo: options === null || options === void 0 ? void 0 : options.authInfo });
41
43
  }
42
44
  else {
43
- this._otherTransport._messageQueue.push(message);
45
+ this._otherTransport._messageQueue.push({ message, extra: { authInfo: options === null || options === void 0 ? void 0 : options.authInfo } });
44
46
  }
45
47
  }
46
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inMemory.js","sourceRoot":"","sources":["../../src/inMemory.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAA9B;QAEU,kBAAa,GAAqB,EAAE,CAAC;IA8C/C,CAAC;IAvCC;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAChD,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,gEAAgE;QAChE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAA,IAAI,CAAC,SAAS,qDAAG,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,MAAM,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,CAAA,CAAC;QACrB,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAuB;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"inMemory.js","sourceRoot":"","sources":["../../src/inMemory.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAA9B;QAEU,kBAAa,GAAoB,EAAE,CAAC;IAgD9C,CAAC;IAzCC;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAChD,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,gEAAgE;QAChE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAG,CAAC;YAClD,MAAA,IAAI,CAAC,SAAS,qDAAG,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,MAAM,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,CAAA,CAAC;QACrB,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,OAAuB,EAAE,OAA+D;QACjG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;CACF"}
@@ -18,5 +18,10 @@ export interface AuthInfo {
18
18
  * When the token expires (in seconds since epoch).
19
19
  */
20
20
  expiresAt?: number;
21
+ /**
22
+ * Additional data associated with the token.
23
+ * This field should be used for any additional data that needs to be attached to the auth info.
24
+ */
25
+ extra?: Record<string, unknown>;
21
26
  }
22
27
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/server/auth/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/server/auth/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;MAGE;IACF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC"}
@@ -1,6 +1,6 @@
1
1
  import { Server, ServerOptions } from "./index.js";
2
- import { z, ZodRawShape, ZodTypeAny, ZodType, ZodTypeDef, ZodOptional } from "zod";
3
- import { Implementation, CallToolResult, Resource, ListResourcesResult, GetPromptResult, ReadResourceResult } from "../types.js";
2
+ import { z, ZodRawShape, ZodObject, AnyZodObject, ZodTypeAny, ZodType, ZodTypeDef, ZodOptional } from "zod";
3
+ import { Implementation, CallToolResult, Resource, ListResourcesResult, GetPromptResult, ReadResourceResult, ServerRequest, ServerNotification } from "../types.js";
4
4
  import { UriTemplate, Variables } from "../shared/uriTemplate.js";
5
5
  import { RequestHandlerExtra } from "../shared/protocol.js";
6
6
  import { Transport } from "../shared/transport.js";
@@ -42,51 +42,68 @@ export declare class McpServer {
42
42
  /**
43
43
  * Registers a resource `name` at a fixed URI, which will use the given callback to respond to read requests.
44
44
  */
45
- resource(name: string, uri: string, readCallback: ReadResourceCallback): void;
45
+ resource(name: string, uri: string, readCallback: ReadResourceCallback): RegisteredResource;
46
46
  /**
47
47
  * Registers a resource `name` at a fixed URI with metadata, which will use the given callback to respond to read requests.
48
48
  */
49
- resource(name: string, uri: string, metadata: ResourceMetadata, readCallback: ReadResourceCallback): void;
49
+ resource(name: string, uri: string, metadata: ResourceMetadata, readCallback: ReadResourceCallback): RegisteredResource;
50
50
  /**
51
51
  * Registers a resource `name` with a template pattern, which will use the given callback to respond to read requests.
52
52
  */
53
- resource(name: string, template: ResourceTemplate, readCallback: ReadResourceTemplateCallback): void;
53
+ resource(name: string, template: ResourceTemplate, readCallback: ReadResourceTemplateCallback): RegisteredResourceTemplate;
54
54
  /**
55
55
  * Registers a resource `name` with a template pattern and metadata, which will use the given callback to respond to read requests.
56
56
  */
57
- resource(name: string, template: ResourceTemplate, metadata: ResourceMetadata, readCallback: ReadResourceTemplateCallback): void;
57
+ resource(name: string, template: ResourceTemplate, metadata: ResourceMetadata, readCallback: ReadResourceTemplateCallback): RegisteredResourceTemplate;
58
58
  /**
59
59
  * Registers a zero-argument tool `name`, which will run the given function when the client calls it.
60
60
  */
61
- tool(name: string, cb: ToolCallback): void;
61
+ tool(name: string, cb: ToolCallback): RegisteredTool;
62
62
  /**
63
63
  * Registers a zero-argument tool `name` (with a description) which will run the given function when the client calls it.
64
64
  */
65
- tool(name: string, description: string, cb: ToolCallback): void;
65
+ tool(name: string, description: string, cb: ToolCallback): RegisteredTool;
66
66
  /**
67
67
  * Registers a tool `name` accepting the given arguments, which must be an object containing named properties associated with Zod schemas. When the client calls it, the function will be run with the parsed and validated arguments.
68
68
  */
69
- tool<Args extends ZodRawShape>(name: string, paramsSchema: Args, cb: ToolCallback<Args>): void;
69
+ tool<Args extends ZodRawShape>(name: string, paramsSchema: Args, cb: ToolCallback<Args>): RegisteredTool;
70
70
  /**
71
71
  * Registers a tool `name` (with a description) accepting the given arguments, which must be an object containing named properties associated with Zod schemas. When the client calls it, the function will be run with the parsed and validated arguments.
72
72
  */
73
- tool<Args extends ZodRawShape>(name: string, description: string, paramsSchema: Args, cb: ToolCallback<Args>): void;
73
+ tool<Args extends ZodRawShape>(name: string, description: string, paramsSchema: Args, cb: ToolCallback<Args>): RegisteredTool;
74
74
  /**
75
75
  * Registers a zero-argument prompt `name`, which will run the given function when the client calls it.
76
76
  */
77
- prompt(name: string, cb: PromptCallback): void;
77
+ prompt(name: string, cb: PromptCallback): RegisteredPrompt;
78
78
  /**
79
79
  * Registers a zero-argument prompt `name` (with a description) which will run the given function when the client calls it.
80
80
  */
81
- prompt(name: string, description: string, cb: PromptCallback): void;
81
+ prompt(name: string, description: string, cb: PromptCallback): RegisteredPrompt;
82
82
  /**
83
83
  * Registers a prompt `name` accepting the given arguments, which must be an object containing named properties associated with Zod schemas. When the client calls it, the function will be run with the parsed and validated arguments.
84
84
  */
85
- prompt<Args extends PromptArgsRawShape>(name: string, argsSchema: Args, cb: PromptCallback<Args>): void;
85
+ prompt<Args extends PromptArgsRawShape>(name: string, argsSchema: Args, cb: PromptCallback<Args>): RegisteredPrompt;
86
86
  /**
87
87
  * Registers a prompt `name` (with a description) accepting the given arguments, which must be an object containing named properties associated with Zod schemas. When the client calls it, the function will be run with the parsed and validated arguments.
88
88
  */
89
- prompt<Args extends PromptArgsRawShape>(name: string, description: string, argsSchema: Args, cb: PromptCallback<Args>): void;
89
+ prompt<Args extends PromptArgsRawShape>(name: string, description: string, argsSchema: Args, cb: PromptCallback<Args>): RegisteredPrompt;
90
+ /**
91
+ * Checks if the server is connected to a transport.
92
+ * @returns True if the server is connected
93
+ */
94
+ isConnected(): boolean;
95
+ /**
96
+ * Sends a resource list changed event to the client, if connected.
97
+ */
98
+ sendResourceListChanged(): void;
99
+ /**
100
+ * Sends a tool list changed event to the client, if connected.
101
+ */
102
+ sendToolListChanged(): void;
103
+ /**
104
+ * Sends a prompt list changed event to the client, if connected.
105
+ */
106
+ sendPromptListChanged(): void;
90
107
  }
91
108
  /**
92
109
  * A callback to complete one variable within a resource template's URI template.
@@ -129,7 +146,23 @@ export declare class ResourceTemplate {
129
146
  *
130
147
  * Parameters will include tool arguments, if applicable, as well as other request handler context.
131
148
  */
132
- export type ToolCallback<Args extends undefined | ZodRawShape = undefined> = Args extends ZodRawShape ? (args: z.objectOutputType<Args, ZodTypeAny>, extra: RequestHandlerExtra) => CallToolResult | Promise<CallToolResult> : (extra: RequestHandlerExtra) => CallToolResult | Promise<CallToolResult>;
149
+ export type ToolCallback<Args extends undefined | ZodRawShape = undefined> = Args extends ZodRawShape ? (args: z.objectOutputType<Args, ZodTypeAny>, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => CallToolResult | Promise<CallToolResult> : (extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => CallToolResult | Promise<CallToolResult>;
150
+ export type RegisteredTool = {
151
+ description?: string;
152
+ inputSchema?: AnyZodObject;
153
+ callback: ToolCallback<undefined | ZodRawShape>;
154
+ enabled: boolean;
155
+ enable(): void;
156
+ disable(): void;
157
+ update<Args extends ZodRawShape>(updates: {
158
+ name?: string | null;
159
+ description?: string;
160
+ paramsSchema?: Args;
161
+ callback?: ToolCallback<Args>;
162
+ enabled?: boolean;
163
+ }): void;
164
+ remove(): void;
165
+ };
133
166
  /**
134
167
  * Additional, optional information for annotating a resource.
135
168
  */
@@ -137,18 +170,66 @@ export type ResourceMetadata = Omit<Resource, "uri" | "name">;
137
170
  /**
138
171
  * Callback to list all resources matching a given template.
139
172
  */
140
- export type ListResourcesCallback = (extra: RequestHandlerExtra) => ListResourcesResult | Promise<ListResourcesResult>;
173
+ export type ListResourcesCallback = (extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => ListResourcesResult | Promise<ListResourcesResult>;
141
174
  /**
142
175
  * Callback to read a resource at a given URI.
143
176
  */
144
- export type ReadResourceCallback = (uri: URL, extra: RequestHandlerExtra) => ReadResourceResult | Promise<ReadResourceResult>;
177
+ export type ReadResourceCallback = (uri: URL, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => ReadResourceResult | Promise<ReadResourceResult>;
178
+ export type RegisteredResource = {
179
+ name: string;
180
+ metadata?: ResourceMetadata;
181
+ readCallback: ReadResourceCallback;
182
+ enabled: boolean;
183
+ enable(): void;
184
+ disable(): void;
185
+ update(updates: {
186
+ name?: string;
187
+ uri?: string | null;
188
+ metadata?: ResourceMetadata;
189
+ callback?: ReadResourceCallback;
190
+ enabled?: boolean;
191
+ }): void;
192
+ remove(): void;
193
+ };
145
194
  /**
146
195
  * Callback to read a resource at a given URI, following a filled-in URI template.
147
196
  */
148
- export type ReadResourceTemplateCallback = (uri: URL, variables: Variables, extra: RequestHandlerExtra) => ReadResourceResult | Promise<ReadResourceResult>;
197
+ export type ReadResourceTemplateCallback = (uri: URL, variables: Variables, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => ReadResourceResult | Promise<ReadResourceResult>;
198
+ export type RegisteredResourceTemplate = {
199
+ resourceTemplate: ResourceTemplate;
200
+ metadata?: ResourceMetadata;
201
+ readCallback: ReadResourceTemplateCallback;
202
+ enabled: boolean;
203
+ enable(): void;
204
+ disable(): void;
205
+ update(updates: {
206
+ name?: string | null;
207
+ template?: ResourceTemplate;
208
+ metadata?: ResourceMetadata;
209
+ callback?: ReadResourceTemplateCallback;
210
+ enabled?: boolean;
211
+ }): void;
212
+ remove(): void;
213
+ };
149
214
  type PromptArgsRawShape = {
150
215
  [k: string]: ZodType<string, ZodTypeDef, string> | ZodOptional<ZodType<string, ZodTypeDef, string>>;
151
216
  };
152
- export type PromptCallback<Args extends undefined | PromptArgsRawShape = undefined> = Args extends PromptArgsRawShape ? (args: z.objectOutputType<Args, ZodTypeAny>, extra: RequestHandlerExtra) => GetPromptResult | Promise<GetPromptResult> : (extra: RequestHandlerExtra) => GetPromptResult | Promise<GetPromptResult>;
217
+ export type PromptCallback<Args extends undefined | PromptArgsRawShape = undefined> = Args extends PromptArgsRawShape ? (args: z.objectOutputType<Args, ZodTypeAny>, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => GetPromptResult | Promise<GetPromptResult> : (extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => GetPromptResult | Promise<GetPromptResult>;
218
+ export type RegisteredPrompt = {
219
+ description?: string;
220
+ argsSchema?: ZodObject<PromptArgsRawShape>;
221
+ callback: PromptCallback<undefined | PromptArgsRawShape>;
222
+ enabled: boolean;
223
+ enable(): void;
224
+ disable(): void;
225
+ update<Args extends PromptArgsRawShape>(updates: {
226
+ name?: string | null;
227
+ description?: string;
228
+ argsSchema?: Args;
229
+ callback?: PromptCallback<Args>;
230
+ enabled?: boolean;
231
+ }): void;
232
+ remove(): void;
233
+ };
153
234
  export {};
154
235
  //# sourceMappingURL=mcp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/server/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/server/mcp.ts"],"names":[],"mappings":"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"}
@@ -42,10 +42,12 @@ export class McpServer {
42
42
  this.server.assertCanSetRequestHandler(ListToolsRequestSchema.shape.method.value);
43
43
  this.server.assertCanSetRequestHandler(CallToolRequestSchema.shape.method.value);
44
44
  this.server.registerCapabilities({
45
- tools: {},
45
+ tools: {
46
+ listChanged: true
47
+ }
46
48
  });
47
49
  this.server.setRequestHandler(ListToolsRequestSchema, () => ({
48
- tools: Object.entries(this._registeredTools).map(([name, tool]) => {
50
+ tools: Object.entries(this._registeredTools).filter(([, tool]) => tool.enabled).map(([name, tool]) => {
49
51
  return {
50
52
  name,
51
53
  description: tool.description,
@@ -62,6 +64,9 @@ export class McpServer {
62
64
  if (!tool) {
63
65
  throw new McpError(ErrorCode.InvalidParams, `Tool ${request.params.name} not found`);
64
66
  }
67
+ if (!tool.enabled) {
68
+ throw new McpError(ErrorCode.InvalidParams, `Tool ${request.params.name} disabled`);
69
+ }
65
70
  if (tool.inputSchema) {
66
71
  const parseResult = await tool.inputSchema.safeParseAsync(request.params.arguments);
67
72
  if (!parseResult.success) {
@@ -124,7 +129,10 @@ export class McpServer {
124
129
  async handlePromptCompletion(request, ref) {
125
130
  const prompt = this._registeredPrompts[ref.name];
126
131
  if (!prompt) {
127
- throw new McpError(ErrorCode.InvalidParams, `Prompt ${request.params.ref.name} not found`);
132
+ throw new McpError(ErrorCode.InvalidParams, `Prompt ${ref.name} not found`);
133
+ }
134
+ if (!prompt.enabled) {
135
+ throw new McpError(ErrorCode.InvalidParams, `Prompt ${ref.name} disabled`);
128
136
  }
129
137
  if (!prompt.argsSchema) {
130
138
  return EMPTY_COMPLETION_RESULT;
@@ -161,10 +169,12 @@ export class McpServer {
161
169
  this.server.assertCanSetRequestHandler(ListResourceTemplatesRequestSchema.shape.method.value);
162
170
  this.server.assertCanSetRequestHandler(ReadResourceRequestSchema.shape.method.value);
163
171
  this.server.registerCapabilities({
164
- resources: {},
172
+ resources: {
173
+ listChanged: true
174
+ }
165
175
  });
166
176
  this.server.setRequestHandler(ListResourcesRequestSchema, async (request, extra) => {
167
- const resources = Object.entries(this._registeredResources).map(([uri, resource]) => ({
177
+ const resources = Object.entries(this._registeredResources).filter(([_, resource]) => resource.enabled).map(([uri, resource]) => ({
168
178
  uri,
169
179
  name: resource.name,
170
180
  ...resource.metadata,
@@ -197,6 +207,9 @@ export class McpServer {
197
207
  // First check for exact resource match
198
208
  const resource = this._registeredResources[uri.toString()];
199
209
  if (resource) {
210
+ if (!resource.enabled) {
211
+ throw new McpError(ErrorCode.InvalidParams, `Resource ${uri} disabled`);
212
+ }
200
213
  return resource.readCallback(uri, extra);
201
214
  }
202
215
  // Then check templates
@@ -218,10 +231,12 @@ export class McpServer {
218
231
  this.server.assertCanSetRequestHandler(ListPromptsRequestSchema.shape.method.value);
219
232
  this.server.assertCanSetRequestHandler(GetPromptRequestSchema.shape.method.value);
220
233
  this.server.registerCapabilities({
221
- prompts: {},
234
+ prompts: {
235
+ listChanged: true
236
+ }
222
237
  });
223
238
  this.server.setRequestHandler(ListPromptsRequestSchema, () => ({
224
- prompts: Object.entries(this._registeredPrompts).map(([name, prompt]) => {
239
+ prompts: Object.entries(this._registeredPrompts).filter(([, prompt]) => prompt.enabled).map(([name, prompt]) => {
225
240
  return {
226
241
  name,
227
242
  description: prompt.description,
@@ -236,6 +251,9 @@ export class McpServer {
236
251
  if (!prompt) {
237
252
  throw new McpError(ErrorCode.InvalidParams, `Prompt ${request.params.name} not found`);
238
253
  }
254
+ if (!prompt.enabled) {
255
+ throw new McpError(ErrorCode.InvalidParams, `Prompt ${request.params.name} disabled`);
256
+ }
239
257
  if (prompt.argsSchema) {
240
258
  const parseResult = await prompt.argsSchema.safeParseAsync(request.params.arguments);
241
259
  if (!parseResult.success) {
@@ -263,23 +281,70 @@ export class McpServer {
263
281
  if (this._registeredResources[uriOrTemplate]) {
264
282
  throw new Error(`Resource ${uriOrTemplate} is already registered`);
265
283
  }
266
- this._registeredResources[uriOrTemplate] = {
284
+ const registeredResource = {
267
285
  name,
268
286
  metadata,
269
287
  readCallback: readCallback,
288
+ enabled: true,
289
+ disable: () => registeredResource.update({ enabled: false }),
290
+ enable: () => registeredResource.update({ enabled: true }),
291
+ remove: () => registeredResource.update({ uri: null }),
292
+ update: (updates) => {
293
+ if (typeof updates.uri !== "undefined" && updates.uri !== uriOrTemplate) {
294
+ delete this._registeredResources[uriOrTemplate];
295
+ if (updates.uri)
296
+ this._registeredResources[updates.uri] = registeredResource;
297
+ }
298
+ if (typeof updates.name !== "undefined")
299
+ registeredResource.name = updates.name;
300
+ if (typeof updates.metadata !== "undefined")
301
+ registeredResource.metadata = updates.metadata;
302
+ if (typeof updates.callback !== "undefined")
303
+ registeredResource.readCallback = updates.callback;
304
+ if (typeof updates.enabled !== "undefined")
305
+ registeredResource.enabled = updates.enabled;
306
+ this.sendResourceListChanged();
307
+ },
270
308
  };
309
+ this._registeredResources[uriOrTemplate] = registeredResource;
310
+ this.setResourceRequestHandlers();
311
+ this.sendResourceListChanged();
312
+ return registeredResource;
271
313
  }
272
314
  else {
273
315
  if (this._registeredResourceTemplates[name]) {
274
316
  throw new Error(`Resource template ${name} is already registered`);
275
317
  }
276
- this._registeredResourceTemplates[name] = {
318
+ const registeredResourceTemplate = {
277
319
  resourceTemplate: uriOrTemplate,
278
320
  metadata,
279
321
  readCallback: readCallback,
322
+ enabled: true,
323
+ disable: () => registeredResourceTemplate.update({ enabled: false }),
324
+ enable: () => registeredResourceTemplate.update({ enabled: true }),
325
+ remove: () => registeredResourceTemplate.update({ name: null }),
326
+ update: (updates) => {
327
+ if (typeof updates.name !== "undefined" && updates.name !== name) {
328
+ delete this._registeredResourceTemplates[name];
329
+ if (updates.name)
330
+ this._registeredResourceTemplates[updates.name] = registeredResourceTemplate;
331
+ }
332
+ if (typeof updates.template !== "undefined")
333
+ registeredResourceTemplate.resourceTemplate = updates.template;
334
+ if (typeof updates.metadata !== "undefined")
335
+ registeredResourceTemplate.metadata = updates.metadata;
336
+ if (typeof updates.callback !== "undefined")
337
+ registeredResourceTemplate.readCallback = updates.callback;
338
+ if (typeof updates.enabled !== "undefined")
339
+ registeredResourceTemplate.enabled = updates.enabled;
340
+ this.sendResourceListChanged();
341
+ },
280
342
  };
343
+ this._registeredResourceTemplates[name] = registeredResourceTemplate;
344
+ this.setResourceRequestHandlers();
345
+ this.sendResourceListChanged();
346
+ return registeredResourceTemplate;
281
347
  }
282
- this.setResourceRequestHandlers();
283
348
  }
284
349
  tool(name, ...rest) {
285
350
  if (this._registeredTools[name]) {
@@ -294,12 +359,35 @@ export class McpServer {
294
359
  paramsSchema = rest.shift();
295
360
  }
296
361
  const cb = rest[0];
297
- this._registeredTools[name] = {
362
+ const registeredTool = {
298
363
  description,
299
364
  inputSchema: paramsSchema === undefined ? undefined : z.object(paramsSchema),
300
365
  callback: cb,
366
+ enabled: true,
367
+ disable: () => registeredTool.update({ enabled: false }),
368
+ enable: () => registeredTool.update({ enabled: true }),
369
+ remove: () => registeredTool.update({ name: null }),
370
+ update: (updates) => {
371
+ if (typeof updates.name !== "undefined" && updates.name !== name) {
372
+ delete this._registeredTools[name];
373
+ if (updates.name)
374
+ this._registeredTools[updates.name] = registeredTool;
375
+ }
376
+ if (typeof updates.description !== "undefined")
377
+ registeredTool.description = updates.description;
378
+ if (typeof updates.paramsSchema !== "undefined")
379
+ registeredTool.inputSchema = z.object(updates.paramsSchema);
380
+ if (typeof updates.callback !== "undefined")
381
+ registeredTool.callback = updates.callback;
382
+ if (typeof updates.enabled !== "undefined")
383
+ registeredTool.enabled = updates.enabled;
384
+ this.sendToolListChanged();
385
+ },
301
386
  };
387
+ this._registeredTools[name] = registeredTool;
302
388
  this.setToolRequestHandlers();
389
+ this.sendToolListChanged();
390
+ return registeredTool;
303
391
  }
304
392
  prompt(name, ...rest) {
305
393
  if (this._registeredPrompts[name]) {
@@ -314,12 +402,66 @@ export class McpServer {
314
402
  argsSchema = rest.shift();
315
403
  }
316
404
  const cb = rest[0];
317
- this._registeredPrompts[name] = {
405
+ const registeredPrompt = {
318
406
  description,
319
407
  argsSchema: argsSchema === undefined ? undefined : z.object(argsSchema),
320
408
  callback: cb,
409
+ enabled: true,
410
+ disable: () => registeredPrompt.update({ enabled: false }),
411
+ enable: () => registeredPrompt.update({ enabled: true }),
412
+ remove: () => registeredPrompt.update({ name: null }),
413
+ update: (updates) => {
414
+ if (typeof updates.name !== "undefined" && updates.name !== name) {
415
+ delete this._registeredPrompts[name];
416
+ if (updates.name)
417
+ this._registeredPrompts[updates.name] = registeredPrompt;
418
+ }
419
+ if (typeof updates.description !== "undefined")
420
+ registeredPrompt.description = updates.description;
421
+ if (typeof updates.argsSchema !== "undefined")
422
+ registeredPrompt.argsSchema = z.object(updates.argsSchema);
423
+ if (typeof updates.callback !== "undefined")
424
+ registeredPrompt.callback = updates.callback;
425
+ if (typeof updates.enabled !== "undefined")
426
+ registeredPrompt.enabled = updates.enabled;
427
+ this.sendPromptListChanged();
428
+ },
321
429
  };
430
+ this._registeredPrompts[name] = registeredPrompt;
322
431
  this.setPromptRequestHandlers();
432
+ this.sendPromptListChanged();
433
+ return registeredPrompt;
434
+ }
435
+ /**
436
+ * Checks if the server is connected to a transport.
437
+ * @returns True if the server is connected
438
+ */
439
+ isConnected() {
440
+ return this.server.transport !== undefined;
441
+ }
442
+ /**
443
+ * Sends a resource list changed event to the client, if connected.
444
+ */
445
+ sendResourceListChanged() {
446
+ if (this.isConnected()) {
447
+ this.server.sendResourceListChanged();
448
+ }
449
+ }
450
+ /**
451
+ * Sends a tool list changed event to the client, if connected.
452
+ */
453
+ sendToolListChanged() {
454
+ if (this.isConnected()) {
455
+ this.server.sendToolListChanged();
456
+ }
457
+ }
458
+ /**
459
+ * Sends a prompt list changed event to the client, if connected.
460
+ */
461
+ sendPromptListChanged() {
462
+ if (this.isConnected()) {
463
+ this.server.sendPromptListChanged();
464
+ }
323
465
  }
324
466
  }
325
467
  /**