@eclipse-glsp/server-mcp 2.7.0-next.10 → 2.7.0-next.11

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 (443) hide show
  1. package/README.md +17 -3
  2. package/browser.d.ts +16 -0
  3. package/browser.js +18 -0
  4. package/common.d.ts +16 -0
  5. package/common.js +18 -0
  6. package/lib/browser/index.d.ts +21 -0
  7. package/lib/browser/index.d.ts.map +1 -0
  8. package/lib/browser/index.js +37 -0
  9. package/lib/browser/index.js.map +1 -0
  10. package/lib/browser/modules/browser-mcp-server-module.d.ts +42 -0
  11. package/lib/browser/modules/browser-mcp-server-module.d.ts.map +1 -0
  12. package/lib/browser/modules/browser-mcp-server-module.js +50 -0
  13. package/lib/browser/modules/browser-mcp-server-module.js.map +1 -0
  14. package/lib/browser/reexport.d.ts +17 -0
  15. package/lib/browser/reexport.d.ts.map +1 -0
  16. package/lib/browser/reexport.js +33 -0
  17. package/lib/browser/reexport.js.map +1 -0
  18. package/lib/browser/server/browser-mcp-request-context.d.ts +27 -0
  19. package/lib/browser/server/browser-mcp-request-context.d.ts.map +1 -0
  20. package/lib/browser/server/browser-mcp-request-context.js +67 -0
  21. package/lib/browser/server/browser-mcp-request-context.js.map +1 -0
  22. package/lib/browser/server/mcp-worker-bridge.d.ts +81 -0
  23. package/lib/browser/server/mcp-worker-bridge.d.ts.map +1 -0
  24. package/lib/browser/server/mcp-worker-bridge.js +159 -0
  25. package/lib/browser/server/mcp-worker-bridge.js.map +1 -0
  26. package/lib/browser/server/web-mcp-server-launcher.d.ts +34 -0
  27. package/lib/browser/server/web-mcp-server-launcher.d.ts.map +1 -0
  28. package/lib/browser/server/web-mcp-server-launcher.js +50 -0
  29. package/lib/browser/server/web-mcp-server-launcher.js.map +1 -0
  30. package/lib/{index.d.ts → common/index.d.ts} +3 -4
  31. package/lib/common/index.d.ts.map +1 -0
  32. package/lib/{index.js → common/index.js} +17 -18
  33. package/lib/common/index.js.map +1 -0
  34. package/lib/{modules/mcp-server-module.d.ts → common/modules/abstract-mcp-server-module.d.ts} +46 -37
  35. package/lib/common/modules/abstract-mcp-server-module.d.ts.map +1 -0
  36. package/lib/{modules/mcp-server-module.js → common/modules/abstract-mcp-server-module.js} +43 -66
  37. package/lib/common/modules/abstract-mcp-server-module.js.map +1 -0
  38. package/lib/common/modules/mcp-diagram-module.d.ts.map +1 -0
  39. package/lib/common/modules/mcp-diagram-module.js.map +1 -0
  40. package/lib/common/prompts/handlers/describe-diagram-mcp-prompt-handler.d.ts.map +1 -0
  41. package/lib/common/prompts/handlers/describe-diagram-mcp-prompt-handler.js.map +1 -0
  42. package/lib/common/prompts/handlers/suggest-improvements-mcp-prompt-handler.d.ts.map +1 -0
  43. package/lib/common/prompts/handlers/suggest-improvements-mcp-prompt-handler.js.map +1 -0
  44. package/lib/common/resources/handlers/diagram-png-mcp-resource-handler.d.ts.map +1 -0
  45. package/lib/common/resources/handlers/diagram-png-mcp-resource-handler.js.map +1 -0
  46. package/lib/common/resources/handlers/diagram-svg-mcp-resource-handler.d.ts.map +1 -0
  47. package/lib/common/resources/handlers/diagram-svg-mcp-resource-handler.js.map +1 -0
  48. package/lib/common/resources/services/element-types-provider.d.ts.map +1 -0
  49. package/lib/common/resources/services/element-types-provider.js.map +1 -0
  50. package/lib/common/resources/services/mcp-model-serializer.d.ts.map +1 -0
  51. package/lib/common/resources/services/mcp-model-serializer.js.map +1 -0
  52. package/lib/common/server/abstract-mcp-server-launcher.d.ts +168 -0
  53. package/lib/common/server/abstract-mcp-server-launcher.d.ts.map +1 -0
  54. package/lib/{server/mcp-server-launcher.js → common/server/abstract-mcp-server-launcher.js} +235 -121
  55. package/lib/common/server/abstract-mcp-server-launcher.js.map +1 -0
  56. package/lib/{server → common/server}/glsp-mcp-server.d.ts +1 -1
  57. package/lib/common/server/glsp-mcp-server.d.ts.map +1 -0
  58. package/lib/{server → common/server}/glsp-mcp-server.js +6 -1
  59. package/lib/common/server/glsp-mcp-server.js.map +1 -0
  60. package/lib/{server → common/server}/lru-event-store.d.ts +1 -1
  61. package/lib/common/server/lru-event-store.d.ts.map +1 -0
  62. package/lib/common/server/lru-event-store.js.map +1 -0
  63. package/lib/{server → common/server}/mcp-diagram-handler-dispatcher.d.ts +3 -1
  64. package/lib/common/server/mcp-diagram-handler-dispatcher.d.ts.map +1 -0
  65. package/lib/{server → common/server}/mcp-diagram-handler-dispatcher.js +12 -6
  66. package/lib/common/server/mcp-diagram-handler-dispatcher.js.map +1 -0
  67. package/lib/common/server/mcp-diagram-prompt-handler-registry.d.ts.map +1 -0
  68. package/lib/common/server/mcp-diagram-prompt-handler-registry.js.map +1 -0
  69. package/lib/common/server/mcp-diagram-resource-handler-registry.d.ts.map +1 -0
  70. package/lib/{server → common/server}/mcp-diagram-resource-handler-registry.js +4 -1
  71. package/lib/common/server/mcp-diagram-resource-handler-registry.js.map +1 -0
  72. package/lib/common/server/mcp-diagram-tool-handler-registry.d.ts.map +1 -0
  73. package/lib/{server → common/server}/mcp-diagram-tool-handler-registry.js +3 -1
  74. package/lib/common/server/mcp-diagram-tool-handler-registry.js.map +1 -0
  75. package/lib/common/server/mcp-handler-shared.d.ts.map +1 -0
  76. package/lib/common/server/mcp-handler-shared.js.map +1 -0
  77. package/lib/common/server/mcp-id-alias-service.d.ts.map +1 -0
  78. package/lib/common/server/mcp-id-alias-service.js.map +1 -0
  79. package/lib/{server → common/server}/mcp-input-schemas.d.ts +8 -0
  80. package/lib/common/server/mcp-input-schemas.d.ts.map +1 -0
  81. package/lib/{server → common/server}/mcp-input-schemas.js +13 -1
  82. package/lib/common/server/mcp-input-schemas.js.map +1 -0
  83. package/lib/common/server/mcp-label-provider.d.ts.map +1 -0
  84. package/lib/common/server/mcp-label-provider.js.map +1 -0
  85. package/lib/{server → common/server}/mcp-log-level-registry.d.ts +1 -1
  86. package/lib/common/server/mcp-log-level-registry.d.ts.map +1 -0
  87. package/lib/common/server/mcp-log-level-registry.js.map +1 -0
  88. package/lib/{server → common/server}/mcp-logger.d.ts +4 -2
  89. package/lib/common/server/mcp-logger.d.ts.map +1 -0
  90. package/lib/{server → common/server}/mcp-logger.js +11 -3
  91. package/lib/common/server/mcp-logger.js.map +1 -0
  92. package/lib/common/server/mcp-mime-types.d.ts.map +1 -0
  93. package/lib/common/server/mcp-mime-types.js.map +1 -0
  94. package/lib/{server → common/server}/mcp-options.d.ts +1 -1
  95. package/lib/common/server/mcp-options.d.ts.map +1 -0
  96. package/lib/{server → common/server}/mcp-options.js +1 -1
  97. package/lib/common/server/mcp-options.js.map +1 -0
  98. package/lib/{server → common/server}/mcp-progress-reporter.d.ts +4 -2
  99. package/lib/common/server/mcp-progress-reporter.d.ts.map +1 -0
  100. package/lib/{server → common/server}/mcp-progress-reporter.js +14 -3
  101. package/lib/common/server/mcp-progress-reporter.js.map +1 -0
  102. package/lib/{server → common/server}/mcp-prompt-handler.d.ts +3 -1
  103. package/lib/common/server/mcp-prompt-handler.d.ts.map +1 -0
  104. package/lib/{server → common/server}/mcp-prompt-handler.js +10 -2
  105. package/lib/common/server/mcp-prompt-handler.js.map +1 -0
  106. package/lib/common/server/mcp-request-context.d.ts +35 -0
  107. package/lib/common/server/mcp-request-context.d.ts.map +1 -0
  108. package/lib/common/server/mcp-request-context.js +30 -0
  109. package/lib/common/server/mcp-request-context.js.map +1 -0
  110. package/lib/{server → common/server}/mcp-resource-handler.d.ts +3 -1
  111. package/lib/common/server/mcp-resource-handler.d.ts.map +1 -0
  112. package/lib/{server → common/server}/mcp-resource-handler.js +13 -5
  113. package/lib/common/server/mcp-resource-handler.js.map +1 -0
  114. package/lib/common/server/mcp-session.d.ts.map +1 -0
  115. package/lib/common/server/mcp-session.js.map +1 -0
  116. package/lib/{server → common/server}/mcp-tool-handler.d.ts +3 -1
  117. package/lib/common/server/mcp-tool-handler.d.ts.map +1 -0
  118. package/lib/{server → common/server}/mcp-tool-handler.js +7 -1
  119. package/lib/{server → common/server}/mcp-tool-handler.js.map +1 -1
  120. package/lib/common/tools/handlers/count-elements-mcp-tool-handler.d.ts.map +1 -0
  121. package/lib/common/tools/handlers/count-elements-mcp-tool-handler.js.map +1 -0
  122. package/lib/{tools → common/tools}/handlers/create-edges-mcp-tool-handler.d.ts +2 -0
  123. package/lib/common/tools/handlers/create-edges-mcp-tool-handler.d.ts.map +1 -0
  124. package/lib/{tools → common/tools}/handlers/create-edges-mcp-tool-handler.js +2 -1
  125. package/lib/common/tools/handlers/create-edges-mcp-tool-handler.js.map +1 -0
  126. package/lib/{tools → common/tools}/handlers/create-nodes-mcp-tool-handler.d.ts +2 -0
  127. package/lib/common/tools/handlers/create-nodes-mcp-tool-handler.d.ts.map +1 -0
  128. package/lib/{tools → common/tools}/handlers/create-nodes-mcp-tool-handler.js +2 -1
  129. package/lib/common/tools/handlers/create-nodes-mcp-tool-handler.js.map +1 -0
  130. package/lib/{tools → common/tools}/handlers/delete-elements-mcp-tool-handler.d.ts +2 -0
  131. package/lib/common/tools/handlers/delete-elements-mcp-tool-handler.d.ts.map +1 -0
  132. package/lib/{tools → common/tools}/handlers/delete-elements-mcp-tool-handler.js +4 -2
  133. package/lib/common/tools/handlers/delete-elements-mcp-tool-handler.js.map +1 -0
  134. package/lib/common/tools/handlers/diagram-model-mcp-tool-handler.d.ts.map +1 -0
  135. package/lib/common/tools/handlers/diagram-model-mcp-tool-handler.js.map +1 -0
  136. package/lib/common/tools/handlers/element-types-mcp-tool-handler.d.ts.map +1 -0
  137. package/lib/common/tools/handlers/element-types-mcp-tool-handler.js.map +1 -0
  138. package/lib/common/tools/handlers/get-selection-mcp-tool-handler.d.ts.map +1 -0
  139. package/lib/common/tools/handlers/get-selection-mcp-tool-handler.js.map +1 -0
  140. package/lib/{tools → common/tools}/handlers/layout-mcp-tool-handler.d.ts +2 -0
  141. package/lib/common/tools/handlers/layout-mcp-tool-handler.d.ts.map +1 -0
  142. package/lib/{tools → common/tools}/handlers/layout-mcp-tool-handler.js +3 -2
  143. package/lib/common/tools/handlers/layout-mcp-tool-handler.js.map +1 -0
  144. package/lib/common/tools/handlers/modify-edges-mcp-tool-handler.d.ts.map +1 -0
  145. package/lib/{tools → common/tools}/handlers/modify-edges-mcp-tool-handler.js +1 -1
  146. package/lib/common/tools/handlers/modify-edges-mcp-tool-handler.js.map +1 -0
  147. package/lib/common/tools/handlers/modify-nodes-mcp-tool-handler.d.ts.map +1 -0
  148. package/lib/{tools → common/tools}/handlers/modify-nodes-mcp-tool-handler.js +1 -1
  149. package/lib/common/tools/handlers/modify-nodes-mcp-tool-handler.js.map +1 -0
  150. package/lib/common/tools/handlers/query-elements-mcp-tool-handler.d.ts.map +1 -0
  151. package/lib/common/tools/handlers/query-elements-mcp-tool-handler.js.map +1 -0
  152. package/lib/common/tools/handlers/redo-mcp-tool-handler.d.ts.map +1 -0
  153. package/lib/common/tools/handlers/redo-mcp-tool-handler.js.map +1 -0
  154. package/lib/common/tools/handlers/save-model-mcp-tool-handler.d.ts.map +1 -0
  155. package/lib/common/tools/handlers/save-model-mcp-tool-handler.js.map +1 -0
  156. package/lib/common/tools/handlers/session-info-mcp-tool-handler.d.ts.map +1 -0
  157. package/lib/common/tools/handlers/session-info-mcp-tool-handler.js.map +1 -0
  158. package/lib/common/tools/handlers/set-selection-mcp-tool-handler.d.ts.map +1 -0
  159. package/lib/common/tools/handlers/set-selection-mcp-tool-handler.js.map +1 -0
  160. package/lib/common/tools/handlers/set-view-mcp-tool-handler.d.ts.map +1 -0
  161. package/lib/common/tools/handlers/set-view-mcp-tool-handler.js.map +1 -0
  162. package/lib/common/tools/handlers/undo-mcp-tool-handler.d.ts.map +1 -0
  163. package/lib/common/tools/handlers/undo-mcp-tool-handler.js.map +1 -0
  164. package/lib/common/tools/handlers/validate-diagram-mcp-tool-handler.d.ts.map +1 -0
  165. package/lib/common/tools/handlers/validate-diagram-mcp-tool-handler.js.map +1 -0
  166. package/lib/common/util/markdown-util.d.ts.map +1 -0
  167. package/lib/common/util/markdown-util.js.map +1 -0
  168. package/lib/common/util/mcp-util.d.ts.map +1 -0
  169. package/lib/common/util/mcp-util.js.map +1 -0
  170. package/lib/node/index.d.ts +20 -0
  171. package/lib/node/index.d.ts.map +1 -0
  172. package/lib/node/index.js +36 -0
  173. package/lib/node/index.js.map +1 -0
  174. package/lib/node/modules/node-mcp-server-module.d.ts +37 -0
  175. package/lib/node/modules/node-mcp-server-module.d.ts.map +1 -0
  176. package/lib/node/modules/node-mcp-server-module.js +52 -0
  177. package/lib/node/modules/node-mcp-server-module.js.map +1 -0
  178. package/lib/node/reexport.d.ts +17 -0
  179. package/lib/node/reexport.d.ts.map +1 -0
  180. package/lib/node/reexport.js +33 -0
  181. package/lib/node/reexport.js.map +1 -0
  182. package/lib/node/server/node-mcp-request-context.d.ts +24 -0
  183. package/lib/node/server/node-mcp-request-context.d.ts.map +1 -0
  184. package/lib/node/server/node-mcp-request-context.js +43 -0
  185. package/lib/node/server/node-mcp-request-context.js.map +1 -0
  186. package/lib/node/server/node-mcp-server-launcher.d.ts +55 -0
  187. package/lib/node/server/node-mcp-server-launcher.d.ts.map +1 -0
  188. package/lib/node/server/node-mcp-server-launcher.js +123 -0
  189. package/lib/node/server/node-mcp-server-launcher.js.map +1 -0
  190. package/node.d.ts +16 -0
  191. package/node.js +18 -0
  192. package/package.json +19 -13
  193. package/src/browser/index.ts +21 -0
  194. package/src/browser/modules/browser-mcp-server-module.ts +54 -0
  195. package/src/browser/reexport.ts +16 -0
  196. package/src/browser/server/browser-mcp-request-context.ts +59 -0
  197. package/src/browser/server/mcp-worker-bridge.ts +200 -0
  198. package/src/browser/server/web-mcp-server-launcher.ts +39 -0
  199. package/src/{index.ts → common/index.ts} +4 -4
  200. package/src/{modules/mcp-server-module.ts → common/modules/abstract-mcp-server-module.ts} +54 -68
  201. package/src/common/server/abstract-mcp-server-launcher.spec.ts +458 -0
  202. package/src/common/server/abstract-mcp-server-launcher.ts +524 -0
  203. package/src/{server → common/server}/glsp-mcp-server.ts +7 -2
  204. package/src/{server → common/server}/lru-event-store.ts +1 -1
  205. package/src/{server → common/server}/mcp-diagram-handler-dispatcher.ts +13 -9
  206. package/src/{server → common/server}/mcp-diagram-resource-handler-registry.ts +4 -1
  207. package/src/{server → common/server}/mcp-diagram-tool-handler-registry.ts +3 -1
  208. package/src/{server → common/server}/mcp-input-schemas.ts +13 -0
  209. package/src/{server → common/server}/mcp-log-level-registry.ts +1 -1
  210. package/src/{server → common/server}/mcp-logger.spec.ts +26 -18
  211. package/src/{server → common/server}/mcp-logger.ts +9 -5
  212. package/src/{server → common/server}/mcp-options.ts +1 -1
  213. package/src/{server → common/server}/mcp-progress-reporter.spec.ts +19 -9
  214. package/src/{server → common/server}/mcp-progress-reporter.ts +9 -5
  215. package/src/{server → common/server}/mcp-prompt-handler.ts +8 -4
  216. package/src/{server → common/server}/mcp-request-context.ts +20 -16
  217. package/src/{server → common/server}/mcp-resource-handler.ts +11 -7
  218. package/src/{server → common/server}/mcp-tool-handler.spec.ts +4 -4
  219. package/src/{server → common/server}/mcp-tool-handler.ts +8 -4
  220. package/src/{tools → common/tools}/handlers/create-edges-mcp-tool-handler.ts +9 -2
  221. package/src/{tools → common/tools}/handlers/create-nodes-mcp-tool-handler.ts +9 -2
  222. package/src/{tools → common/tools}/handlers/delete-elements-mcp-tool-handler.ts +5 -3
  223. package/src/{tools → common/tools}/handlers/layout-mcp-tool-handler.ts +4 -3
  224. package/src/{tools → common/tools}/handlers/modify-edges-mcp-tool-handler.ts +8 -2
  225. package/src/{tools → common/tools}/handlers/modify-nodes-mcp-tool-handler.ts +8 -2
  226. package/src/node/index.ts +20 -0
  227. package/src/node/modules/node-mcp-server-module.ts +56 -0
  228. package/src/node/reexport.ts +16 -0
  229. package/src/node/server/mcp-http-transport-e2e.spec.ts +297 -0
  230. package/src/node/server/node-mcp-request-context.ts +33 -0
  231. package/src/{server/mcp-server-launcher.spec.ts → node/server/node-mcp-server-launcher.spec.ts} +19 -8
  232. package/src/node/server/node-mcp-server-launcher.ts +130 -0
  233. package/lib/index.d.ts.map +0 -1
  234. package/lib/index.js.map +0 -1
  235. package/lib/modules/mcp-diagram-module.d.ts.map +0 -1
  236. package/lib/modules/mcp-diagram-module.js.map +0 -1
  237. package/lib/modules/mcp-server-module.d.ts.map +0 -1
  238. package/lib/modules/mcp-server-module.js.map +0 -1
  239. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.d.ts.map +0 -1
  240. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.js.map +0 -1
  241. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.d.ts.map +0 -1
  242. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.js.map +0 -1
  243. package/lib/resources/handlers/diagram-png-mcp-resource-handler.d.ts.map +0 -1
  244. package/lib/resources/handlers/diagram-png-mcp-resource-handler.js.map +0 -1
  245. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.d.ts.map +0 -1
  246. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.js.map +0 -1
  247. package/lib/resources/services/element-types-provider.d.ts.map +0 -1
  248. package/lib/resources/services/element-types-provider.js.map +0 -1
  249. package/lib/resources/services/mcp-model-serializer.d.ts.map +0 -1
  250. package/lib/resources/services/mcp-model-serializer.js.map +0 -1
  251. package/lib/server/glsp-mcp-server.d.ts.map +0 -1
  252. package/lib/server/glsp-mcp-server.js.map +0 -1
  253. package/lib/server/lru-event-store.d.ts.map +0 -1
  254. package/lib/server/lru-event-store.js.map +0 -1
  255. package/lib/server/mcp-diagram-handler-dispatcher.d.ts.map +0 -1
  256. package/lib/server/mcp-diagram-handler-dispatcher.js.map +0 -1
  257. package/lib/server/mcp-diagram-prompt-handler-registry.d.ts.map +0 -1
  258. package/lib/server/mcp-diagram-prompt-handler-registry.js.map +0 -1
  259. package/lib/server/mcp-diagram-resource-handler-registry.d.ts.map +0 -1
  260. package/lib/server/mcp-diagram-resource-handler-registry.js.map +0 -1
  261. package/lib/server/mcp-diagram-tool-handler-registry.d.ts.map +0 -1
  262. package/lib/server/mcp-diagram-tool-handler-registry.js.map +0 -1
  263. package/lib/server/mcp-handler-shared.d.ts.map +0 -1
  264. package/lib/server/mcp-handler-shared.js.map +0 -1
  265. package/lib/server/mcp-http-transport.d.ts +0 -93
  266. package/lib/server/mcp-http-transport.d.ts.map +0 -1
  267. package/lib/server/mcp-http-transport.js +0 -350
  268. package/lib/server/mcp-http-transport.js.map +0 -1
  269. package/lib/server/mcp-id-alias-service.d.ts.map +0 -1
  270. package/lib/server/mcp-id-alias-service.js.map +0 -1
  271. package/lib/server/mcp-input-schemas.d.ts.map +0 -1
  272. package/lib/server/mcp-input-schemas.js.map +0 -1
  273. package/lib/server/mcp-label-provider.d.ts.map +0 -1
  274. package/lib/server/mcp-label-provider.js.map +0 -1
  275. package/lib/server/mcp-log-level-registry.d.ts.map +0 -1
  276. package/lib/server/mcp-log-level-registry.js.map +0 -1
  277. package/lib/server/mcp-logger.d.ts.map +0 -1
  278. package/lib/server/mcp-logger.js.map +0 -1
  279. package/lib/server/mcp-mime-types.d.ts.map +0 -1
  280. package/lib/server/mcp-mime-types.js.map +0 -1
  281. package/lib/server/mcp-options.d.ts.map +0 -1
  282. package/lib/server/mcp-options.js.map +0 -1
  283. package/lib/server/mcp-progress-reporter.d.ts.map +0 -1
  284. package/lib/server/mcp-progress-reporter.js.map +0 -1
  285. package/lib/server/mcp-prompt-handler.d.ts.map +0 -1
  286. package/lib/server/mcp-prompt-handler.js.map +0 -1
  287. package/lib/server/mcp-request-context.d.ts +0 -37
  288. package/lib/server/mcp-request-context.d.ts.map +0 -1
  289. package/lib/server/mcp-request-context.js +0 -37
  290. package/lib/server/mcp-request-context.js.map +0 -1
  291. package/lib/server/mcp-resource-handler.d.ts.map +0 -1
  292. package/lib/server/mcp-resource-handler.js.map +0 -1
  293. package/lib/server/mcp-server-launcher.d.ts +0 -143
  294. package/lib/server/mcp-server-launcher.d.ts.map +0 -1
  295. package/lib/server/mcp-server-launcher.js.map +0 -1
  296. package/lib/server/mcp-session.d.ts.map +0 -1
  297. package/lib/server/mcp-session.js.map +0 -1
  298. package/lib/server/mcp-tool-handler.d.ts.map +0 -1
  299. package/lib/tools/handlers/count-elements-mcp-tool-handler.d.ts.map +0 -1
  300. package/lib/tools/handlers/count-elements-mcp-tool-handler.js.map +0 -1
  301. package/lib/tools/handlers/create-edges-mcp-tool-handler.d.ts.map +0 -1
  302. package/lib/tools/handlers/create-edges-mcp-tool-handler.js.map +0 -1
  303. package/lib/tools/handlers/create-nodes-mcp-tool-handler.d.ts.map +0 -1
  304. package/lib/tools/handlers/create-nodes-mcp-tool-handler.js.map +0 -1
  305. package/lib/tools/handlers/delete-elements-mcp-tool-handler.d.ts.map +0 -1
  306. package/lib/tools/handlers/delete-elements-mcp-tool-handler.js.map +0 -1
  307. package/lib/tools/handlers/diagram-model-mcp-tool-handler.d.ts.map +0 -1
  308. package/lib/tools/handlers/diagram-model-mcp-tool-handler.js.map +0 -1
  309. package/lib/tools/handlers/element-types-mcp-tool-handler.d.ts.map +0 -1
  310. package/lib/tools/handlers/element-types-mcp-tool-handler.js.map +0 -1
  311. package/lib/tools/handlers/get-selection-mcp-tool-handler.d.ts.map +0 -1
  312. package/lib/tools/handlers/get-selection-mcp-tool-handler.js.map +0 -1
  313. package/lib/tools/handlers/layout-mcp-tool-handler.d.ts.map +0 -1
  314. package/lib/tools/handlers/layout-mcp-tool-handler.js.map +0 -1
  315. package/lib/tools/handlers/modify-edges-mcp-tool-handler.d.ts.map +0 -1
  316. package/lib/tools/handlers/modify-edges-mcp-tool-handler.js.map +0 -1
  317. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.d.ts.map +0 -1
  318. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.js.map +0 -1
  319. package/lib/tools/handlers/query-elements-mcp-tool-handler.d.ts.map +0 -1
  320. package/lib/tools/handlers/query-elements-mcp-tool-handler.js.map +0 -1
  321. package/lib/tools/handlers/redo-mcp-tool-handler.d.ts.map +0 -1
  322. package/lib/tools/handlers/redo-mcp-tool-handler.js.map +0 -1
  323. package/lib/tools/handlers/save-model-mcp-tool-handler.d.ts.map +0 -1
  324. package/lib/tools/handlers/save-model-mcp-tool-handler.js.map +0 -1
  325. package/lib/tools/handlers/session-info-mcp-tool-handler.d.ts.map +0 -1
  326. package/lib/tools/handlers/session-info-mcp-tool-handler.js.map +0 -1
  327. package/lib/tools/handlers/set-selection-mcp-tool-handler.d.ts.map +0 -1
  328. package/lib/tools/handlers/set-selection-mcp-tool-handler.js.map +0 -1
  329. package/lib/tools/handlers/set-view-mcp-tool-handler.d.ts.map +0 -1
  330. package/lib/tools/handlers/set-view-mcp-tool-handler.js.map +0 -1
  331. package/lib/tools/handlers/undo-mcp-tool-handler.d.ts.map +0 -1
  332. package/lib/tools/handlers/undo-mcp-tool-handler.js.map +0 -1
  333. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.d.ts.map +0 -1
  334. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.js.map +0 -1
  335. package/lib/util/markdown-util.d.ts.map +0 -1
  336. package/lib/util/markdown-util.js.map +0 -1
  337. package/lib/util/mcp-util.d.ts.map +0 -1
  338. package/lib/util/mcp-util.js.map +0 -1
  339. package/src/server/mcp-http-transport-e2e.spec.ts +0 -151
  340. package/src/server/mcp-http-transport.spec.ts +0 -385
  341. package/src/server/mcp-http-transport.ts +0 -368
  342. package/src/server/mcp-server-launcher.ts +0 -369
  343. /package/lib/{modules → common/modules}/mcp-diagram-module.d.ts +0 -0
  344. /package/lib/{modules → common/modules}/mcp-diagram-module.js +0 -0
  345. /package/lib/{prompts → common/prompts}/handlers/describe-diagram-mcp-prompt-handler.d.ts +0 -0
  346. /package/lib/{prompts → common/prompts}/handlers/describe-diagram-mcp-prompt-handler.js +0 -0
  347. /package/lib/{prompts → common/prompts}/handlers/suggest-improvements-mcp-prompt-handler.d.ts +0 -0
  348. /package/lib/{prompts → common/prompts}/handlers/suggest-improvements-mcp-prompt-handler.js +0 -0
  349. /package/lib/{resources → common/resources}/handlers/diagram-png-mcp-resource-handler.d.ts +0 -0
  350. /package/lib/{resources → common/resources}/handlers/diagram-png-mcp-resource-handler.js +0 -0
  351. /package/lib/{resources → common/resources}/handlers/diagram-svg-mcp-resource-handler.d.ts +0 -0
  352. /package/lib/{resources → common/resources}/handlers/diagram-svg-mcp-resource-handler.js +0 -0
  353. /package/lib/{resources → common/resources}/services/element-types-provider.d.ts +0 -0
  354. /package/lib/{resources → common/resources}/services/element-types-provider.js +0 -0
  355. /package/lib/{resources → common/resources}/services/mcp-model-serializer.d.ts +0 -0
  356. /package/lib/{resources → common/resources}/services/mcp-model-serializer.js +0 -0
  357. /package/lib/{server → common/server}/lru-event-store.js +0 -0
  358. /package/lib/{server → common/server}/mcp-diagram-prompt-handler-registry.d.ts +0 -0
  359. /package/lib/{server → common/server}/mcp-diagram-prompt-handler-registry.js +0 -0
  360. /package/lib/{server → common/server}/mcp-diagram-resource-handler-registry.d.ts +0 -0
  361. /package/lib/{server → common/server}/mcp-diagram-tool-handler-registry.d.ts +0 -0
  362. /package/lib/{server → common/server}/mcp-handler-shared.d.ts +0 -0
  363. /package/lib/{server → common/server}/mcp-handler-shared.js +0 -0
  364. /package/lib/{server → common/server}/mcp-id-alias-service.d.ts +0 -0
  365. /package/lib/{server → common/server}/mcp-id-alias-service.js +0 -0
  366. /package/lib/{server → common/server}/mcp-label-provider.d.ts +0 -0
  367. /package/lib/{server → common/server}/mcp-label-provider.js +0 -0
  368. /package/lib/{server → common/server}/mcp-log-level-registry.js +0 -0
  369. /package/lib/{server → common/server}/mcp-mime-types.d.ts +0 -0
  370. /package/lib/{server → common/server}/mcp-mime-types.js +0 -0
  371. /package/lib/{server → common/server}/mcp-session.d.ts +0 -0
  372. /package/lib/{server → common/server}/mcp-session.js +0 -0
  373. /package/lib/{tools → common/tools}/handlers/count-elements-mcp-tool-handler.d.ts +0 -0
  374. /package/lib/{tools → common/tools}/handlers/count-elements-mcp-tool-handler.js +0 -0
  375. /package/lib/{tools → common/tools}/handlers/diagram-model-mcp-tool-handler.d.ts +0 -0
  376. /package/lib/{tools → common/tools}/handlers/diagram-model-mcp-tool-handler.js +0 -0
  377. /package/lib/{tools → common/tools}/handlers/element-types-mcp-tool-handler.d.ts +0 -0
  378. /package/lib/{tools → common/tools}/handlers/element-types-mcp-tool-handler.js +0 -0
  379. /package/lib/{tools → common/tools}/handlers/get-selection-mcp-tool-handler.d.ts +0 -0
  380. /package/lib/{tools → common/tools}/handlers/get-selection-mcp-tool-handler.js +0 -0
  381. /package/lib/{tools → common/tools}/handlers/modify-edges-mcp-tool-handler.d.ts +0 -0
  382. /package/lib/{tools → common/tools}/handlers/modify-nodes-mcp-tool-handler.d.ts +0 -0
  383. /package/lib/{tools → common/tools}/handlers/query-elements-mcp-tool-handler.d.ts +0 -0
  384. /package/lib/{tools → common/tools}/handlers/query-elements-mcp-tool-handler.js +0 -0
  385. /package/lib/{tools → common/tools}/handlers/redo-mcp-tool-handler.d.ts +0 -0
  386. /package/lib/{tools → common/tools}/handlers/redo-mcp-tool-handler.js +0 -0
  387. /package/lib/{tools → common/tools}/handlers/save-model-mcp-tool-handler.d.ts +0 -0
  388. /package/lib/{tools → common/tools}/handlers/save-model-mcp-tool-handler.js +0 -0
  389. /package/lib/{tools → common/tools}/handlers/session-info-mcp-tool-handler.d.ts +0 -0
  390. /package/lib/{tools → common/tools}/handlers/session-info-mcp-tool-handler.js +0 -0
  391. /package/lib/{tools → common/tools}/handlers/set-selection-mcp-tool-handler.d.ts +0 -0
  392. /package/lib/{tools → common/tools}/handlers/set-selection-mcp-tool-handler.js +0 -0
  393. /package/lib/{tools → common/tools}/handlers/set-view-mcp-tool-handler.d.ts +0 -0
  394. /package/lib/{tools → common/tools}/handlers/set-view-mcp-tool-handler.js +0 -0
  395. /package/lib/{tools → common/tools}/handlers/undo-mcp-tool-handler.d.ts +0 -0
  396. /package/lib/{tools → common/tools}/handlers/undo-mcp-tool-handler.js +0 -0
  397. /package/lib/{tools → common/tools}/handlers/validate-diagram-mcp-tool-handler.d.ts +0 -0
  398. /package/lib/{tools → common/tools}/handlers/validate-diagram-mcp-tool-handler.js +0 -0
  399. /package/lib/{util → common/util}/markdown-util.d.ts +0 -0
  400. /package/lib/{util → common/util}/markdown-util.js +0 -0
  401. /package/lib/{util → common/util}/mcp-util.d.ts +0 -0
  402. /package/lib/{util → common/util}/mcp-util.js +0 -0
  403. /package/src/{modules → common/modules}/mcp-diagram-module.ts +0 -0
  404. /package/src/{prompts → common/prompts}/handlers/describe-diagram-mcp-prompt-handler.ts +0 -0
  405. /package/src/{prompts → common/prompts}/handlers/suggest-improvements-mcp-prompt-handler.ts +0 -0
  406. /package/src/{resources → common/resources}/handlers/diagram-png-mcp-resource-handler.ts +0 -0
  407. /package/src/{resources → common/resources}/handlers/diagram-svg-mcp-resource-handler.ts +0 -0
  408. /package/src/{resources → common/resources}/services/element-types-provider.ts +0 -0
  409. /package/src/{resources → common/resources}/services/mcp-model-serializer.ts +0 -0
  410. /package/src/{server → common/server}/glsp-mcp-server.spec.ts +0 -0
  411. /package/src/{server → common/server}/lru-event-store.spec.ts +0 -0
  412. /package/src/{server → common/server}/mcp-diagram-handler-dispatcher.spec.ts +0 -0
  413. /package/src/{server → common/server}/mcp-diagram-prompt-handler-registry.ts +0 -0
  414. /package/src/{server → common/server}/mcp-handler-shared.spec.ts +0 -0
  415. /package/src/{server → common/server}/mcp-handler-shared.ts +0 -0
  416. /package/src/{server → common/server}/mcp-id-alias-service.spec.ts +0 -0
  417. /package/src/{server → common/server}/mcp-id-alias-service.ts +0 -0
  418. /package/src/{server → common/server}/mcp-label-provider.ts +0 -0
  419. /package/src/{server → common/server}/mcp-log-level-registry.spec.ts +0 -0
  420. /package/src/{server → common/server}/mcp-mime-types.ts +0 -0
  421. /package/src/{server → common/server}/mcp-session.ts +0 -0
  422. /package/src/{tools → common/tools}/handlers/count-elements-mcp-tool-handler.spec.ts +0 -0
  423. /package/src/{tools → common/tools}/handlers/count-elements-mcp-tool-handler.ts +0 -0
  424. /package/src/{tools → common/tools}/handlers/create-edges-mcp-tool-handler.spec.ts +0 -0
  425. /package/src/{tools → common/tools}/handlers/create-nodes-mcp-tool-handler.spec.ts +0 -0
  426. /package/src/{tools → common/tools}/handlers/diagram-model-mcp-tool-handler.ts +0 -0
  427. /package/src/{tools → common/tools}/handlers/element-types-mcp-tool-handler.ts +0 -0
  428. /package/src/{tools → common/tools}/handlers/get-selection-mcp-tool-handler.ts +0 -0
  429. /package/src/{tools → common/tools}/handlers/query-elements-mcp-tool-handler.spec.ts +0 -0
  430. /package/src/{tools → common/tools}/handlers/query-elements-mcp-tool-handler.ts +0 -0
  431. /package/src/{tools → common/tools}/handlers/redo-mcp-tool-handler.ts +0 -0
  432. /package/src/{tools → common/tools}/handlers/save-model-mcp-tool-handler.ts +0 -0
  433. /package/src/{tools → common/tools}/handlers/session-info-mcp-tool-handler.spec.ts +0 -0
  434. /package/src/{tools → common/tools}/handlers/session-info-mcp-tool-handler.ts +0 -0
  435. /package/src/{tools → common/tools}/handlers/set-selection-mcp-tool-handler.spec.ts +0 -0
  436. /package/src/{tools → common/tools}/handlers/set-selection-mcp-tool-handler.ts +0 -0
  437. /package/src/{tools → common/tools}/handlers/set-view-mcp-tool-handler.ts +0 -0
  438. /package/src/{tools → common/tools}/handlers/undo-mcp-tool-handler.ts +0 -0
  439. /package/src/{tools → common/tools}/handlers/validate-diagram-mcp-tool-handler.ts +0 -0
  440. /package/src/{tools → common/tools}/tool-annotations.spec.ts +0 -0
  441. /package/src/{util → common/util}/markdown-util.ts +0 -0
  442. /package/src/{util → common/util}/mcp-util.ts +0 -0
  443. /package/src/{server → node/server}/raw-http.spec.ts +0 -0
@@ -18,7 +18,7 @@ import { DeleteElementOperation } from '@eclipse-glsp/server';
18
18
  import { injectable } from 'inversify';
19
19
  import * as z from 'zod/v4';
20
20
  import { McpToolResult } from '../../server/mcp-handler-shared';
21
- import { ElementIdentitySchema, McpDiagramScopedInputSchema, elementIds } from '../../server/mcp-input-schemas';
21
+ import { ElementIdentitySchema, McpDiagramScopedInputSchema, dispatchedCommands, elementIds } from '../../server/mcp-input-schemas';
22
22
  import { OperationMcpDiagramToolHandler } from '../../server/mcp-tool-handler';
23
23
 
24
24
  export const DeleteElementsInputSchema = McpDiagramScopedInputSchema.extend({ elementIds });
@@ -35,7 +35,8 @@ export const DeleteElementsOutputSchema = z.object({
35
35
  .int()
36
36
  .describe(
37
37
  'Total number of elements removed from the model. Higher than `deletedElements.length` when dependents (e.g. edges) are auto-deleted.'
38
- )
38
+ ),
39
+ dispatchedCommands
39
40
  });
40
41
 
41
42
  @injectable()
@@ -63,7 +64,8 @@ export class DeleteElementsMcpToolHandler extends OperationMcpDiagramToolHandler
63
64
  const deletedCount = beforeCount - this.modelState.index.allIds().length;
64
65
  return this.success(`Successfully deleted ${deletedCount} element(s) (including dependents)`, {
65
66
  deletedElements,
66
- deletedCount
67
+ deletedCount,
68
+ dispatchedCommands: 1
67
69
  });
68
70
  }
69
71
  }
@@ -18,14 +18,15 @@ import { LayoutEngine, LayoutOperation } from '@eclipse-glsp/server';
18
18
  import { inject, injectable, optional } from 'inversify';
19
19
  import * as z from 'zod/v4';
20
20
  import { McpToolResult } from '../../server/mcp-handler-shared';
21
- import { McpDiagramScopedInputSchema } from '../../server/mcp-input-schemas';
21
+ import { McpDiagramScopedInputSchema, dispatchedCommands } from '../../server/mcp-input-schemas';
22
22
  import { OperationMcpDiagramToolHandler } from '../../server/mcp-tool-handler';
23
23
 
24
24
  export const LayoutInputSchema = McpDiagramScopedInputSchema;
25
25
  export type LayoutInput = z.infer<typeof LayoutInputSchema>;
26
26
 
27
27
  export const LayoutOutputSchema = z.object({
28
- applied: z.boolean().describe('Always true on success — surfaced for parity with other operations.')
28
+ applied: z.boolean().describe('Always true on success — surfaced for parity with other operations.'),
29
+ dispatchedCommands
29
30
  });
30
31
 
31
32
  /** Not registered by default: requires an adopter-supplied `LayoutEngine` to bind, which only some GLSP servers ship. */
@@ -53,6 +54,6 @@ export class LayoutMcpToolHandler extends OperationMcpDiagramToolHandler<LayoutI
53
54
 
54
55
  protected async createResult(_params: LayoutInput): Promise<McpToolResult> {
55
56
  await this.actionDispatcher.dispatch(LayoutOperation.create());
56
- return this.success('Automatic layout applied', { applied: true });
57
+ return this.success('Automatic layout applied', { applied: true, dispatchedCommands: 1 });
57
58
  }
58
59
  }
@@ -18,7 +18,13 @@ import { ChangeRoutingPointsOperation, GEdge, ReconnectEdgeOperation } from '@ec
18
18
  import { injectable } from 'inversify';
19
19
  import * as z from 'zod/v4';
20
20
  import { McpToolError, McpToolResult } from '../../server/mcp-handler-shared';
21
- import { ElementIdentitySchema, McpDiagramScopedInputSchema, elementId as elementIdSchema, position } from '../../server/mcp-input-schemas';
21
+ import {
22
+ ElementIdentitySchema,
23
+ McpDiagramScopedInputSchema,
24
+ dispatchedCommands,
25
+ elementId as elementIdSchema,
26
+ position
27
+ } from '../../server/mcp-input-schemas';
22
28
  import { OperationMcpDiagramToolHandler } from '../../server/mcp-tool-handler';
23
29
  import { formatNoticeList } from '../../util/mcp-util';
24
30
 
@@ -46,7 +52,7 @@ export type ModifyEdgesInput = z.infer<typeof ModifyEdgesInputSchema>;
46
52
 
47
53
  export const ModifyEdgesOutputSchema = z.object({
48
54
  modifiedEdges: z.array(ElementIdentitySchema).describe('Identity of each edge whose change request was dispatched.'),
49
- dispatchedCommands: z.number().int().describe('Number of underlying GLSP operations dispatched.'),
55
+ dispatchedCommands,
50
56
  errors: z.array(z.string()).describe('Per-input failure messages; absent or empty when every input succeeded.')
51
57
  });
52
58
 
@@ -18,7 +18,13 @@ import { ApplyLabelEditOperation, ChangeBoundsOperation, GEdge, GShapeElement }
18
18
  import { injectable } from 'inversify';
19
19
  import * as z from 'zod/v4';
20
20
  import { McpToolError, McpToolResult } from '../../server/mcp-handler-shared';
21
- import { ElementIdentitySchema, McpDiagramScopedInputSchema, elementId, position } from '../../server/mcp-input-schemas';
21
+ import {
22
+ ElementIdentitySchema,
23
+ McpDiagramScopedInputSchema,
24
+ dispatchedCommands,
25
+ elementId,
26
+ position
27
+ } from '../../server/mcp-input-schemas';
22
28
  import { OperationMcpDiagramToolHandler } from '../../server/mcp-tool-handler';
23
29
  import { formatNoticeList } from '../../util/mcp-util';
24
30
 
@@ -48,7 +54,7 @@ export const ModifyNodesOutputSchema = z.object({
48
54
  modifiedNodes: z
49
55
  .array(ElementIdentitySchema)
50
56
  .describe('Identity of each node whose change request was dispatched (post-modification labels).'),
51
- dispatchedCommands: z.number().int().describe('Number of underlying GLSP operations dispatched (a single change may yield several).'),
57
+ dispatchedCommands,
52
58
  warnings: z
53
59
  .array(z.string())
54
60
  .describe(
@@ -0,0 +1,20 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ export * from './modules/node-mcp-server-module';
18
+ export * from './reexport';
19
+ export * from './server/node-mcp-request-context';
20
+ export * from './server/node-mcp-server-launcher';
@@ -0,0 +1,56 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ import { BindingTarget } from '@eclipse-glsp/server';
18
+ import { AbstractMcpServerModule, DEFAULT_MCP_OPTIONS } from '../../common/modules/abstract-mcp-server-module';
19
+ import { AbstractMcpServerLauncher } from '../../common/server/abstract-mcp-server-launcher';
20
+ import { McpServerDefaults } from '../../common/server/mcp-options';
21
+ import { McpRequestContext } from '../../common/server/mcp-request-context';
22
+ import { NodeMcpServerLauncher } from '../server/node-mcp-server-launcher';
23
+ import { NodeMcpRequestContext } from '../server/node-mcp-request-context';
24
+
25
+ /**
26
+ * Default {@link AbstractMcpServerModule} entry point for Node hosts. Ships GLSP-default option
27
+ * values (see {@link DEFAULT_OPTIONS}) on top of the abstract module's hook defaults, and binds
28
+ * the Node-flavored {@link NodeMcpServerLauncher} + {@link NodeMcpRequestContext}. Adopter-provided
29
+ * overrides via the constructor merge on top.
30
+ *
31
+ * @experimental The MCP integration is under active development. Option names, schema shapes,
32
+ * and handler contracts MAY change in minor releases until the feature graduates from
33
+ * experimental status.
34
+ */
35
+ export class NodeMcpServerModule extends AbstractMcpServerModule {
36
+ static readonly DEFAULT_OPTIONS: McpServerDefaults = {
37
+ ...DEFAULT_MCP_OPTIONS,
38
+ host: '127.0.0.1',
39
+ allowedHosts: ['127.0.0.1', 'localhost']
40
+ // `allowedOrigins` deliberately undefined: accept absent Origin (typical for desktop-IDE
41
+ // MCP clients) and rely on Host validation to gate DNS-rebinding. Adopters whose
42
+ // deployment is browser-fronted set this explicitly to their frontend's origin.
43
+ };
44
+
45
+ constructor(overrides: McpServerDefaults = {}) {
46
+ super({ ...NodeMcpServerModule.DEFAULT_OPTIONS, ...overrides });
47
+ }
48
+
49
+ protected override bindMcpServerLauncher(): BindingTarget<AbstractMcpServerLauncher> {
50
+ return NodeMcpServerLauncher;
51
+ }
52
+
53
+ protected override bindMcpRequestContext(): BindingTarget<McpRequestContext> {
54
+ return NodeMcpRequestContext;
55
+ }
56
+ }
@@ -0,0 +1,16 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ export * from '../common';
@@ -0,0 +1,297 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ import { ClientSessionManager, InitializeParameters, InitializeResult, Logger, NullLogger } from '@eclipse-glsp/server';
18
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
19
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
20
+ import { expect } from 'chai';
21
+ import { Container, ContainerModule } from 'inversify';
22
+ import * as z from 'zod/v4';
23
+ import { FullMcpServerConfiguration } from '../../common/server/abstract-mcp-server-launcher';
24
+ import { DefaultGLSPMcpServer, GLSPMcpServerFactory } from '../../common/server/glsp-mcp-server';
25
+ import { McpDiagramHandlerDispatcher } from '../../common/server/mcp-diagram-handler-dispatcher';
26
+ import { DefaultMcpLogLevelRegistry, McpLogLevelRegistry } from '../../common/server/mcp-log-level-registry';
27
+ import { McpServerDefaults, McpServerOptions } from '../../common/server/mcp-options';
28
+ import { NodeMcpServerLauncher } from './node-mcp-server-launcher';
29
+ import { rawHttpRequest } from './raw-http.spec';
30
+
31
+ class StubDispatcher implements McpDiagramHandlerDispatcher {
32
+ harvest(): void {
33
+ /* no-op */
34
+ }
35
+ reset(): void {
36
+ /* no-op */
37
+ }
38
+ hasDiagramTools(): boolean {
39
+ return false;
40
+ }
41
+ hasDiagramResources(): boolean {
42
+ return false;
43
+ }
44
+ hasDiagramPrompts(): boolean {
45
+ return false;
46
+ }
47
+ registerAll(): void {
48
+ /* no-op */
49
+ }
50
+ }
51
+
52
+ class StubClientSessionManager {
53
+ addListener(): boolean {
54
+ return true;
55
+ }
56
+ removeListener(): boolean {
57
+ return true;
58
+ }
59
+ getSessions(): unknown[] {
60
+ return [];
61
+ }
62
+ getSession(): unknown {
63
+ return undefined;
64
+ }
65
+ getSessionsByType(): unknown[] {
66
+ return [];
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Test subclass that registers a single `echo` tool on every fresh GLSP MCP server. We use this
72
+ * to drive a real MCP SDK client through a full handshake without depending on the workflow
73
+ * server's diagram handler stack.
74
+ */
75
+ class EchoLauncher extends NodeMcpServerLauncher {
76
+ protected override createGlspMcpServer(config: FullMcpServerConfiguration): DefaultGLSPMcpServer {
77
+ const server = super.createGlspMcpServer(config) as DefaultGLSPMcpServer;
78
+ server.registerTool(
79
+ 'echo',
80
+ { description: 'Returns the supplied message verbatim.', inputSchema: { message: z.string() } },
81
+ async ({ message }) => ({ content: [{ type: 'text', text: message }] })
82
+ );
83
+ return server;
84
+ }
85
+ }
86
+
87
+ function buildLauncher(optionValues: McpServerOptions['values'] = {}): EchoLauncher {
88
+ const container = new Container();
89
+ container.load(
90
+ new ContainerModule(bind => {
91
+ bind(Logger).toConstantValue(new NullLogger());
92
+ const opts = new McpServerOptions();
93
+ opts.values = optionValues;
94
+ bind(McpServerOptions).toConstantValue(opts);
95
+ bind(McpServerDefaults).toConstantValue(optionValues);
96
+ bind(McpDiagramHandlerDispatcher).toConstantValue(new StubDispatcher());
97
+ bind(McpLogLevelRegistry).to(DefaultMcpLogLevelRegistry).inSingletonScope();
98
+ bind(ClientSessionManager).toConstantValue(new StubClientSessionManager());
99
+ const factory: GLSPMcpServerFactory = (mcpServer, options) => new DefaultGLSPMcpServer(mcpServer, options, new NullLogger());
100
+ bind(GLSPMcpServerFactory).toConstantValue(factory);
101
+ bind(EchoLauncher).toSelf().inSingletonScope();
102
+ })
103
+ );
104
+ return container.get(EchoLauncher);
105
+ }
106
+
107
+ async function startLauncher(
108
+ launcher: EchoLauncher,
109
+ options: { port?: number; host?: string; route?: string; allowedHosts?: string[]; allowedOrigins?: string[] } = {}
110
+ ): Promise<string> {
111
+ const params: InitializeParameters = {
112
+ applicationId: 'spec-app',
113
+ clientSessionId: 'spec-session',
114
+ protocolVersion: '1.0.0',
115
+ args: {},
116
+ mcpServer: {
117
+ port: options.port ?? 0,
118
+ route: options.route ?? '/mcp',
119
+ name: 'spec',
120
+ options: {}
121
+ }
122
+ } as unknown as InitializeParameters;
123
+ // Inject the deploy-only fields directly on the merged options holder.
124
+ launcher['mcpDefaults'] = {
125
+ host: options.host ?? '127.0.0.1',
126
+ allowedHosts: options.allowedHosts,
127
+ allowedOrigins: options.allowedOrigins
128
+ };
129
+ const baseResult: InitializeResult = { protocolVersion: '1.0.0', serverActions: {} } as unknown as InitializeResult;
130
+ const result = await launcher.initializeServer({} as never, params, baseResult);
131
+ const url = (result as unknown as { mcpServer?: { url?: string } }).mcpServer?.url;
132
+ if (!url) throw new Error('launcher did not announce a URL');
133
+ return url;
134
+ }
135
+
136
+ /**
137
+ * End-to-end smoke test: boot the launcher (which spins up the Hono-on-Node listener),
138
+ * connect a real SDK MCP client over Streamable HTTP, and exercise a tool round-trip (`echo`).
139
+ */
140
+ describe('NodeMcpServerLauncher (e2e — real MCP SDK client over HTTP)', () => {
141
+ let launcher: EchoLauncher | undefined;
142
+ let client: Client | undefined;
143
+
144
+ async function safeClose(target: Client | undefined): Promise<void> {
145
+ if (!target) return;
146
+ try {
147
+ await target.close();
148
+ } catch {
149
+ /* ignore — best effort */
150
+ }
151
+ }
152
+
153
+ afterEach(async () => {
154
+ await safeClose(client);
155
+ client = undefined;
156
+ launcher?.dispose();
157
+ launcher = undefined;
158
+ });
159
+
160
+ it('round-trips tools/list and tools/call against a registered echo tool', async () => {
161
+ launcher = buildLauncher();
162
+ const url = await startLauncher(launcher);
163
+ expect(url, 'launcher must announce a URL after initializeServer').to.be.a('string');
164
+
165
+ client = new Client({ name: 'wn-058-test-client', version: '1.0.0' });
166
+ await client.connect(new StreamableHTTPClientTransport(new URL(url)));
167
+
168
+ const tools = await client.listTools();
169
+ expect(tools.tools.map(tool => tool.name)).to.include('echo');
170
+
171
+ const result = await client.callTool({ name: 'echo', arguments: { message: 'hello GLSP' } });
172
+ expect(result.isError).to.not.equal(true);
173
+ expect(result.content).to.have.lengthOf(1);
174
+ const [block] = result.content as Array<{ type: string; text?: string }>;
175
+ expect(block.type).to.equal('text');
176
+ expect(block.text).to.equal('hello GLSP');
177
+ });
178
+
179
+ it('DELETE /mcp terminates the session; subsequent POSTs with the same id return 404 (§ #5)', async () => {
180
+ launcher = buildLauncher();
181
+ const url = await startLauncher(launcher);
182
+
183
+ client = new Client({ name: 'delete-smoke-test', version: '1.0.0' });
184
+ const clientTransport = new StreamableHTTPClientTransport(new URL(url));
185
+ await client.connect(clientTransport);
186
+ const sessionId = clientTransport.sessionId;
187
+ expect(sessionId, 'SDK transport should expose the minted session id after initialize').to.be.a('string');
188
+
189
+ const port = Number(new URL(url).port);
190
+
191
+ const deleteRes = await rawHttpRequest(port, 'DELETE', { 'mcp-session-id': sessionId! });
192
+ expect(deleteRes.status, 'DELETE should succeed for an active session').to.be.lessThan(300);
193
+
194
+ const followUp = await rawHttpRequest(
195
+ port,
196
+ 'POST',
197
+ { 'mcp-session-id': sessionId! },
198
+ { jsonrpc: '2.0', id: 1, method: 'tools/list', params: {} }
199
+ );
200
+ expect(followUp.status).to.equal(404);
201
+ const payload = JSON.parse(followUp.body);
202
+ expect(payload.error.code).to.equal(-32001);
203
+ });
204
+ });
205
+
206
+ describe('NodeMcpServerLauncher (raw HTTP wire validation)', () => {
207
+ let launcher: EchoLauncher | undefined;
208
+
209
+ afterEach(() => {
210
+ launcher?.dispose();
211
+ launcher = undefined;
212
+ });
213
+
214
+ async function startWith(values: McpServerOptions['values']): Promise<number> {
215
+ launcher = buildLauncher(values);
216
+ const url = await startLauncher(launcher, { allowedHosts: values.allowedHosts, allowedOrigins: values.allowedOrigins });
217
+ return Number(new URL(url).port);
218
+ }
219
+
220
+ it('binds an HTTP listener on a resolvable loopback port', async () => {
221
+ launcher = buildLauncher();
222
+ const url = await startLauncher(launcher);
223
+ expect(url).to.match(/^http:\/\/(127\.0\.0\.1|localhost):\d+\/mcp$/);
224
+ });
225
+
226
+ it('rejects a non-initialize POST without an Mcp-Session-Id header with 400 (§ #2)', async () => {
227
+ const port = await startWith({});
228
+ const res = await rawHttpRequest(port, 'POST', {}, { jsonrpc: '2.0', id: 1, method: 'tools/list', params: {} });
229
+ expect(res.status).to.equal(400);
230
+ const payload = JSON.parse(res.body);
231
+ expect(payload.error.code).to.equal(-32000);
232
+ expect(payload.error.message).to.match(/No valid session ID/);
233
+ });
234
+
235
+ it('rejects a POST with an unknown Mcp-Session-Id with 404 (§ #3)', async () => {
236
+ const port = await startWith({});
237
+ const res = await rawHttpRequest(
238
+ port,
239
+ 'POST',
240
+ { 'mcp-session-id': 'no-such-session' },
241
+ { jsonrpc: '2.0', id: 1, method: 'tools/list', params: {} }
242
+ );
243
+ expect(res.status).to.equal(404);
244
+ const payload = JSON.parse(res.body);
245
+ expect(payload.error.code).to.equal(-32001);
246
+ });
247
+
248
+ it('rejects a non-initialize POST whose MCP-Protocol-Version is unsupported with HTTP 400', async () => {
249
+ const port = await startWith({});
250
+ const res = await rawHttpRequest(
251
+ port,
252
+ 'POST',
253
+ { 'mcp-session-id': 'doesnt-matter', 'mcp-protocol-version': '1999-01-01' },
254
+ { jsonrpc: '2.0', id: 1, method: 'tools/list', params: {} }
255
+ );
256
+ expect(res.status).to.equal(400);
257
+ const payload = JSON.parse(res.body);
258
+ expect(payload.error.message).to.match(/Unsupported MCP-Protocol-Version/);
259
+ });
260
+
261
+ it('rejects requests with a Host header outside the allowlist', async () => {
262
+ const port = await startWith({ allowedHosts: ['127.0.0.1', 'localhost'] });
263
+ // POST init body so we go past session-id validation into the SDK transport's host check.
264
+ const res = await rawHttpRequest(
265
+ port,
266
+ 'POST',
267
+ { Host: 'evil.example' },
268
+ {
269
+ jsonrpc: '2.0',
270
+ id: 1,
271
+ method: 'initialize',
272
+ params: { protocolVersion: '2025-06-18', capabilities: {}, clientInfo: { name: 'x', version: '1' } }
273
+ }
274
+ );
275
+ expect(res.status).to.equal(403);
276
+ });
277
+
278
+ it('rejects start when the requested port is already in use with an actionable error', async () => {
279
+ const firstLauncher = buildLauncher();
280
+ const url = await startLauncher(firstLauncher);
281
+ const taken = Number(new URL(url).port);
282
+ const secondLauncher = buildLauncher();
283
+ let error: Error | undefined;
284
+ try {
285
+ await startLauncher(secondLauncher, { port: taken });
286
+ } catch (err: unknown) {
287
+ error = err as Error;
288
+ } finally {
289
+ firstLauncher.dispose();
290
+ secondLauncher.dispose();
291
+ }
292
+ expect(error, 'expected initializeServer to reject').to.not.equal(undefined);
293
+ expect(error!.message).to.match(/127\.0\.0\.1:\d+/);
294
+ expect(error!.message).to.include('mcpServer.port');
295
+ expect(error!.message).to.match(/already in use/);
296
+ });
297
+ });
@@ -0,0 +1,33 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ import { AsyncLocalStorage } from 'async_hooks';
18
+ import { injectable } from 'inversify';
19
+ import { McpRequestContext, McpRequestExtra } from '../../common/server/mcp-request-context';
20
+
21
+ /** {@link McpRequestContext} backed by native `AsyncLocalStorage`; frame survives across `await`. */
22
+ @injectable()
23
+ export class NodeMcpRequestContext implements McpRequestContext {
24
+ protected storage = new AsyncLocalStorage<McpRequestExtra>();
25
+
26
+ run<R>(extra: McpRequestExtra, callback: () => R): R {
27
+ return this.storage.run(extra, callback);
28
+ }
29
+
30
+ getStore(): McpRequestExtra | undefined {
31
+ return this.storage.getStore();
32
+ }
33
+ }
@@ -16,10 +16,11 @@
16
16
 
17
17
  import { McpServerInitOptions } from '@eclipse-glsp/protocol';
18
18
  import { expect } from 'chai';
19
- import { version as packageVersion } from '../../package.json';
20
- import { McpServerLauncher, SERVER_VERSION, assertLoopbackOrAcknowledged, isLoopbackHost, pickInitOptions } from './mcp-server-launcher';
19
+ import { version as packageVersion } from '../../../package.json';
20
+ import { SERVER_VERSION, pickInitOptions } from '../../common/server/abstract-mcp-server-launcher';
21
+ import { NodeMcpServerLauncher, assertLoopbackOrAcknowledged, isLoopbackHost } from './node-mcp-server-launcher';
21
22
 
22
- describe('McpServerLauncher · SERVER_VERSION', () => {
23
+ describe('NodeMcpServerLauncher · SERVER_VERSION', () => {
23
24
  it('matches the package.json version (no stale literal)', () => {
24
25
  // Regression guard: the launcher used to hard-code '1.0.0'. Pull from package.json so
25
26
  // adopters and MCP clients can tell builds apart via the `serverInfo.version` handshake
@@ -28,7 +29,7 @@ describe('McpServerLauncher · SERVER_VERSION', () => {
28
29
  });
29
30
  });
30
31
 
31
- describe('McpServerLauncher · buildCapabilities', () => {
32
+ describe('NodeMcpServerLauncher · buildCapabilities', () => {
32
33
  /**
33
34
  * Sidestep DI: build a stub whose shape matches the fields `buildCapabilities` reads, then
34
35
  * invoke the prototype method against it. The method is protected, so we cast through.
@@ -54,7 +55,7 @@ describe('McpServerLauncher · buildCapabilities', () => {
54
55
  hasDiagramResources: () => args.hasDiagramResources ?? false
55
56
  }
56
57
  };
57
- const proto = McpServerLauncher.prototype as unknown as {
58
+ const proto = NodeMcpServerLauncher.prototype as unknown as {
58
59
  buildCapabilities(this: typeof stub, resourcesAsResources: boolean): Record<string, unknown>;
59
60
  };
60
61
  return proto.buildCapabilities.call(stub, resourcesAsResources);
@@ -97,7 +98,7 @@ describe('McpServerLauncher · buildCapabilities', () => {
97
98
  });
98
99
  });
99
100
 
100
- describe('McpServerLauncher · isLoopbackHost', () => {
101
+ describe('NodeMcpServerLauncher · isLoopbackHost', () => {
101
102
  it('treats 127.0.0.0/8, localhost, and ::1 as loopback', () => {
102
103
  expect(isLoopbackHost('127.0.0.1')).to.equal(true);
103
104
  expect(isLoopbackHost('127.55.0.1')).to.equal(true);
@@ -114,7 +115,7 @@ describe('McpServerLauncher · isLoopbackHost', () => {
114
115
  });
115
116
  });
116
117
 
117
- describe('McpServerLauncher · assertLoopbackOrAcknowledged (auth footgun)', () => {
118
+ describe('NodeMcpServerLauncher · assertLoopbackOrAcknowledged (auth footgun)', () => {
118
119
  it('passes silently for a loopback bind without acknowledgement', () => {
119
120
  expect(() => assertLoopbackOrAcknowledged('127.0.0.1', undefined)).to.not.throw();
120
121
  expect(() => assertLoopbackOrAcknowledged('localhost', undefined)).to.not.throw();
@@ -139,7 +140,17 @@ describe('McpServerLauncher · assertLoopbackOrAcknowledged (auth footgun)', ()
139
140
  });
140
141
  });
141
142
 
142
- describe('McpServerLauncher · pickInitOptions (deploy/init split defense-in-depth)', () => {
143
+ // Compile-time exhaustiveness checkfails the build if `McpServerInitOptions` grows or
144
+ // shrinks while the `pickInitOptions` destructure doesn't follow.
145
+ type _Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;
146
+ function assertPickInitKeysExhaustive(
147
+ _: _Equal<keyof import('@eclipse-glsp/server').McpServerInitOptions, 'dataMode' | 'agentPersona' | 'eventStoreLimit'>
148
+ ): void {
149
+ /* type-only */
150
+ }
151
+ assertPickInitKeysExhaustive(true);
152
+
153
+ describe('NodeMcpServerLauncher · pickInitOptions (deploy/init split — defense-in-depth)', () => {
143
154
  it('passes through every allowed init-side field unchanged', () => {
144
155
  const picked = pickInitOptions({ dataMode: 'resources', agentPersona: 'X', eventStoreLimit: 50 });
145
156
  expect(picked).to.deep.equal({ dataMode: 'resources', agentPersona: 'X', eventStoreLimit: 50 });