@cyanheads/mcp-ts-core 0.11.5 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) 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/dist/cli/init.js +1 -1
  7. package/dist/cli/init.js.map +1 -1
  8. package/dist/config/index.d.ts +0 -18
  9. package/dist/config/index.d.ts.map +1 -1
  10. package/dist/config/index.js +0 -25
  11. package/dist/config/index.js.map +1 -1
  12. package/dist/core/app.d.ts +5 -7
  13. package/dist/core/app.d.ts.map +1 -1
  14. package/dist/core/app.js +18 -27
  15. package/dist/core/app.js.map +1 -1
  16. package/dist/core/context.d.ts +90 -57
  17. package/dist/core/context.d.ts.map +1 -1
  18. package/dist/core/context.js +32 -33
  19. package/dist/core/context.js.map +1 -1
  20. package/dist/core/gcPressure.d.ts.map +1 -1
  21. package/dist/core/gcPressure.js +3 -4
  22. package/dist/core/gcPressure.js.map +1 -1
  23. package/dist/core/index.d.ts +6 -7
  24. package/dist/core/index.d.ts.map +1 -1
  25. package/dist/core/index.js +10 -2
  26. package/dist/core/index.js.map +1 -1
  27. package/dist/core/serverManifest.d.ts +1 -3
  28. package/dist/core/serverManifest.d.ts.map +1 -1
  29. package/dist/core/serverManifest.js +9 -4
  30. package/dist/core/serverManifest.js.map +1 -1
  31. package/dist/core/worker.d.ts.map +1 -1
  32. package/dist/core/worker.js +32 -35
  33. package/dist/core/worker.js.map +1 -1
  34. package/dist/logs/combined.log +10 -22
  35. package/dist/logs/error.log +6 -18
  36. package/dist/mcp-server/inputRequired.d.ts +52 -0
  37. package/dist/mcp-server/inputRequired.d.ts.map +1 -0
  38. package/dist/mcp-server/inputRequired.js +76 -0
  39. package/dist/mcp-server/inputRequired.js.map +1 -0
  40. package/dist/mcp-server/notifications.d.ts +33 -31
  41. package/dist/mcp-server/notifications.d.ts.map +1 -1
  42. package/dist/mcp-server/notifications.js +34 -26
  43. package/dist/mcp-server/notifications.js.map +1 -1
  44. package/dist/mcp-server/prompts/prompt-registration.d.ts +2 -2
  45. package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -1
  46. package/dist/mcp-server/prompts/prompt-registration.js +15 -5
  47. package/dist/mcp-server/prompts/prompt-registration.js.map +1 -1
  48. package/dist/mcp-server/prompts/utils/promptDefinition.d.ts +1 -1
  49. package/dist/mcp-server/prompts/utils/promptDefinition.d.ts.map +1 -1
  50. package/dist/mcp-server/resources/resource-registration.d.ts +3 -3
  51. package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -1
  52. package/dist/mcp-server/resources/resource-registration.js +8 -15
  53. package/dist/mcp-server/resources/resource-registration.js.map +1 -1
  54. package/dist/mcp-server/resources/resourceSubscriptions.d.ts +45 -0
  55. package/dist/mcp-server/resources/resourceSubscriptions.d.ts.map +1 -0
  56. package/dist/mcp-server/resources/resourceSubscriptions.js +51 -0
  57. package/dist/mcp-server/resources/resourceSubscriptions.js.map +1 -0
  58. package/dist/mcp-server/resources/utils/resourceDefinition.d.ts +3 -5
  59. package/dist/mcp-server/resources/utils/resourceDefinition.d.ts.map +1 -1
  60. package/dist/mcp-server/resources/utils/resourceDefinition.js +1 -1
  61. package/dist/mcp-server/resources/utils/resourceDefinition.js.map +1 -1
  62. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +8 -15
  63. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -1
  64. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +21 -22
  65. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -1
  66. package/dist/mcp-server/server.d.ts +12 -21
  67. package/dist/mcp-server/server.d.ts.map +1 -1
  68. package/dist/mcp-server/server.js +38 -28
  69. package/dist/mcp-server/server.js.map +1 -1
  70. package/dist/mcp-server/tools/tool-registration.d.ts +11 -33
  71. package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -1
  72. package/dist/mcp-server/tools/tool-registration.js +17 -243
  73. package/dist/mcp-server/tools/tool-registration.js.map +1 -1
  74. package/dist/mcp-server/tools/utils/toolDefinition.d.ts +1 -3
  75. package/dist/mcp-server/tools/utils/toolDefinition.d.ts.map +1 -1
  76. package/dist/mcp-server/tools/utils/toolDefinition.js +48 -1
  77. package/dist/mcp-server/tools/utils/toolDefinition.js.map +1 -1
  78. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +46 -20
  79. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
  80. package/dist/mcp-server/tools/utils/toolHandlerFactory.js +131 -25
  81. package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
  82. package/dist/mcp-server/transports/ITransport.d.ts +2 -2
  83. package/dist/mcp-server/transports/ITransport.d.ts.map +1 -1
  84. package/dist/mcp-server/transports/auth/authFactory.js +1 -1
  85. package/dist/mcp-server/transports/auth/authFactory.js.map +1 -1
  86. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +1 -1
  87. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -1
  88. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -1
  89. package/dist/mcp-server/transports/auth/lib/authUtils.js +5 -13
  90. package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -1
  91. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +5 -11
  92. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -1
  93. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -1
  94. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +9 -22
  95. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -1
  96. package/dist/mcp-server/transports/heartbeat.d.ts.map +1 -1
  97. package/dist/mcp-server/transports/heartbeat.js +4 -8
  98. package/dist/mcp-server/transports/heartbeat.js.map +1 -1
  99. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -1
  100. package/dist/mcp-server/transports/http/httpErrorHandler.js +6 -24
  101. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
  102. package/dist/mcp-server/transports/http/httpServer.d.ts +3 -3
  103. package/dist/mcp-server/transports/http/httpServer.d.ts.map +1 -1
  104. package/dist/mcp-server/transports/http/httpServer.js +15 -32
  105. package/dist/mcp-server/transports/http/httpServer.js.map +1 -1
  106. package/dist/mcp-server/transports/http/httpTransport.d.ts +25 -8
  107. package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -1
  108. package/dist/mcp-server/transports/http/httpTransport.js +156 -373
  109. package/dist/mcp-server/transports/http/httpTransport.js.map +1 -1
  110. package/dist/mcp-server/transports/http/landing-page/assets/styles.d.ts.map +1 -1
  111. package/dist/mcp-server/transports/http/landing-page/assets/styles.js +0 -1
  112. package/dist/mcp-server/transports/http/landing-page/assets/styles.js.map +1 -1
  113. package/dist/mcp-server/transports/http/landing-page/handler.d.ts.map +1 -1
  114. package/dist/mcp-server/transports/http/landing-page/handler.js +4 -8
  115. package/dist/mcp-server/transports/http/landing-page/handler.js.map +1 -1
  116. package/dist/mcp-server/transports/http/landing-page/sections/tools.js +0 -2
  117. package/dist/mcp-server/transports/http/landing-page/sections/tools.js.map +1 -1
  118. package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts.map +1 -1
  119. package/dist/mcp-server/transports/http/protectedResourceMetadata.js +2 -6
  120. package/dist/mcp-server/transports/http/protectedResourceMetadata.js.map +1 -1
  121. package/dist/mcp-server/transports/http/robotsTxt.js +2 -2
  122. package/dist/mcp-server/transports/http/robotsTxt.js.map +1 -1
  123. package/dist/mcp-server/transports/http/serverCard.d.ts.map +1 -1
  124. package/dist/mcp-server/transports/http/serverCard.js +2 -6
  125. package/dist/mcp-server/transports/http/serverCard.js.map +1 -1
  126. package/dist/mcp-server/transports/http/sessionStore.d.ts +46 -66
  127. package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -1
  128. package/dist/mcp-server/transports/http/sessionStore.js +140 -238
  129. package/dist/mcp-server/transports/http/sessionStore.js.map +1 -1
  130. package/dist/mcp-server/transports/manager.d.ts +12 -4
  131. package/dist/mcp-server/transports/manager.d.ts.map +1 -1
  132. package/dist/mcp-server/transports/manager.js +35 -33
  133. package/dist/mcp-server/transports/manager.js.map +1 -1
  134. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +24 -31
  135. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -1
  136. package/dist/mcp-server/transports/stdio/stdioTransport.js +23 -38
  137. package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -1
  138. package/dist/mcp-server/types.d.ts +25 -0
  139. package/dist/mcp-server/types.d.ts.map +1 -0
  140. package/dist/mcp-server/types.js +10 -0
  141. package/dist/mcp-server/types.js.map +1 -0
  142. package/dist/services/canvas/core/CanvasInstance.d.ts +2 -2
  143. package/dist/services/canvas/core/CanvasInstance.d.ts.map +1 -1
  144. package/dist/services/canvas/core/CanvasInstance.js.map +1 -1
  145. package/dist/services/canvas/core/CanvasRegistry.d.ts +4 -4
  146. package/dist/services/canvas/core/CanvasRegistry.d.ts.map +1 -1
  147. package/dist/services/canvas/core/CanvasRegistry.js +8 -18
  148. package/dist/services/canvas/core/CanvasRegistry.js.map +1 -1
  149. package/dist/services/canvas/core/DataCanvas.d.ts +5 -5
  150. package/dist/services/canvas/core/DataCanvas.d.ts.map +1 -1
  151. package/dist/services/canvas/core/DataCanvas.js +2 -3
  152. package/dist/services/canvas/core/DataCanvas.js.map +1 -1
  153. package/dist/services/canvas/core/IDataCanvasProvider.d.ts +11 -11
  154. package/dist/services/canvas/core/IDataCanvasProvider.d.ts.map +1 -1
  155. package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts +11 -11
  156. package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts.map +1 -1
  157. package/dist/services/canvas/providers/duckdb/DuckdbProvider.js +4 -10
  158. package/dist/services/canvas/providers/duckdb/DuckdbProvider.js.map +1 -1
  159. package/dist/services/llm/providers/openrouter.provider.d.ts.map +1 -1
  160. package/dist/services/llm/providers/openrouter.provider.js +2 -5
  161. package/dist/services/llm/providers/openrouter.provider.js.map +1 -1
  162. package/dist/services/mirror/core/defineMirror.js +1 -1
  163. package/dist/services/mirror/core/defineMirror.js.map +1 -1
  164. package/dist/services/mirror/types.d.ts +5 -5
  165. package/dist/services/mirror/types.d.ts.map +1 -1
  166. package/dist/services/speech/providers/elevenlabs.provider.js +1 -1
  167. package/dist/services/speech/providers/elevenlabs.provider.js.map +1 -1
  168. package/dist/services/speech/providers/whisper.provider.js +1 -1
  169. package/dist/services/speech/providers/whisper.provider.js.map +1 -1
  170. package/dist/storage/core/StorageService.d.ts +1 -1
  171. package/dist/storage/core/StorageService.d.ts.map +1 -1
  172. package/dist/storage/core/StorageService.js +12 -20
  173. package/dist/storage/core/StorageService.js.map +1 -1
  174. package/dist/storage/core/storageFactory.d.ts.map +1 -1
  175. package/dist/storage/core/storageFactory.js.map +1 -1
  176. package/dist/storage/core/storageValidation.d.ts +1 -1
  177. package/dist/storage/core/storageValidation.d.ts.map +1 -1
  178. package/dist/storage/core/storageValidation.js +2 -2
  179. package/dist/storage/core/storageValidation.js.map +1 -1
  180. package/dist/storage/providers/cloudflare/d1Provider.d.ts +1 -1
  181. package/dist/storage/providers/cloudflare/d1Provider.d.ts.map +1 -1
  182. package/dist/storage/providers/cloudflare/d1Provider.js +4 -12
  183. package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -1
  184. package/dist/storage/providers/cloudflare/kvProvider.d.ts +1 -1
  185. package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -1
  186. package/dist/storage/providers/cloudflare/kvProvider.js +3 -8
  187. package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -1
  188. package/dist/storage/providers/cloudflare/r2Provider.d.ts +1 -1
  189. package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -1
  190. package/dist/storage/providers/cloudflare/r2Provider.js +3 -8
  191. package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -1
  192. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +1 -1
  193. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -1
  194. package/dist/storage/providers/inMemory/inMemoryProvider.js +2 -4
  195. package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -1
  196. package/dist/testing/index.d.ts +35 -12
  197. package/dist/testing/index.d.ts.map +1 -1
  198. package/dist/testing/index.js +53 -38
  199. package/dist/testing/index.js.map +1 -1
  200. package/dist/testing/vitest.d.ts +1 -1
  201. package/dist/testing/vitest.d.ts.map +1 -1
  202. package/dist/types-global/errors.d.ts +28 -15
  203. package/dist/types-global/errors.d.ts.map +1 -1
  204. package/dist/types-global/errors.js +8 -1
  205. package/dist/types-global/errors.js.map +1 -1
  206. package/dist/utils/formatting/diffFormatter.d.ts +5 -5
  207. package/dist/utils/formatting/diffFormatter.d.ts.map +1 -1
  208. package/dist/utils/formatting/diffFormatter.js +7 -20
  209. package/dist/utils/formatting/diffFormatter.js.map +1 -1
  210. package/dist/utils/formatting/tableFormatter.d.ts +3 -3
  211. package/dist/utils/formatting/tableFormatter.d.ts.map +1 -1
  212. package/dist/utils/formatting/tableFormatter.js +6 -17
  213. package/dist/utils/formatting/tableFormatter.js.map +1 -1
  214. package/dist/utils/formatting/treeFormatter.d.ts +3 -3
  215. package/dist/utils/formatting/treeFormatter.d.ts.map +1 -1
  216. package/dist/utils/formatting/treeFormatter.js +5 -18
  217. package/dist/utils/formatting/treeFormatter.js.map +1 -1
  218. package/dist/utils/index.d.ts +4 -2
  219. package/dist/utils/index.d.ts.map +1 -1
  220. package/dist/utils/index.js +2 -2
  221. package/dist/utils/index.js.map +1 -1
  222. package/dist/utils/internal/error-handler/errorHandler.d.ts +1 -1
  223. package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -1
  224. package/dist/utils/internal/error-handler/errorHandler.js +23 -11
  225. package/dist/utils/internal/error-handler/errorHandler.js.map +1 -1
  226. package/dist/utils/internal/error-handler/types.d.ts +10 -13
  227. package/dist/utils/internal/error-handler/types.d.ts.map +1 -1
  228. package/dist/utils/internal/logger.d.ts +3 -3
  229. package/dist/utils/internal/logger.d.ts.map +1 -1
  230. package/dist/utils/internal/logger.js +11 -5
  231. package/dist/utils/internal/logger.js.map +1 -1
  232. package/dist/utils/internal/performance.d.ts +1 -1
  233. package/dist/utils/internal/performance.d.ts.map +1 -1
  234. package/dist/utils/internal/performance.js +57 -13
  235. package/dist/utils/internal/performance.js.map +1 -1
  236. package/dist/utils/internal/requestContext.d.ts +79 -55
  237. package/dist/utils/internal/requestContext.d.ts.map +1 -1
  238. package/dist/utils/internal/requestContext.js +77 -32
  239. package/dist/utils/internal/requestContext.js.map +1 -1
  240. package/dist/utils/metrics/tokenCounter.d.ts +3 -3
  241. package/dist/utils/metrics/tokenCounter.d.ts.map +1 -1
  242. package/dist/utils/metrics/tokenCounter.js.map +1 -1
  243. package/dist/utils/network/fetchWithTimeout.d.ts +2 -2
  244. package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -1
  245. package/dist/utils/network/fetchWithTimeout.js +8 -24
  246. package/dist/utils/network/fetchWithTimeout.js.map +1 -1
  247. package/dist/utils/network/retry.d.ts +2 -2
  248. package/dist/utils/network/retry.d.ts.map +1 -1
  249. package/dist/utils/overflow/outlineOnOverflow.d.ts +1 -1
  250. package/dist/utils/overflow/outlineOnOverflow.d.ts.map +1 -1
  251. package/dist/utils/pagination/pagination.d.ts +3 -3
  252. package/dist/utils/pagination/pagination.d.ts.map +1 -1
  253. package/dist/utils/pagination/pagination.js +3 -3
  254. package/dist/utils/pagination/pagination.js.map +1 -1
  255. package/dist/utils/parsing/csvParser.d.ts +2 -2
  256. package/dist/utils/parsing/csvParser.d.ts.map +1 -1
  257. package/dist/utils/parsing/csvParser.js +4 -8
  258. package/dist/utils/parsing/csvParser.js.map +1 -1
  259. package/dist/utils/parsing/dateParser.d.ts +3 -3
  260. package/dist/utils/parsing/dateParser.d.ts.map +1 -1
  261. package/dist/utils/parsing/dateParser.js +3 -2
  262. package/dist/utils/parsing/dateParser.js.map +1 -1
  263. package/dist/utils/parsing/frontmatterParser.d.ts +2 -2
  264. package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -1
  265. package/dist/utils/parsing/frontmatterParser.js +7 -10
  266. package/dist/utils/parsing/frontmatterParser.js.map +1 -1
  267. package/dist/utils/parsing/htmlExtractor.d.ts +2 -2
  268. package/dist/utils/parsing/htmlExtractor.d.ts.map +1 -1
  269. package/dist/utils/parsing/htmlExtractor.js +6 -11
  270. package/dist/utils/parsing/htmlExtractor.js.map +1 -1
  271. package/dist/utils/parsing/jsonParser.d.ts +2 -2
  272. package/dist/utils/parsing/jsonParser.d.ts.map +1 -1
  273. package/dist/utils/parsing/jsonParser.js +4 -8
  274. package/dist/utils/parsing/jsonParser.js.map +1 -1
  275. package/dist/utils/parsing/pdfParser.d.ts +10 -10
  276. package/dist/utils/parsing/pdfParser.d.ts.map +1 -1
  277. package/dist/utils/parsing/pdfParser.js +26 -89
  278. package/dist/utils/parsing/pdfParser.js.map +1 -1
  279. package/dist/utils/parsing/xmlParser.d.ts +2 -2
  280. package/dist/utils/parsing/xmlParser.d.ts.map +1 -1
  281. package/dist/utils/parsing/xmlParser.js +4 -8
  282. package/dist/utils/parsing/xmlParser.js.map +1 -1
  283. package/dist/utils/parsing/yamlParser.d.ts +2 -2
  284. package/dist/utils/parsing/yamlParser.d.ts.map +1 -1
  285. package/dist/utils/parsing/yamlParser.js +4 -8
  286. package/dist/utils/parsing/yamlParser.js.map +1 -1
  287. package/dist/utils/scheduling/scheduler.d.ts.map +1 -1
  288. package/dist/utils/scheduling/scheduler.js +5 -6
  289. package/dist/utils/scheduling/scheduler.js.map +1 -1
  290. package/dist/utils/security/rateLimiter.d.ts +2 -2
  291. package/dist/utils/security/rateLimiter.d.ts.map +1 -1
  292. package/dist/utils/security/rateLimiter.js +1 -1
  293. package/dist/utils/security/rateLimiter.js.map +1 -1
  294. package/dist/utils/telemetry/attributes.d.ts +23 -7
  295. package/dist/utils/telemetry/attributes.d.ts.map +1 -1
  296. package/dist/utils/telemetry/attributes.js +23 -10
  297. package/dist/utils/telemetry/attributes.js.map +1 -1
  298. package/dist/utils/telemetry/trace.d.ts +3 -3
  299. package/dist/utils/telemetry/trace.d.ts.map +1 -1
  300. package/dist/utils/telemetry/trace.js +4 -2
  301. package/dist/utils/telemetry/trace.js.map +1 -1
  302. package/package.json +22 -26
  303. package/scripts/lint-mcp.ts +1 -3
  304. package/scripts/lint-packaging.ts +1 -1
  305. package/skills/add-service/SKILL.md +2 -2
  306. package/skills/add-test/SKILL.md +42 -20
  307. package/skills/add-tool/SKILL.md +68 -19
  308. package/skills/api-config/SKILL.md +1 -11
  309. package/skills/api-context/SKILL.md +175 -111
  310. package/skills/api-linter/SKILL.md +2 -2
  311. package/skills/api-telemetry/SKILL.md +8 -12
  312. package/skills/api-testing/SKILL.md +53 -52
  313. package/skills/code-simplifier/SKILL.md +2 -2
  314. package/skills/design-mcp-server/SKILL.md +31 -17
  315. package/skills/field-test/SKILL.md +4 -2
  316. package/skills/polish-docs-meta/SKILL.md +1 -1
  317. package/skills/polish-docs-meta/references/agent-protocol.md +2 -2
  318. package/skills/polish-docs-meta/references/readme.md +1 -1
  319. package/skills/release-and-publish/SKILL.md +3 -1
  320. package/skills/report-issue-framework/SKILL.md +2 -2
  321. package/skills/report-issue-local/SKILL.md +2 -2
  322. package/skills/security-pass/SKILL.md +16 -14
  323. package/templates/AGENTS.md +6 -6
  324. package/templates/CLAUDE.md +6 -6
  325. package/templates/tests/resources/echo.resource.test.ts +16 -9
  326. package/dist/mcp-server/elicitation.d.ts +0 -64
  327. package/dist/mcp-server/elicitation.d.ts.map +0 -1
  328. package/dist/mcp-server/elicitation.js +0 -81
  329. package/dist/mcp-server/elicitation.js.map +0 -1
  330. package/dist/mcp-server/protocolSession.d.ts +0 -34
  331. package/dist/mcp-server/protocolSession.d.ts.map +0 -1
  332. package/dist/mcp-server/protocolSession.js +0 -13
  333. package/dist/mcp-server/protocolSession.js.map +0 -1
  334. package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.d.ts +0 -53
  335. package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.d.ts.map +0 -1
  336. package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.js +0 -65
  337. package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.js.map +0 -1
  338. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts +0 -70
  339. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts.map +0 -1
  340. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js +0 -130
  341. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js.map +0 -1
  342. package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts +0 -109
  343. package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts.map +0 -1
  344. package/dist/mcp-server/tasks/core/storageBackedTaskStore.js +0 -209
  345. package/dist/mcp-server/tasks/core/storageBackedTaskStore.js.map +0 -1
  346. package/dist/mcp-server/tasks/core/taskManager.d.ts +0 -91
  347. package/dist/mcp-server/tasks/core/taskManager.d.ts.map +0 -1
  348. package/dist/mcp-server/tasks/core/taskManager.js +0 -210
  349. package/dist/mcp-server/tasks/core/taskManager.js.map +0 -1
  350. package/dist/mcp-server/tasks/core/taskTypes.d.ts +0 -18
  351. package/dist/mcp-server/tasks/core/taskTypes.d.ts.map +0 -1
  352. package/dist/mcp-server/tasks/core/taskTypes.js +0 -20
  353. package/dist/mcp-server/tasks/core/taskTypes.js.map +0 -1
  354. package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts +0 -101
  355. package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts.map +0 -1
  356. package/dist/mcp-server/tasks/utils/taskToolDefinition.js +0 -14
  357. package/dist/mcp-server/tasks/utils/taskToolDefinition.js.map +0 -1
@@ -1,14 +1,23 @@
1
1
  /**
2
- * @fileoverview Simple in-memory session store for MCP HTTP transport.
3
- * Implements session management as per MCP Spec 2025-06-18.
4
- * @see {@link https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#session-management | MCP Session Management}
2
+ * @fileoverview In-memory session registry for the HTTP transport's sessionful
3
+ * (2025-era) arm.
4
+ *
5
+ * The SDK's streamable HTTP transport owns the protocol side of a session — it
6
+ * mints the ID, rejects unknown ones, stamps `Mcp-Session-Id`, and answers
7
+ * DELETE. This store owns what the SDK deliberately does not: binding a session
8
+ * to the authenticated identity that created it, capping concurrent sessions,
9
+ * expiring idle ones, and holding the `McpServer` + transport pair that serves
10
+ * the session for its lifetime.
11
+ *
12
+ * The 2026-07-28 revision has no session at all, so nothing here applies to it.
13
+ *
14
+ * @see {@link https://modelcontextprotocol.io/specification/2026-07-28/basic/transports | MCP Transports}
5
15
  * @module src/mcp-server/transports/http/sessionStore
6
16
  */
7
- import { ErrorCode, } from '@modelcontextprotocol/sdk/types.js';
8
17
  import { validateSessionIdFormat } from '../../../mcp-server/transports/http/sessionIdUtils.js';
9
18
  import { invalidParams, serviceUnavailable } from '../../../types-global/errors.js';
10
19
  import { logger } from '../../../utils/internal/logger.js';
11
- import { requestContextService } from '../../../utils/internal/requestContext.js';
20
+ import { requestContextService, withExtra } from '../../../utils/internal/requestContext.js';
12
21
  import { ATTR_MCP_SESSION_EVENT } from '../../../utils/telemetry/attributes.js';
13
22
  import { createCounter, createHistogram } from '../../../utils/telemetry/metrics.js';
14
23
  let sessionEventCounter;
@@ -22,10 +31,6 @@ function getSessionMetrics() {
22
31
  export function initSessionMetrics() {
23
32
  getSessionMetrics();
24
33
  }
25
- /**
26
- * Simple in-memory session store for stateful MCP sessions.
27
- * In production, consider using Redis or another persistent store.
28
- */
29
34
  /** Default maximum number of concurrent sessions before new ones are rejected. */
30
35
  const DEFAULT_MAX_SESSIONS = 10_000;
31
36
  export class SessionStore {
@@ -37,222 +42,89 @@ export class SessionStore {
37
42
  this.staleTimeout = staleTimeoutMs;
38
43
  this.maxSessions = maxSessions;
39
44
  // Clean up stale sessions every minute. unref() prevents blocking graceful shutdown.
40
- this.cleanupInterval = setInterval(() => this.cleanupStaleSessions(), 60_000);
45
+ this.cleanupInterval = setInterval(() => void this.cleanupStaleSessions(), 60_000);
41
46
  this.cleanupInterval.unref?.();
42
47
  }
43
48
  /**
44
- * Stops the cleanup interval and clears all sessions.
49
+ * Stops the cleanup interval and closes every live connection.
45
50
  * Call this during transport shutdown to prevent resource leaks.
46
51
  */
47
- destroy() {
52
+ async destroy() {
48
53
  clearInterval(this.cleanupInterval);
49
- for (const session of this.sessions.values())
50
- this.endSessionRequests(session);
54
+ const connections = [...this.sessions.values()].map((session) => session.connection);
51
55
  this.sessions.clear();
56
+ await Promise.allSettled(connections.map((connection) => closeConnection(connection)));
52
57
  }
53
58
  /**
54
- * Creates or retrieves a session with optional identity binding.
55
- * If identity is provided, binds the session to prevent cross-tenant/client hijacking.
59
+ * Throws before a new session's protocol instances are built when the server
60
+ * is already at capacity — allocating them first and discarding them is the
61
+ * expensive way to answer 503.
56
62
  *
57
- * @param sessionId - The session identifier
58
- * @param identity - Optional identity info (tenantId, clientId, subject)
59
- * @returns The session object
60
- * @throws {McpError} If session ID format is invalid
63
+ * @throws {McpError} `ServiceUnavailable` when at `maxSessions`.
64
+ */
65
+ assertCapacity() {
66
+ if (this.sessions.size < this.maxSessions)
67
+ return;
68
+ const context = requestContextService.createRequestContext({
69
+ operation: 'SessionStore.assertCapacity',
70
+ additionalContext: {
71
+ currentSessions: this.sessions.size,
72
+ maxSessions: this.maxSessions,
73
+ },
74
+ });
75
+ logger.warning('Session capacity reached, rejecting new session', context);
76
+ throw serviceUnavailable(`Maximum session capacity reached (${this.maxSessions}). Try again later.`, context);
77
+ }
78
+ /**
79
+ * Records a session the SDK transport just initialized, binding it to the
80
+ * identity that created it.
81
+ *
82
+ * @throws {McpError} `InvalidParams` when the session ID format is invalid,
83
+ * `ServiceUnavailable` when at capacity.
61
84
  */
62
- getOrCreate(sessionId, identity) {
63
- // Validate session ID format to prevent injection attacks
85
+ register(sessionId, connection, identity) {
64
86
  if (!validateSessionIdFormat(sessionId)) {
65
87
  const context = requestContextService.createRequestContext({
66
- operation: 'SessionStore.getOrCreate',
67
- sessionIdPrefix: sessionId.substring(0, 16),
88
+ operation: 'SessionStore.register',
89
+ additionalContext: { sessionIdPrefix: sessionId.substring(0, 16) },
68
90
  });
69
91
  logger.warning('Invalid session ID format rejected', context);
70
92
  throw invalidParams('Invalid session ID format. Session IDs must be 64 hexadecimal characters.', context);
71
93
  }
72
- let session = this.sessions.get(sessionId);
73
- if (!session) {
74
- // Enforce maximum session capacity to prevent unbounded memory growth
75
- if (this.sessions.size >= this.maxSessions) {
76
- const context = requestContextService.createRequestContext({
77
- operation: 'SessionStore.getOrCreate',
78
- currentSessions: this.sessions.size,
79
- maxSessions: this.maxSessions,
80
- });
81
- logger.warning('Session capacity reached, rejecting new session', context);
82
- throw serviceUnavailable(`Maximum session capacity reached (${this.maxSessions}). Try again later.`, context);
83
- }
84
- // Build session object conditionally to satisfy exactOptionalPropertyTypes.
85
- // Identity is bound atomically as a snapshot on creation.
86
- const hasIdentity = !!(identity?.tenantId || identity?.clientId || identity?.subject);
87
- const now = new Date();
88
- const newSession = {
89
- id: sessionId,
90
- createdAt: now,
91
- lastAccessedAt: now,
92
- identityBound: hasIdentity,
93
- inFlightRequests: new Map(),
94
- serverRequests: new Map(),
95
- };
96
- // Only set identity fields if they have actual values (not undefined)
97
- if (identity?.tenantId)
98
- newSession.tenantId = identity.tenantId;
99
- if (identity?.clientId)
100
- newSession.clientId = identity.clientId;
101
- if (identity?.subject)
102
- newSession.subject = identity.subject;
103
- session = newSession;
104
- this.sessions.set(sessionId, session);
105
- getSessionMetrics().sessionEventCounter.add(1, { [ATTR_MCP_SESSION_EVENT]: 'created' });
106
- const context = requestContextService.createRequestContext({
107
- operation: 'SessionStore.create',
108
- sessionId,
109
- tenantId: identity?.tenantId,
110
- });
111
- logger.debug('Session created with identity binding', context);
112
- }
113
- else {
114
- session.lastAccessedAt = new Date();
115
- // Bind identity atomically on first authenticated request after an
116
- // unauthenticated session creation. All fields are snapshotted together
117
- // to prevent chimeric identities from per-field races.
118
- if (identity && !session.identityBound) {
119
- const hasIdentity = !!(identity.tenantId || identity.clientId || identity.subject);
120
- if (hasIdentity) {
121
- if (identity.tenantId)
122
- session.tenantId = identity.tenantId;
123
- if (identity.clientId)
124
- session.clientId = identity.clientId;
125
- if (identity.subject)
126
- session.subject = identity.subject;
127
- session.identityBound = true;
128
- const context = requestContextService.createRequestContext({
129
- operation: 'SessionStore.bindIdentity',
130
- sessionId,
131
- tenantId: identity.tenantId,
132
- });
133
- logger.debug('Session identity bound atomically on authenticated request', context);
134
- }
135
- }
136
- }
137
- return session;
138
- }
139
- /** Stores capabilities only after the initialize response succeeded. */
140
- setClientCapabilities(sessionId, capabilities) {
141
- const session = this.sessions.get(sessionId);
142
- if (session)
143
- session.clientCapabilities = capabilities;
144
- }
145
- /**
146
- * Builds the minimal state hooks restored onto the next per-request server.
147
- * The session ID remains the isolation boundary for both capability state
148
- * and cancellation routing.
149
- */
150
- createProtocolSessionHooks(sessionId) {
151
- const session = this.sessions.get(sessionId);
152
- if (!session)
153
- return;
154
- return {
155
- ...(session.clientCapabilities && { clientCapabilities: session.clientCapabilities }),
156
- registerRequest: (requestId) => this.registerRequest(sessionId, requestId),
94
+ this.assertCapacity();
95
+ // Identity is bound atomically as a snapshot on creation.
96
+ const hasIdentity = !!(identity?.tenantId || identity?.clientId || identity?.subject);
97
+ const now = new Date();
98
+ const session = {
99
+ connection,
100
+ createdAt: now,
101
+ lastAccessedAt: now,
102
+ identityBound: hasIdentity,
157
103
  };
158
- }
159
- /** Aborts all active handlers with the matching JSON-RPC request ID. */
160
- cancelRequest(sessionId, requestId, reason) {
161
- const controllers = this.sessions
162
- .get(sessionId)
163
- ?.inFlightRequests.get(this.requestKey(requestId));
164
- if (!controllers || controllers.size === 0)
165
- return false;
166
- const abortReason = new DOMException(reason || 'MCP request cancelled', 'AbortError');
167
- for (const controller of controllers)
168
- controller.abort(abortReason);
169
- return true;
104
+ if (identity?.tenantId)
105
+ session.tenantId = identity.tenantId;
106
+ if (identity?.clientId)
107
+ session.clientId = identity.clientId;
108
+ if (identity?.subject)
109
+ session.subject = identity.subject;
110
+ this.sessions.set(sessionId, session);
111
+ getSessionMetrics().sessionEventCounter.add(1, { [ATTR_MCP_SESSION_EVENT]: 'created' });
112
+ logger.debug('Session created with identity binding', requestContextService.createRequestContext({
113
+ operation: 'SessionStore.register',
114
+ parentContext: { sessionId },
115
+ ...(identity?.tenantId && { tenantId: identity.tenantId }),
116
+ }));
170
117
  }
171
118
  /**
172
- * Registers a server-to-client request whose response will arrive on a later
173
- * HTTP POST handled by a different SDK Server instance.
174
- *
175
- * Each per-request SDK Server starts its outbound request counter at zero, so
176
- * the wire ID is replaced with a session-unique value. The caller restores
177
- * the original ID before delivering the response to the originating Server.
119
+ * The live connection for a session, touching its access time.
120
+ * Call {@link isValidForIdentity} first — this performs no ownership check.
178
121
  */
179
- registerServerRequest(sessionId, deliver) {
122
+ getConnection(sessionId) {
180
123
  const session = this.sessions.get(sessionId);
181
124
  if (!session)
182
125
  return;
183
- const requestId = `server-${crypto.randomUUID()}`;
184
- const key = this.requestKey(requestId);
185
- const route = { requestId, deliver };
186
- session.serverRequests.set(key, route);
187
- let registered = true;
188
- return {
189
- requestId,
190
- unregister: () => {
191
- if (!registered)
192
- return;
193
- registered = false;
194
- if (session.serverRequests.get(key) === route)
195
- session.serverRequests.delete(key);
196
- },
197
- };
198
- }
199
- /** Routes one client response back to the per-request Server that emitted it. */
200
- routeServerResponse(sessionId, response) {
201
- if (response.id === undefined)
202
- return false;
203
- const routes = this.sessions.get(sessionId)?.serverRequests;
204
- const route = routes?.get(this.requestKey(response.id));
205
- if (!routes || !route)
206
- return false;
207
- routes.delete(this.requestKey(response.id));
208
- route.deliver(response);
209
- return true;
210
- }
211
- requestKey(requestId) {
212
- return `${typeof requestId}:${String(requestId)}`;
213
- }
214
- registerRequest(sessionId, requestId) {
215
- const session = this.sessions.get(sessionId);
216
- const controller = new AbortController();
217
- if (!session) {
218
- return { signal: controller.signal, unregister: () => undefined };
219
- }
220
- const key = this.requestKey(requestId);
221
- const controllers = session.inFlightRequests.get(key) ?? new Set();
222
- controllers.add(controller);
223
- session.inFlightRequests.set(key, controllers);
224
- let registered = true;
225
- return {
226
- signal: controller.signal,
227
- unregister: () => {
228
- if (!registered)
229
- return;
230
- registered = false;
231
- controllers.delete(controller);
232
- if (controllers.size === 0)
233
- session.inFlightRequests.delete(key);
234
- },
235
- };
236
- }
237
- endSessionRequests(session) {
238
- const reason = new DOMException('MCP session ended', 'AbortError');
239
- for (const controllers of session.inFlightRequests.values()) {
240
- for (const controller of controllers)
241
- controller.abort(reason);
242
- }
243
- session.inFlightRequests.clear();
244
- const routes = [...session.serverRequests.values()];
245
- session.serverRequests.clear();
246
- for (const route of routes) {
247
- route.deliver({
248
- jsonrpc: '2.0',
249
- id: route.requestId,
250
- error: {
251
- code: ErrorCode.ConnectionClosed,
252
- message: 'MCP session ended',
253
- },
254
- });
255
- }
126
+ session.lastAccessedAt = new Date();
127
+ return session.connection;
256
128
  }
257
129
  /**
258
130
  * Validates a session with identity binding checks.
@@ -265,6 +137,9 @@ export class SessionStore {
265
137
  * 4. Client ID match (if session has clientId)
266
138
  * 5. Subject match (if session has subject)
267
139
  *
140
+ * Binds the identity atomically on the first authenticated request when the
141
+ * session was created unauthenticated.
142
+ *
268
143
  * @param sessionId - The session identifier
269
144
  * @param identity - The identity to validate against (from auth)
270
145
  * @returns True if session is valid and matches identity
@@ -276,20 +151,40 @@ export class SessionStore {
276
151
  }
277
152
  // Check staleness
278
153
  if (Date.now() - session.lastAccessedAt.getTime() > this.staleTimeout) {
279
- this.terminate(sessionId);
154
+ void this.terminate(sessionId);
280
155
  return false;
281
156
  }
282
157
  // If session has no identity bound, allow (backwards compatibility / no-auth mode)
283
158
  if (!session.tenantId && !session.clientId && !session.subject) {
159
+ // Bind atomically on the first authenticated request after an
160
+ // unauthenticated creation. All fields are snapshotted together to
161
+ // prevent chimeric identities from per-field races.
162
+ if (identity && !session.identityBound) {
163
+ const hasIdentity = !!(identity.tenantId || identity.clientId || identity.subject);
164
+ if (hasIdentity) {
165
+ if (identity.tenantId)
166
+ session.tenantId = identity.tenantId;
167
+ if (identity.clientId)
168
+ session.clientId = identity.clientId;
169
+ if (identity.subject)
170
+ session.subject = identity.subject;
171
+ session.identityBound = true;
172
+ logger.debug('Session identity bound atomically on authenticated request', requestContextService.createRequestContext({
173
+ operation: 'SessionStore.bindIdentity',
174
+ parentContext: { sessionId },
175
+ ...(identity.tenantId && { tenantId: identity.tenantId }),
176
+ }));
177
+ }
178
+ }
284
179
  return true;
285
180
  }
286
181
  // Lazy-create context only when a warning is likely
287
182
  const warn = (message, extra) => {
288
183
  const context = requestContextService.createRequestContext({
289
184
  operation: 'SessionStore.isValidForIdentity',
290
- sessionId,
185
+ parentContext: { sessionId },
291
186
  });
292
- logger.warning(message, extra ? { ...context, ...extra } : context);
187
+ logger.warning(message, extra ? withExtra(context, extra) : context);
293
188
  };
294
189
  // If request has no identity but session does, reject (security: session was authenticated)
295
190
  if (!identity) {
@@ -327,51 +222,46 @@ export class SessionStore {
327
222
  return true;
328
223
  }
329
224
  /**
330
- * Terminates a session.
331
- * @param sessionId - The session identifier
225
+ * Terminates a session and closes its connection.
226
+ * Idempotent — the SDK transport's own DELETE path also calls this via
227
+ * `onsessionclosed`, after the request that triggered it already removed it.
332
228
  */
333
- terminate(sessionId) {
229
+ async terminate(sessionId) {
334
230
  const session = this.sessions.get(sessionId);
335
- if (session) {
336
- this.endSessionRequests(session);
337
- this.sessions.delete(sessionId);
338
- const metrics = getSessionMetrics();
339
- metrics.sessionEventCounter.add(1, { [ATTR_MCP_SESSION_EVENT]: 'terminated' });
340
- metrics.sessionDuration.record((Date.now() - session.createdAt.getTime()) / 1000);
341
- const context = requestContextService.createRequestContext({
342
- operation: 'SessionStore.terminate',
343
- sessionId,
344
- });
345
- logger.info('Session terminated', context);
346
- }
231
+ if (!session)
232
+ return;
233
+ this.sessions.delete(sessionId);
234
+ const metrics = getSessionMetrics();
235
+ metrics.sessionEventCounter.add(1, { [ATTR_MCP_SESSION_EVENT]: 'terminated' });
236
+ metrics.sessionDuration.record((Date.now() - session.createdAt.getTime()) / 1000);
237
+ logger.info('Session terminated', requestContextService.createRequestContext({
238
+ operation: 'SessionStore.terminate',
239
+ parentContext: { sessionId },
240
+ }));
241
+ await closeConnection(session.connection);
347
242
  }
348
- /**
349
- * Cleans up stale sessions that haven't been accessed recently.
350
- */
351
- cleanupStaleSessions() {
243
+ /** Cleans up stale sessions that haven't been accessed recently. */
244
+ async cleanupStaleSessions() {
352
245
  const now = Date.now();
353
- let cleanedCount = 0;
246
+ const stale = [];
354
247
  const metrics = getSessionMetrics();
355
248
  for (const [id, session] of this.sessions.entries()) {
356
249
  if (now - session.lastAccessedAt.getTime() > this.staleTimeout) {
357
- this.endSessionRequests(session);
358
250
  metrics.sessionDuration.record((now - session.createdAt.getTime()) / 1000);
359
251
  this.sessions.delete(id);
360
- cleanedCount++;
252
+ stale.push(session);
361
253
  }
362
254
  }
363
- if (cleanedCount > 0) {
364
- metrics.sessionEventCounter.add(cleanedCount, {
365
- [ATTR_MCP_SESSION_EVENT]: 'stale_cleanup',
366
- });
367
- const context = requestContextService.createRequestContext({
368
- operation: 'SessionStore.cleanup',
369
- });
370
- logger.debug('Cleaned up stale sessions', {
371
- ...context,
372
- count: cleanedCount,
373
- });
374
- }
255
+ if (stale.length === 0)
256
+ return;
257
+ metrics.sessionEventCounter.add(stale.length, {
258
+ [ATTR_MCP_SESSION_EVENT]: 'stale_cleanup',
259
+ });
260
+ logger.debug('Cleaned up stale sessions', requestContextService.createRequestContext({
261
+ operation: 'SessionStore.cleanup',
262
+ additionalContext: { count: stale.length },
263
+ }));
264
+ await Promise.allSettled(stale.map((session) => closeConnection(session.connection)));
375
265
  }
376
266
  /**
377
267
  * Gets the current number of active sessions.
@@ -381,4 +271,16 @@ export class SessionStore {
381
271
  return this.sessions.size;
382
272
  }
383
273
  }
274
+ /** Closes a session's server and transport, tolerating either one throwing. */
275
+ export async function closeConnection(connection) {
276
+ const results = await Promise.allSettled([
277
+ connection.transport.close(),
278
+ connection.server.close(),
279
+ ]);
280
+ for (const result of results) {
281
+ if (result.status === 'rejected') {
282
+ logger.warning(`Failed to close a session surface: ${result.reason instanceof Error ? result.reason.message : String(result.reason)}`);
283
+ }
284
+ }
285
+ }
384
286
  //# sourceMappingURL=sessionStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/sessionStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/sessionStore.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,28 @@
1
1
  import type { AppConfig as AppConfigType } from '../../config/index.js';
2
2
  import type { ServerManifest } from '../../core/serverManifest.js';
3
- import type { McpServerFactory } from '../../mcp-server/protocolSession.js';
4
- import type { TaskManager } from '../../mcp-server/tasks/core/taskManager.js';
5
3
  import type { TransportServer } from '../../mcp-server/transports/ITransport.js';
4
+ import type { FrameworkServerFactory } from '../../mcp-server/types.js';
6
5
  import type { logger as LoggerType } from '../../utils/internal/logger.js';
7
6
  export declare class TransportManager {
8
7
  private config;
9
8
  private logger;
10
9
  private createMcpServer;
11
- private taskManager;
12
10
  private manifest;
13
11
  private serverInstance;
14
12
  private shutdown;
15
13
  private heartbeat;
16
- constructor(config: AppConfigType, logger: typeof LoggerType, createMcpServer: McpServerFactory, taskManager: TaskManager, manifest: ServerManifest);
14
+ constructor(config: AppConfigType, logger: typeof LoggerType, createMcpServer: FrameworkServerFactory, manifest: ServerManifest);
17
15
  start(): Promise<void>;
16
+ /**
17
+ * Periodically pings the client to detect dead connections (orphaned child
18
+ * processes, crashed hosts).
19
+ *
20
+ * Legacy-era connections only: the 2026-07-28 revision removes the
21
+ * server-to-client request channel, so a server-initiated `ping` has nowhere
22
+ * to go there. Guarded against re-entry because the factory also runs for a
23
+ * discarded `server/discover` probe.
24
+ */
25
+ private startStdioHeartbeat;
18
26
  stop(signal: string): Promise<void>;
19
27
  getServer(): TransportServer | null;
20
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/transports/manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAG1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAK7E,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIvE,qBAAa,gBAAgB;IAMzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;IATlB,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAA6D;IAC7E,OAAO,CAAC,SAAS,CAAiC;IAElD,YACU,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,OAAO,UAAU,EACzB,eAAe,EAAE,gBAAgB,EACjC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,cAAc,EAC9B;IAEE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAkD3B;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxC;IAED,SAAS,IAAI,eAAe,GAAG,IAAI,CAElC;CACF"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/transports/manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAK7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIvE,qBAAa,gBAAgB;IAMzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,QAAQ;IARlB,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAA6D;IAC7E,OAAO,CAAC,SAAS,CAAiC;IAElD,YACU,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,OAAO,UAAU,EACzB,eAAe,EAAE,sBAAsB,EACvC,QAAQ,EAAE,cAAc,EAC9B;IAEE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC3B;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IAiBrB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAexC;IAED,SAAS,IAAI,eAAe,GAAG,IAAI,CAElC;CACF"}