@modelcontextprotocol/sdk 1.23.0 → 1.24.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 (316) hide show
  1. package/README.md +84 -1507
  2. package/dist/cjs/client/auth-extensions.d.ts +178 -0
  3. package/dist/cjs/client/auth-extensions.d.ts.map +1 -0
  4. package/dist/cjs/client/auth-extensions.js +300 -0
  5. package/dist/cjs/client/auth-extensions.js.map +1 -0
  6. package/dist/cjs/client/auth.d.ts +90 -2
  7. package/dist/cjs/client/auth.d.ts.map +1 -1
  8. package/dist/cjs/client/auth.js +131 -75
  9. package/dist/cjs/client/auth.js.map +1 -1
  10. package/dist/cjs/client/index.d.ts +122 -14
  11. package/dist/cjs/client/index.d.ts.map +1 -1
  12. package/dist/cjs/client/index.js +125 -3
  13. package/dist/cjs/client/index.js.map +1 -1
  14. package/dist/cjs/client/sse.d.ts.map +1 -1
  15. package/dist/cjs/client/sse.js +6 -2
  16. package/dist/cjs/client/sse.js.map +1 -1
  17. package/dist/cjs/client/stdio.d.ts +0 -1
  18. package/dist/cjs/client/stdio.d.ts.map +1 -1
  19. package/dist/cjs/client/stdio.js +36 -11
  20. package/dist/cjs/client/stdio.js.map +1 -1
  21. package/dist/cjs/client/streamableHttp.d.ts +1 -0
  22. package/dist/cjs/client/streamableHttp.d.ts.map +1 -1
  23. package/dist/cjs/client/streamableHttp.js +36 -15
  24. package/dist/cjs/client/streamableHttp.js.map +1 -1
  25. package/dist/cjs/examples/client/simpleClientCredentials.d.ts +20 -0
  26. package/dist/cjs/examples/client/simpleClientCredentials.d.ts.map +1 -0
  27. package/dist/cjs/examples/client/simpleClientCredentials.js +70 -0
  28. package/dist/cjs/examples/client/simpleClientCredentials.js.map +1 -0
  29. package/dist/cjs/examples/client/simpleOAuthClient.js +77 -1
  30. package/dist/cjs/examples/client/simpleOAuthClient.js.map +1 -1
  31. package/dist/cjs/examples/client/simpleStreamableHttp.js +74 -3
  32. package/dist/cjs/examples/client/simpleStreamableHttp.js.map +1 -1
  33. package/dist/cjs/examples/client/simpleTaskInteractiveClient.d.ts +10 -0
  34. package/dist/cjs/examples/client/simpleTaskInteractiveClient.d.ts.map +1 -0
  35. package/dist/cjs/examples/client/simpleTaskInteractiveClient.js +158 -0
  36. package/dist/cjs/examples/client/simpleTaskInteractiveClient.js.map +1 -0
  37. package/dist/cjs/examples/server/elicitationFormExample.js +2 -12
  38. package/dist/cjs/examples/server/elicitationFormExample.js.map +1 -1
  39. package/dist/cjs/examples/server/elicitationUrlExample.js +4 -3
  40. package/dist/cjs/examples/server/elicitationUrlExample.js.map +1 -1
  41. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js +2 -12
  42. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js.map +1 -1
  43. package/dist/cjs/examples/server/simpleSseServer.js +2 -6
  44. package/dist/cjs/examples/server/simpleSseServer.js.map +1 -1
  45. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js +2 -12
  46. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
  47. package/dist/cjs/examples/server/simpleStreamableHttp.js +61 -21
  48. package/dist/cjs/examples/server/simpleStreamableHttp.js.map +1 -1
  49. package/dist/cjs/examples/server/simpleTaskInteractive.d.ts +12 -0
  50. package/dist/cjs/examples/server/simpleTaskInteractive.d.ts.map +1 -0
  51. package/dist/cjs/examples/server/simpleTaskInteractive.js +603 -0
  52. package/dist/cjs/examples/server/simpleTaskInteractive.js.map +1 -0
  53. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js +2 -12
  54. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
  55. package/dist/cjs/examples/server/ssePollingExample.js +11 -25
  56. package/dist/cjs/examples/server/ssePollingExample.js.map +1 -1
  57. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js +2 -6
  58. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -1
  59. package/dist/cjs/examples/server/toolWithSampleServer.js +7 -5
  60. package/dist/cjs/examples/server/toolWithSampleServer.js.map +1 -1
  61. package/dist/cjs/experimental/index.d.ts +13 -0
  62. package/dist/cjs/experimental/index.d.ts.map +1 -0
  63. package/dist/cjs/experimental/index.js +29 -0
  64. package/dist/cjs/experimental/index.js.map +1 -0
  65. package/dist/cjs/experimental/tasks/client.d.ts +121 -0
  66. package/dist/cjs/experimental/tasks/client.d.ts.map +1 -0
  67. package/dist/cjs/experimental/tasks/client.js +189 -0
  68. package/dist/cjs/experimental/tasks/client.js.map +1 -0
  69. package/dist/cjs/experimental/tasks/helpers.d.ts +47 -0
  70. package/dist/cjs/experimental/tasks/helpers.d.ts.map +1 -0
  71. package/dist/cjs/experimental/tasks/helpers.js +70 -0
  72. package/dist/cjs/experimental/tasks/helpers.js.map +1 -0
  73. package/dist/cjs/experimental/tasks/index.d.ts +16 -0
  74. package/dist/cjs/experimental/tasks/index.d.ts.map +1 -0
  75. package/dist/cjs/experimental/tasks/index.js +39 -0
  76. package/dist/cjs/experimental/tasks/index.js.map +1 -0
  77. package/dist/cjs/experimental/tasks/interfaces.d.ts +232 -0
  78. package/dist/cjs/experimental/tasks/interfaces.d.ts.map +1 -0
  79. package/dist/cjs/experimental/tasks/interfaces.js +19 -0
  80. package/dist/cjs/experimental/tasks/interfaces.js.map +1 -0
  81. package/dist/cjs/experimental/tasks/mcp-server.d.ts +77 -0
  82. package/dist/cjs/experimental/tasks/mcp-server.d.ts.map +1 -0
  83. package/dist/cjs/experimental/tasks/mcp-server.js +36 -0
  84. package/dist/cjs/experimental/tasks/mcp-server.js.map +1 -0
  85. package/dist/cjs/experimental/tasks/server.d.ts +83 -0
  86. package/dist/cjs/experimental/tasks/server.d.ts.map +1 -0
  87. package/dist/cjs/experimental/tasks/server.js +93 -0
  88. package/dist/cjs/experimental/tasks/server.js.map +1 -0
  89. package/dist/cjs/experimental/tasks/stores/in-memory.d.ts +94 -0
  90. package/dist/cjs/experimental/tasks/stores/in-memory.d.ts.map +1 -0
  91. package/dist/cjs/experimental/tasks/stores/in-memory.js +253 -0
  92. package/dist/cjs/experimental/tasks/stores/in-memory.js.map +1 -0
  93. package/dist/cjs/experimental/tasks/types.d.ts +10 -0
  94. package/dist/cjs/experimental/tasks/types.d.ts.map +1 -0
  95. package/dist/cjs/experimental/tasks/types.js +28 -0
  96. package/dist/cjs/experimental/tasks/types.js.map +1 -0
  97. package/dist/cjs/server/auth/errors.d.ts +7 -0
  98. package/dist/cjs/server/auth/errors.d.ts.map +1 -1
  99. package/dist/cjs/server/auth/errors.js +11 -2
  100. package/dist/cjs/server/auth/errors.js.map +1 -1
  101. package/dist/cjs/server/auth/handlers/token.d.ts.map +1 -1
  102. package/dist/cjs/server/auth/handlers/token.js +2 -2
  103. package/dist/cjs/server/auth/handlers/token.js.map +1 -1
  104. package/dist/cjs/server/auth/middleware/clientAuth.d.ts.map +1 -1
  105. package/dist/cjs/server/auth/middleware/clientAuth.js +0 -4
  106. package/dist/cjs/server/auth/middleware/clientAuth.js.map +1 -1
  107. package/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -1
  108. package/dist/cjs/server/auth/providers/proxyProvider.js +8 -4
  109. package/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -1
  110. package/dist/cjs/server/auth/router.d.ts.map +1 -1
  111. package/dist/cjs/server/auth/router.js +7 -1
  112. package/dist/cjs/server/auth/router.js.map +1 -1
  113. package/dist/cjs/server/index.d.ts +91 -168
  114. package/dist/cjs/server/index.d.ts.map +1 -1
  115. package/dist/cjs/server/index.js +162 -0
  116. package/dist/cjs/server/index.js.map +1 -1
  117. package/dist/cjs/server/mcp.d.ts +41 -6
  118. package/dist/cjs/server/mcp.d.ts.map +1 -1
  119. package/dist/cjs/server/mcp.js +203 -48
  120. package/dist/cjs/server/mcp.js.map +1 -1
  121. package/dist/cjs/server/middleware/hostHeaderValidation.d.ts +32 -0
  122. package/dist/cjs/server/middleware/hostHeaderValidation.d.ts.map +1 -0
  123. package/dist/cjs/server/middleware/hostHeaderValidation.js +80 -0
  124. package/dist/cjs/server/middleware/hostHeaderValidation.js.map +1 -0
  125. package/dist/cjs/server/sse.d.ts +6 -0
  126. package/dist/cjs/server/sse.d.ts.map +1 -1
  127. package/dist/cjs/server/sse.js +3 -3
  128. package/dist/cjs/server/sse.js.map +1 -1
  129. package/dist/cjs/server/stdio.d.ts +1 -1
  130. package/dist/cjs/server/stdio.js +1 -1
  131. package/dist/cjs/server/streamableHttp.d.ts +11 -0
  132. package/dist/cjs/server/streamableHttp.d.ts.map +1 -1
  133. package/dist/cjs/server/streamableHttp.js +30 -7
  134. package/dist/cjs/server/streamableHttp.js.map +1 -1
  135. package/dist/cjs/server/zod-compat.d.ts +1 -1
  136. package/dist/cjs/server/zod-compat.d.ts.map +1 -1
  137. package/dist/cjs/server/zod-compat.js +2 -2
  138. package/dist/cjs/server/zod-compat.js.map +1 -1
  139. package/dist/cjs/shared/auth.d.ts +1 -1
  140. package/dist/cjs/shared/auth.js +1 -1
  141. package/dist/cjs/shared/auth.js.map +1 -1
  142. package/dist/cjs/shared/protocol.d.ts +220 -3
  143. package/dist/cjs/shared/protocol.d.ts.map +1 -1
  144. package/dist/cjs/shared/protocol.js +699 -38
  145. package/dist/cjs/shared/protocol.js.map +1 -1
  146. package/dist/cjs/shared/responseMessage.d.ts +45 -0
  147. package/dist/cjs/shared/responseMessage.d.ts.map +1 -0
  148. package/dist/cjs/shared/responseMessage.js +23 -0
  149. package/dist/cjs/shared/responseMessage.js.map +1 -0
  150. package/dist/cjs/shared/transport.d.ts +1 -1
  151. package/dist/cjs/types.d.ts +2369 -73
  152. package/dist/cjs/types.d.ts.map +1 -1
  153. package/dist/cjs/types.js +310 -18
  154. package/dist/cjs/types.js.map +1 -1
  155. package/dist/esm/client/auth-extensions.d.ts +178 -0
  156. package/dist/esm/client/auth-extensions.d.ts.map +1 -0
  157. package/dist/esm/client/auth-extensions.js +270 -0
  158. package/dist/esm/client/auth-extensions.js.map +1 -0
  159. package/dist/esm/client/auth.d.ts +90 -2
  160. package/dist/esm/client/auth.d.ts.map +1 -1
  161. package/dist/esm/client/auth.js +129 -75
  162. package/dist/esm/client/auth.js.map +1 -1
  163. package/dist/esm/client/index.d.ts +122 -14
  164. package/dist/esm/client/index.d.ts.map +1 -1
  165. package/dist/esm/client/index.js +126 -4
  166. package/dist/esm/client/index.js.map +1 -1
  167. package/dist/esm/client/sse.d.ts.map +1 -1
  168. package/dist/esm/client/sse.js +7 -3
  169. package/dist/esm/client/sse.js.map +1 -1
  170. package/dist/esm/client/stdio.d.ts +0 -1
  171. package/dist/esm/client/stdio.d.ts.map +1 -1
  172. package/dist/esm/client/stdio.js +36 -11
  173. package/dist/esm/client/stdio.js.map +1 -1
  174. package/dist/esm/client/streamableHttp.d.ts +1 -0
  175. package/dist/esm/client/streamableHttp.d.ts.map +1 -1
  176. package/dist/esm/client/streamableHttp.js +36 -15
  177. package/dist/esm/client/streamableHttp.js.map +1 -1
  178. package/dist/esm/examples/client/simpleClientCredentials.d.ts +20 -0
  179. package/dist/esm/examples/client/simpleClientCredentials.d.ts.map +1 -0
  180. package/dist/esm/examples/client/simpleClientCredentials.js +68 -0
  181. package/dist/esm/examples/client/simpleClientCredentials.js.map +1 -0
  182. package/dist/esm/examples/client/simpleOAuthClient.js +77 -1
  183. package/dist/esm/examples/client/simpleOAuthClient.js.map +1 -1
  184. package/dist/esm/examples/client/simpleStreamableHttp.js +75 -4
  185. package/dist/esm/examples/client/simpleStreamableHttp.js.map +1 -1
  186. package/dist/esm/examples/client/simpleTaskInteractiveClient.d.ts +10 -0
  187. package/dist/esm/examples/client/simpleTaskInteractiveClient.d.ts.map +1 -0
  188. package/dist/esm/examples/client/simpleTaskInteractiveClient.js +156 -0
  189. package/dist/esm/examples/client/simpleTaskInteractiveClient.js.map +1 -0
  190. package/dist/esm/examples/server/elicitationFormExample.js +2 -9
  191. package/dist/esm/examples/server/elicitationFormExample.js.map +1 -1
  192. package/dist/esm/examples/server/elicitationUrlExample.js +4 -3
  193. package/dist/esm/examples/server/elicitationUrlExample.js.map +1 -1
  194. package/dist/esm/examples/server/jsonResponseStreamableHttp.js +2 -9
  195. package/dist/esm/examples/server/jsonResponseStreamableHttp.js.map +1 -1
  196. package/dist/esm/examples/server/simpleSseServer.js +2 -3
  197. package/dist/esm/examples/server/simpleSseServer.js.map +1 -1
  198. package/dist/esm/examples/server/simpleStatelessStreamableHttp.js +2 -9
  199. package/dist/esm/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
  200. package/dist/esm/examples/server/simpleStreamableHttp.js +62 -19
  201. package/dist/esm/examples/server/simpleStreamableHttp.js.map +1 -1
  202. package/dist/esm/examples/server/simpleTaskInteractive.d.ts +12 -0
  203. package/dist/esm/examples/server/simpleTaskInteractive.d.ts.map +1 -0
  204. package/dist/esm/examples/server/simpleTaskInteractive.js +601 -0
  205. package/dist/esm/examples/server/simpleTaskInteractive.js.map +1 -0
  206. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js +2 -9
  207. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
  208. package/dist/esm/examples/server/ssePollingExample.js +11 -25
  209. package/dist/esm/examples/server/ssePollingExample.js.map +1 -1
  210. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js +2 -3
  211. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -1
  212. package/dist/esm/examples/server/toolWithSampleServer.js +7 -5
  213. package/dist/esm/examples/server/toolWithSampleServer.js.map +1 -1
  214. package/dist/esm/experimental/index.d.ts +13 -0
  215. package/dist/esm/experimental/index.d.ts.map +1 -0
  216. package/dist/esm/experimental/index.js +13 -0
  217. package/dist/esm/experimental/index.js.map +1 -0
  218. package/dist/esm/experimental/tasks/client.d.ts +121 -0
  219. package/dist/esm/experimental/tasks/client.d.ts.map +1 -0
  220. package/dist/esm/experimental/tasks/client.js +185 -0
  221. package/dist/esm/experimental/tasks/client.js.map +1 -0
  222. package/dist/esm/experimental/tasks/helpers.d.ts +47 -0
  223. package/dist/esm/experimental/tasks/helpers.d.ts.map +1 -0
  224. package/dist/esm/experimental/tasks/helpers.js +66 -0
  225. package/dist/esm/experimental/tasks/helpers.js.map +1 -0
  226. package/dist/esm/experimental/tasks/index.d.ts +16 -0
  227. package/dist/esm/experimental/tasks/index.d.ts.map +1 -0
  228. package/dist/esm/experimental/tasks/index.js +20 -0
  229. package/dist/esm/experimental/tasks/index.js.map +1 -0
  230. package/dist/esm/experimental/tasks/interfaces.d.ts +232 -0
  231. package/dist/esm/experimental/tasks/interfaces.d.ts.map +1 -0
  232. package/dist/esm/experimental/tasks/interfaces.js +16 -0
  233. package/dist/esm/experimental/tasks/interfaces.js.map +1 -0
  234. package/dist/esm/experimental/tasks/mcp-server.d.ts +77 -0
  235. package/dist/esm/experimental/tasks/mcp-server.d.ts.map +1 -0
  236. package/dist/esm/experimental/tasks/mcp-server.js +32 -0
  237. package/dist/esm/experimental/tasks/mcp-server.js.map +1 -0
  238. package/dist/esm/experimental/tasks/server.d.ts +83 -0
  239. package/dist/esm/experimental/tasks/server.d.ts.map +1 -0
  240. package/dist/esm/experimental/tasks/server.js +89 -0
  241. package/dist/esm/experimental/tasks/server.js.map +1 -0
  242. package/dist/esm/experimental/tasks/stores/in-memory.d.ts +94 -0
  243. package/dist/esm/experimental/tasks/stores/in-memory.d.ts.map +1 -0
  244. package/dist/esm/experimental/tasks/stores/in-memory.js +248 -0
  245. package/dist/esm/experimental/tasks/stores/in-memory.js.map +1 -0
  246. package/dist/esm/experimental/tasks/types.d.ts +10 -0
  247. package/dist/esm/experimental/tasks/types.d.ts.map +1 -0
  248. package/dist/esm/experimental/tasks/types.js +10 -0
  249. package/dist/esm/experimental/tasks/types.js.map +1 -0
  250. package/dist/esm/server/auth/errors.d.ts +7 -0
  251. package/dist/esm/server/auth/errors.d.ts.map +1 -1
  252. package/dist/esm/server/auth/errors.js +9 -1
  253. package/dist/esm/server/auth/errors.js.map +1 -1
  254. package/dist/esm/server/auth/handlers/token.d.ts.map +1 -1
  255. package/dist/esm/server/auth/handlers/token.js +2 -2
  256. package/dist/esm/server/auth/handlers/token.js.map +1 -1
  257. package/dist/esm/server/auth/middleware/clientAuth.d.ts.map +1 -1
  258. package/dist/esm/server/auth/middleware/clientAuth.js +0 -4
  259. package/dist/esm/server/auth/middleware/clientAuth.js.map +1 -1
  260. package/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -1
  261. package/dist/esm/server/auth/providers/proxyProvider.js +8 -4
  262. package/dist/esm/server/auth/providers/proxyProvider.js.map +1 -1
  263. package/dist/esm/server/auth/router.d.ts.map +1 -1
  264. package/dist/esm/server/auth/router.js +7 -1
  265. package/dist/esm/server/auth/router.js.map +1 -1
  266. package/dist/esm/server/index.d.ts +91 -168
  267. package/dist/esm/server/index.d.ts.map +1 -1
  268. package/dist/esm/server/index.js +159 -1
  269. package/dist/esm/server/index.js.map +1 -1
  270. package/dist/esm/server/mcp.d.ts +41 -6
  271. package/dist/esm/server/mcp.d.ts.map +1 -1
  272. package/dist/esm/server/mcp.js +203 -48
  273. package/dist/esm/server/mcp.js.map +1 -1
  274. package/dist/esm/server/middleware/hostHeaderValidation.d.ts +32 -0
  275. package/dist/esm/server/middleware/hostHeaderValidation.d.ts.map +1 -0
  276. package/dist/esm/server/middleware/hostHeaderValidation.js +76 -0
  277. package/dist/esm/server/middleware/hostHeaderValidation.js.map +1 -0
  278. package/dist/esm/server/sse.d.ts +6 -0
  279. package/dist/esm/server/sse.d.ts.map +1 -1
  280. package/dist/esm/server/sse.js +2 -2
  281. package/dist/esm/server/sse.js.map +1 -1
  282. package/dist/esm/server/stdio.d.ts +1 -1
  283. package/dist/esm/server/stdio.js +1 -1
  284. package/dist/esm/server/streamableHttp.d.ts +11 -0
  285. package/dist/esm/server/streamableHttp.d.ts.map +1 -1
  286. package/dist/esm/server/streamableHttp.js +30 -7
  287. package/dist/esm/server/streamableHttp.js.map +1 -1
  288. package/dist/esm/server/zod-compat.d.ts +1 -1
  289. package/dist/esm/server/zod-compat.d.ts.map +1 -1
  290. package/dist/esm/server/zod-compat.js +2 -2
  291. package/dist/esm/server/zod-compat.js.map +1 -1
  292. package/dist/esm/shared/auth.d.ts +1 -1
  293. package/dist/esm/shared/auth.js +1 -1
  294. package/dist/esm/shared/auth.js.map +1 -1
  295. package/dist/esm/shared/protocol.d.ts +220 -3
  296. package/dist/esm/shared/protocol.d.ts.map +1 -1
  297. package/dist/esm/shared/protocol.js +700 -39
  298. package/dist/esm/shared/protocol.js.map +1 -1
  299. package/dist/esm/shared/responseMessage.d.ts +45 -0
  300. package/dist/esm/shared/responseMessage.d.ts.map +1 -0
  301. package/dist/esm/shared/responseMessage.js +19 -0
  302. package/dist/esm/shared/responseMessage.js.map +1 -0
  303. package/dist/esm/shared/transport.d.ts +1 -1
  304. package/dist/esm/types.d.ts +2369 -73
  305. package/dist/esm/types.d.ts.map +1 -1
  306. package/dist/esm/types.js +306 -15
  307. package/dist/esm/types.js.map +1 -1
  308. package/package.json +12 -1
  309. package/dist/cjs/shared/zodTestMatrix.d.ts +0 -16
  310. package/dist/cjs/shared/zodTestMatrix.d.ts.map +0 -1
  311. package/dist/cjs/shared/zodTestMatrix.js +0 -43
  312. package/dist/cjs/shared/zodTestMatrix.js.map +0 -1
  313. package/dist/esm/shared/zodTestMatrix.d.ts +0 -16
  314. package/dist/esm/shared/zodTestMatrix.d.ts.map +0 -1
  315. package/dist/esm/shared/zodTestMatrix.js +0 -17
  316. package/dist/esm/shared/zodTestMatrix.js.map +0 -1
@@ -0,0 +1,601 @@
1
+ /**
2
+ * Simple interactive task server demonstrating elicitation and sampling.
3
+ *
4
+ * This server demonstrates the task message queue pattern from the MCP Tasks spec:
5
+ * - confirm_delete: Uses elicitation to ask the user for confirmation
6
+ * - write_haiku: Uses sampling to request an LLM to generate content
7
+ *
8
+ * Both tools use the "call-now, fetch-later" pattern where the initial call
9
+ * creates a task, and the result is fetched via tasks/result endpoint.
10
+ */
11
+ import { randomUUID } from 'node:crypto';
12
+ import { createMcpExpressApp, Server } from '../../server/index.js';
13
+ import { StreamableHTTPServerTransport } from '../../server/streamableHttp.js';
14
+ import { RELATED_TASK_META_KEY, ListToolsRequestSchema, CallToolRequestSchema, GetTaskRequestSchema, GetTaskPayloadRequestSchema } from '../../types.js';
15
+ import { isTerminal } from '../../experimental/tasks/interfaces.js';
16
+ import { InMemoryTaskStore } from '../../experimental/tasks/stores/in-memory.js';
17
+ // ============================================================================
18
+ // Resolver - Promise-like for passing results between async operations
19
+ // ============================================================================
20
+ class Resolver {
21
+ constructor() {
22
+ this._done = false;
23
+ this._promise = new Promise((resolve, reject) => {
24
+ this._resolve = resolve;
25
+ this._reject = reject;
26
+ });
27
+ }
28
+ setResult(value) {
29
+ if (this._done)
30
+ return;
31
+ this._done = true;
32
+ this._resolve(value);
33
+ }
34
+ setException(error) {
35
+ if (this._done)
36
+ return;
37
+ this._done = true;
38
+ this._reject(error);
39
+ }
40
+ wait() {
41
+ return this._promise;
42
+ }
43
+ done() {
44
+ return this._done;
45
+ }
46
+ }
47
+ class TaskMessageQueueWithResolvers {
48
+ constructor() {
49
+ this.queues = new Map();
50
+ this.waitResolvers = new Map();
51
+ }
52
+ getQueue(taskId) {
53
+ let queue = this.queues.get(taskId);
54
+ if (!queue) {
55
+ queue = [];
56
+ this.queues.set(taskId, queue);
57
+ }
58
+ return queue;
59
+ }
60
+ async enqueue(taskId, message, _sessionId, maxSize) {
61
+ const queue = this.getQueue(taskId);
62
+ if (maxSize !== undefined && queue.length >= maxSize) {
63
+ throw new Error(`Task message queue overflow: queue size (${queue.length}) exceeds maximum (${maxSize})`);
64
+ }
65
+ queue.push(message);
66
+ // Notify any waiters
67
+ this.notifyWaiters(taskId);
68
+ }
69
+ async enqueueWithResolver(taskId, message, resolver, originalRequestId) {
70
+ const queue = this.getQueue(taskId);
71
+ const queuedMessage = {
72
+ type: 'request',
73
+ message,
74
+ timestamp: Date.now(),
75
+ resolver,
76
+ originalRequestId
77
+ };
78
+ queue.push(queuedMessage);
79
+ this.notifyWaiters(taskId);
80
+ }
81
+ async dequeue(taskId, _sessionId) {
82
+ const queue = this.getQueue(taskId);
83
+ return queue.shift();
84
+ }
85
+ async dequeueAll(taskId, _sessionId) {
86
+ var _a;
87
+ const queue = (_a = this.queues.get(taskId)) !== null && _a !== void 0 ? _a : [];
88
+ this.queues.delete(taskId);
89
+ return queue;
90
+ }
91
+ async waitForMessage(taskId) {
92
+ // Check if there are already messages
93
+ const queue = this.getQueue(taskId);
94
+ if (queue.length > 0)
95
+ return;
96
+ // Wait for a message to be added
97
+ return new Promise(resolve => {
98
+ let waiters = this.waitResolvers.get(taskId);
99
+ if (!waiters) {
100
+ waiters = [];
101
+ this.waitResolvers.set(taskId, waiters);
102
+ }
103
+ waiters.push(resolve);
104
+ });
105
+ }
106
+ notifyWaiters(taskId) {
107
+ const waiters = this.waitResolvers.get(taskId);
108
+ if (waiters) {
109
+ this.waitResolvers.delete(taskId);
110
+ for (const resolve of waiters) {
111
+ resolve();
112
+ }
113
+ }
114
+ }
115
+ cleanup() {
116
+ this.queues.clear();
117
+ this.waitResolvers.clear();
118
+ }
119
+ }
120
+ // ============================================================================
121
+ // Extended task store with wait functionality
122
+ // ============================================================================
123
+ class TaskStoreWithNotifications extends InMemoryTaskStore {
124
+ constructor() {
125
+ super(...arguments);
126
+ this.updateResolvers = new Map();
127
+ }
128
+ async updateTaskStatus(taskId, status, statusMessage, sessionId) {
129
+ await super.updateTaskStatus(taskId, status, statusMessage, sessionId);
130
+ this.notifyUpdate(taskId);
131
+ }
132
+ async storeTaskResult(taskId, status, result, sessionId) {
133
+ await super.storeTaskResult(taskId, status, result, sessionId);
134
+ this.notifyUpdate(taskId);
135
+ }
136
+ async waitForUpdate(taskId) {
137
+ return new Promise(resolve => {
138
+ let waiters = this.updateResolvers.get(taskId);
139
+ if (!waiters) {
140
+ waiters = [];
141
+ this.updateResolvers.set(taskId, waiters);
142
+ }
143
+ waiters.push(resolve);
144
+ });
145
+ }
146
+ notifyUpdate(taskId) {
147
+ const waiters = this.updateResolvers.get(taskId);
148
+ if (waiters) {
149
+ this.updateResolvers.delete(taskId);
150
+ for (const resolve of waiters) {
151
+ resolve();
152
+ }
153
+ }
154
+ }
155
+ }
156
+ // ============================================================================
157
+ // Task Result Handler - delivers queued messages and routes responses
158
+ // ============================================================================
159
+ class TaskResultHandler {
160
+ constructor(store, queue) {
161
+ this.store = store;
162
+ this.queue = queue;
163
+ this.pendingRequests = new Map();
164
+ }
165
+ async handle(taskId, server, _sessionId) {
166
+ while (true) {
167
+ // Get fresh task state
168
+ const task = await this.store.getTask(taskId);
169
+ if (!task) {
170
+ throw new Error(`Task not found: ${taskId}`);
171
+ }
172
+ // Dequeue and send all pending messages
173
+ await this.deliverQueuedMessages(taskId, server, _sessionId);
174
+ // If task is terminal, return result
175
+ if (isTerminal(task.status)) {
176
+ const result = await this.store.getTaskResult(taskId);
177
+ // Add related-task metadata per spec
178
+ return {
179
+ ...result,
180
+ _meta: {
181
+ ...(result._meta || {}),
182
+ [RELATED_TASK_META_KEY]: { taskId }
183
+ }
184
+ };
185
+ }
186
+ // Wait for task update or new message
187
+ await this.waitForUpdate(taskId);
188
+ }
189
+ }
190
+ async deliverQueuedMessages(taskId, server, _sessionId) {
191
+ while (true) {
192
+ const message = await this.queue.dequeue(taskId);
193
+ if (!message)
194
+ break;
195
+ console.log(`[Server] Delivering queued ${message.type} message for task ${taskId}`);
196
+ if (message.type === 'request') {
197
+ const reqMessage = message;
198
+ // Send the request via the server
199
+ // Store the resolver so we can route the response back
200
+ if (reqMessage.resolver && reqMessage.originalRequestId) {
201
+ this.pendingRequests.set(reqMessage.originalRequestId, reqMessage.resolver);
202
+ }
203
+ // Send the message - for elicitation/sampling, we use the server's methods
204
+ // But since we're in tasks/result context, we need to send via transport
205
+ // This is simplified - in production you'd use proper message routing
206
+ try {
207
+ const request = reqMessage.message;
208
+ let response;
209
+ if (request.method === 'elicitation/create') {
210
+ // Send elicitation request to client
211
+ const params = request.params;
212
+ response = await server.elicitInput(params);
213
+ }
214
+ else if (request.method === 'sampling/createMessage') {
215
+ // Send sampling request to client
216
+ const params = request.params;
217
+ response = await server.createMessage(params);
218
+ }
219
+ else {
220
+ throw new Error(`Unknown request method: ${request.method}`);
221
+ }
222
+ // Route response back to resolver
223
+ if (reqMessage.resolver) {
224
+ reqMessage.resolver.setResult(response);
225
+ }
226
+ }
227
+ catch (error) {
228
+ if (reqMessage.resolver) {
229
+ reqMessage.resolver.setException(error instanceof Error ? error : new Error(String(error)));
230
+ }
231
+ }
232
+ }
233
+ // For notifications, we'd send them too but this example focuses on requests
234
+ }
235
+ }
236
+ async waitForUpdate(taskId) {
237
+ // Race between store update and queue message
238
+ await Promise.race([this.store.waitForUpdate(taskId), this.queue.waitForMessage(taskId)]);
239
+ }
240
+ routeResponse(requestId, response) {
241
+ const resolver = this.pendingRequests.get(requestId);
242
+ if (resolver && !resolver.done()) {
243
+ this.pendingRequests.delete(requestId);
244
+ resolver.setResult(response);
245
+ return true;
246
+ }
247
+ return false;
248
+ }
249
+ routeError(requestId, error) {
250
+ const resolver = this.pendingRequests.get(requestId);
251
+ if (resolver && !resolver.done()) {
252
+ this.pendingRequests.delete(requestId);
253
+ resolver.setException(error);
254
+ return true;
255
+ }
256
+ return false;
257
+ }
258
+ }
259
+ // ============================================================================
260
+ // Task Session - wraps server to enqueue requests during task execution
261
+ // ============================================================================
262
+ class TaskSession {
263
+ constructor(server, taskId, store, queue) {
264
+ this.server = server;
265
+ this.taskId = taskId;
266
+ this.store = store;
267
+ this.queue = queue;
268
+ this.requestCounter = 0;
269
+ }
270
+ nextRequestId() {
271
+ return `task-${this.taskId}-${++this.requestCounter}`;
272
+ }
273
+ async elicit(message, requestedSchema) {
274
+ // Update task status to input_required
275
+ await this.store.updateTaskStatus(this.taskId, 'input_required');
276
+ const requestId = this.nextRequestId();
277
+ // Build the elicitation request with related-task metadata
278
+ const params = {
279
+ message,
280
+ requestedSchema,
281
+ mode: 'form',
282
+ _meta: {
283
+ [RELATED_TASK_META_KEY]: { taskId: this.taskId }
284
+ }
285
+ };
286
+ const jsonrpcRequest = {
287
+ jsonrpc: '2.0',
288
+ id: requestId,
289
+ method: 'elicitation/create',
290
+ params
291
+ };
292
+ // Create resolver to wait for response
293
+ const resolver = new Resolver();
294
+ // Enqueue the request
295
+ await this.queue.enqueueWithResolver(this.taskId, jsonrpcRequest, resolver, requestId);
296
+ try {
297
+ // Wait for response
298
+ const response = await resolver.wait();
299
+ // Update status back to working
300
+ await this.store.updateTaskStatus(this.taskId, 'working');
301
+ return response;
302
+ }
303
+ catch (error) {
304
+ await this.store.updateTaskStatus(this.taskId, 'working');
305
+ throw error;
306
+ }
307
+ }
308
+ async createMessage(messages, maxTokens) {
309
+ // Update task status to input_required
310
+ await this.store.updateTaskStatus(this.taskId, 'input_required');
311
+ const requestId = this.nextRequestId();
312
+ // Build the sampling request with related-task metadata
313
+ const params = {
314
+ messages,
315
+ maxTokens,
316
+ _meta: {
317
+ [RELATED_TASK_META_KEY]: { taskId: this.taskId }
318
+ }
319
+ };
320
+ const jsonrpcRequest = {
321
+ jsonrpc: '2.0',
322
+ id: requestId,
323
+ method: 'sampling/createMessage',
324
+ params
325
+ };
326
+ // Create resolver to wait for response
327
+ const resolver = new Resolver();
328
+ // Enqueue the request
329
+ await this.queue.enqueueWithResolver(this.taskId, jsonrpcRequest, resolver, requestId);
330
+ try {
331
+ // Wait for response
332
+ const response = await resolver.wait();
333
+ // Update status back to working
334
+ await this.store.updateTaskStatus(this.taskId, 'working');
335
+ return response;
336
+ }
337
+ catch (error) {
338
+ await this.store.updateTaskStatus(this.taskId, 'working');
339
+ throw error;
340
+ }
341
+ }
342
+ }
343
+ // ============================================================================
344
+ // Server Setup
345
+ // ============================================================================
346
+ const PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : 8000;
347
+ // Create shared stores
348
+ const taskStore = new TaskStoreWithNotifications();
349
+ const messageQueue = new TaskMessageQueueWithResolvers();
350
+ const taskResultHandler = new TaskResultHandler(taskStore, messageQueue);
351
+ // Track active task executions
352
+ const activeTaskExecutions = new Map();
353
+ // Create the server
354
+ const createServer = () => {
355
+ const server = new Server({ name: 'simple-task-interactive', version: '1.0.0' }, {
356
+ capabilities: {
357
+ tools: {},
358
+ tasks: {
359
+ requests: {
360
+ tools: { call: {} }
361
+ }
362
+ }
363
+ }
364
+ });
365
+ // Register tools
366
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
367
+ return {
368
+ tools: [
369
+ {
370
+ name: 'confirm_delete',
371
+ description: 'Asks for confirmation before deleting (demonstrates elicitation)',
372
+ inputSchema: {
373
+ type: 'object',
374
+ properties: {
375
+ filename: { type: 'string' }
376
+ }
377
+ },
378
+ execution: { taskSupport: 'required' }
379
+ },
380
+ {
381
+ name: 'write_haiku',
382
+ description: 'Asks LLM to write a haiku (demonstrates sampling)',
383
+ inputSchema: {
384
+ type: 'object',
385
+ properties: {
386
+ topic: { type: 'string' }
387
+ }
388
+ },
389
+ execution: { taskSupport: 'required' }
390
+ }
391
+ ]
392
+ };
393
+ });
394
+ // Handle tool calls
395
+ server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
396
+ var _a, _b, _c;
397
+ const { name, arguments: args } = request.params;
398
+ const taskParams = (((_a = request.params._meta) === null || _a === void 0 ? void 0 : _a.task) || request.params.task);
399
+ // Validate task mode - these tools require tasks
400
+ if (!taskParams) {
401
+ throw new Error(`Tool ${name} requires task mode`);
402
+ }
403
+ // Create task
404
+ const taskOptions = {
405
+ ttl: taskParams.ttl,
406
+ pollInterval: (_b = taskParams.pollInterval) !== null && _b !== void 0 ? _b : 1000
407
+ };
408
+ const task = await taskStore.createTask(taskOptions, extra.requestId, request, extra.sessionId);
409
+ console.log(`\n[Server] ${name} called, task created: ${task.taskId}`);
410
+ // Start background task execution
411
+ const taskExecution = (async () => {
412
+ var _a, _b;
413
+ try {
414
+ const taskSession = new TaskSession(server, task.taskId, taskStore, messageQueue);
415
+ if (name === 'confirm_delete') {
416
+ const filename = (_a = args === null || args === void 0 ? void 0 : args.filename) !== null && _a !== void 0 ? _a : 'unknown.txt';
417
+ console.log(`[Server] confirm_delete: asking about '${filename}'`);
418
+ console.log('[Server] Sending elicitation request to client...');
419
+ const result = await taskSession.elicit(`Are you sure you want to delete '${filename}'?`, {
420
+ type: 'object',
421
+ properties: {
422
+ confirm: { type: 'boolean' }
423
+ },
424
+ required: ['confirm']
425
+ });
426
+ console.log(`[Server] Received elicitation response: action=${result.action}, content=${JSON.stringify(result.content)}`);
427
+ let text;
428
+ if (result.action === 'accept' && result.content) {
429
+ const confirmed = result.content.confirm;
430
+ text = confirmed ? `Deleted '${filename}'` : 'Deletion cancelled';
431
+ }
432
+ else {
433
+ text = 'Deletion cancelled';
434
+ }
435
+ console.log(`[Server] Completing task with result: ${text}`);
436
+ await taskStore.storeTaskResult(task.taskId, 'completed', {
437
+ content: [{ type: 'text', text }]
438
+ });
439
+ }
440
+ else if (name === 'write_haiku') {
441
+ const topic = (_b = args === null || args === void 0 ? void 0 : args.topic) !== null && _b !== void 0 ? _b : 'nature';
442
+ console.log(`[Server] write_haiku: topic '${topic}'`);
443
+ console.log('[Server] Sending sampling request to client...');
444
+ const result = await taskSession.createMessage([
445
+ {
446
+ role: 'user',
447
+ content: { type: 'text', text: `Write a haiku about ${topic}` }
448
+ }
449
+ ], 50);
450
+ let haiku = 'No response';
451
+ if (result.content && 'text' in result.content) {
452
+ haiku = result.content.text;
453
+ }
454
+ console.log(`[Server] Received sampling response: ${haiku.substring(0, 50)}...`);
455
+ console.log('[Server] Completing task with haiku');
456
+ await taskStore.storeTaskResult(task.taskId, 'completed', {
457
+ content: [{ type: 'text', text: `Haiku:\n${haiku}` }]
458
+ });
459
+ }
460
+ }
461
+ catch (error) {
462
+ console.error(`[Server] Task ${task.taskId} failed:`, error);
463
+ await taskStore.storeTaskResult(task.taskId, 'failed', {
464
+ content: [{ type: 'text', text: `Error: ${error}` }],
465
+ isError: true
466
+ });
467
+ }
468
+ finally {
469
+ activeTaskExecutions.delete(task.taskId);
470
+ }
471
+ })();
472
+ activeTaskExecutions.set(task.taskId, {
473
+ promise: taskExecution,
474
+ server,
475
+ sessionId: (_c = extra.sessionId) !== null && _c !== void 0 ? _c : ''
476
+ });
477
+ return { task };
478
+ });
479
+ // Handle tasks/get
480
+ server.setRequestHandler(GetTaskRequestSchema, async (request) => {
481
+ const { taskId } = request.params;
482
+ const task = await taskStore.getTask(taskId);
483
+ if (!task) {
484
+ throw new Error(`Task ${taskId} not found`);
485
+ }
486
+ return task;
487
+ });
488
+ // Handle tasks/result
489
+ server.setRequestHandler(GetTaskPayloadRequestSchema, async (request, extra) => {
490
+ var _a;
491
+ const { taskId } = request.params;
492
+ console.log(`[Server] tasks/result called for task ${taskId}`);
493
+ return taskResultHandler.handle(taskId, server, (_a = extra.sessionId) !== null && _a !== void 0 ? _a : '');
494
+ });
495
+ return server;
496
+ };
497
+ // ============================================================================
498
+ // Express App Setup
499
+ // ============================================================================
500
+ const app = createMcpExpressApp();
501
+ // Map to store transports by session ID
502
+ const transports = {};
503
+ // Helper to check if request is initialize
504
+ const isInitializeRequest = (body) => {
505
+ return typeof body === 'object' && body !== null && 'method' in body && body.method === 'initialize';
506
+ };
507
+ // MCP POST endpoint
508
+ app.post('/mcp', async (req, res) => {
509
+ const sessionId = req.headers['mcp-session-id'];
510
+ try {
511
+ let transport;
512
+ if (sessionId && transports[sessionId]) {
513
+ transport = transports[sessionId];
514
+ }
515
+ else if (!sessionId && isInitializeRequest(req.body)) {
516
+ transport = new StreamableHTTPServerTransport({
517
+ sessionIdGenerator: () => randomUUID(),
518
+ onsessioninitialized: sid => {
519
+ console.log(`Session initialized: ${sid}`);
520
+ transports[sid] = transport;
521
+ }
522
+ });
523
+ transport.onclose = () => {
524
+ const sid = transport.sessionId;
525
+ if (sid && transports[sid]) {
526
+ console.log(`Transport closed for session ${sid}`);
527
+ delete transports[sid];
528
+ }
529
+ };
530
+ const server = createServer();
531
+ await server.connect(transport);
532
+ await transport.handleRequest(req, res, req.body);
533
+ return;
534
+ }
535
+ else {
536
+ res.status(400).json({
537
+ jsonrpc: '2.0',
538
+ error: { code: -32000, message: 'Bad Request: No valid session ID' },
539
+ id: null
540
+ });
541
+ return;
542
+ }
543
+ await transport.handleRequest(req, res, req.body);
544
+ }
545
+ catch (error) {
546
+ console.error('Error handling MCP request:', error);
547
+ if (!res.headersSent) {
548
+ res.status(500).json({
549
+ jsonrpc: '2.0',
550
+ error: { code: -32603, message: 'Internal server error' },
551
+ id: null
552
+ });
553
+ }
554
+ }
555
+ });
556
+ // Handle GET requests for SSE streams
557
+ app.get('/mcp', async (req, res) => {
558
+ const sessionId = req.headers['mcp-session-id'];
559
+ if (!sessionId || !transports[sessionId]) {
560
+ res.status(400).send('Invalid or missing session ID');
561
+ return;
562
+ }
563
+ const transport = transports[sessionId];
564
+ await transport.handleRequest(req, res);
565
+ });
566
+ // Handle DELETE requests for session termination
567
+ app.delete('/mcp', async (req, res) => {
568
+ const sessionId = req.headers['mcp-session-id'];
569
+ if (!sessionId || !transports[sessionId]) {
570
+ res.status(400).send('Invalid or missing session ID');
571
+ return;
572
+ }
573
+ console.log(`Session termination request: ${sessionId}`);
574
+ const transport = transports[sessionId];
575
+ await transport.handleRequest(req, res);
576
+ });
577
+ // Start server
578
+ app.listen(PORT, () => {
579
+ console.log(`Starting server on http://localhost:${PORT}/mcp`);
580
+ console.log('\nAvailable tools:');
581
+ console.log(' - confirm_delete: Demonstrates elicitation (asks user y/n)');
582
+ console.log(' - write_haiku: Demonstrates sampling (requests LLM completion)');
583
+ });
584
+ // Handle shutdown
585
+ process.on('SIGINT', async () => {
586
+ console.log('\nShutting down server...');
587
+ for (const sessionId of Object.keys(transports)) {
588
+ try {
589
+ await transports[sessionId].close();
590
+ delete transports[sessionId];
591
+ }
592
+ catch (error) {
593
+ console.error(`Error closing session ${sessionId}:`, error);
594
+ }
595
+ }
596
+ taskStore.cleanup();
597
+ messageQueue.cleanup();
598
+ console.log('Server shutdown complete');
599
+ process.exit(0);
600
+ });
601
+ //# sourceMappingURL=simpleTaskInteractive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simpleTaskInteractive.js","sourceRoot":"","sources":["../../../../src/examples/server/simpleTaskInteractive.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import express from 'express';
2
1
  import { randomUUID } from 'node:crypto';
3
2
  import { McpServer } from '../../server/mcp.js';
4
3
  import { StreamableHTTPServerTransport } from '../../server/streamableHttp.js';
@@ -6,7 +5,7 @@ import { SSEServerTransport } from '../../server/sse.js';
6
5
  import * as z from 'zod/v4';
7
6
  import { isInitializeRequest } from '../../types.js';
8
7
  import { InMemoryEventStore } from '../shared/inMemoryEventStore.js';
9
- import cors from 'cors';
8
+ import { createMcpExpressApp } from '../../server/index.js';
10
9
  /**
11
10
  * This example server demonstrates backwards compatibility with both:
12
11
  * 1. The deprecated HTTP+SSE transport (protocol version 2024-11-05)
@@ -55,13 +54,7 @@ const getServer = () => {
55
54
  return server;
56
55
  };
57
56
  // Create Express application
58
- const app = express();
59
- app.use(express.json());
60
- // Configure CORS to expose Mcp-Session-Id header for browser-based clients
61
- app.use(cors({
62
- origin: '*', // Allow all origins - adjust as needed for production
63
- exposedHeaders: ['Mcp-Session-Id']
64
- }));
57
+ const app = createMcpExpressApp();
65
58
  // Store transports by session ID
66
59
  const transports = {};
67
60
  //=============================================================================