@cyanheads/mcp-ts-core 0.11.5 → 0.12.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 (389) hide show
  1. package/AGENTS.md +27 -23
  2. package/CLAUDE.md +27 -23
  3. package/README.md +10 -10
  4. package/biome.json +1 -1
  5. package/changelog/0.12.x/0.12.0.md +96 -0
  6. package/changelog/0.12.x/0.12.1.md +26 -0
  7. package/dist/cli/init.js +1 -1
  8. package/dist/cli/init.js.map +1 -1
  9. package/dist/config/index.d.ts +9 -18
  10. package/dist/config/index.d.ts.map +1 -1
  11. package/dist/config/index.js +21 -28
  12. package/dist/config/index.js.map +1 -1
  13. package/dist/core/app.d.ts +27 -7
  14. package/dist/core/app.d.ts.map +1 -1
  15. package/dist/core/app.js +28 -28
  16. package/dist/core/app.js.map +1 -1
  17. package/dist/core/context.d.ts +90 -57
  18. package/dist/core/context.d.ts.map +1 -1
  19. package/dist/core/context.js +32 -33
  20. package/dist/core/context.js.map +1 -1
  21. package/dist/core/gcPressure.d.ts.map +1 -1
  22. package/dist/core/gcPressure.js +3 -4
  23. package/dist/core/gcPressure.js.map +1 -1
  24. package/dist/core/index.d.ts +6 -7
  25. package/dist/core/index.d.ts.map +1 -1
  26. package/dist/core/index.js +10 -2
  27. package/dist/core/index.js.map +1 -1
  28. package/dist/core/serverManifest.d.ts +6 -4
  29. package/dist/core/serverManifest.d.ts.map +1 -1
  30. package/dist/core/serverManifest.js +37 -14
  31. package/dist/core/serverManifest.js.map +1 -1
  32. package/dist/core/worker.d.ts.map +1 -1
  33. package/dist/core/worker.js +34 -37
  34. package/dist/core/worker.js.map +1 -1
  35. package/dist/linter/rules/enrichment-rules.d.ts.map +1 -1
  36. package/dist/linter/rules/enrichment-rules.js +5 -2
  37. package/dist/linter/rules/enrichment-rules.js.map +1 -1
  38. package/dist/linter/rules/portability-rules.d.ts +4 -2
  39. package/dist/linter/rules/portability-rules.d.ts.map +1 -1
  40. package/dist/linter/rules/portability-rules.js +33 -4
  41. package/dist/linter/rules/portability-rules.js.map +1 -1
  42. package/dist/linter/rules/schema-rules.d.ts +10 -3
  43. package/dist/linter/rules/schema-rules.d.ts.map +1 -1
  44. package/dist/linter/rules/schema-rules.js +52 -25
  45. package/dist/linter/rules/schema-rules.js.map +1 -1
  46. package/dist/linter/rules/tool-rules.d.ts.map +1 -1
  47. package/dist/linter/rules/tool-rules.js +5 -2
  48. package/dist/linter/rules/tool-rules.js.map +1 -1
  49. package/dist/linter/types.d.ts +2 -1
  50. package/dist/linter/types.d.ts.map +1 -1
  51. package/dist/logs/combined.log +10 -22
  52. package/dist/logs/error.log +6 -18
  53. package/dist/mcp-server/inputRequired.d.ts +52 -0
  54. package/dist/mcp-server/inputRequired.d.ts.map +1 -0
  55. package/dist/mcp-server/inputRequired.js +76 -0
  56. package/dist/mcp-server/inputRequired.js.map +1 -0
  57. package/dist/mcp-server/notifications.d.ts +103 -34
  58. package/dist/mcp-server/notifications.d.ts.map +1 -1
  59. package/dist/mcp-server/notifications.js +104 -29
  60. package/dist/mcp-server/notifications.js.map +1 -1
  61. package/dist/mcp-server/prompts/prompt-registration.d.ts +2 -2
  62. package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -1
  63. package/dist/mcp-server/prompts/prompt-registration.js +15 -5
  64. package/dist/mcp-server/prompts/prompt-registration.js.map +1 -1
  65. package/dist/mcp-server/prompts/utils/promptDefinition.d.ts +1 -1
  66. package/dist/mcp-server/prompts/utils/promptDefinition.d.ts.map +1 -1
  67. package/dist/mcp-server/resources/resource-registration.d.ts +3 -3
  68. package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -1
  69. package/dist/mcp-server/resources/resource-registration.js +9 -15
  70. package/dist/mcp-server/resources/resource-registration.js.map +1 -1
  71. package/dist/mcp-server/resources/resourceSubscriptions.d.ts +45 -0
  72. package/dist/mcp-server/resources/resourceSubscriptions.d.ts.map +1 -0
  73. package/dist/mcp-server/resources/resourceSubscriptions.js +51 -0
  74. package/dist/mcp-server/resources/resourceSubscriptions.js.map +1 -0
  75. package/dist/mcp-server/resources/utils/resourceDefinition.d.ts +3 -5
  76. package/dist/mcp-server/resources/utils/resourceDefinition.d.ts.map +1 -1
  77. package/dist/mcp-server/resources/utils/resourceDefinition.js +1 -1
  78. package/dist/mcp-server/resources/utils/resourceDefinition.js.map +1 -1
  79. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +18 -17
  80. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -1
  81. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +39 -39
  82. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -1
  83. package/dist/mcp-server/server.d.ts +20 -21
  84. package/dist/mcp-server/server.d.ts.map +1 -1
  85. package/dist/mcp-server/server.js +42 -28
  86. package/dist/mcp-server/server.js.map +1 -1
  87. package/dist/mcp-server/tools/tool-registration.d.ts +11 -33
  88. package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -1
  89. package/dist/mcp-server/tools/tool-registration.js +18 -243
  90. package/dist/mcp-server/tools/tool-registration.js.map +1 -1
  91. package/dist/mcp-server/tools/utils/schemaShape.d.ts +27 -0
  92. package/dist/mcp-server/tools/utils/schemaShape.d.ts.map +1 -0
  93. package/dist/mcp-server/tools/utils/schemaShape.js +43 -0
  94. package/dist/mcp-server/tools/utils/schemaShape.js.map +1 -0
  95. package/dist/mcp-server/tools/utils/toolDefinition.d.ts +28 -8
  96. package/dist/mcp-server/tools/utils/toolDefinition.d.ts.map +1 -1
  97. package/dist/mcp-server/tools/utils/toolDefinition.js +63 -1
  98. package/dist/mcp-server/tools/utils/toolDefinition.js.map +1 -1
  99. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +54 -20
  100. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
  101. package/dist/mcp-server/tools/utils/toolHandlerFactory.js +156 -44
  102. package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
  103. package/dist/mcp-server/transports/ITransport.d.ts +2 -2
  104. package/dist/mcp-server/transports/ITransport.d.ts.map +1 -1
  105. package/dist/mcp-server/transports/auth/authFactory.js +1 -1
  106. package/dist/mcp-server/transports/auth/authFactory.js.map +1 -1
  107. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +1 -1
  108. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -1
  109. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -1
  110. package/dist/mcp-server/transports/auth/lib/authUtils.js +5 -13
  111. package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -1
  112. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +5 -11
  113. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -1
  114. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -1
  115. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +9 -22
  116. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -1
  117. package/dist/mcp-server/transports/heartbeat.d.ts.map +1 -1
  118. package/dist/mcp-server/transports/heartbeat.js +4 -8
  119. package/dist/mcp-server/transports/heartbeat.js.map +1 -1
  120. package/dist/mcp-server/transports/http/eventStore.d.ts +57 -0
  121. package/dist/mcp-server/transports/http/eventStore.d.ts.map +1 -0
  122. package/dist/mcp-server/transports/http/eventStore.js +114 -0
  123. package/dist/mcp-server/transports/http/eventStore.js.map +1 -0
  124. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -1
  125. package/dist/mcp-server/transports/http/httpErrorHandler.js +6 -24
  126. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
  127. package/dist/mcp-server/transports/http/httpServer.d.ts +4 -3
  128. package/dist/mcp-server/transports/http/httpServer.d.ts.map +1 -1
  129. package/dist/mcp-server/transports/http/httpServer.js +16 -33
  130. package/dist/mcp-server/transports/http/httpServer.js.map +1 -1
  131. package/dist/mcp-server/transports/http/httpTransport.d.ts +30 -8
  132. package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -1
  133. package/dist/mcp-server/transports/http/httpTransport.js +180 -374
  134. package/dist/mcp-server/transports/http/httpTransport.js.map +1 -1
  135. package/dist/mcp-server/transports/http/landing-page/assets/styles.d.ts.map +1 -1
  136. package/dist/mcp-server/transports/http/landing-page/assets/styles.js +0 -1
  137. package/dist/mcp-server/transports/http/landing-page/assets/styles.js.map +1 -1
  138. package/dist/mcp-server/transports/http/landing-page/handler.d.ts.map +1 -1
  139. package/dist/mcp-server/transports/http/landing-page/handler.js +4 -8
  140. package/dist/mcp-server/transports/http/landing-page/handler.js.map +1 -1
  141. package/dist/mcp-server/transports/http/landing-page/sections/tools.js +22 -4
  142. package/dist/mcp-server/transports/http/landing-page/sections/tools.js.map +1 -1
  143. package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts.map +1 -1
  144. package/dist/mcp-server/transports/http/protectedResourceMetadata.js +2 -6
  145. package/dist/mcp-server/transports/http/protectedResourceMetadata.js.map +1 -1
  146. package/dist/mcp-server/transports/http/robotsTxt.js +2 -2
  147. package/dist/mcp-server/transports/http/robotsTxt.js.map +1 -1
  148. package/dist/mcp-server/transports/http/serverCard.d.ts.map +1 -1
  149. package/dist/mcp-server/transports/http/serverCard.js +2 -6
  150. package/dist/mcp-server/transports/http/serverCard.js.map +1 -1
  151. package/dist/mcp-server/transports/http/sessionStore.d.ts +46 -66
  152. package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -1
  153. package/dist/mcp-server/transports/http/sessionStore.js +140 -238
  154. package/dist/mcp-server/transports/http/sessionStore.js.map +1 -1
  155. package/dist/mcp-server/transports/manager.d.ts +21 -4
  156. package/dist/mcp-server/transports/manager.d.ts.map +1 -1
  157. package/dist/mcp-server/transports/manager.js +40 -34
  158. package/dist/mcp-server/transports/manager.js.map +1 -1
  159. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +24 -31
  160. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -1
  161. package/dist/mcp-server/transports/stdio/stdioTransport.js +23 -38
  162. package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -1
  163. package/dist/mcp-server/types.d.ts +25 -0
  164. package/dist/mcp-server/types.d.ts.map +1 -0
  165. package/dist/mcp-server/types.js +10 -0
  166. package/dist/mcp-server/types.js.map +1 -0
  167. package/dist/services/canvas/core/CanvasInstance.d.ts +2 -2
  168. package/dist/services/canvas/core/CanvasInstance.d.ts.map +1 -1
  169. package/dist/services/canvas/core/CanvasInstance.js.map +1 -1
  170. package/dist/services/canvas/core/CanvasRegistry.d.ts +4 -4
  171. package/dist/services/canvas/core/CanvasRegistry.d.ts.map +1 -1
  172. package/dist/services/canvas/core/CanvasRegistry.js +8 -18
  173. package/dist/services/canvas/core/CanvasRegistry.js.map +1 -1
  174. package/dist/services/canvas/core/DataCanvas.d.ts +5 -5
  175. package/dist/services/canvas/core/DataCanvas.d.ts.map +1 -1
  176. package/dist/services/canvas/core/DataCanvas.js +2 -3
  177. package/dist/services/canvas/core/DataCanvas.js.map +1 -1
  178. package/dist/services/canvas/core/IDataCanvasProvider.d.ts +11 -11
  179. package/dist/services/canvas/core/IDataCanvasProvider.d.ts.map +1 -1
  180. package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts +11 -11
  181. package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts.map +1 -1
  182. package/dist/services/canvas/providers/duckdb/DuckdbProvider.js +4 -10
  183. package/dist/services/canvas/providers/duckdb/DuckdbProvider.js.map +1 -1
  184. package/dist/services/llm/providers/openrouter.provider.d.ts.map +1 -1
  185. package/dist/services/llm/providers/openrouter.provider.js +2 -5
  186. package/dist/services/llm/providers/openrouter.provider.js.map +1 -1
  187. package/dist/services/mirror/core/defineMirror.js +1 -1
  188. package/dist/services/mirror/core/defineMirror.js.map +1 -1
  189. package/dist/services/mirror/types.d.ts +5 -5
  190. package/dist/services/mirror/types.d.ts.map +1 -1
  191. package/dist/services/speech/providers/elevenlabs.provider.js +1 -1
  192. package/dist/services/speech/providers/elevenlabs.provider.js.map +1 -1
  193. package/dist/services/speech/providers/whisper.provider.js +1 -1
  194. package/dist/services/speech/providers/whisper.provider.js.map +1 -1
  195. package/dist/storage/core/StorageService.d.ts +1 -1
  196. package/dist/storage/core/StorageService.d.ts.map +1 -1
  197. package/dist/storage/core/StorageService.js +12 -20
  198. package/dist/storage/core/StorageService.js.map +1 -1
  199. package/dist/storage/core/storageFactory.d.ts.map +1 -1
  200. package/dist/storage/core/storageFactory.js.map +1 -1
  201. package/dist/storage/core/storageValidation.d.ts +1 -1
  202. package/dist/storage/core/storageValidation.d.ts.map +1 -1
  203. package/dist/storage/core/storageValidation.js +2 -2
  204. package/dist/storage/core/storageValidation.js.map +1 -1
  205. package/dist/storage/providers/cloudflare/d1Provider.d.ts +1 -1
  206. package/dist/storage/providers/cloudflare/d1Provider.d.ts.map +1 -1
  207. package/dist/storage/providers/cloudflare/d1Provider.js +4 -12
  208. package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -1
  209. package/dist/storage/providers/cloudflare/kvProvider.d.ts +1 -1
  210. package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -1
  211. package/dist/storage/providers/cloudflare/kvProvider.js +3 -8
  212. package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -1
  213. package/dist/storage/providers/cloudflare/r2Provider.d.ts +1 -1
  214. package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -1
  215. package/dist/storage/providers/cloudflare/r2Provider.js +3 -8
  216. package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -1
  217. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +1 -1
  218. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -1
  219. package/dist/storage/providers/inMemory/inMemoryProvider.js +2 -4
  220. package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -1
  221. package/dist/testing/fuzz.d.ts +7 -4
  222. package/dist/testing/fuzz.d.ts.map +1 -1
  223. package/dist/testing/fuzz.js +13 -5
  224. package/dist/testing/fuzz.js.map +1 -1
  225. package/dist/testing/index.d.ts +35 -12
  226. package/dist/testing/index.d.ts.map +1 -1
  227. package/dist/testing/index.js +53 -38
  228. package/dist/testing/index.js.map +1 -1
  229. package/dist/testing/vitest.d.ts +1 -1
  230. package/dist/testing/vitest.d.ts.map +1 -1
  231. package/dist/types-global/errors.d.ts +28 -15
  232. package/dist/types-global/errors.d.ts.map +1 -1
  233. package/dist/types-global/errors.js +8 -1
  234. package/dist/types-global/errors.js.map +1 -1
  235. package/dist/utils/formatting/diffFormatter.d.ts +5 -5
  236. package/dist/utils/formatting/diffFormatter.d.ts.map +1 -1
  237. package/dist/utils/formatting/diffFormatter.js +7 -20
  238. package/dist/utils/formatting/diffFormatter.js.map +1 -1
  239. package/dist/utils/formatting/tableFormatter.d.ts +3 -3
  240. package/dist/utils/formatting/tableFormatter.d.ts.map +1 -1
  241. package/dist/utils/formatting/tableFormatter.js +6 -17
  242. package/dist/utils/formatting/tableFormatter.js.map +1 -1
  243. package/dist/utils/formatting/treeFormatter.d.ts +3 -3
  244. package/dist/utils/formatting/treeFormatter.d.ts.map +1 -1
  245. package/dist/utils/formatting/treeFormatter.js +5 -18
  246. package/dist/utils/formatting/treeFormatter.js.map +1 -1
  247. package/dist/utils/index.d.ts +4 -2
  248. package/dist/utils/index.d.ts.map +1 -1
  249. package/dist/utils/index.js +2 -2
  250. package/dist/utils/index.js.map +1 -1
  251. package/dist/utils/internal/error-handler/errorHandler.d.ts +1 -1
  252. package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -1
  253. package/dist/utils/internal/error-handler/errorHandler.js +23 -11
  254. package/dist/utils/internal/error-handler/errorHandler.js.map +1 -1
  255. package/dist/utils/internal/error-handler/types.d.ts +10 -13
  256. package/dist/utils/internal/error-handler/types.d.ts.map +1 -1
  257. package/dist/utils/internal/logger.d.ts +3 -3
  258. package/dist/utils/internal/logger.d.ts.map +1 -1
  259. package/dist/utils/internal/logger.js +11 -5
  260. package/dist/utils/internal/logger.js.map +1 -1
  261. package/dist/utils/internal/performance.d.ts +13 -5
  262. package/dist/utils/internal/performance.d.ts.map +1 -1
  263. package/dist/utils/internal/performance.js +76 -17
  264. package/dist/utils/internal/performance.js.map +1 -1
  265. package/dist/utils/internal/requestContext.d.ts +92 -55
  266. package/dist/utils/internal/requestContext.d.ts.map +1 -1
  267. package/dist/utils/internal/requestContext.js +120 -40
  268. package/dist/utils/internal/requestContext.js.map +1 -1
  269. package/dist/utils/metrics/tokenCounter.d.ts +3 -3
  270. package/dist/utils/metrics/tokenCounter.d.ts.map +1 -1
  271. package/dist/utils/metrics/tokenCounter.js.map +1 -1
  272. package/dist/utils/network/fetchWithTimeout.d.ts +2 -2
  273. package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -1
  274. package/dist/utils/network/fetchWithTimeout.js +8 -24
  275. package/dist/utils/network/fetchWithTimeout.js.map +1 -1
  276. package/dist/utils/network/retry.d.ts +2 -2
  277. package/dist/utils/network/retry.d.ts.map +1 -1
  278. package/dist/utils/overflow/outlineOnOverflow.d.ts +1 -1
  279. package/dist/utils/overflow/outlineOnOverflow.d.ts.map +1 -1
  280. package/dist/utils/pagination/pagination.d.ts +3 -3
  281. package/dist/utils/pagination/pagination.d.ts.map +1 -1
  282. package/dist/utils/pagination/pagination.js +3 -3
  283. package/dist/utils/pagination/pagination.js.map +1 -1
  284. package/dist/utils/parsing/csvParser.d.ts +2 -2
  285. package/dist/utils/parsing/csvParser.d.ts.map +1 -1
  286. package/dist/utils/parsing/csvParser.js +4 -8
  287. package/dist/utils/parsing/csvParser.js.map +1 -1
  288. package/dist/utils/parsing/dateParser.d.ts +3 -3
  289. package/dist/utils/parsing/dateParser.d.ts.map +1 -1
  290. package/dist/utils/parsing/dateParser.js +3 -2
  291. package/dist/utils/parsing/dateParser.js.map +1 -1
  292. package/dist/utils/parsing/frontmatterParser.d.ts +2 -2
  293. package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -1
  294. package/dist/utils/parsing/frontmatterParser.js +7 -10
  295. package/dist/utils/parsing/frontmatterParser.js.map +1 -1
  296. package/dist/utils/parsing/htmlExtractor.d.ts +2 -2
  297. package/dist/utils/parsing/htmlExtractor.d.ts.map +1 -1
  298. package/dist/utils/parsing/htmlExtractor.js +6 -11
  299. package/dist/utils/parsing/htmlExtractor.js.map +1 -1
  300. package/dist/utils/parsing/jsonParser.d.ts +2 -2
  301. package/dist/utils/parsing/jsonParser.d.ts.map +1 -1
  302. package/dist/utils/parsing/jsonParser.js +4 -8
  303. package/dist/utils/parsing/jsonParser.js.map +1 -1
  304. package/dist/utils/parsing/pdfParser.d.ts +10 -10
  305. package/dist/utils/parsing/pdfParser.d.ts.map +1 -1
  306. package/dist/utils/parsing/pdfParser.js +26 -89
  307. package/dist/utils/parsing/pdfParser.js.map +1 -1
  308. package/dist/utils/parsing/xmlParser.d.ts +2 -2
  309. package/dist/utils/parsing/xmlParser.d.ts.map +1 -1
  310. package/dist/utils/parsing/xmlParser.js +4 -8
  311. package/dist/utils/parsing/xmlParser.js.map +1 -1
  312. package/dist/utils/parsing/yamlParser.d.ts +2 -2
  313. package/dist/utils/parsing/yamlParser.d.ts.map +1 -1
  314. package/dist/utils/parsing/yamlParser.js +4 -8
  315. package/dist/utils/parsing/yamlParser.js.map +1 -1
  316. package/dist/utils/scheduling/scheduler.d.ts.map +1 -1
  317. package/dist/utils/scheduling/scheduler.js +5 -6
  318. package/dist/utils/scheduling/scheduler.js.map +1 -1
  319. package/dist/utils/security/rateLimiter.d.ts +2 -2
  320. package/dist/utils/security/rateLimiter.d.ts.map +1 -1
  321. package/dist/utils/security/rateLimiter.js +1 -1
  322. package/dist/utils/security/rateLimiter.js.map +1 -1
  323. package/dist/utils/telemetry/attributes.d.ts +23 -7
  324. package/dist/utils/telemetry/attributes.d.ts.map +1 -1
  325. package/dist/utils/telemetry/attributes.js +23 -10
  326. package/dist/utils/telemetry/attributes.js.map +1 -1
  327. package/dist/utils/telemetry/trace.d.ts +3 -3
  328. package/dist/utils/telemetry/trace.d.ts.map +1 -1
  329. package/dist/utils/telemetry/trace.js +4 -2
  330. package/dist/utils/telemetry/trace.js.map +1 -1
  331. package/package.json +22 -26
  332. package/scripts/lint-mcp.ts +1 -3
  333. package/scripts/lint-packaging.ts +1 -1
  334. package/skills/add-service/SKILL.md +2 -2
  335. package/skills/add-test/SKILL.md +42 -20
  336. package/skills/add-tool/SKILL.md +103 -19
  337. package/skills/api-config/SKILL.md +4 -11
  338. package/skills/api-context/SKILL.md +216 -120
  339. package/skills/api-linter/SKILL.md +16 -3
  340. package/skills/api-telemetry/SKILL.md +10 -12
  341. package/skills/api-testing/SKILL.md +53 -52
  342. package/skills/api-workers/SKILL.md +9 -1
  343. package/skills/code-simplifier/SKILL.md +2 -2
  344. package/skills/design-mcp-server/SKILL.md +31 -17
  345. package/skills/field-test/SKILL.md +4 -2
  346. package/skills/polish-docs-meta/SKILL.md +1 -1
  347. package/skills/polish-docs-meta/references/agent-protocol.md +2 -2
  348. package/skills/polish-docs-meta/references/readme.md +1 -1
  349. package/skills/release-and-publish/SKILL.md +3 -1
  350. package/skills/report-issue-framework/SKILL.md +2 -2
  351. package/skills/report-issue-local/SKILL.md +2 -2
  352. package/skills/security-pass/SKILL.md +16 -14
  353. package/skills/tool-defs-analysis/SKILL.md +15 -5
  354. package/templates/.env.example +4 -0
  355. package/templates/AGENTS.md +6 -6
  356. package/templates/CLAUDE.md +6 -6
  357. package/templates/tests/resources/echo.resource.test.ts +16 -9
  358. package/dist/mcp-server/elicitation.d.ts +0 -64
  359. package/dist/mcp-server/elicitation.d.ts.map +0 -1
  360. package/dist/mcp-server/elicitation.js +0 -81
  361. package/dist/mcp-server/elicitation.js.map +0 -1
  362. package/dist/mcp-server/protocolSession.d.ts +0 -34
  363. package/dist/mcp-server/protocolSession.d.ts.map +0 -1
  364. package/dist/mcp-server/protocolSession.js +0 -13
  365. package/dist/mcp-server/protocolSession.js.map +0 -1
  366. package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.d.ts +0 -53
  367. package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.d.ts.map +0 -1
  368. package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.js +0 -65
  369. package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.js.map +0 -1
  370. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts +0 -70
  371. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts.map +0 -1
  372. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js +0 -130
  373. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js.map +0 -1
  374. package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts +0 -109
  375. package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts.map +0 -1
  376. package/dist/mcp-server/tasks/core/storageBackedTaskStore.js +0 -209
  377. package/dist/mcp-server/tasks/core/storageBackedTaskStore.js.map +0 -1
  378. package/dist/mcp-server/tasks/core/taskManager.d.ts +0 -91
  379. package/dist/mcp-server/tasks/core/taskManager.d.ts.map +0 -1
  380. package/dist/mcp-server/tasks/core/taskManager.js +0 -210
  381. package/dist/mcp-server/tasks/core/taskManager.js.map +0 -1
  382. package/dist/mcp-server/tasks/core/taskTypes.d.ts +0 -18
  383. package/dist/mcp-server/tasks/core/taskTypes.d.ts.map +0 -1
  384. package/dist/mcp-server/tasks/core/taskTypes.js +0 -20
  385. package/dist/mcp-server/tasks/core/taskTypes.js.map +0 -1
  386. package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts +0 -101
  387. package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts.map +0 -1
  388. package/dist/mcp-server/tasks/utils/taskToolDefinition.js +0 -14
  389. package/dist/mcp-server/tasks/utils/taskToolDefinition.js.map +0 -1
@@ -1,18 +1,6 @@
1
- {"level":50,"time":1786587207192,"env":"testing","version":"0.0.0-test","pid":55811,"requestId":"f2329fff-5675-4e20-960b-3b89dc4de0cd","timestamp":"2026-08-13T02:13:27.191Z","operation":"auto-task:auto_echo","input":{"fail":true,"value":"stdio-failure"},"critical":false,"errorCode":-32603,"originalErrorType":"Error","finalErrorType":"McpError","taskId":"ac8ab5b7edb731c9268df12778d666f1","toolName":"auto_echo","errorData":{"taskId":"ac8ab5b7edb731c9268df12778d666f1","toolName":"auto_echo","originalErrorName":"Error","originalMessage":"intentional task failure: stdio-failure","originalStack":"Error: intentional task failure: stdio-failure\n at Object.handler (file:///Users/casey/Developer/github/mcp-ts-core/tests/fixtures/task-protocol-server.js:60:27)\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async ToolRegistry.runAutoTaskHandler (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:253:28)"},"stack":"McpError: intentional task failure: stdio-failure\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:19)\n at ToolRegistry.runAutoTaskHandler (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:266:26)\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)","msg":"Error in auto-task:auto_echo: intentional task failure: stdio-failure"}
2
- {"level":50,"time":1786587214226,"env":"testing","version":"0.0.0-test","pid":55811,"requestId":"34d06d74-cbc7-4bf9-8697-a1c1efa30498","timestamp":"2026-08-13T02:13:34.225Z","operation":"auto-task:long_control","input":{"mode":"timeout"},"critical":false,"errorCode":-32004,"originalErrorType":"symbolEncountered","finalErrorType":"McpError","taskId":"97339f846d164bf6b822c6f3ab7879d1","toolName":"long_control","errorData":{"taskId":"97339f846d164bf6b822c6f3ab7879d1","toolName":"long_control","originalErrorName":"symbolEncountered","originalMessage":"Symbol(AUTO_TASK_TIMEOUT)"},"stack":"McpError: Symbol(AUTO_TASK_TIMEOUT)\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:19)\n at ToolRegistry.runAutoTaskHandler (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:266:26)","msg":"Error in auto-task:long_control: Symbol(AUTO_TASK_TIMEOUT)"}
3
- {"level":50,"time":1786587215689,"env":"testing","version":"0.0.0-test","pid":55851,"requestId":"f8a9296e-ecad-4d89-ae36-03d8bb7146ad","timestamp":"2026-08-13T02:13:35.689Z","operation":"auto-task:auto_echo","input":{"fail":true,"value":"http-failure"},"critical":false,"errorCode":-32603,"originalErrorType":"Error","finalErrorType":"McpError","taskId":"7e268ea849fb4c9ee67c0e840eb95eb0","toolName":"auto_echo","errorData":{"taskId":"7e268ea849fb4c9ee67c0e840eb95eb0","toolName":"auto_echo","originalErrorName":"Error","originalMessage":"intentional task failure: http-failure","originalStack":"Error: intentional task failure: http-failure\n at Object.handler (file:///Users/casey/Developer/github/mcp-ts-core/tests/fixtures/task-protocol-server.js:60:27)\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async ToolRegistry.runAutoTaskHandler (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:253:28)"},"stack":"McpError: intentional task failure: http-failure\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:19)\n at ToolRegistry.runAutoTaskHandler (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:266:26)\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)","msg":"Error in auto-task:auto_echo: intentional task failure: http-failure"}
4
- {"level":50,"time":1786587222871,"env":"testing","version":"0.0.0-test","pid":55851,"requestId":"fffc253c-74ab-4fd3-a5dd-c14886196ac9","timestamp":"2026-08-13T02:13:42.871Z","operation":"auto-task:long_control","input":{"mode":"timeout"},"critical":false,"errorCode":-32004,"originalErrorType":"symbolEncountered","finalErrorType":"McpError","taskId":"49568958ba8bf82f6caa9b5f23878b74","toolName":"long_control","errorData":{"taskId":"49568958ba8bf82f6caa9b5f23878b74","toolName":"long_control","originalErrorName":"symbolEncountered","originalMessage":"Symbol(AUTO_TASK_TIMEOUT)"},"stack":"McpError: Symbol(AUTO_TASK_TIMEOUT)\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:19)\n at ToolRegistry.runAutoTaskHandler (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:266:26)","msg":"Error in auto-task:long_control: Symbol(AUTO_TASK_TIMEOUT)"}
5
- {"level":50,"time":1786587228488,"env":"testing","version":"0.0.0-test","pid":55927,"requestId":"V7FDF-DP0S4","timestamp":"2026-08-13T02:13:48.487Z","operation":"HandleToolRequest","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"164b0f5396d7e66484798e20df0a0aa4f90881c3349d8de0b6789f8f88d6b843","toolName":"scoped_echo","tenantId":"authz-tenant","auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"errorData":{"sessionId":"164b0f5396d7e66484798e20df0a0aa4f90881c3349d8de0b6789f8f88d6b843","toolName":"scoped_echo","requestId":"V7FDF-DP0S4","timestamp":"2026-08-13T02:13:48.487Z","tenantId":"authz-tenant","operation":"HandleToolRequest","auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (file:///Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:84:54)\n at withRequiredScopes (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:68:15)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:285:17\n at McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:42)\n at file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43\n at async wrappedHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:32)"},"stack":"McpError: Insufficient permissions.\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:19)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26\n at McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:42)\n at file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43\n at async wrappedHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:32)","msg":"Error in tool:scoped_echo: Insufficient permissions."}
6
- {"level":50,"time":1786587228499,"env":"testing","version":"0.0.0-test","pid":55927,"requestId":"0PT9F-IS96K","timestamp":"2026-08-13T02:13:48.499Z","operation":"HandleToolRequest","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"da1df465acb6d1da47f6afb0929d334fb251d35318426f1752254efb488e61d6","toolName":"scoped_echo","tenantId":"authz-tenant","auth":{"sub":"authz-user","scopes":["openid","email","profile","offline_access"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"errorData":{"sessionId":"da1df465acb6d1da47f6afb0929d334fb251d35318426f1752254efb488e61d6","toolName":"scoped_echo","requestId":"0PT9F-IS96K","timestamp":"2026-08-13T02:13:48.499Z","tenantId":"authz-tenant","operation":"HandleToolRequest","auth":{"sub":"authz-user","scopes":["openid","email","profile","offline_access"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (file:///Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:84:54)\n at withRequiredScopes (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:68:15)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:285:17\n at McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:42)\n at file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43\n at async wrappedHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:32)"},"stack":"McpError: Insufficient permissions.\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:19)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26\n at McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:42)\n at file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43\n at async wrappedHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:32)","msg":"Error in tool:scoped_echo: Insufficient permissions."}
7
- {"level":50,"time":1786587230922,"env":"testing","version":"0.0.0-test","pid":55943,"requestId":"5X7AN-6XKAS","timestamp":"2026-08-13T02:13:50.918Z","operation":"HandleToolRequest","critical":false,"errorCode":-32602,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"1e6b675822dbe8b61a4020e2582bc88c5937b1e1afd9003e8d2145d6c92ca457","toolName":"session_elicitation_probe","errorData":{"reason":"elicitation_response_invalid","issues":[{"path":"value","code":"invalid_type"}],"sessionId":"1e6b675822dbe8b61a4020e2582bc88c5937b1e1afd9003e8d2145d6c92ca457","toolName":"session_elicitation_probe","requestId":"5X7AN-6XKAS","timestamp":"2026-08-13T02:13:50.918Z","operation":"HandleToolRequest","originalErrorName":"McpError","originalMessage":"Elicitation response content does not match the requested schema.","originalStack":"McpError: Elicitation response content does not match the requested schema.\n at invalidParams (file:///Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:78:58)\n at assertElicitedContent (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/elicitation.js:26:11)\n at Object.formFn [as elicit] (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/elicitation.js:69:13)\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async Object.handler (file:///Users/casey/Developer/github/mcp-ts-core/tests/fixtures/http-protocol-session-server.js:50:20)\n at async file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/performance.js:212:28\n at async measureToolExecution (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/performance.js:194:12)\n at async file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:306:28\n at async McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:20)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:32"},"stack":"McpError: Elicitation response content does not match the requested schema.\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:19)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:20)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:32\n at async wrappedHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:32)","msg":"Error in tool:session_elicitation_probe: Elicitation response content does not match the requested schema."}
8
- {"level":50,"time":1786587230935,"env":"testing","version":"0.0.0-test","pid":55943,"requestId":"0J4GZ-52X01","timestamp":"2026-08-13T02:13:50.931Z","operation":"HandleToolRequest","critical":false,"errorCode":-32603,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"06ba48d957a5497eebd1bcdc46f35f99c8c46e65439e3035231c2717e2f15e3f","toolName":"session_elicitation_probe","errorData":{"sessionId":"06ba48d957a5497eebd1bcdc46f35f99c8c46e65439e3035231c2717e2f15e3f","toolName":"session_elicitation_probe","requestId":"0J4GZ-52X01","timestamp":"2026-08-13T02:13:50.931Z","operation":"HandleToolRequest","originalErrorName":"McpError","originalMessage":"MCP error -32602: Client refused the elicitation request.","originalStack":"McpError: MCP error -32602: Client refused the elicitation request.\n at McpError.fromError (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js:2048:16)\n at Server._onresponse (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js:490:36)\n at _transport.onmessage (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js:234:22)\n at Object.deliver (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:55:29)\n at SessionStore.routeServerResponse (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/sessionStore.js:208:15)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:626:38\n at Array.filter (<anonymous>)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:623:39\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async dispatch (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:17)"},"stack":"McpError: MCP error -32602: Client refused the elicitation request.\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:19)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:20)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:32\n at async wrappedHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:32)","msg":"Error in tool:session_elicitation_probe: MCP error -32602: Client refused the elicitation request."}
9
- {"level":50,"time":1786587231021,"env":"testing","version":"0.0.0-test","pid":55943,"requestId":"IKG5Z-ZRC90","timestamp":"2026-08-13T02:13:51.017Z","operation":"HandleToolRequest","critical":false,"errorCode":-32004,"originalErrorType":"AbortError","finalErrorType":"McpError","sessionId":"9cfa68fd06bea3003fbcdae970efafd4b54ea5b49bc2bfe9a888099e37741295","toolName":"session_cancellable_tool","errorData":{"sessionId":"9cfa68fd06bea3003fbcdae970efafd4b54ea5b49bc2bfe9a888099e37741295","toolName":"session_cancellable_tool","requestId":"IKG5Z-ZRC90","timestamp":"2026-08-13T02:13:51.017Z","operation":"HandleToolRequest","originalErrorName":"AbortError","originalMessage":"AbortError: cancel tool request","originalStack":"AbortError: AbortError: cancel tool request\n at new DOMException (node:internal/per_context/domexception:79:18)\n at SessionStore.cancelRequest (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/sessionStore.js:166:29)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:644:30\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async dispatch (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:17)\n at async file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:358:20\n at async dispatch (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:17)\n at async file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:312:16\n at async dispatch (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:17)\n at async cors2 (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/middleware/cors/index.js:76:5)"},"stack":"McpError: AbortError: cancel tool request\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:19)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:20)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:32\n at async wrappedHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:32)","msg":"Error in tool:session_cancellable_tool: AbortError: cancel tool request"}
10
- {"level":50,"time":1786587241316,"env":"testing","version":"0.0.0-test","pid":56023,"requestId":"61be143c-7657-453e-9110-30352866c484","timestamp":"2026-08-13T02:14:01.316Z","operation":"auto-task:auto_echo","input":{"fail":true,"value":"stdio-failure"},"critical":false,"errorCode":-32603,"originalErrorType":"Error","finalErrorType":"McpError","taskId":"ee8662227fa5467d4a1a989958fdfc01","toolName":"auto_echo","errorData":{"taskId":"ee8662227fa5467d4a1a989958fdfc01","toolName":"auto_echo","originalErrorName":"Error","originalMessage":"intentional task failure: stdio-failure","originalStack":"Error: intentional task failure: stdio-failure\n at handler (/Users/casey/Developer/github/mcp-ts-core/tests/fixtures/task-protocol-server.js:60:31)\n at async runAutoTaskHandler (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:253:42)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: intentional task failure: stdio-failure\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:23)\n at runAutoTaskHandler (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:266:26)\n at processTicksAndRejections (native:7:39)","msg":"Error in auto-task:auto_echo: intentional task failure: stdio-failure"}
11
- {"level":50,"time":1786587248382,"env":"testing","version":"0.0.0-test","pid":56023,"requestId":"3dfac909-5392-47a9-88e8-60d1aac7998d","timestamp":"2026-08-13T02:14:08.381Z","operation":"auto-task:long_control","input":{"mode":"timeout"},"critical":false,"errorCode":-32004,"originalErrorType":"symbolEncountered","finalErrorType":"McpError","taskId":"3ee3f4f482e0a099831113580b27ae78","toolName":"long_control","errorData":{"taskId":"3ee3f4f482e0a099831113580b27ae78","toolName":"long_control","originalErrorName":"symbolEncountered","originalMessage":"Symbol(AUTO_TASK_TIMEOUT)"},"stack":"McpError: Symbol(AUTO_TASK_TIMEOUT)\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:23)\n at runAutoTaskHandler (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:266:26)\n at processTicksAndRejections (native:7:39)","msg":"Error in auto-task:long_control: Symbol(AUTO_TASK_TIMEOUT)"}
12
- {"level":50,"time":1786587249679,"env":"testing","version":"0.0.0-test","pid":56062,"requestId":"30fc1d93-3755-4a5b-8c10-7950ed90a37e","timestamp":"2026-08-13T02:14:09.678Z","operation":"auto-task:auto_echo","input":{"fail":true,"value":"http-failure"},"critical":false,"errorCode":-32603,"originalErrorType":"Error","finalErrorType":"McpError","taskId":"bdbb37189f0f574e0ba253b84fe59eb3","toolName":"auto_echo","errorData":{"taskId":"bdbb37189f0f574e0ba253b84fe59eb3","toolName":"auto_echo","originalErrorName":"Error","originalMessage":"intentional task failure: http-failure","originalStack":"Error: intentional task failure: http-failure\n at handler (/Users/casey/Developer/github/mcp-ts-core/tests/fixtures/task-protocol-server.js:60:31)\n at async runAutoTaskHandler (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:253:42)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: intentional task failure: http-failure\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:23)\n at runAutoTaskHandler (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:266:26)\n at processTicksAndRejections (native:7:39)","msg":"Error in auto-task:auto_echo: intentional task failure: http-failure"}
13
- {"level":50,"time":1786587256826,"env":"testing","version":"0.0.0-test","pid":56062,"requestId":"d6aebeb6-8df3-41da-9c88-8245392951f5","timestamp":"2026-08-13T02:14:16.825Z","operation":"auto-task:long_control","input":{"mode":"timeout"},"critical":false,"errorCode":-32004,"originalErrorType":"symbolEncountered","finalErrorType":"McpError","taskId":"1dc5de9df5f2813bc528625ebcb26f02","toolName":"long_control","errorData":{"taskId":"1dc5de9df5f2813bc528625ebcb26f02","toolName":"long_control","originalErrorName":"symbolEncountered","originalMessage":"Symbol(AUTO_TASK_TIMEOUT)"},"stack":"McpError: Symbol(AUTO_TASK_TIMEOUT)\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:23)\n at runAutoTaskHandler (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/tool-registration.js:266:26)\n at processTicksAndRejections (native:7:39)","msg":"Error in auto-task:long_control: Symbol(AUTO_TASK_TIMEOUT)"}
14
- {"level":50,"time":1786587260986,"env":"testing","version":"0.0.0-test","pid":56135,"requestId":"1O3E3-DP8AC","timestamp":"2026-08-13T02:14:20.986Z","operation":"HandleToolRequest","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"0a72407c6557c4b3a331a8213ac870a88349344596bf8981a51db854f105e588","toolName":"scoped_echo","tenantId":"authz-tenant","auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"errorData":{"sessionId":"0a72407c6557c4b3a331a8213ac870a88349344596bf8981a51db854f105e588","toolName":"scoped_echo","requestId":"1O3E3-DP8AC","timestamp":"2026-08-13T02:14:20.986Z","tenantId":"authz-tenant","operation":"HandleToolRequest","auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:84:58)\n at withRequiredScopes (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:68:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:285:17)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:231:34)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Insufficient permissions.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:231:34)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:scoped_echo: Insufficient permissions."}
15
- {"level":50,"time":1786587260994,"env":"testing","version":"0.0.0-test","pid":56135,"requestId":"CBMKP-O20TK","timestamp":"2026-08-13T02:14:20.994Z","operation":"HandleToolRequest","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"9b0f4cf27f3fc78bc5d7e088047c8fc5204c88edcb5b4d9f03380a5e2684e9ca","toolName":"scoped_echo","tenantId":"authz-tenant","auth":{"sub":"authz-user","scopes":["openid","email","profile","offline_access"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"errorData":{"sessionId":"9b0f4cf27f3fc78bc5d7e088047c8fc5204c88edcb5b4d9f03380a5e2684e9ca","toolName":"scoped_echo","requestId":"CBMKP-O20TK","timestamp":"2026-08-13T02:14:20.994Z","tenantId":"authz-tenant","operation":"HandleToolRequest","auth":{"sub":"authz-user","scopes":["openid","email","profile","offline_access"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:84:58)\n at withRequiredScopes (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:68:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:285:17)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:231:34)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Insufficient permissions.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:231:34)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:scoped_echo: Insufficient permissions."}
16
- {"level":50,"time":1786587262572,"env":"testing","version":"0.0.0-test","pid":56148,"requestId":"RXKXK-ZNGJF","timestamp":"2026-08-13T02:14:22.569Z","operation":"HandleToolRequest","critical":false,"errorCode":-32602,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"6d95cfc46799cee8ec354ea235bbc0047af16776fd1d30ebd05272161da3b9ff","toolName":"session_elicitation_probe","errorData":{"reason":"elicitation_response_invalid","issues":[{"path":"value","code":"invalid_type"}],"sessionId":"6d95cfc46799cee8ec354ea235bbc0047af16776fd1d30ebd05272161da3b9ff","toolName":"session_elicitation_probe","requestId":"RXKXK-ZNGJF","timestamp":"2026-08-13T02:14:22.569Z","operation":"HandleToolRequest","originalErrorName":"McpError","originalMessage":"Elicitation response content does not match the requested schema.","originalStack":"McpError: Elicitation response content does not match the requested schema.\n at invalidParams (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:78:62)\n at assertElicitedContent (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/elicitation.js:26:11)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/elicitation.js:69:13)\n at async handler (/Users/casey/Developer/github/mcp-ts-core/tests/fixtures/http-protocol-session-server.js:50:30)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/performance.js:212:34)\n at async measureToolExecution (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/performance.js:194:25)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:306:34)\n at async executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:34)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:46)"},"stack":"McpError: Elicitation response content does not match the requested schema.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26)\n at async executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:34)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:46)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:session_elicitation_probe: Elicitation response content does not match the requested schema."}
17
- {"level":50,"time":1786587262580,"env":"testing","version":"0.0.0-test","pid":56148,"requestId":"X47C9-0LGGG","timestamp":"2026-08-13T02:14:22.578Z","operation":"HandleToolRequest","critical":false,"errorCode":-32603,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"f50b3cf6fc2f019ba54811c9b2aa89309eec20d4c11220d01ef05a4e5edad963","toolName":"session_elicitation_probe","errorData":{"sessionId":"f50b3cf6fc2f019ba54811c9b2aa89309eec20d4c11220d01ef05a4e5edad963","toolName":"session_elicitation_probe","requestId":"X47C9-0LGGG","timestamp":"2026-08-13T02:14:22.578Z","operation":"HandleToolRequest","originalErrorName":"McpError","originalMessage":"MCP error -32602: Client refused the elicitation request.","originalStack":"McpError: MCP error -32602: Client refused the elicitation request.\n at fromError (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js:2048:20)\n at _onresponse (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js:490:36)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js:234:22)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:55:18)\n at routeServerResponse (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/sessionStore.js:208:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:626:38)\n at filter (native:1:11)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:623:39)\n at async dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:358:26)\n at async dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:312:22)\n at async dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at async cors2 (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/middleware/cors/index.js:76:11)\n at async dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/hono-base.js:307:31)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: MCP error -32602: Client refused the elicitation request.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26)\n at async executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:34)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:46)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:session_elicitation_probe: MCP error -32602: Client refused the elicitation request."}
18
- {"level":50,"time":1786587262653,"env":"testing","version":"0.0.0-test","pid":56148,"requestId":"5KYGH-LMTHY","timestamp":"2026-08-13T02:14:22.651Z","operation":"HandleToolRequest","critical":false,"errorCode":-32004,"originalErrorType":"AbortError","finalErrorType":"McpError","sessionId":"3d74267a99633ef41a291060a6a52f06aa50143237ad9d1dc58aab9f50d0ae34","toolName":"session_cancellable_tool","errorData":{"sessionId":"3d74267a99633ef41a291060a6a52f06aa50143237ad9d1dc58aab9f50d0ae34","toolName":"session_cancellable_tool","requestId":"5KYGH-LMTHY","timestamp":"2026-08-13T02:14:22.651Z","operation":"HandleToolRequest","originalErrorName":"AbortError","originalMessage":"AbortError: cancel tool request"},"stack":"McpError: AbortError: cancel tool request\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:334:26)\n at async executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:233:34)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at async <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js:114:46)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:session_cancellable_tool: AbortError: cancel tool request"}
1
+ {"level":50,"time":1787249227153,"env":"testing","version":"0.0.0-test","pid":43212,"auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"operation":"HandleToolRequest","requestId":"LEPEF-Q8LQQ","sessionId":"785ee4109a184c257b58b7ffcdf73e21589e44c418eee4ccdfcc5a71dbfe6847","tenantId":"authz-tenant","timestamp":"2026-08-20T18:07:07.152Z","toolName":"scoped_echo","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","errorData":{"operation":"HandleToolRequest","requestId":"LEPEF-Q8LQQ","sessionId":"785ee4109a184c257b58b7ffcdf73e21589e44c418eee4ccdfcc5a71dbfe6847","tenantId":"authz-tenant","timestamp":"2026-08-20T18:07:07.152Z","toolName":"scoped_echo","originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (file:///Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:91:54)\n at withRequiredScopes (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:60:15)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:382:17\n at Object.callback [as executor] (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1861:31)\n at McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1450:15)\n at file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1400:31\n at async Server._invokeInputRequiredCapableHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:887:13)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:838:19"},"stack":"McpError: Insufficient permissions.\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:19)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:449:26\n at Object.callback [as executor] (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1861:31)\n at McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1450:15)\n at file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1400:31\n at async Server._invokeInputRequiredCapableHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:887:13)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:838:19","msg":"Error in tool:scoped_echo: Insufficient permissions."}
2
+ {"level":50,"time":1787249227166,"env":"testing","version":"0.0.0-test","pid":43212,"auth":{"sub":"authz-user","scopes":["openid","email","profile","offline_access"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"operation":"HandleToolRequest","requestId":"1F3Z0-Z77NT","sessionId":"d1e234e49509af45bb2dd4575bcb09cc467dfc8f6f1a5e5e038227f608f6b5b2","tenantId":"authz-tenant","timestamp":"2026-08-20T18:07:07.166Z","toolName":"scoped_echo","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","errorData":{"operation":"HandleToolRequest","requestId":"1F3Z0-Z77NT","sessionId":"d1e234e49509af45bb2dd4575bcb09cc467dfc8f6f1a5e5e038227f608f6b5b2","tenantId":"authz-tenant","timestamp":"2026-08-20T18:07:07.166Z","toolName":"scoped_echo","originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (file:///Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:91:54)\n at withRequiredScopes (file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:60:15)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:382:17\n at Object.callback [as executor] (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1861:31)\n at McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1450:15)\n at file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1400:31\n at async Server._invokeInputRequiredCapableHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:887:13)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:838:19"},"stack":"McpError: Insufficient permissions.\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:19)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:449:26\n at Object.callback [as executor] (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1861:31)\n at McpServer.executeToolHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1450:15)\n at file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1400:31\n at async Server._invokeInputRequiredCapableHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:887:13)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:838:19","msg":"Error in tool:scoped_echo: Insufficient permissions."}
3
+ {"level":50,"time":1787249228307,"env":"testing","version":"0.0.0-test","pid":43220,"operation":"HandleToolRequest","requestId":"XMI4S-0CN4L","sessionId":"10b75ba7267aa0f3ac4acfa447e0232f7e9080095e6305d7a7fcc652016e56f2","timestamp":"2026-08-20T18:07:08.301Z","toolName":"session_cancellable_tool","critical":false,"errorCode":-32004,"originalErrorType":"stringEncountered","finalErrorType":"McpError","errorData":{"operation":"HandleToolRequest","requestId":"XMI4S-0CN4L","sessionId":"10b75ba7267aa0f3ac4acfa447e0232f7e9080095e6305d7a7fcc652016e56f2","timestamp":"2026-08-20T18:07:08.301Z","toolName":"session_cancellable_tool","originalErrorName":"stringEncountered","originalMessage":"AbortError: cancel tool request"},"stack":"McpError: AbortError: cancel tool request\n at ErrorHandler.handleError (file:///Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:186:19)\n at file:///Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:449:26\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1400:20\n at async Server._invokeInputRequiredCapableHandler (file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:887:13)\n at async file:///Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:838:19","msg":"Error in tool:session_cancellable_tool: AbortError: cancel tool request"}
4
+ {"level":50,"time":1787249244842,"env":"testing","version":"0.0.0-test","pid":43342,"auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"operation":"HandleToolRequest","requestId":"K0YRI-7BS1I","sessionId":"2ee7048f7affa20c25adfd980a023387cea2ce2a61eaee63048249d4dc0aab57","tenantId":"authz-tenant","timestamp":"2026-08-20T18:07:24.841Z","toolName":"scoped_echo","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","errorData":{"operation":"HandleToolRequest","requestId":"K0YRI-7BS1I","sessionId":"2ee7048f7affa20c25adfd980a023387cea2ce2a61eaee63048249d4dc0aab57","tenantId":"authz-tenant","timestamp":"2026-08-20T18:07:24.841Z","toolName":"scoped_echo","originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:91:58)\n at withRequiredScopes (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:60:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:382:17)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1861:31)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1450:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1400:31)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Insufficient permissions.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:449:26)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1861:31)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1450:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1400:31)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:scoped_echo: Insufficient permissions."}
5
+ {"level":50,"time":1787249244854,"env":"testing","version":"0.0.0-test","pid":43342,"auth":{"sub":"authz-user","scopes":["openid","email","profile","offline_access"],"clientId":"authz-client","tenantId":"authz-tenant","token":"[REDACTED]"},"operation":"HandleToolRequest","requestId":"NFZQV-P2NPI","sessionId":"f0811459e7d29d052c034cdaa5f6f4da3f9f150c0d5af8ebf65ae1aaac2d9c0c","tenantId":"authz-tenant","timestamp":"2026-08-20T18:07:24.854Z","toolName":"scoped_echo","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","errorData":{"operation":"HandleToolRequest","requestId":"NFZQV-P2NPI","sessionId":"f0811459e7d29d052c034cdaa5f6f4da3f9f150c0d5af8ebf65ae1aaac2d9c0c","tenantId":"authz-tenant","timestamp":"2026-08-20T18:07:24.854Z","toolName":"scoped_echo","originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:91:58)\n at withRequiredScopes (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:60:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:382:17)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1861:31)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1450:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1400:31)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Insufficient permissions.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:178:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:449:26)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1861:31)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1450:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs:1400:31)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:scoped_echo: Insufficient permissions."}
6
+ {"level":50,"time":1787249246537,"env":"testing","version":"0.0.0-test","pid":43354,"operation":"HandleToolRequest","requestId":"57E0T-P1UGN","sessionId":"757eccb5bfa31c7a69caa0876786df1a43a8d46e255273e5c42c20c68ebc062f","timestamp":"2026-08-20T18:07:26.534Z","toolName":"session_cancellable_tool","critical":false,"errorCode":-32004,"originalErrorType":"stringEncountered","finalErrorType":"McpError","errorData":{"operation":"HandleToolRequest","requestId":"57E0T-P1UGN","sessionId":"757eccb5bfa31c7a69caa0876786df1a43a8d46e255273e5c42c20c68ebc062f","timestamp":"2026-08-20T18:07:26.534Z","toolName":"session_cancellable_tool","originalErrorName":"stringEncountered","originalMessage":"AbortError: cancel tool request"},"stack":"McpError: AbortError: cancel tool request\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:186:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:449:26)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:session_cancellable_tool: AbortError: cancel tool request"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @fileoverview Multi-round-trip input plumbing shared by the tool, resource,
3
+ * and prompt handler factories (MCP protocol revision 2026-07-28).
4
+ *
5
+ * The 2025 push model — `await ctx.elicit(...)` mid-handler over a
6
+ * server-to-client request — has no channel on the 2026-07-28 wire. A handler
7
+ * now *returns* `inputRequired(...)` and is re-entered with the collected
8
+ * `inputResponses`. Framework handlers are pure functions returning a domain
9
+ * output, so the return path is expressed as a thrown {@link InputRequiredSignal}
10
+ * that each handler factory catches and converts back into the SDK's
11
+ * `input_required` result.
12
+ *
13
+ * One surface serves both eras: the SDK's legacy shim
14
+ * (`ServerOptions.inputRequired.legacyShim`, on by default) fulfils the same
15
+ * returns against 2025-era clients by issuing real `elicitation/create` /
16
+ * `sampling/createMessage` / `roots/list` requests and re-entering the handler.
17
+ *
18
+ * @see {@link https://modelcontextprotocol.io/specification/2026-07-28/basic/patterns/mrtr | MCP Multi-Round-Trip Requests}
19
+ * @module src/mcp-server/inputRequired
20
+ */
21
+ import { type InputRequiredResult, type InputRequiredSpec, type ServerContext } from '@modelcontextprotocol/server';
22
+ import type { ContextInputs } from '../core/context.js';
23
+ /**
24
+ * Thrown by `ctx.requestInput(...)` and caught by the handler factories, which
25
+ * return the carried `input_required` result to the SDK instead of a normal
26
+ * tool/resource/prompt result.
27
+ *
28
+ * Not an {@link McpError}: it is protocol control flow, not a failure, and must
29
+ * bypass the error classifier entirely.
30
+ */
31
+ export declare class InputRequiredSignal extends Error {
32
+ readonly result: InputRequiredResult;
33
+ /** Brand for `instanceof`-free detection across bundling boundaries. */
34
+ readonly isInputRequiredSignal: true;
35
+ constructor(result: InputRequiredResult);
36
+ }
37
+ /** Narrows an unknown thrown value to the input-required control-flow signal. */
38
+ export declare function isInputRequiredSignal(error: unknown): error is InputRequiredSignal;
39
+ /**
40
+ * Builds `ctx.requestInput`. Always present — a handler may request input on
41
+ * any transport and either era; whether the round trip is served by the client
42
+ * (2026) or by the SDK's legacy shim (2025) is not the handler's concern.
43
+ */
44
+ export declare function createRequestInput(): (spec: InputRequiredSpec) => never;
45
+ /**
46
+ * Builds the `ctx.inputs` reader over a retried request's `inputResponses`.
47
+ *
48
+ * Values arrive from the client and are never re-validated by the SDK — pass a
49
+ * schema to `accepted()` wherever the content matters.
50
+ */
51
+ export declare function createContextInputs(mcpReq: ServerContext['mcpReq'] | undefined): ContextInputs;
52
+ //# sourceMappingURL=inputRequired.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputRequired.d.ts","sourceRoot":"","sources":["../../src/mcp-server/inputRequired.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAItB,KAAK,aAAa,EAEnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAIhC,QAAQ,CAAC,MAAM,EAAE,mBAAmB;IAHhD,wEAAwE;IACxE,QAAQ,CAAC,qBAAqB,OAAiB;IAE/C,YAAqB,MAAM,EAAE,mBAAmB,EAG/C;CACF;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAOlF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,CAAC,IAAI,EAAE,iBAAiB,KAAK,KAAK,CAIvE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,SAAS,GAAG,aAAa,CAc9F"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @fileoverview Multi-round-trip input plumbing shared by the tool, resource,
3
+ * and prompt handler factories (MCP protocol revision 2026-07-28).
4
+ *
5
+ * The 2025 push model — `await ctx.elicit(...)` mid-handler over a
6
+ * server-to-client request — has no channel on the 2026-07-28 wire. A handler
7
+ * now *returns* `inputRequired(...)` and is re-entered with the collected
8
+ * `inputResponses`. Framework handlers are pure functions returning a domain
9
+ * output, so the return path is expressed as a thrown {@link InputRequiredSignal}
10
+ * that each handler factory catches and converts back into the SDK's
11
+ * `input_required` result.
12
+ *
13
+ * One surface serves both eras: the SDK's legacy shim
14
+ * (`ServerOptions.inputRequired.legacyShim`, on by default) fulfils the same
15
+ * returns against 2025-era clients by issuing real `elicitation/create` /
16
+ * `sampling/createMessage` / `roots/list` requests and re-entering the handler.
17
+ *
18
+ * @see {@link https://modelcontextprotocol.io/specification/2026-07-28/basic/patterns/mrtr | MCP Multi-Round-Trip Requests}
19
+ * @module src/mcp-server/inputRequired
20
+ */
21
+ import { acceptedContent, inputRequired, inputResponse, } from '@modelcontextprotocol/server';
22
+ /**
23
+ * Thrown by `ctx.requestInput(...)` and caught by the handler factories, which
24
+ * return the carried `input_required` result to the SDK instead of a normal
25
+ * tool/resource/prompt result.
26
+ *
27
+ * Not an {@link McpError}: it is protocol control flow, not a failure, and must
28
+ * bypass the error classifier entirely.
29
+ */
30
+ export class InputRequiredSignal extends Error {
31
+ result;
32
+ /** Brand for `instanceof`-free detection across bundling boundaries. */
33
+ isInputRequiredSignal = true;
34
+ constructor(result) {
35
+ super('Handler requires additional input before it can complete.');
36
+ this.result = result;
37
+ this.name = 'InputRequiredSignal';
38
+ }
39
+ }
40
+ /** Narrows an unknown thrown value to the input-required control-flow signal. */
41
+ export function isInputRequiredSignal(error) {
42
+ return (error instanceof InputRequiredSignal ||
43
+ (typeof error === 'object' &&
44
+ error !== null &&
45
+ error.isInputRequiredSignal === true));
46
+ }
47
+ /**
48
+ * Builds `ctx.requestInput`. Always present — a handler may request input on
49
+ * any transport and either era; whether the round trip is served by the client
50
+ * (2026) or by the SDK's legacy shim (2025) is not the handler's concern.
51
+ */
52
+ export function createRequestInput() {
53
+ return (spec) => {
54
+ throw new InputRequiredSignal(inputRequired(spec));
55
+ };
56
+ }
57
+ /**
58
+ * Builds the `ctx.inputs` reader over a retried request's `inputResponses`.
59
+ *
60
+ * Values arrive from the client and are never re-validated by the SDK — pass a
61
+ * schema to `accepted()` wherever the content matters.
62
+ */
63
+ export function createContextInputs(mcpReq) {
64
+ const responses = mcpReq?.inputResponses;
65
+ const accepted = ((key, schema) => schema === undefined
66
+ ? acceptedContent(responses, key)
67
+ : acceptedContent(responses, key, schema));
68
+ return {
69
+ accepted,
70
+ dropped: mcpReq?.droppedInputResponseKeys ?? [],
71
+ responses,
72
+ state: () => mcpReq?.requestState(),
73
+ view: (key) => inputResponse(responses, key),
74
+ };
75
+ }
76
+ //# sourceMappingURL=inputRequired.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputRequired.js","sourceRoot":"","sources":["../../src/mcp-server/inputRequired.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,eAAe,EAIf,aAAa,EACb,aAAa,GAGd,MAAM,8BAA8B,CAAC;AAItC;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAIvB,MAAM;IAH3B,wEAAwE;IAC/D,qBAAqB,GAAG,IAAa,CAAC;IAE/C,YAAqB,MAA2B;QAC9C,KAAK,CAAC,2DAA2D,CAAC,CAAC;sBADhD,MAAM;QAEzB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CACL,KAAK,YAAY,mBAAmB;QACpC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACxB,KAAK,KAAK,IAAI;YACb,KAA6C,CAAC,qBAAqB,KAAK,IAAI,CAAC,CACjF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,IAAuB,EAAS,EAAE;QACxC,MAAM,IAAI,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA2C;IAC7E,MAAM,SAAS,GAAG,MAAM,EAAE,cAAc,CAAC;IACzC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAW,EAAE,MAAyB,EAAE,EAAE,CAC3D,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC;QACjC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAA8B,CAAC;IAE5E,OAAO;QACL,QAAQ;QACR,OAAO,EAAE,MAAM,EAAE,wBAAwB,IAAI,EAAE;QAC/C,SAAS;QACT,KAAK,EAAE,GAA8B,EAAE,CAAC,MAAM,EAAE,YAAY,EAAK;QACjE,IAAI,EAAE,CAAC,GAAW,EAAqB,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC;KACxE,CAAC;AACJ,CAAC"}
@@ -1,28 +1,33 @@
1
1
  /**
2
2
  * @fileoverview Request-scoped list-changed / resource-updated notifiers.
3
3
  *
4
- * Under the per-request `McpServer` model (HTTP and Workers,
5
- * GHSA-345p-7cg4-v4c7), the server-level `server.send*ListChanged()` path emits
6
- * a notification with no `relatedRequestId`. `@hono/mcp` then looks for the
7
- * standalone GET SSE stream — which lives on a *different* transport instance —
8
- * and, finding none on the POST transport, drops the notification silently
9
- * (#135). The fix is to route handler-time notifications through the request's
10
- * own `extra.sendNotification`, which stamps `relatedRequestId` so the
11
- * notification reaches that request's SSE response stream.
4
+ * Notifications fired from inside a handler are sent through the request's own
5
+ * `ctx.mcpReq.notify`, which stamps `relatedRequestId` so the message lands on
6
+ * that request's own response stream. The server-level `send*ListChanged()`
7
+ * path targets the standalone GET SSE stream instead, which does not exist
8
+ * under per-request serving (`createMcpHandler`'s modern leg and its stateless
9
+ * legacy fallback both build one instance per request) — notifications sent
10
+ * that way drop silently (#135).
11
+ *
12
+ * `notifications/resources/updated` is subscription-scoped: it is emitted only
13
+ * for URIs the client actually subscribed to via `resources/subscribe` (#354).
14
+ *
15
+ * That request-scoped path is the **2025-era** one. On 2026-07-28 delivery
16
+ * belongs to the client's `subscriptions/listen` stream, so a modern instance
17
+ * publishes to the handler's event bus instead — see {@link buildBusNotifiers}
18
+ * (#193).
12
19
  *
13
20
  * @module src/mcp-server/notifications
14
21
  */
15
- import type { ServerNotification } from '@modelcontextprotocol/sdk/types.js';
22
+ import type { ServerEventBus, ServerNotification, ServerNotifier } from '@modelcontextprotocol/server';
16
23
  /**
17
- * The minimal shape we need off the SDK's `RequestHandlerExtra`. Typed with an
18
- * optional `sendNotification` (the SDK declares it required) so the runtime
19
- * presence check below is type-meaningful — mirroring how `wrapElicit` narrows
20
- * against a loose capability interface rather than the full extra. A non-request
21
- * scope (some test harnesses pass a bare `Request`) has no sender, and we fall
22
- * back to the server-level notifiers there.
24
+ * The slice of `ctx.mcpReq` these notifiers need. Typed with an optional
25
+ * `notify` so the runtime presence check is type-meaningful — a background or
26
+ * test scope may pass a stand-in without one, and callers fall back to the
27
+ * server-level notifiers there.
23
28
  */
24
29
  interface NotificationSender {
25
- sendNotification?: (notification: ServerNotification) => Promise<void>;
30
+ notify?: (notification: ServerNotification) => Promise<void>;
26
31
  }
27
32
  /** The four list-changed / resource-updated closures attached to a handler `ctx`. */
28
33
  export interface RequestScopedNotifiers {
@@ -31,25 +36,89 @@ export interface RequestScopedNotifiers {
31
36
  notifyResourceUpdated: (uri: string) => void;
32
37
  notifyToolListChanged: () => void;
33
38
  }
39
+ /** Per-connection subscription state consulted before a resource-updated emit. */
40
+ export interface ResourceSubscriptions {
41
+ /** True when the connected client subscribed to this exact URI. */
42
+ has: (uri: string) => boolean;
43
+ }
44
+ /**
45
+ * The same four closures, each optional — what a server-level notifier set
46
+ * offers and what {@link selectNotifiers} returns, since a fallback set may not
47
+ * carry all four.
48
+ */
49
+ export interface OptionalNotifiers {
50
+ notifyPromptListChanged?: () => void;
51
+ notifyResourceListChanged?: () => void;
52
+ notifyResourceUpdated?: (uri: string) => void;
53
+ notifyToolListChanged?: () => void;
54
+ }
55
+ /** Every delivery path a handler factory can offer, in one bag. */
56
+ export interface NotifierSources extends OptionalNotifiers {
57
+ /** Modern-era publish facade. Present only on `modern` instances. */
58
+ bus?: ServerNotifier;
59
+ /** Legacy-era `resources/subscribe` registry. */
60
+ subscriptions?: ResourceSubscriptions;
61
+ }
62
+ /**
63
+ * Picks the delivery path a handler's `ctx.notify*` should take, era-ordered.
64
+ *
65
+ * A modern instance publishes to the listen bus, where the SDK applies the
66
+ * client's subscription filter and an out-of-request emit still reaches open
67
+ * streams (#193). A legacy instance sends through the request's own scope so
68
+ * the message carries `relatedRequestId` (#135). The server-level closures are
69
+ * the fallback for scopes with no sender at all — stdio and test harnesses.
70
+ *
71
+ * Both handler factories route through here so the ordering is one decision
72
+ * rather than two copies that can drift apart.
73
+ */
74
+ export declare function selectNotifiers(sources: NotifierSources, mcpReq: NotificationSender | undefined): OptionalNotifiers;
34
75
  /**
35
- * Builds notifier closures bound to a single request's `extra.sendNotification`.
36
- * The SDK stamps `relatedRequestId` onto these sends, so `@hono/mcp` routes them
37
- * to that request's SSE response stream — the delivery path the server-level
38
- * `server.send*ListChanged()` calls miss under the per-request McpServer model,
39
- * where they drop silently (#135).
40
- *
41
- * Returns `undefined` when the supplied extra exposes no sender; callers fall
42
- * back to the server-level notifiers in that case.
43
- *
44
- * Fire-and-forget by contract (`() => void`): the underlying `sendNotification`
45
- * promise is not awaited — a notification that can't flush (client already gone,
46
- * response not upgraded to SSE) must not fail the handler. A flush failure is
47
- * logged at debug rather than swallowed silently.
48
- *
49
- * Handler-time only. A background task (auto-task handler, cron) has no request
50
- * scope; those paths keep the server-level notifiers, which deliver on stdio but
51
- * not under HTTP — the residual gap a session-scoped notification bus would close.
76
+ * A {@link ServerNotifier} over an arbitrary {@link ServerEventBus}.
77
+ *
78
+ * `createMcpHandler` returns one bound to its own bus, but the framework builds
79
+ * the bus first — before any transport exists — so `setup()` can capture a
80
+ * publish handle that stays valid once serving starts. The names mirror the
81
+ * wire methods.
82
+ */
83
+ export declare function notifierFor(bus: ServerEventBus): ServerNotifier;
84
+ /**
85
+ * Builds notifier closures that publish onto the modern era's
86
+ * `subscriptions/listen` bus.
87
+ *
88
+ * On protocol revision 2026-07-28 a client opts into notification types by
89
+ * opening a `subscriptions/listen` stream, and the spec is explicit that a
90
+ * server MUST NOT send types the client has not requested. That filter lives in
91
+ * the SDK's listen router, which only sees what reaches the bus — so a modern
92
+ * handler firing through its own request scope bypasses it and delivers to
93
+ * clients that opened no stream at all.
94
+ *
95
+ * Publishing is also what makes *out-of-request* emission work: the bus is not
96
+ * request-scoped, so a background emitter reaches every open stream rather than
97
+ * dropping into a closed exchange.
98
+ *
99
+ * No subscription registry is consulted here — including for
100
+ * `resources/updated`. Per-URI routing is the listen filter's
101
+ * `resourceSubscriptions` field, which the SDK applies on publish; the
102
+ * `resources/subscribe` registry is the 2025-era mechanism and does not exist
103
+ * on this era.
104
+ */
105
+ export declare function buildBusNotifiers(notify: ServerNotifier): RequestScopedNotifiers;
106
+ /**
107
+ * Builds notifier closures bound to a single request's `ctx.mcpReq.notify`.
108
+ *
109
+ * Returns `undefined` when the supplied request scope exposes no sender;
110
+ * callers fall back to the server-level notifiers in that case.
111
+ *
112
+ * Fire-and-forget by contract (`() => void`): the underlying promise is not
113
+ * awaited — a notification that can't flush (client already gone, response not
114
+ * upgraded to SSE) must not fail the handler. A flush failure is logged at
115
+ * debug rather than swallowed silently.
116
+ *
117
+ * @param mcpReq - The request scope from the SDK's `ServerContext`.
118
+ * @param subscriptions - Per-connection `resources/subscribe` registry. When
119
+ * supplied, `notifyResourceUpdated` emits only for subscribed URIs; when
120
+ * omitted (no subscription tracking available) every URI is emitted.
52
121
  */
53
- export declare function buildRequestScopedNotifiers(extra: NotificationSender): RequestScopedNotifiers | undefined;
122
+ export declare function buildRequestScopedNotifiers(mcpReq: NotificationSender, subscriptions?: ResourceSubscriptions): RequestScopedNotifiers | undefined;
54
123
  export {};
55
124
  //# sourceMappingURL=notifications.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/mcp-server/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAI7E;;;;;;;GAOG;AACH,UAAU,kBAAkB;IAC1B,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,qFAAqF;AACrF,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,MAAM,IAAI,CAAC;IACpC,yBAAyB,EAAE,MAAM,IAAI,CAAC;IACtC,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,qBAAqB,EAAE,MAAM,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,kBAAkB,GACxB,sBAAsB,GAAG,SAAS,CAmBpC"}
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/mcp-server/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,cAAc,EACf,MAAM,8BAA8B,CAAC;AAItC;;;;;GAKG;AACH,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,qFAAqF;AACrF,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,MAAM,IAAI,CAAC;IACpC,yBAAyB,EAAE,MAAM,IAAI,CAAC;IACtC,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,qBAAqB,EAAE,MAAM,IAAI,CAAC;CACnC;AAED,kFAAkF;AAClF,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,yBAAyB,CAAC,EAAE,MAAM,IAAI,CAAC;IACvC,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,qEAAqE;IACrE,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,iDAAiD;IACjD,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,iBAAiB,CAMnB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAO/D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,sBAAsB,CAOhF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,kBAAkB,EAC1B,aAAa,CAAC,EAAE,qBAAqB,GACpC,sBAAsB,GAAG,SAAS,CA2BpC"}