@contextvm/mcp-sdk 1.27.1-contextvm.0

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 (261) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +141 -0
  3. package/dist/cjs/client/index.d.ts +588 -0
  4. package/dist/cjs/client/index.d.ts.map +1 -0
  5. package/dist/cjs/client/index.js +629 -0
  6. package/dist/cjs/client/index.js.map +1 -0
  7. package/dist/cjs/client/stdio.d.ts +77 -0
  8. package/dist/cjs/client/stdio.d.ts.map +1 -0
  9. package/dist/cjs/client/stdio.js +199 -0
  10. package/dist/cjs/client/stdio.js.map +1 -0
  11. package/dist/cjs/experimental/index.d.ts +13 -0
  12. package/dist/cjs/experimental/index.d.ts.map +1 -0
  13. package/dist/cjs/experimental/index.js +29 -0
  14. package/dist/cjs/experimental/index.js.map +1 -0
  15. package/dist/cjs/experimental/tasks/client.d.ts +121 -0
  16. package/dist/cjs/experimental/tasks/client.d.ts.map +1 -0
  17. package/dist/cjs/experimental/tasks/client.js +188 -0
  18. package/dist/cjs/experimental/tasks/client.js.map +1 -0
  19. package/dist/cjs/experimental/tasks/helpers.d.ts +47 -0
  20. package/dist/cjs/experimental/tasks/helpers.d.ts.map +1 -0
  21. package/dist/cjs/experimental/tasks/helpers.js +68 -0
  22. package/dist/cjs/experimental/tasks/helpers.js.map +1 -0
  23. package/dist/cjs/experimental/tasks/index.d.ts +16 -0
  24. package/dist/cjs/experimental/tasks/index.d.ts.map +1 -0
  25. package/dist/cjs/experimental/tasks/index.js +39 -0
  26. package/dist/cjs/experimental/tasks/index.js.map +1 -0
  27. package/dist/cjs/experimental/tasks/interfaces.d.ts +232 -0
  28. package/dist/cjs/experimental/tasks/interfaces.d.ts.map +1 -0
  29. package/dist/cjs/experimental/tasks/interfaces.js +19 -0
  30. package/dist/cjs/experimental/tasks/interfaces.js.map +1 -0
  31. package/dist/cjs/experimental/tasks/mcp-server.d.ts +77 -0
  32. package/dist/cjs/experimental/tasks/mcp-server.d.ts.map +1 -0
  33. package/dist/cjs/experimental/tasks/mcp-server.js +36 -0
  34. package/dist/cjs/experimental/tasks/mcp-server.js.map +1 -0
  35. package/dist/cjs/experimental/tasks/server.d.ts +170 -0
  36. package/dist/cjs/experimental/tasks/server.d.ts.map +1 -0
  37. package/dist/cjs/experimental/tasks/server.js +250 -0
  38. package/dist/cjs/experimental/tasks/server.js.map +1 -0
  39. package/dist/cjs/experimental/tasks/stores/in-memory.d.ts +94 -0
  40. package/dist/cjs/experimental/tasks/stores/in-memory.d.ts.map +1 -0
  41. package/dist/cjs/experimental/tasks/stores/in-memory.js +251 -0
  42. package/dist/cjs/experimental/tasks/stores/in-memory.js.map +1 -0
  43. package/dist/cjs/experimental/tasks/types.d.ts +10 -0
  44. package/dist/cjs/experimental/tasks/types.d.ts.map +1 -0
  45. package/dist/cjs/experimental/tasks/types.js +28 -0
  46. package/dist/cjs/experimental/tasks/types.js.map +1 -0
  47. package/dist/cjs/inMemory.d.ts +31 -0
  48. package/dist/cjs/inMemory.d.ts.map +1 -0
  49. package/dist/cjs/inMemory.js +51 -0
  50. package/dist/cjs/inMemory.js.map +1 -0
  51. package/dist/cjs/package.json +1 -0
  52. package/dist/cjs/server/completable.d.ts +38 -0
  53. package/dist/cjs/server/completable.d.ts.map +1 -0
  54. package/dist/cjs/server/completable.js +48 -0
  55. package/dist/cjs/server/completable.js.map +1 -0
  56. package/dist/cjs/server/index.d.ts +196 -0
  57. package/dist/cjs/server/index.d.ts.map +1 -0
  58. package/dist/cjs/server/index.js +444 -0
  59. package/dist/cjs/server/index.js.map +1 -0
  60. package/dist/cjs/server/mcp.d.ts +364 -0
  61. package/dist/cjs/server/mcp.d.ts.map +1 -0
  62. package/dist/cjs/server/mcp.js +918 -0
  63. package/dist/cjs/server/mcp.js.map +1 -0
  64. package/dist/cjs/server/stdio.d.ts +28 -0
  65. package/dist/cjs/server/stdio.d.ts.map +1 -0
  66. package/dist/cjs/server/stdio.js +82 -0
  67. package/dist/cjs/server/stdio.js.map +1 -0
  68. package/dist/cjs/server/zod-compat.d.ts +84 -0
  69. package/dist/cjs/server/zod-compat.d.ts.map +1 -0
  70. package/dist/cjs/server/zod-compat.js +244 -0
  71. package/dist/cjs/server/zod-compat.js.map +1 -0
  72. package/dist/cjs/server/zod-json-schema-compat.d.ts +12 -0
  73. package/dist/cjs/server/zod-json-schema-compat.d.ts.map +1 -0
  74. package/dist/cjs/server/zod-json-schema-compat.js +79 -0
  75. package/dist/cjs/server/zod-json-schema-compat.js.map +1 -0
  76. package/dist/cjs/shared/auth-info.d.ts +32 -0
  77. package/dist/cjs/shared/auth-info.d.ts.map +1 -0
  78. package/dist/cjs/shared/auth-info.js +3 -0
  79. package/dist/cjs/shared/auth-info.js.map +1 -0
  80. package/dist/cjs/shared/metadataUtils.d.ts +16 -0
  81. package/dist/cjs/shared/metadataUtils.d.ts.map +1 -0
  82. package/dist/cjs/shared/metadataUtils.js +25 -0
  83. package/dist/cjs/shared/metadataUtils.js.map +1 -0
  84. package/dist/cjs/shared/protocol.d.ts +443 -0
  85. package/dist/cjs/shared/protocol.d.ts.map +1 -0
  86. package/dist/cjs/shared/protocol.js +1104 -0
  87. package/dist/cjs/shared/protocol.js.map +1 -0
  88. package/dist/cjs/shared/responseMessage.d.ts +45 -0
  89. package/dist/cjs/shared/responseMessage.d.ts.map +1 -0
  90. package/dist/cjs/shared/responseMessage.js +23 -0
  91. package/dist/cjs/shared/responseMessage.js.map +1 -0
  92. package/dist/cjs/shared/stdio.d.ts +13 -0
  93. package/dist/cjs/shared/stdio.d.ts.map +1 -0
  94. package/dist/cjs/shared/stdio.js +37 -0
  95. package/dist/cjs/shared/stdio.js.map +1 -0
  96. package/dist/cjs/shared/toolNameValidation.d.ts +31 -0
  97. package/dist/cjs/shared/toolNameValidation.d.ts.map +1 -0
  98. package/dist/cjs/shared/toolNameValidation.js +97 -0
  99. package/dist/cjs/shared/toolNameValidation.js.map +1 -0
  100. package/dist/cjs/shared/transport.d.ts +89 -0
  101. package/dist/cjs/shared/transport.d.ts.map +1 -0
  102. package/dist/cjs/shared/transport.js +43 -0
  103. package/dist/cjs/shared/transport.js.map +1 -0
  104. package/dist/cjs/shared/uriTemplate.d.ts +25 -0
  105. package/dist/cjs/shared/uriTemplate.d.ts.map +1 -0
  106. package/dist/cjs/shared/uriTemplate.js +243 -0
  107. package/dist/cjs/shared/uriTemplate.js.map +1 -0
  108. package/dist/cjs/spec.types.d.ts +2299 -0
  109. package/dist/cjs/spec.types.d.ts.map +1 -0
  110. package/dist/cjs/spec.types.js +27 -0
  111. package/dist/cjs/spec.types.js.map +1 -0
  112. package/dist/cjs/types.d.ts +8137 -0
  113. package/dist/cjs/types.d.ts.map +1 -0
  114. package/dist/cjs/types.js +2092 -0
  115. package/dist/cjs/types.js.map +1 -0
  116. package/dist/cjs/validation/ajv-provider.d.ts +53 -0
  117. package/dist/cjs/validation/ajv-provider.d.ts.map +1 -0
  118. package/dist/cjs/validation/ajv-provider.js +94 -0
  119. package/dist/cjs/validation/ajv-provider.js.map +1 -0
  120. package/dist/cjs/validation/cfworker-provider.d.ts +51 -0
  121. package/dist/cjs/validation/cfworker-provider.d.ts.map +1 -0
  122. package/dist/cjs/validation/cfworker-provider.js +69 -0
  123. package/dist/cjs/validation/cfworker-provider.js.map +1 -0
  124. package/dist/cjs/validation/index.d.ts +29 -0
  125. package/dist/cjs/validation/index.d.ts.map +1 -0
  126. package/dist/cjs/validation/index.js +30 -0
  127. package/dist/cjs/validation/index.js.map +1 -0
  128. package/dist/cjs/validation/types.d.ts +65 -0
  129. package/dist/cjs/validation/types.d.ts.map +1 -0
  130. package/dist/cjs/validation/types.js +3 -0
  131. package/dist/cjs/validation/types.js.map +1 -0
  132. package/dist/esm/client/index.d.ts +588 -0
  133. package/dist/esm/client/index.d.ts.map +1 -0
  134. package/dist/esm/client/index.js +624 -0
  135. package/dist/esm/client/index.js.map +1 -0
  136. package/dist/esm/client/stdio.d.ts +77 -0
  137. package/dist/esm/client/stdio.d.ts.map +1 -0
  138. package/dist/esm/client/stdio.js +191 -0
  139. package/dist/esm/client/stdio.js.map +1 -0
  140. package/dist/esm/experimental/index.d.ts +13 -0
  141. package/dist/esm/experimental/index.d.ts.map +1 -0
  142. package/dist/esm/experimental/index.js +13 -0
  143. package/dist/esm/experimental/index.js.map +1 -0
  144. package/dist/esm/experimental/tasks/client.d.ts +121 -0
  145. package/dist/esm/experimental/tasks/client.d.ts.map +1 -0
  146. package/dist/esm/experimental/tasks/client.js +184 -0
  147. package/dist/esm/experimental/tasks/client.js.map +1 -0
  148. package/dist/esm/experimental/tasks/helpers.d.ts +47 -0
  149. package/dist/esm/experimental/tasks/helpers.d.ts.map +1 -0
  150. package/dist/esm/experimental/tasks/helpers.js +64 -0
  151. package/dist/esm/experimental/tasks/helpers.js.map +1 -0
  152. package/dist/esm/experimental/tasks/index.d.ts +16 -0
  153. package/dist/esm/experimental/tasks/index.d.ts.map +1 -0
  154. package/dist/esm/experimental/tasks/index.js +20 -0
  155. package/dist/esm/experimental/tasks/index.js.map +1 -0
  156. package/dist/esm/experimental/tasks/interfaces.d.ts +232 -0
  157. package/dist/esm/experimental/tasks/interfaces.d.ts.map +1 -0
  158. package/dist/esm/experimental/tasks/interfaces.js +16 -0
  159. package/dist/esm/experimental/tasks/interfaces.js.map +1 -0
  160. package/dist/esm/experimental/tasks/mcp-server.d.ts +77 -0
  161. package/dist/esm/experimental/tasks/mcp-server.d.ts.map +1 -0
  162. package/dist/esm/experimental/tasks/mcp-server.js +32 -0
  163. package/dist/esm/experimental/tasks/mcp-server.js.map +1 -0
  164. package/dist/esm/experimental/tasks/server.d.ts +170 -0
  165. package/dist/esm/experimental/tasks/server.d.ts.map +1 -0
  166. package/dist/esm/experimental/tasks/server.js +246 -0
  167. package/dist/esm/experimental/tasks/server.js.map +1 -0
  168. package/dist/esm/experimental/tasks/stores/in-memory.d.ts +94 -0
  169. package/dist/esm/experimental/tasks/stores/in-memory.d.ts.map +1 -0
  170. package/dist/esm/experimental/tasks/stores/in-memory.js +246 -0
  171. package/dist/esm/experimental/tasks/stores/in-memory.js.map +1 -0
  172. package/dist/esm/experimental/tasks/types.d.ts +10 -0
  173. package/dist/esm/experimental/tasks/types.d.ts.map +1 -0
  174. package/dist/esm/experimental/tasks/types.js +10 -0
  175. package/dist/esm/experimental/tasks/types.js.map +1 -0
  176. package/dist/esm/inMemory.d.ts +31 -0
  177. package/dist/esm/inMemory.d.ts.map +1 -0
  178. package/dist/esm/inMemory.js +47 -0
  179. package/dist/esm/inMemory.js.map +1 -0
  180. package/dist/esm/package.json +1 -0
  181. package/dist/esm/server/completable.d.ts +38 -0
  182. package/dist/esm/server/completable.d.ts.map +1 -0
  183. package/dist/esm/server/completable.js +41 -0
  184. package/dist/esm/server/completable.js.map +1 -0
  185. package/dist/esm/server/index.d.ts +196 -0
  186. package/dist/esm/server/index.d.ts.map +1 -0
  187. package/dist/esm/server/index.js +440 -0
  188. package/dist/esm/server/index.js.map +1 -0
  189. package/dist/esm/server/mcp.d.ts +364 -0
  190. package/dist/esm/server/mcp.d.ts.map +1 -0
  191. package/dist/esm/server/mcp.js +913 -0
  192. package/dist/esm/server/mcp.js.map +1 -0
  193. package/dist/esm/server/stdio.d.ts +28 -0
  194. package/dist/esm/server/stdio.d.ts.map +1 -0
  195. package/dist/esm/server/stdio.js +75 -0
  196. package/dist/esm/server/stdio.js.map +1 -0
  197. package/dist/esm/server/zod-compat.d.ts +84 -0
  198. package/dist/esm/server/zod-compat.d.ts.map +1 -0
  199. package/dist/esm/server/zod-compat.js +209 -0
  200. package/dist/esm/server/zod-compat.js.map +1 -0
  201. package/dist/esm/server/zod-json-schema-compat.d.ts +12 -0
  202. package/dist/esm/server/zod-json-schema-compat.d.ts.map +1 -0
  203. package/dist/esm/server/zod-json-schema-compat.js +51 -0
  204. package/dist/esm/server/zod-json-schema-compat.js.map +1 -0
  205. package/dist/esm/shared/auth-info.d.ts +32 -0
  206. package/dist/esm/shared/auth-info.d.ts.map +1 -0
  207. package/dist/esm/shared/auth-info.js +2 -0
  208. package/dist/esm/shared/auth-info.js.map +1 -0
  209. package/dist/esm/shared/metadataUtils.d.ts +16 -0
  210. package/dist/esm/shared/metadataUtils.d.ts.map +1 -0
  211. package/dist/esm/shared/metadataUtils.js +22 -0
  212. package/dist/esm/shared/metadataUtils.js.map +1 -0
  213. package/dist/esm/shared/protocol.d.ts +443 -0
  214. package/dist/esm/shared/protocol.d.ts.map +1 -0
  215. package/dist/esm/shared/protocol.js +1099 -0
  216. package/dist/esm/shared/protocol.js.map +1 -0
  217. package/dist/esm/shared/responseMessage.d.ts +45 -0
  218. package/dist/esm/shared/responseMessage.d.ts.map +1 -0
  219. package/dist/esm/shared/responseMessage.js +19 -0
  220. package/dist/esm/shared/responseMessage.js.map +1 -0
  221. package/dist/esm/shared/stdio.d.ts +13 -0
  222. package/dist/esm/shared/stdio.d.ts.map +1 -0
  223. package/dist/esm/shared/stdio.js +31 -0
  224. package/dist/esm/shared/stdio.js.map +1 -0
  225. package/dist/esm/shared/toolNameValidation.d.ts +31 -0
  226. package/dist/esm/shared/toolNameValidation.d.ts.map +1 -0
  227. package/dist/esm/shared/toolNameValidation.js +92 -0
  228. package/dist/esm/shared/toolNameValidation.js.map +1 -0
  229. package/dist/esm/shared/transport.d.ts +89 -0
  230. package/dist/esm/shared/transport.d.ts.map +1 -0
  231. package/dist/esm/shared/transport.js +39 -0
  232. package/dist/esm/shared/transport.js.map +1 -0
  233. package/dist/esm/shared/uriTemplate.d.ts +25 -0
  234. package/dist/esm/shared/uriTemplate.d.ts.map +1 -0
  235. package/dist/esm/shared/uriTemplate.js +239 -0
  236. package/dist/esm/shared/uriTemplate.js.map +1 -0
  237. package/dist/esm/spec.types.d.ts +2299 -0
  238. package/dist/esm/spec.types.d.ts.map +1 -0
  239. package/dist/esm/spec.types.js +24 -0
  240. package/dist/esm/spec.types.js.map +1 -0
  241. package/dist/esm/types.d.ts +8137 -0
  242. package/dist/esm/types.d.ts.map +1 -0
  243. package/dist/esm/types.js +2052 -0
  244. package/dist/esm/types.js.map +1 -0
  245. package/dist/esm/validation/ajv-provider.d.ts +53 -0
  246. package/dist/esm/validation/ajv-provider.d.ts.map +1 -0
  247. package/dist/esm/validation/ajv-provider.js +87 -0
  248. package/dist/esm/validation/ajv-provider.js.map +1 -0
  249. package/dist/esm/validation/cfworker-provider.d.ts +51 -0
  250. package/dist/esm/validation/cfworker-provider.d.ts.map +1 -0
  251. package/dist/esm/validation/cfworker-provider.js +65 -0
  252. package/dist/esm/validation/cfworker-provider.js.map +1 -0
  253. package/dist/esm/validation/index.d.ts +29 -0
  254. package/dist/esm/validation/index.d.ts.map +1 -0
  255. package/dist/esm/validation/index.js +29 -0
  256. package/dist/esm/validation/index.js.map +1 -0
  257. package/dist/esm/validation/types.d.ts +65 -0
  258. package/dist/esm/validation/types.d.ts.map +1 -0
  259. package/dist/esm/validation/types.js +2 -0
  260. package/dist/esm/validation/types.js.map +1 -0
  261. package/package.json +124 -0
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Experimental server task features for MCP SDK.
3
+ * WARNING: These APIs are experimental and may change without notice.
4
+ *
5
+ * @experimental
6
+ */
7
+ import type { Server } from '../../server/index.js';
8
+ import type { RequestOptions } from '../../shared/protocol.js';
9
+ import type { ResponseMessage } from '../../shared/responseMessage.js';
10
+ import type { AnySchema, SchemaOutput } from '../../server/zod-compat.js';
11
+ import type { ServerRequest, Notification, Request, Result, GetTaskResult, ListTasksResult, CancelTaskResult, CreateMessageRequestParams, CreateMessageResult, ElicitRequestFormParams, ElicitRequestURLParams, ElicitResult } from '../../types.js';
12
+ /**
13
+ * Experimental task features for low-level MCP servers.
14
+ *
15
+ * Access via `server.experimental.tasks`:
16
+ * ```typescript
17
+ * const stream = server.experimental.tasks.requestStream(request, schema, options);
18
+ * ```
19
+ *
20
+ * For high-level server usage with task-based tools, use `McpServer.experimental.tasks` instead.
21
+ *
22
+ * @experimental
23
+ */
24
+ export declare class ExperimentalServerTasks<RequestT extends Request = Request, NotificationT extends Notification = Notification, ResultT extends Result = Result> {
25
+ private readonly _server;
26
+ constructor(_server: Server<RequestT, NotificationT, ResultT>);
27
+ /**
28
+ * Sends a request and returns an AsyncGenerator that yields response messages.
29
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
30
+ *
31
+ * This method provides streaming access to request processing, allowing you to
32
+ * observe intermediate task status updates for task-augmented requests.
33
+ *
34
+ * @param request - The request to send
35
+ * @param resultSchema - Zod schema for validating the result
36
+ * @param options - Optional request options (timeout, signal, task creation params, etc.)
37
+ * @returns AsyncGenerator that yields ResponseMessage objects
38
+ *
39
+ * @experimental
40
+ */
41
+ requestStream<T extends AnySchema>(request: ServerRequest | RequestT, resultSchema: T, options?: RequestOptions): AsyncGenerator<ResponseMessage<SchemaOutput<T>>, void, void>;
42
+ /**
43
+ * Sends a sampling request and returns an AsyncGenerator that yields response messages.
44
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
45
+ *
46
+ * For task-augmented requests, yields 'taskCreated' and 'taskStatus' messages
47
+ * before the final result.
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const stream = server.experimental.tasks.createMessageStream({
52
+ * messages: [{ role: 'user', content: { type: 'text', text: 'Hello' } }],
53
+ * maxTokens: 100
54
+ * }, {
55
+ * onprogress: (progress) => {
56
+ * // Handle streaming tokens via progress notifications
57
+ * console.log('Progress:', progress.message);
58
+ * }
59
+ * });
60
+ *
61
+ * for await (const message of stream) {
62
+ * switch (message.type) {
63
+ * case 'taskCreated':
64
+ * console.log('Task created:', message.task.taskId);
65
+ * break;
66
+ * case 'taskStatus':
67
+ * console.log('Task status:', message.task.status);
68
+ * break;
69
+ * case 'result':
70
+ * console.log('Final result:', message.result);
71
+ * break;
72
+ * case 'error':
73
+ * console.error('Error:', message.error);
74
+ * break;
75
+ * }
76
+ * }
77
+ * ```
78
+ *
79
+ * @param params - The sampling request parameters
80
+ * @param options - Optional request options (timeout, signal, task creation params, onprogress, etc.)
81
+ * @returns AsyncGenerator that yields ResponseMessage objects
82
+ *
83
+ * @experimental
84
+ */
85
+ createMessageStream(params: CreateMessageRequestParams, options?: RequestOptions): AsyncGenerator<ResponseMessage<CreateMessageResult>, void, void>;
86
+ /**
87
+ * Sends an elicitation request and returns an AsyncGenerator that yields response messages.
88
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
89
+ *
90
+ * For task-augmented requests (especially URL-based elicitation), yields 'taskCreated'
91
+ * and 'taskStatus' messages before the final result.
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * const stream = server.experimental.tasks.elicitInputStream({
96
+ * mode: 'url',
97
+ * message: 'Please authenticate',
98
+ * elicitationId: 'auth-123',
99
+ * url: 'https://example.com/auth'
100
+ * }, {
101
+ * task: { ttl: 300000 } // Task-augmented for long-running auth flow
102
+ * });
103
+ *
104
+ * for await (const message of stream) {
105
+ * switch (message.type) {
106
+ * case 'taskCreated':
107
+ * console.log('Task created:', message.task.taskId);
108
+ * break;
109
+ * case 'taskStatus':
110
+ * console.log('Task status:', message.task.status);
111
+ * break;
112
+ * case 'result':
113
+ * console.log('User action:', message.result.action);
114
+ * break;
115
+ * case 'error':
116
+ * console.error('Error:', message.error);
117
+ * break;
118
+ * }
119
+ * }
120
+ * ```
121
+ *
122
+ * @param params - The elicitation request parameters
123
+ * @param options - Optional request options (timeout, signal, task creation params, etc.)
124
+ * @returns AsyncGenerator that yields ResponseMessage objects
125
+ *
126
+ * @experimental
127
+ */
128
+ elicitInputStream(params: ElicitRequestFormParams | ElicitRequestURLParams, options?: RequestOptions): AsyncGenerator<ResponseMessage<ElicitResult>, void, void>;
129
+ /**
130
+ * Gets the current status of a task.
131
+ *
132
+ * @param taskId - The task identifier
133
+ * @param options - Optional request options
134
+ * @returns The task status
135
+ *
136
+ * @experimental
137
+ */
138
+ getTask(taskId: string, options?: RequestOptions): Promise<GetTaskResult>;
139
+ /**
140
+ * Retrieves the result of a completed task.
141
+ *
142
+ * @param taskId - The task identifier
143
+ * @param resultSchema - Zod schema for validating the result
144
+ * @param options - Optional request options
145
+ * @returns The task result
146
+ *
147
+ * @experimental
148
+ */
149
+ getTaskResult<T extends AnySchema>(taskId: string, resultSchema?: T, options?: RequestOptions): Promise<SchemaOutput<T>>;
150
+ /**
151
+ * Lists tasks with optional pagination.
152
+ *
153
+ * @param cursor - Optional pagination cursor
154
+ * @param options - Optional request options
155
+ * @returns List of tasks with optional next cursor
156
+ *
157
+ * @experimental
158
+ */
159
+ listTasks(cursor?: string, options?: RequestOptions): Promise<ListTasksResult>;
160
+ /**
161
+ * Cancels a running task.
162
+ *
163
+ * @param taskId - The task identifier
164
+ * @param options - Optional request options
165
+ *
166
+ * @experimental
167
+ */
168
+ cancelTask(taskId: string, options?: RequestOptions): Promise<CancelTaskResult>;
169
+ }
170
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/experimental/tasks/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EACR,aAAa,EACb,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACf,MAAM,gBAAgB,CAAC;AAGxB;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAuB,CAChC,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,aAAa,SAAS,YAAY,GAAG,YAAY,EACjD,OAAO,SAAS,MAAM,GAAG,MAAM;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC;IAE9E;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,CAAC,SAAS,SAAS,EAC7B,OAAO,EAAE,aAAa,GAAG,QAAQ,EACjC,YAAY,EAAE,CAAC,EACf,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAY/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,mBAAmB,CACf,MAAM,EAAE,0BAA0B,EAClC,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAuDnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACH,iBAAiB,CACb,MAAM,EAAE,uBAAuB,GAAG,sBAAsB,EACxD,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAoC5D;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAK/E;;;;;;;;;OASG;IACG,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAY9H;;;;;;;;OAQG;IACG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAQpF;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAOxF"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Experimental server task features for MCP SDK.
3
+ * WARNING: These APIs are experimental and may change without notice.
4
+ *
5
+ * @experimental
6
+ */
7
+ import { CreateMessageResultSchema, ElicitResultSchema } from '../../types.js';
8
+ /**
9
+ * Experimental task features for low-level MCP servers.
10
+ *
11
+ * Access via `server.experimental.tasks`:
12
+ * ```typescript
13
+ * const stream = server.experimental.tasks.requestStream(request, schema, options);
14
+ * ```
15
+ *
16
+ * For high-level server usage with task-based tools, use `McpServer.experimental.tasks` instead.
17
+ *
18
+ * @experimental
19
+ */
20
+ export class ExperimentalServerTasks {
21
+ constructor(_server) {
22
+ this._server = _server;
23
+ }
24
+ /**
25
+ * Sends a request and returns an AsyncGenerator that yields response messages.
26
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
27
+ *
28
+ * This method provides streaming access to request processing, allowing you to
29
+ * observe intermediate task status updates for task-augmented requests.
30
+ *
31
+ * @param request - The request to send
32
+ * @param resultSchema - Zod schema for validating the result
33
+ * @param options - Optional request options (timeout, signal, task creation params, etc.)
34
+ * @returns AsyncGenerator that yields ResponseMessage objects
35
+ *
36
+ * @experimental
37
+ */
38
+ requestStream(request, resultSchema, options) {
39
+ return this._server.requestStream(request, resultSchema, options);
40
+ }
41
+ /**
42
+ * Sends a sampling request and returns an AsyncGenerator that yields response messages.
43
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
44
+ *
45
+ * For task-augmented requests, yields 'taskCreated' and 'taskStatus' messages
46
+ * before the final result.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const stream = server.experimental.tasks.createMessageStream({
51
+ * messages: [{ role: 'user', content: { type: 'text', text: 'Hello' } }],
52
+ * maxTokens: 100
53
+ * }, {
54
+ * onprogress: (progress) => {
55
+ * // Handle streaming tokens via progress notifications
56
+ * console.log('Progress:', progress.message);
57
+ * }
58
+ * });
59
+ *
60
+ * for await (const message of stream) {
61
+ * switch (message.type) {
62
+ * case 'taskCreated':
63
+ * console.log('Task created:', message.task.taskId);
64
+ * break;
65
+ * case 'taskStatus':
66
+ * console.log('Task status:', message.task.status);
67
+ * break;
68
+ * case 'result':
69
+ * console.log('Final result:', message.result);
70
+ * break;
71
+ * case 'error':
72
+ * console.error('Error:', message.error);
73
+ * break;
74
+ * }
75
+ * }
76
+ * ```
77
+ *
78
+ * @param params - The sampling request parameters
79
+ * @param options - Optional request options (timeout, signal, task creation params, onprogress, etc.)
80
+ * @returns AsyncGenerator that yields ResponseMessage objects
81
+ *
82
+ * @experimental
83
+ */
84
+ createMessageStream(params, options) {
85
+ // Access client capabilities via the server
86
+ const clientCapabilities = this._server.getClientCapabilities();
87
+ // Capability check - only required when tools/toolChoice are provided
88
+ if ((params.tools || params.toolChoice) && !clientCapabilities?.sampling?.tools) {
89
+ throw new Error('Client does not support sampling tools capability.');
90
+ }
91
+ // Message structure validation - always validate tool_use/tool_result pairs.
92
+ // These may appear even without tools/toolChoice in the current request when
93
+ // a previous sampling request returned tool_use and this is a follow-up with results.
94
+ if (params.messages.length > 0) {
95
+ const lastMessage = params.messages[params.messages.length - 1];
96
+ const lastContent = Array.isArray(lastMessage.content) ? lastMessage.content : [lastMessage.content];
97
+ const hasToolResults = lastContent.some(c => c.type === 'tool_result');
98
+ const previousMessage = params.messages.length > 1 ? params.messages[params.messages.length - 2] : undefined;
99
+ const previousContent = previousMessage
100
+ ? Array.isArray(previousMessage.content)
101
+ ? previousMessage.content
102
+ : [previousMessage.content]
103
+ : [];
104
+ const hasPreviousToolUse = previousContent.some(c => c.type === 'tool_use');
105
+ if (hasToolResults) {
106
+ if (lastContent.some(c => c.type !== 'tool_result')) {
107
+ throw new Error('The last message must contain only tool_result content if any is present');
108
+ }
109
+ if (!hasPreviousToolUse) {
110
+ throw new Error('tool_result blocks are not matching any tool_use from the previous message');
111
+ }
112
+ }
113
+ if (hasPreviousToolUse) {
114
+ // Extract tool_use IDs from previous message and tool_result IDs from current message
115
+ const toolUseIds = new Set(previousContent.filter(c => c.type === 'tool_use').map(c => c.id));
116
+ const toolResultIds = new Set(lastContent.filter(c => c.type === 'tool_result').map(c => c.toolUseId));
117
+ if (toolUseIds.size !== toolResultIds.size || ![...toolUseIds].every(id => toolResultIds.has(id))) {
118
+ throw new Error('ids of tool_result blocks and tool_use blocks from previous message do not match');
119
+ }
120
+ }
121
+ }
122
+ return this.requestStream({
123
+ method: 'sampling/createMessage',
124
+ params
125
+ }, CreateMessageResultSchema, options);
126
+ }
127
+ /**
128
+ * Sends an elicitation request and returns an AsyncGenerator that yields response messages.
129
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
130
+ *
131
+ * For task-augmented requests (especially URL-based elicitation), yields 'taskCreated'
132
+ * and 'taskStatus' messages before the final result.
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * const stream = server.experimental.tasks.elicitInputStream({
137
+ * mode: 'url',
138
+ * message: 'Please authenticate',
139
+ * elicitationId: 'auth-123',
140
+ * url: 'https://example.com/auth'
141
+ * }, {
142
+ * task: { ttl: 300000 } // Task-augmented for long-running auth flow
143
+ * });
144
+ *
145
+ * for await (const message of stream) {
146
+ * switch (message.type) {
147
+ * case 'taskCreated':
148
+ * console.log('Task created:', message.task.taskId);
149
+ * break;
150
+ * case 'taskStatus':
151
+ * console.log('Task status:', message.task.status);
152
+ * break;
153
+ * case 'result':
154
+ * console.log('User action:', message.result.action);
155
+ * break;
156
+ * case 'error':
157
+ * console.error('Error:', message.error);
158
+ * break;
159
+ * }
160
+ * }
161
+ * ```
162
+ *
163
+ * @param params - The elicitation request parameters
164
+ * @param options - Optional request options (timeout, signal, task creation params, etc.)
165
+ * @returns AsyncGenerator that yields ResponseMessage objects
166
+ *
167
+ * @experimental
168
+ */
169
+ elicitInputStream(params, options) {
170
+ // Access client capabilities via the server
171
+ const clientCapabilities = this._server.getClientCapabilities();
172
+ const mode = params.mode ?? 'form';
173
+ // Capability check based on mode
174
+ switch (mode) {
175
+ case 'url': {
176
+ if (!clientCapabilities?.elicitation?.url) {
177
+ throw new Error('Client does not support url elicitation.');
178
+ }
179
+ break;
180
+ }
181
+ case 'form': {
182
+ if (!clientCapabilities?.elicitation?.form) {
183
+ throw new Error('Client does not support form elicitation.');
184
+ }
185
+ break;
186
+ }
187
+ }
188
+ // Normalize params to ensure mode is set for form mode (defaults to 'form' per spec)
189
+ const normalizedParams = mode === 'form' && params.mode === undefined ? { ...params, mode: 'form' } : params;
190
+ // Cast to ServerRequest needed because TypeScript can't narrow the union type
191
+ // based on the discriminated 'method' field when constructing the object literal
192
+ return this.requestStream({
193
+ method: 'elicitation/create',
194
+ params: normalizedParams
195
+ }, ElicitResultSchema, options);
196
+ }
197
+ /**
198
+ * Gets the current status of a task.
199
+ *
200
+ * @param taskId - The task identifier
201
+ * @param options - Optional request options
202
+ * @returns The task status
203
+ *
204
+ * @experimental
205
+ */
206
+ async getTask(taskId, options) {
207
+ return this._server.getTask({ taskId }, options);
208
+ }
209
+ /**
210
+ * Retrieves the result of a completed task.
211
+ *
212
+ * @param taskId - The task identifier
213
+ * @param resultSchema - Zod schema for validating the result
214
+ * @param options - Optional request options
215
+ * @returns The task result
216
+ *
217
+ * @experimental
218
+ */
219
+ async getTaskResult(taskId, resultSchema, options) {
220
+ return this._server.getTaskResult({ taskId }, resultSchema, options);
221
+ }
222
+ /**
223
+ * Lists tasks with optional pagination.
224
+ *
225
+ * @param cursor - Optional pagination cursor
226
+ * @param options - Optional request options
227
+ * @returns List of tasks with optional next cursor
228
+ *
229
+ * @experimental
230
+ */
231
+ async listTasks(cursor, options) {
232
+ return this._server.listTasks(cursor ? { cursor } : undefined, options);
233
+ }
234
+ /**
235
+ * Cancels a running task.
236
+ *
237
+ * @param taskId - The task identifier
238
+ * @param options - Optional request options
239
+ *
240
+ * @experimental
241
+ */
242
+ async cancelTask(taskId, options) {
243
+ return this._server.cancelTask({ taskId }, options);
244
+ }
245
+ }
246
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/experimental/tasks/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * In-memory implementations of TaskStore and TaskMessageQueue.
3
+ * WARNING: These APIs are experimental and may change without notice.
4
+ *
5
+ * @experimental
6
+ */
7
+ import { Task, RequestId, Result, Request } from '../../../types.js';
8
+ import { TaskStore, TaskMessageQueue, QueuedMessage, CreateTaskOptions } from '../interfaces.js';
9
+ /**
10
+ * A simple in-memory implementation of TaskStore for demonstration purposes.
11
+ *
12
+ * This implementation stores all tasks in memory and provides automatic cleanup
13
+ * based on the ttl duration specified in the task creation parameters.
14
+ *
15
+ * Note: This is not suitable for production use as all data is lost on restart.
16
+ * For production, consider implementing TaskStore with a database or distributed cache.
17
+ *
18
+ * @experimental
19
+ */
20
+ export declare class InMemoryTaskStore implements TaskStore {
21
+ private tasks;
22
+ private cleanupTimers;
23
+ /**
24
+ * Generates a unique task ID.
25
+ * Uses 16 bytes of random data encoded as hex (32 characters).
26
+ */
27
+ private generateTaskId;
28
+ createTask(taskParams: CreateTaskOptions, requestId: RequestId, request: Request, _sessionId?: string): Promise<Task>;
29
+ getTask(taskId: string, _sessionId?: string): Promise<Task | null>;
30
+ storeTaskResult(taskId: string, status: 'completed' | 'failed', result: Result, _sessionId?: string): Promise<void>;
31
+ getTaskResult(taskId: string, _sessionId?: string): Promise<Result>;
32
+ updateTaskStatus(taskId: string, status: Task['status'], statusMessage?: string, _sessionId?: string): Promise<void>;
33
+ listTasks(cursor?: string, _sessionId?: string): Promise<{
34
+ tasks: Task[];
35
+ nextCursor?: string;
36
+ }>;
37
+ /**
38
+ * Cleanup all timers (useful for testing or graceful shutdown)
39
+ */
40
+ cleanup(): void;
41
+ /**
42
+ * Get all tasks (useful for debugging)
43
+ */
44
+ getAllTasks(): Task[];
45
+ }
46
+ /**
47
+ * A simple in-memory implementation of TaskMessageQueue for demonstration purposes.
48
+ *
49
+ * This implementation stores messages in memory, organized by task ID and optional session ID.
50
+ * Messages are stored in FIFO queues per task.
51
+ *
52
+ * Note: This is not suitable for production use in distributed systems.
53
+ * For production, consider implementing TaskMessageQueue with Redis or other distributed queues.
54
+ *
55
+ * @experimental
56
+ */
57
+ export declare class InMemoryTaskMessageQueue implements TaskMessageQueue {
58
+ private queues;
59
+ /**
60
+ * Generates a queue key from taskId.
61
+ * SessionId is intentionally ignored because taskIds are globally unique
62
+ * and tasks need to be accessible across HTTP requests/sessions.
63
+ */
64
+ private getQueueKey;
65
+ /**
66
+ * Gets or creates a queue for the given task and session.
67
+ */
68
+ private getQueue;
69
+ /**
70
+ * Adds a message to the end of the queue for a specific task.
71
+ * Atomically checks queue size and throws if maxSize would be exceeded.
72
+ * @param taskId The task identifier
73
+ * @param message The message to enqueue
74
+ * @param sessionId Optional session ID for binding the operation to a specific session
75
+ * @param maxSize Optional maximum queue size - if specified and queue is full, throws an error
76
+ * @throws Error if maxSize is specified and would be exceeded
77
+ */
78
+ enqueue(taskId: string, message: QueuedMessage, sessionId?: string, maxSize?: number): Promise<void>;
79
+ /**
80
+ * Removes and returns the first message from the queue for a specific task.
81
+ * @param taskId The task identifier
82
+ * @param sessionId Optional session ID for binding the query to a specific session
83
+ * @returns The first message, or undefined if the queue is empty
84
+ */
85
+ dequeue(taskId: string, sessionId?: string): Promise<QueuedMessage | undefined>;
86
+ /**
87
+ * Removes and returns all messages from the queue for a specific task.
88
+ * @param taskId The task identifier
89
+ * @param sessionId Optional session ID for binding the query to a specific session
90
+ * @returns Array of all messages that were in the queue
91
+ */
92
+ dequeueAll(taskId: string, sessionId?: string): Promise<QueuedMessage[]>;
93
+ }
94
+ //# sourceMappingURL=in-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../../../src/experimental/tasks/stores/in-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAc,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAU7G;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,SAAS;IAC/C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,aAAa,CAAoD;IAEzE;;;OAGG;IACH,OAAO,CAAC,cAAc;IAIhB,UAAU,CAAC,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CrH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAKlE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCnH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAanE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCpH,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BtG;;OAEG;IACH,OAAO,IAAI,IAAI;IAQf;;OAEG;IACH,WAAW,IAAI,IAAI,EAAE;CAGxB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,MAAM,CAAsC;IAEpD;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAUhB;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1G;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAKrF;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAMjF"}