@eclipse-glsp/server-mcp 2.7.0-next.9 → 2.8.0-next.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 (461) hide show
  1. package/README.md +17 -3
  2. package/{lib/util/index.d.ts → browser.d.ts} +1 -3
  3. package/browser.js +18 -0
  4. package/common.d.ts +16 -0
  5. package/common.js +18 -0
  6. package/lib/{resources → browser}/index.d.ts +5 -4
  7. package/lib/browser/index.d.ts.map +1 -0
  8. package/lib/{index.js → browser/index.js} +20 -24
  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/{util/index.js → browser/reexport.js} +17 -18
  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/common/index.d.ts +65 -0
  31. package/lib/common/index.d.ts.map +1 -0
  32. package/lib/common/index.js +81 -0
  33. package/lib/common/index.js.map +1 -0
  34. package/lib/{server/mcp-server-module.d.ts → common/modules/abstract-mcp-server-module.d.ts} +55 -46
  35. package/lib/common/modules/abstract-mcp-server-module.d.ts.map +1 -0
  36. package/lib/{server/mcp-server-module.js → common/modules/abstract-mcp-server-module.js} +58 -79
  37. package/lib/common/modules/abstract-mcp-server-module.js.map +1 -0
  38. package/lib/{server → common/modules}/mcp-diagram-module.d.ts +5 -5
  39. package/lib/common/modules/mcp-diagram-module.d.ts.map +1 -0
  40. package/lib/{server → common/modules}/mcp-diagram-module.js +44 -28
  41. package/lib/common/modules/mcp-diagram-module.js.map +1 -0
  42. package/lib/{prompts → common/prompts}/handlers/describe-diagram-mcp-prompt-handler.d.ts +2 -1
  43. package/lib/common/prompts/handlers/describe-diagram-mcp-prompt-handler.d.ts.map +1 -0
  44. package/lib/{prompts → common/prompts}/handlers/describe-diagram-mcp-prompt-handler.js +21 -15
  45. package/lib/common/prompts/handlers/describe-diagram-mcp-prompt-handler.js.map +1 -0
  46. package/lib/{prompts → common/prompts}/handlers/suggest-improvements-mcp-prompt-handler.d.ts +2 -1
  47. package/lib/common/prompts/handlers/suggest-improvements-mcp-prompt-handler.d.ts.map +1 -0
  48. package/lib/{prompts → common/prompts}/handlers/suggest-improvements-mcp-prompt-handler.js +16 -12
  49. package/lib/common/prompts/handlers/suggest-improvements-mcp-prompt-handler.js.map +1 -0
  50. package/lib/{resources → common/resources}/handlers/diagram-png-mcp-resource-handler.d.ts +4 -1
  51. package/lib/common/resources/handlers/diagram-png-mcp-resource-handler.d.ts.map +1 -0
  52. package/lib/{resources → common/resources}/handlers/diagram-png-mcp-resource-handler.js +10 -7
  53. package/lib/common/resources/handlers/diagram-png-mcp-resource-handler.js.map +1 -0
  54. package/lib/{resources → common/resources}/handlers/diagram-svg-mcp-resource-handler.d.ts +4 -1
  55. package/lib/common/resources/handlers/diagram-svg-mcp-resource-handler.d.ts.map +1 -0
  56. package/lib/{resources → common/resources}/handlers/diagram-svg-mcp-resource-handler.js +9 -6
  57. package/lib/common/resources/handlers/diagram-svg-mcp-resource-handler.js.map +1 -0
  58. package/lib/common/resources/services/element-types-provider.d.ts.map +1 -0
  59. package/lib/common/resources/services/element-types-provider.js.map +1 -0
  60. package/lib/common/resources/services/mcp-model-serializer.d.ts.map +1 -0
  61. package/lib/{resources → common/resources}/services/mcp-model-serializer.js +2 -2
  62. package/lib/common/resources/services/mcp-model-serializer.js.map +1 -0
  63. package/lib/common/server/abstract-mcp-server-launcher.d.ts +168 -0
  64. package/lib/common/server/abstract-mcp-server-launcher.d.ts.map +1 -0
  65. package/lib/{server/mcp-server-launcher.js → common/server/abstract-mcp-server-launcher.js} +235 -121
  66. package/lib/common/server/abstract-mcp-server-launcher.js.map +1 -0
  67. package/lib/{server → common/server}/glsp-mcp-server.d.ts +1 -1
  68. package/lib/common/server/glsp-mcp-server.d.ts.map +1 -0
  69. package/lib/{server → common/server}/glsp-mcp-server.js +6 -1
  70. package/lib/common/server/glsp-mcp-server.js.map +1 -0
  71. package/lib/{server → common/server}/lru-event-store.d.ts +1 -1
  72. package/lib/common/server/lru-event-store.d.ts.map +1 -0
  73. package/lib/common/server/lru-event-store.js.map +1 -0
  74. package/lib/{server → common/server}/mcp-diagram-handler-dispatcher.d.ts +3 -1
  75. package/lib/common/server/mcp-diagram-handler-dispatcher.d.ts.map +1 -0
  76. package/lib/{server → common/server}/mcp-diagram-handler-dispatcher.js +12 -6
  77. package/lib/common/server/mcp-diagram-handler-dispatcher.js.map +1 -0
  78. package/lib/common/server/mcp-diagram-prompt-handler-registry.d.ts.map +1 -0
  79. package/lib/common/server/mcp-diagram-prompt-handler-registry.js.map +1 -0
  80. package/lib/common/server/mcp-diagram-resource-handler-registry.d.ts.map +1 -0
  81. package/lib/{server → common/server}/mcp-diagram-resource-handler-registry.js +4 -1
  82. package/lib/common/server/mcp-diagram-resource-handler-registry.js.map +1 -0
  83. package/lib/common/server/mcp-diagram-tool-handler-registry.d.ts.map +1 -0
  84. package/lib/{server → common/server}/mcp-diagram-tool-handler-registry.js +3 -1
  85. package/lib/common/server/mcp-diagram-tool-handler-registry.js.map +1 -0
  86. package/lib/common/server/mcp-handler-shared.d.ts.map +1 -0
  87. package/lib/common/server/mcp-handler-shared.js.map +1 -0
  88. package/lib/common/server/mcp-id-alias-service.d.ts.map +1 -0
  89. package/lib/common/server/mcp-id-alias-service.js.map +1 -0
  90. package/lib/{server → common/server}/mcp-input-schemas.d.ts +8 -0
  91. package/lib/common/server/mcp-input-schemas.d.ts.map +1 -0
  92. package/lib/{server → common/server}/mcp-input-schemas.js +13 -1
  93. package/lib/common/server/mcp-input-schemas.js.map +1 -0
  94. package/lib/common/server/mcp-label-provider.d.ts.map +1 -0
  95. package/lib/common/server/mcp-label-provider.js.map +1 -0
  96. package/lib/{server → common/server}/mcp-log-level-registry.d.ts +1 -1
  97. package/lib/common/server/mcp-log-level-registry.d.ts.map +1 -0
  98. package/lib/common/server/mcp-log-level-registry.js.map +1 -0
  99. package/lib/{server → common/server}/mcp-logger.d.ts +4 -2
  100. package/lib/common/server/mcp-logger.d.ts.map +1 -0
  101. package/lib/{server → common/server}/mcp-logger.js +11 -3
  102. package/lib/common/server/mcp-logger.js.map +1 -0
  103. package/lib/common/server/mcp-mime-types.d.ts.map +1 -0
  104. package/lib/common/server/mcp-mime-types.js.map +1 -0
  105. package/lib/{server → common/server}/mcp-options.d.ts +1 -1
  106. package/lib/common/server/mcp-options.d.ts.map +1 -0
  107. package/lib/{server → common/server}/mcp-options.js +1 -1
  108. package/lib/common/server/mcp-options.js.map +1 -0
  109. package/lib/{server → common/server}/mcp-progress-reporter.d.ts +4 -2
  110. package/lib/common/server/mcp-progress-reporter.d.ts.map +1 -0
  111. package/lib/{server → common/server}/mcp-progress-reporter.js +14 -3
  112. package/lib/common/server/mcp-progress-reporter.js.map +1 -0
  113. package/lib/{server → common/server}/mcp-prompt-handler.d.ts +3 -1
  114. package/lib/common/server/mcp-prompt-handler.d.ts.map +1 -0
  115. package/lib/{server → common/server}/mcp-prompt-handler.js +10 -2
  116. package/lib/common/server/mcp-prompt-handler.js.map +1 -0
  117. package/lib/common/server/mcp-request-context.d.ts +35 -0
  118. package/lib/common/server/mcp-request-context.d.ts.map +1 -0
  119. package/lib/common/server/mcp-request-context.js +30 -0
  120. package/lib/common/server/mcp-request-context.js.map +1 -0
  121. package/lib/{server → common/server}/mcp-resource-handler.d.ts +3 -1
  122. package/lib/common/server/mcp-resource-handler.d.ts.map +1 -0
  123. package/lib/{server → common/server}/mcp-resource-handler.js +13 -5
  124. package/lib/common/server/mcp-resource-handler.js.map +1 -0
  125. package/lib/common/server/mcp-session.d.ts.map +1 -0
  126. package/lib/common/server/mcp-session.js.map +1 -0
  127. package/lib/{server → common/server}/mcp-tool-handler.d.ts +3 -1
  128. package/lib/common/server/mcp-tool-handler.d.ts.map +1 -0
  129. package/lib/{server → common/server}/mcp-tool-handler.js +7 -1
  130. package/lib/{server → common/server}/mcp-tool-handler.js.map +1 -1
  131. package/lib/{tools → common/tools}/handlers/count-elements-mcp-tool-handler.d.ts +2 -1
  132. package/lib/common/tools/handlers/count-elements-mcp-tool-handler.d.ts.map +1 -0
  133. package/lib/{tools → common/tools}/handlers/count-elements-mcp-tool-handler.js +4 -3
  134. package/lib/common/tools/handlers/count-elements-mcp-tool-handler.js.map +1 -0
  135. package/lib/{tools → common/tools}/handlers/create-edges-mcp-tool-handler.d.ts +4 -1
  136. package/lib/common/tools/handlers/create-edges-mcp-tool-handler.d.ts.map +1 -0
  137. package/lib/{tools → common/tools}/handlers/create-edges-mcp-tool-handler.js +9 -7
  138. package/lib/common/tools/handlers/create-edges-mcp-tool-handler.js.map +1 -0
  139. package/lib/{tools → common/tools}/handlers/create-nodes-mcp-tool-handler.d.ts +4 -1
  140. package/lib/common/tools/handlers/create-nodes-mcp-tool-handler.d.ts.map +1 -0
  141. package/lib/{tools → common/tools}/handlers/create-nodes-mcp-tool-handler.js +10 -8
  142. package/lib/common/tools/handlers/create-nodes-mcp-tool-handler.js.map +1 -0
  143. package/lib/{tools → common/tools}/handlers/delete-elements-mcp-tool-handler.d.ts +4 -1
  144. package/lib/common/tools/handlers/delete-elements-mcp-tool-handler.d.ts.map +1 -0
  145. package/lib/{tools → common/tools}/handlers/delete-elements-mcp-tool-handler.js +9 -6
  146. package/lib/common/tools/handlers/delete-elements-mcp-tool-handler.js.map +1 -0
  147. package/lib/{tools → common/tools}/handlers/diagram-model-mcp-tool-handler.d.ts +2 -1
  148. package/lib/common/tools/handlers/diagram-model-mcp-tool-handler.d.ts.map +1 -0
  149. package/lib/{tools → common/tools}/handlers/diagram-model-mcp-tool-handler.js +4 -3
  150. package/lib/common/tools/handlers/diagram-model-mcp-tool-handler.js.map +1 -0
  151. package/lib/{tools → common/tools}/handlers/element-types-mcp-tool-handler.d.ts +2 -1
  152. package/lib/common/tools/handlers/element-types-mcp-tool-handler.d.ts.map +1 -0
  153. package/lib/{tools → common/tools}/handlers/element-types-mcp-tool-handler.js +6 -5
  154. package/lib/common/tools/handlers/element-types-mcp-tool-handler.js.map +1 -0
  155. package/lib/{tools → common/tools}/handlers/get-selection-mcp-tool-handler.d.ts +2 -1
  156. package/lib/common/tools/handlers/get-selection-mcp-tool-handler.d.ts.map +1 -0
  157. package/lib/{tools → common/tools}/handlers/get-selection-mcp-tool-handler.js +6 -4
  158. package/lib/common/tools/handlers/get-selection-mcp-tool-handler.js.map +1 -0
  159. package/lib/{tools → common/tools}/handlers/layout-mcp-tool-handler.d.ts +4 -1
  160. package/lib/common/tools/handlers/layout-mcp-tool-handler.d.ts.map +1 -0
  161. package/lib/{tools → common/tools}/handlers/layout-mcp-tool-handler.js +7 -5
  162. package/lib/common/tools/handlers/layout-mcp-tool-handler.js.map +1 -0
  163. package/lib/{tools → common/tools}/handlers/modify-edges-mcp-tool-handler.d.ts +2 -1
  164. package/lib/common/tools/handlers/modify-edges-mcp-tool-handler.d.ts.map +1 -0
  165. package/lib/{tools → common/tools}/handlers/modify-edges-mcp-tool-handler.js +12 -10
  166. package/lib/common/tools/handlers/modify-edges-mcp-tool-handler.js.map +1 -0
  167. package/lib/{tools → common/tools}/handlers/modify-nodes-mcp-tool-handler.d.ts +2 -1
  168. package/lib/common/tools/handlers/modify-nodes-mcp-tool-handler.d.ts.map +1 -0
  169. package/lib/{tools → common/tools}/handlers/modify-nodes-mcp-tool-handler.js +13 -11
  170. package/lib/common/tools/handlers/modify-nodes-mcp-tool-handler.js.map +1 -0
  171. package/lib/{tools → common/tools}/handlers/query-elements-mcp-tool-handler.d.ts +2 -1
  172. package/lib/common/tools/handlers/query-elements-mcp-tool-handler.d.ts.map +1 -0
  173. package/lib/{tools → common/tools}/handlers/query-elements-mcp-tool-handler.js +7 -5
  174. package/lib/common/tools/handlers/query-elements-mcp-tool-handler.js.map +1 -0
  175. package/lib/{tools → common/tools}/handlers/redo-mcp-tool-handler.d.ts +2 -1
  176. package/lib/common/tools/handlers/redo-mcp-tool-handler.d.ts.map +1 -0
  177. package/lib/{tools → common/tools}/handlers/redo-mcp-tool-handler.js +6 -4
  178. package/lib/common/tools/handlers/redo-mcp-tool-handler.js.map +1 -0
  179. package/lib/{tools → common/tools}/handlers/save-model-mcp-tool-handler.d.ts +3 -1
  180. package/lib/common/tools/handlers/save-model-mcp-tool-handler.d.ts.map +1 -0
  181. package/lib/{tools → common/tools}/handlers/save-model-mcp-tool-handler.js +7 -5
  182. package/lib/common/tools/handlers/save-model-mcp-tool-handler.js.map +1 -0
  183. package/lib/{tools → common/tools}/handlers/session-info-mcp-tool-handler.d.ts +2 -1
  184. package/lib/common/tools/handlers/session-info-mcp-tool-handler.d.ts.map +1 -0
  185. package/lib/{tools → common/tools}/handlers/session-info-mcp-tool-handler.js +4 -3
  186. package/lib/common/tools/handlers/session-info-mcp-tool-handler.js.map +1 -0
  187. package/lib/{tools → common/tools}/handlers/set-selection-mcp-tool-handler.d.ts +2 -1
  188. package/lib/common/tools/handlers/set-selection-mcp-tool-handler.d.ts.map +1 -0
  189. package/lib/{tools → common/tools}/handlers/set-selection-mcp-tool-handler.js +6 -5
  190. package/lib/common/tools/handlers/set-selection-mcp-tool-handler.js.map +1 -0
  191. package/lib/{tools → common/tools}/handlers/set-view-mcp-tool-handler.d.ts +2 -1
  192. package/lib/common/tools/handlers/set-view-mcp-tool-handler.d.ts.map +1 -0
  193. package/lib/{tools → common/tools}/handlers/set-view-mcp-tool-handler.js +10 -8
  194. package/lib/common/tools/handlers/set-view-mcp-tool-handler.js.map +1 -0
  195. package/lib/{tools → common/tools}/handlers/undo-mcp-tool-handler.d.ts +2 -1
  196. package/lib/common/tools/handlers/undo-mcp-tool-handler.d.ts.map +1 -0
  197. package/lib/{tools → common/tools}/handlers/undo-mcp-tool-handler.js +6 -4
  198. package/lib/common/tools/handlers/undo-mcp-tool-handler.js.map +1 -0
  199. package/lib/{tools → common/tools}/handlers/validate-diagram-mcp-tool-handler.d.ts +2 -1
  200. package/lib/common/tools/handlers/validate-diagram-mcp-tool-handler.d.ts.map +1 -0
  201. package/lib/{tools → common/tools}/handlers/validate-diagram-mcp-tool-handler.js +0 -0
  202. package/lib/common/tools/handlers/validate-diagram-mcp-tool-handler.js.map +1 -0
  203. package/lib/common/util/markdown-util.d.ts.map +1 -0
  204. package/lib/common/util/markdown-util.js.map +1 -0
  205. package/lib/common/util/mcp-util.d.ts.map +1 -0
  206. package/lib/common/util/mcp-util.js.map +1 -0
  207. package/lib/{prompts → node}/index.d.ts +4 -2
  208. package/lib/node/index.d.ts.map +1 -0
  209. package/lib/{resources → node}/index.js +4 -4
  210. package/lib/node/index.js.map +1 -0
  211. package/lib/node/modules/node-mcp-server-module.d.ts +37 -0
  212. package/lib/node/modules/node-mcp-server-module.d.ts.map +1 -0
  213. package/lib/node/modules/node-mcp-server-module.js +52 -0
  214. package/lib/node/modules/node-mcp-server-module.js.map +1 -0
  215. package/lib/node/reexport.d.ts +17 -0
  216. package/lib/node/reexport.d.ts.map +1 -0
  217. package/lib/{prompts/index.js → node/reexport.js} +17 -18
  218. package/lib/node/reexport.js.map +1 -0
  219. package/lib/node/server/node-mcp-request-context.d.ts +24 -0
  220. package/lib/node/server/node-mcp-request-context.d.ts.map +1 -0
  221. package/lib/node/server/node-mcp-request-context.js +43 -0
  222. package/lib/node/server/node-mcp-request-context.js.map +1 -0
  223. package/lib/node/server/node-mcp-server-launcher.d.ts +55 -0
  224. package/lib/node/server/node-mcp-server-launcher.d.ts.map +1 -0
  225. package/lib/node/server/node-mcp-server-launcher.js +123 -0
  226. package/lib/node/server/node-mcp-server-launcher.js.map +1 -0
  227. package/node.d.ts +16 -0
  228. package/{src/util/index.ts → node.js} +2 -2
  229. package/package.json +19 -13
  230. package/src/{resources → browser}/index.ts +5 -4
  231. package/src/browser/modules/browser-mcp-server-module.ts +54 -0
  232. package/src/browser/reexport.ts +16 -0
  233. package/src/browser/server/browser-mcp-request-context.ts +59 -0
  234. package/src/browser/server/mcp-worker-bridge.ts +200 -0
  235. package/src/browser/server/web-mcp-server-launcher.ts +39 -0
  236. package/src/common/index.ts +65 -0
  237. package/src/{server/mcp-server-module.ts → common/modules/abstract-mcp-server-module.ts} +65 -77
  238. package/src/{server → common/modules}/mcp-diagram-module.ts +27 -28
  239. package/src/{prompts → common/prompts}/handlers/describe-diagram-mcp-prompt-handler.ts +8 -9
  240. package/src/{prompts → common/prompts}/handlers/suggest-improvements-mcp-prompt-handler.ts +6 -7
  241. package/src/{resources → common/resources}/handlers/diagram-png-mcp-resource-handler.ts +5 -9
  242. package/src/{resources → common/resources}/handlers/diagram-svg-mcp-resource-handler.ts +5 -9
  243. package/src/{resources → common/resources}/services/mcp-model-serializer.ts +1 -1
  244. package/src/common/server/abstract-mcp-server-launcher.spec.ts +458 -0
  245. package/src/common/server/abstract-mcp-server-launcher.ts +524 -0
  246. package/src/{server → common/server}/glsp-mcp-server.ts +7 -2
  247. package/src/{server → common/server}/lru-event-store.ts +1 -1
  248. package/src/{server → common/server}/mcp-diagram-handler-dispatcher.ts +13 -9
  249. package/src/{server → common/server}/mcp-diagram-resource-handler-registry.ts +4 -1
  250. package/src/{server → common/server}/mcp-diagram-tool-handler-registry.ts +3 -1
  251. package/src/{server → common/server}/mcp-input-schemas.ts +13 -0
  252. package/src/{server → common/server}/mcp-log-level-registry.ts +1 -1
  253. package/src/{server → common/server}/mcp-logger.spec.ts +26 -18
  254. package/src/{server → common/server}/mcp-logger.ts +9 -5
  255. package/src/{server → common/server}/mcp-options.ts +1 -1
  256. package/src/{server → common/server}/mcp-progress-reporter.spec.ts +19 -9
  257. package/src/{server → common/server}/mcp-progress-reporter.ts +9 -5
  258. package/src/{server → common/server}/mcp-prompt-handler.ts +8 -4
  259. package/src/{server → common/server}/mcp-request-context.ts +20 -16
  260. package/src/{server → common/server}/mcp-resource-handler.ts +11 -7
  261. package/src/{server → common/server}/mcp-tool-handler.spec.ts +4 -4
  262. package/src/{server → common/server}/mcp-tool-handler.ts +8 -4
  263. package/src/{tools → common/tools}/handlers/count-elements-mcp-tool-handler.spec.ts +3 -1
  264. package/src/{tools → common/tools}/handlers/count-elements-mcp-tool-handler.ts +3 -1
  265. package/src/{tools → common/tools}/handlers/create-edges-mcp-tool-handler.spec.ts +3 -1
  266. package/src/{tools → common/tools}/handlers/create-edges-mcp-tool-handler.ts +7 -5
  267. package/src/{tools → common/tools}/handlers/create-nodes-mcp-tool-handler.spec.ts +3 -1
  268. package/src/{tools → common/tools}/handlers/create-nodes-mcp-tool-handler.ts +7 -5
  269. package/src/{tools → common/tools}/handlers/delete-elements-mcp-tool-handler.ts +7 -9
  270. package/src/{tools → common/tools}/handlers/diagram-model-mcp-tool-handler.ts +3 -1
  271. package/src/{tools → common/tools}/handlers/element-types-mcp-tool-handler.ts +2 -1
  272. package/src/{tools → common/tools}/handlers/get-selection-mcp-tool-handler.ts +3 -1
  273. package/src/{tools → common/tools}/handlers/layout-mcp-tool-handler.ts +6 -3
  274. package/src/{tools → common/tools}/handlers/modify-edges-mcp-tool-handler.ts +6 -6
  275. package/src/{tools → common/tools}/handlers/modify-nodes-mcp-tool-handler.ts +6 -6
  276. package/src/{tools → common/tools}/handlers/query-elements-mcp-tool-handler.spec.ts +3 -1
  277. package/src/{tools → common/tools}/handlers/query-elements-mcp-tool-handler.ts +3 -7
  278. package/src/{tools → common/tools}/handlers/redo-mcp-tool-handler.ts +3 -1
  279. package/src/{tools → common/tools}/handlers/save-model-mcp-tool-handler.ts +4 -1
  280. package/src/{tools → common/tools}/handlers/session-info-mcp-tool-handler.spec.ts +1 -1
  281. package/src/{tools → common/tools}/handlers/session-info-mcp-tool-handler.ts +2 -1
  282. package/src/{tools → common/tools}/handlers/set-selection-mcp-tool-handler.spec.ts +3 -1
  283. package/src/{tools → common/tools}/handlers/set-selection-mcp-tool-handler.ts +3 -1
  284. package/src/{tools → common/tools}/handlers/set-view-mcp-tool-handler.ts +3 -9
  285. package/src/{tools → common/tools}/handlers/undo-mcp-tool-handler.ts +3 -1
  286. package/src/{tools → common/tools}/handlers/validate-diagram-mcp-tool-handler.ts +0 -0
  287. package/src/{prompts → node}/index.ts +4 -2
  288. package/src/node/modules/node-mcp-server-module.ts +56 -0
  289. package/src/node/reexport.ts +16 -0
  290. package/src/node/server/mcp-http-transport-e2e.spec.ts +297 -0
  291. package/src/node/server/node-mcp-request-context.ts +33 -0
  292. package/src/{server/mcp-server-launcher.spec.ts → node/server/node-mcp-server-launcher.spec.ts} +19 -8
  293. package/src/node/server/node-mcp-server-launcher.ts +130 -0
  294. package/lib/index.d.ts +0 -23
  295. package/lib/index.d.ts.map +0 -1
  296. package/lib/index.js.map +0 -1
  297. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.d.ts.map +0 -1
  298. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.js.map +0 -1
  299. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.d.ts.map +0 -1
  300. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.js.map +0 -1
  301. package/lib/prompts/index.d.ts.map +0 -1
  302. package/lib/prompts/index.js.map +0 -1
  303. package/lib/resources/handlers/diagram-png-mcp-resource-handler.d.ts.map +0 -1
  304. package/lib/resources/handlers/diagram-png-mcp-resource-handler.js.map +0 -1
  305. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.d.ts.map +0 -1
  306. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.js.map +0 -1
  307. package/lib/resources/index.d.ts.map +0 -1
  308. package/lib/resources/index.js.map +0 -1
  309. package/lib/resources/services/element-types-provider.d.ts.map +0 -1
  310. package/lib/resources/services/element-types-provider.js.map +0 -1
  311. package/lib/resources/services/mcp-model-serializer.d.ts.map +0 -1
  312. package/lib/resources/services/mcp-model-serializer.js.map +0 -1
  313. package/lib/server/glsp-mcp-server.d.ts.map +0 -1
  314. package/lib/server/glsp-mcp-server.js.map +0 -1
  315. package/lib/server/index.d.ts +0 -37
  316. package/lib/server/index.d.ts.map +0 -1
  317. package/lib/server/index.js +0 -57
  318. package/lib/server/index.js.map +0 -1
  319. package/lib/server/lru-event-store.d.ts.map +0 -1
  320. package/lib/server/lru-event-store.js.map +0 -1
  321. package/lib/server/mcp-diagram-handler-dispatcher.d.ts.map +0 -1
  322. package/lib/server/mcp-diagram-handler-dispatcher.js.map +0 -1
  323. package/lib/server/mcp-diagram-module.d.ts.map +0 -1
  324. package/lib/server/mcp-diagram-module.js.map +0 -1
  325. package/lib/server/mcp-diagram-prompt-handler-registry.d.ts.map +0 -1
  326. package/lib/server/mcp-diagram-prompt-handler-registry.js.map +0 -1
  327. package/lib/server/mcp-diagram-resource-handler-registry.d.ts.map +0 -1
  328. package/lib/server/mcp-diagram-resource-handler-registry.js.map +0 -1
  329. package/lib/server/mcp-diagram-tool-handler-registry.d.ts.map +0 -1
  330. package/lib/server/mcp-diagram-tool-handler-registry.js.map +0 -1
  331. package/lib/server/mcp-handler-shared.d.ts.map +0 -1
  332. package/lib/server/mcp-handler-shared.js.map +0 -1
  333. package/lib/server/mcp-http-transport.d.ts +0 -93
  334. package/lib/server/mcp-http-transport.d.ts.map +0 -1
  335. package/lib/server/mcp-http-transport.js +0 -350
  336. package/lib/server/mcp-http-transport.js.map +0 -1
  337. package/lib/server/mcp-id-alias-service.d.ts.map +0 -1
  338. package/lib/server/mcp-id-alias-service.js.map +0 -1
  339. package/lib/server/mcp-input-schemas.d.ts.map +0 -1
  340. package/lib/server/mcp-input-schemas.js.map +0 -1
  341. package/lib/server/mcp-label-provider.d.ts.map +0 -1
  342. package/lib/server/mcp-label-provider.js.map +0 -1
  343. package/lib/server/mcp-log-level-registry.d.ts.map +0 -1
  344. package/lib/server/mcp-log-level-registry.js.map +0 -1
  345. package/lib/server/mcp-logger.d.ts.map +0 -1
  346. package/lib/server/mcp-logger.js.map +0 -1
  347. package/lib/server/mcp-mime-types.d.ts.map +0 -1
  348. package/lib/server/mcp-mime-types.js.map +0 -1
  349. package/lib/server/mcp-options.d.ts.map +0 -1
  350. package/lib/server/mcp-options.js.map +0 -1
  351. package/lib/server/mcp-progress-reporter.d.ts.map +0 -1
  352. package/lib/server/mcp-progress-reporter.js.map +0 -1
  353. package/lib/server/mcp-prompt-handler.d.ts.map +0 -1
  354. package/lib/server/mcp-prompt-handler.js.map +0 -1
  355. package/lib/server/mcp-request-context.d.ts +0 -37
  356. package/lib/server/mcp-request-context.d.ts.map +0 -1
  357. package/lib/server/mcp-request-context.js +0 -37
  358. package/lib/server/mcp-request-context.js.map +0 -1
  359. package/lib/server/mcp-resource-handler.d.ts.map +0 -1
  360. package/lib/server/mcp-resource-handler.js.map +0 -1
  361. package/lib/server/mcp-server-launcher.d.ts +0 -143
  362. package/lib/server/mcp-server-launcher.d.ts.map +0 -1
  363. package/lib/server/mcp-server-launcher.js.map +0 -1
  364. package/lib/server/mcp-server-module.d.ts.map +0 -1
  365. package/lib/server/mcp-server-module.js.map +0 -1
  366. package/lib/server/mcp-session.d.ts.map +0 -1
  367. package/lib/server/mcp-session.js.map +0 -1
  368. package/lib/server/mcp-tool-handler.d.ts.map +0 -1
  369. package/lib/tools/handlers/count-elements-mcp-tool-handler.d.ts.map +0 -1
  370. package/lib/tools/handlers/count-elements-mcp-tool-handler.js.map +0 -1
  371. package/lib/tools/handlers/create-edges-mcp-tool-handler.d.ts.map +0 -1
  372. package/lib/tools/handlers/create-edges-mcp-tool-handler.js.map +0 -1
  373. package/lib/tools/handlers/create-nodes-mcp-tool-handler.d.ts.map +0 -1
  374. package/lib/tools/handlers/create-nodes-mcp-tool-handler.js.map +0 -1
  375. package/lib/tools/handlers/delete-elements-mcp-tool-handler.d.ts.map +0 -1
  376. package/lib/tools/handlers/delete-elements-mcp-tool-handler.js.map +0 -1
  377. package/lib/tools/handlers/diagram-model-mcp-tool-handler.d.ts.map +0 -1
  378. package/lib/tools/handlers/diagram-model-mcp-tool-handler.js.map +0 -1
  379. package/lib/tools/handlers/element-types-mcp-tool-handler.d.ts.map +0 -1
  380. package/lib/tools/handlers/element-types-mcp-tool-handler.js.map +0 -1
  381. package/lib/tools/handlers/get-selection-mcp-tool-handler.d.ts.map +0 -1
  382. package/lib/tools/handlers/get-selection-mcp-tool-handler.js.map +0 -1
  383. package/lib/tools/handlers/layout-mcp-tool-handler.d.ts.map +0 -1
  384. package/lib/tools/handlers/layout-mcp-tool-handler.js.map +0 -1
  385. package/lib/tools/handlers/modify-edges-mcp-tool-handler.d.ts.map +0 -1
  386. package/lib/tools/handlers/modify-edges-mcp-tool-handler.js.map +0 -1
  387. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.d.ts.map +0 -1
  388. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.js.map +0 -1
  389. package/lib/tools/handlers/query-elements-mcp-tool-handler.d.ts.map +0 -1
  390. package/lib/tools/handlers/query-elements-mcp-tool-handler.js.map +0 -1
  391. package/lib/tools/handlers/redo-mcp-tool-handler.d.ts.map +0 -1
  392. package/lib/tools/handlers/redo-mcp-tool-handler.js.map +0 -1
  393. package/lib/tools/handlers/save-model-mcp-tool-handler.d.ts.map +0 -1
  394. package/lib/tools/handlers/save-model-mcp-tool-handler.js.map +0 -1
  395. package/lib/tools/handlers/session-info-mcp-tool-handler.d.ts.map +0 -1
  396. package/lib/tools/handlers/session-info-mcp-tool-handler.js.map +0 -1
  397. package/lib/tools/handlers/set-selection-mcp-tool-handler.d.ts.map +0 -1
  398. package/lib/tools/handlers/set-selection-mcp-tool-handler.js.map +0 -1
  399. package/lib/tools/handlers/set-view-mcp-tool-handler.d.ts.map +0 -1
  400. package/lib/tools/handlers/set-view-mcp-tool-handler.js.map +0 -1
  401. package/lib/tools/handlers/undo-mcp-tool-handler.d.ts.map +0 -1
  402. package/lib/tools/handlers/undo-mcp-tool-handler.js.map +0 -1
  403. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.d.ts.map +0 -1
  404. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.js.map +0 -1
  405. package/lib/tools/index.d.ts +0 -34
  406. package/lib/tools/index.d.ts.map +0 -1
  407. package/lib/tools/index.js +0 -50
  408. package/lib/tools/index.js.map +0 -1
  409. package/lib/util/index.d.ts.map +0 -1
  410. package/lib/util/index.js.map +0 -1
  411. package/lib/util/markdown-util.d.ts.map +0 -1
  412. package/lib/util/markdown-util.js.map +0 -1
  413. package/lib/util/mcp-util.d.ts.map +0 -1
  414. package/lib/util/mcp-util.js.map +0 -1
  415. package/src/index.ts +0 -24
  416. package/src/server/index.ts +0 -42
  417. package/src/server/mcp-http-transport-e2e.spec.ts +0 -151
  418. package/src/server/mcp-http-transport.spec.ts +0 -385
  419. package/src/server/mcp-http-transport.ts +0 -368
  420. package/src/server/mcp-server-launcher.ts +0 -369
  421. package/src/tools/index.ts +0 -34
  422. /package/lib/{resources → common/resources}/services/element-types-provider.d.ts +0 -0
  423. /package/lib/{resources → common/resources}/services/element-types-provider.js +0 -0
  424. /package/lib/{resources → common/resources}/services/mcp-model-serializer.d.ts +0 -0
  425. /package/lib/{server → common/server}/lru-event-store.js +0 -0
  426. /package/lib/{server → common/server}/mcp-diagram-prompt-handler-registry.d.ts +0 -0
  427. /package/lib/{server → common/server}/mcp-diagram-prompt-handler-registry.js +0 -0
  428. /package/lib/{server → common/server}/mcp-diagram-resource-handler-registry.d.ts +0 -0
  429. /package/lib/{server → common/server}/mcp-diagram-tool-handler-registry.d.ts +0 -0
  430. /package/lib/{server → common/server}/mcp-handler-shared.d.ts +0 -0
  431. /package/lib/{server → common/server}/mcp-handler-shared.js +0 -0
  432. /package/lib/{server → common/server}/mcp-id-alias-service.d.ts +0 -0
  433. /package/lib/{server → common/server}/mcp-id-alias-service.js +0 -0
  434. /package/lib/{server → common/server}/mcp-label-provider.d.ts +0 -0
  435. /package/lib/{server → common/server}/mcp-label-provider.js +0 -0
  436. /package/lib/{server → common/server}/mcp-log-level-registry.js +0 -0
  437. /package/lib/{server → common/server}/mcp-mime-types.d.ts +0 -0
  438. /package/lib/{server → common/server}/mcp-mime-types.js +0 -0
  439. /package/lib/{server → common/server}/mcp-session.d.ts +0 -0
  440. /package/lib/{server → common/server}/mcp-session.js +0 -0
  441. /package/lib/{util → common/util}/markdown-util.d.ts +0 -0
  442. /package/lib/{util → common/util}/markdown-util.js +0 -0
  443. /package/lib/{util → common/util}/mcp-util.d.ts +0 -0
  444. /package/lib/{util → common/util}/mcp-util.js +0 -0
  445. /package/src/{resources → common/resources}/services/element-types-provider.ts +0 -0
  446. /package/src/{server → common/server}/glsp-mcp-server.spec.ts +0 -0
  447. /package/src/{server → common/server}/lru-event-store.spec.ts +0 -0
  448. /package/src/{server → common/server}/mcp-diagram-handler-dispatcher.spec.ts +0 -0
  449. /package/src/{server → common/server}/mcp-diagram-prompt-handler-registry.ts +0 -0
  450. /package/src/{server → common/server}/mcp-handler-shared.spec.ts +0 -0
  451. /package/src/{server → common/server}/mcp-handler-shared.ts +0 -0
  452. /package/src/{server → common/server}/mcp-id-alias-service.spec.ts +0 -0
  453. /package/src/{server → common/server}/mcp-id-alias-service.ts +0 -0
  454. /package/src/{server → common/server}/mcp-label-provider.ts +0 -0
  455. /package/src/{server → common/server}/mcp-log-level-registry.spec.ts +0 -0
  456. /package/src/{server → common/server}/mcp-mime-types.ts +0 -0
  457. /package/src/{server → common/server}/mcp-session.ts +0 -0
  458. /package/src/{tools → common/tools}/tool-annotations.spec.ts +0 -0
  459. /package/src/{util → common/util}/markdown-util.ts +0 -0
  460. /package/src/{util → common/util}/mcp-util.ts +0 -0
  461. /package/src/{server → node/server}/raw-http.spec.ts +0 -0
@@ -73,6 +73,19 @@ export const ElementIdentitySchema = z.object({
73
73
  /** Inferred shape of {@link ElementIdentitySchema} — see its docstring for usage. */
74
74
  export type ElementIdentity = z.infer<typeof ElementIdentitySchema>;
75
75
 
76
+ /**
77
+ * Shared output field for mutating tools — the number of underlying GLSP operations a single
78
+ * call dispatched. Adopters chain `undo` / `redo` against this count to roll back or replay a
79
+ * full user action (a single MCP call may produce several commands, e.g. create-with-label).
80
+ * Always non-negative; `0` when nothing was dispatched (e.g. all inputs hit a pre-dispatch
81
+ * validation error).
82
+ */
83
+ export const dispatchedCommands = z
84
+ .number()
85
+ .int()
86
+ .nonnegative()
87
+ .describe('Number of underlying GLSP operations dispatched. Useful when chaining `undo` / `redo`.');
88
+
76
89
  /**
77
90
  * Inferred shape of {@link McpDiagramScopedInputSchema} — `{ sessionId: string }`. Any
78
91
  * adopter input schema that extends `McpDiagramScopedInputSchema` infers a type structurally
@@ -21,7 +21,7 @@ export const McpLogLevelRegistry = Symbol('McpLogLevelRegistry');
21
21
 
22
22
  /**
23
23
  * Per-MCP-session minimum-severity threshold for `notifications/message`. Updated by the
24
- * server's `logging/setLevel` request handler (registered in {@link McpServerLauncher} on
24
+ * server's `logging/setLevel` request handler (registered in {@link AbstractMcpServerLauncher} on
25
25
  * session-init); read by {@link McpLogger} to gate message delivery.
26
26
  *
27
27
  * Bound as a server-scope singleton: one registry shared across MCP sessions, keyed by
@@ -20,7 +20,8 @@ import { expect } from 'chai';
20
20
  import { Container, ContainerModule } from 'inversify';
21
21
  import { DefaultMcpLogLevelRegistry, McpLogLevelRegistry } from './mcp-log-level-registry';
22
22
  import { McpLogger } from './mcp-logger';
23
- import { McpRequestExtra, mcpRequestContext } from './mcp-request-context';
23
+ import { NodeMcpRequestContext } from '../../node/server/node-mcp-request-context';
24
+ import { McpRequestContext, McpRequestExtra } from './mcp-request-context';
24
25
 
25
26
  interface RecordedLog {
26
27
  level: string;
@@ -43,18 +44,25 @@ class RecordingLogger extends NullLogger {
43
44
  }
44
45
  }
45
46
 
46
- function buildLogger(): { logger: McpLogger; glspLogger: RecordingLogger; levelRegistry: DefaultMcpLogLevelRegistry } {
47
+ function buildLogger(): {
48
+ logger: McpLogger;
49
+ glspLogger: RecordingLogger;
50
+ levelRegistry: DefaultMcpLogLevelRegistry;
51
+ requestContext: McpRequestContext;
52
+ } {
47
53
  const container = new Container();
48
54
  const glspLogger = new RecordingLogger();
49
55
  const levelRegistry = new DefaultMcpLogLevelRegistry();
56
+ const requestContext = new NodeMcpRequestContext();
50
57
  container.load(
51
58
  new ContainerModule(bind => {
52
59
  bind(Logger).toConstantValue(glspLogger);
53
60
  bind(McpLogLevelRegistry).toConstantValue(levelRegistry);
61
+ bind(McpRequestContext).toConstantValue(requestContext);
54
62
  bind(McpLogger).toSelf().inSingletonScope();
55
63
  })
56
64
  );
57
- return { logger: container.get(McpLogger), glspLogger, levelRegistry };
65
+ return { logger: container.get(McpLogger), glspLogger, levelRegistry, requestContext };
58
66
  }
59
67
 
60
68
  /**
@@ -92,12 +100,12 @@ describe('McpLogger', () => {
92
100
  });
93
101
  });
94
102
 
95
- describe('inside an mcpRequestContext.run frame', () => {
103
+ describe('inside an requestContext.run frame', () => {
96
104
  it('emits notifications/message to the bound MCP client AND the GLSP Logger', async () => {
97
- const { logger, glspLogger } = buildLogger();
105
+ const { logger, glspLogger, requestContext } = buildLogger();
98
106
  const { extra, sent } = buildExtra();
99
107
 
100
- await mcpRequestContext.run(extra, async () => {
108
+ await requestContext.run(extra, async () => {
101
109
  logger.info('one');
102
110
  logger.warn('two');
103
111
  logger.error('three');
@@ -122,14 +130,14 @@ describe('McpLogger', () => {
122
130
  });
123
131
 
124
132
  it('swallows transport failures so a broken MCP send never breaks the producing tool', async () => {
125
- const { logger, glspLogger } = buildLogger();
133
+ const { logger, glspLogger, requestContext } = buildLogger();
126
134
  const failingExtra = {
127
135
  sendNotification: async () => {
128
136
  throw new Error('transport closed');
129
137
  }
130
138
  } as unknown as McpRequestExtra;
131
139
 
132
- await mcpRequestContext.run(failingExtra, async () => {
140
+ await requestContext.run(failingExtra, async () => {
133
141
  expect(() => logger.error('still works')).to.not.throw();
134
142
  await new Promise(resolve => setImmediate(resolve));
135
143
  });
@@ -141,17 +149,17 @@ describe('McpLogger', () => {
141
149
 
142
150
  describe('concurrent request contexts', () => {
143
151
  it('keeps each request frame isolated via AsyncLocalStorage', async () => {
144
- const { logger } = buildLogger();
152
+ const { logger, requestContext } = buildLogger();
145
153
  const { extra: extraA, sent: sentA } = buildExtra();
146
154
  const { extra: extraB, sent: sentB } = buildExtra();
147
155
 
148
156
  await Promise.all([
149
- mcpRequestContext.run(extraA, async () => {
157
+ requestContext.run(extraA, async () => {
150
158
  logger.info('A');
151
159
  await new Promise(resolve => setImmediate(resolve));
152
160
  logger.info('A-after-yield');
153
161
  }),
154
- mcpRequestContext.run(extraB, async () => {
162
+ requestContext.run(extraB, async () => {
155
163
  logger.info('B');
156
164
  await new Promise(resolve => setImmediate(resolve));
157
165
  logger.info('B-after-yield');
@@ -165,12 +173,12 @@ describe('McpLogger', () => {
165
173
 
166
174
  describe('logging/setLevel threshold gate (G4)', () => {
167
175
  it('drops messages below the per-session threshold; the GLSP-side log still fires', async () => {
168
- const { logger, glspLogger, levelRegistry } = buildLogger();
176
+ const { logger, glspLogger, levelRegistry, requestContext } = buildLogger();
169
177
  const { extra, sent } = buildExtra('session-X');
170
178
  // Client opted down to "warning" — info and debug must be dropped on the MCP side.
171
179
  levelRegistry.setLevel('session-X', 'warning');
172
180
 
173
- await mcpRequestContext.run(extra, async () => {
181
+ await requestContext.run(extra, async () => {
174
182
  logger.info('chatty');
175
183
  logger.debug('verbose');
176
184
  logger.warn('important');
@@ -185,19 +193,19 @@ describe('McpLogger', () => {
185
193
  });
186
194
 
187
195
  it('isolates thresholds across sessions (different setLevel per session id)', async () => {
188
- const { logger, levelRegistry } = buildLogger();
196
+ const { logger, levelRegistry, requestContext } = buildLogger();
189
197
  const { extra: extraA, sent: sentA } = buildExtra('session-A');
190
198
  const { extra: extraB, sent: sentB } = buildExtra('session-B');
191
199
  levelRegistry.setLevel('session-A', 'error');
192
200
  levelRegistry.setLevel('session-B', 'debug');
193
201
 
194
202
  await Promise.all([
195
- mcpRequestContext.run(extraA, async () => {
203
+ requestContext.run(extraA, async () => {
196
204
  logger.info('A-info');
197
205
  logger.error('A-error');
198
206
  await new Promise(resolve => setImmediate(resolve));
199
207
  }),
200
- mcpRequestContext.run(extraB, async () => {
208
+ requestContext.run(extraB, async () => {
201
209
  logger.info('B-info');
202
210
  logger.error('B-error');
203
211
  await new Promise(resolve => setImmediate(resolve));
@@ -209,11 +217,11 @@ describe('McpLogger', () => {
209
217
  });
210
218
 
211
219
  it('default threshold (no setLevel sent) lets every level through (preserves prior behavior)', async () => {
212
- const { logger } = buildLogger();
220
+ const { logger, requestContext } = buildLogger();
213
221
  const { extra, sent } = buildExtra('session-default');
214
222
  // No setLevel call → default threshold = 'debug' → everything emitted.
215
223
 
216
- await mcpRequestContext.run(extra, async () => {
224
+ await requestContext.run(extra, async () => {
217
225
  logger.debug('d');
218
226
  logger.info('i');
219
227
  logger.warn('w');
@@ -16,16 +16,16 @@
16
16
 
17
17
  import { Logger } from '@eclipse-glsp/server';
18
18
  import type { LoggingLevel } from '@modelcontextprotocol/sdk/types.js';
19
- import { inject, injectable } from 'inversify';
19
+ import { inject, injectable, optional } from 'inversify';
20
20
  import { McpLogLevelRegistry, passesLogThreshold } from './mcp-log-level-registry';
21
- import { mcpRequestContext } from './mcp-request-context';
21
+ import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
22
22
 
23
23
  /**
24
24
  * Logger that writes to BOTH the GLSP-side server log and the connected MCP client.
25
25
  *
26
26
  * Mirrors the {@link Logger} shape so handlers can drop-in switch from `@inject(Logger)` to
27
27
  * `@inject(McpLogger)`. The server-side route always fires; the MCP-side route fires only when
28
- * a call is made from inside an MCP request callback (tracked via {@link mcpRequestContext}).
28
+ * a call is made from inside an MCP request callback (tracked via {@link McpRequestContext}).
29
29
  *
30
30
  * We deliberately do NOT auto-forward arbitrary GLSP `Logger.info` calls to MCP clients —
31
31
  * that would leak unrelated server-wide log lines into every connected LLM. Adopters opt in
@@ -38,13 +38,17 @@ import { mcpRequestContext } from './mcp-request-context';
38
38
  * - `debug` → `debug`
39
39
  *
40
40
  * Shared across MCP clients on the same GLSP session; per-client routing is handled by the
41
- * active `mcpRequestContext` frame, and the per-MCP-session `logging/setLevel` threshold is
41
+ * active `McpRequestContext` frame, and the per-MCP-session `logging/setLevel` threshold is
42
42
  * stored in {@link McpLogLevelRegistry}.
43
43
  *
44
44
  * @experimental
45
45
  */
46
46
  @injectable()
47
47
  export class McpLogger {
48
+ @inject(McpRequestContext)
49
+ @optional()
50
+ protected requestContext: McpRequestContext = new NoopMcpRequestContext();
51
+
48
52
  @inject(Logger) protected glspLogger: Logger;
49
53
 
50
54
  @inject(McpLogLevelRegistry) protected levelRegistry: McpLogLevelRegistry;
@@ -78,7 +82,7 @@ export class McpLogger {
78
82
  * Failures to deliver are swallowed — a broken transport must not break the producing tool.
79
83
  */
80
84
  protected notify(level: LoggingLevel, data: string): void {
81
- const extra = mcpRequestContext.getStore();
85
+ const extra = this.requestContext.getStore();
82
86
  if (!extra) {
83
87
  return;
84
88
  }
@@ -37,7 +37,7 @@ export class McpServerOptions {
37
37
  /**
38
38
  * DI binding identifier for adopter-provided default options. Supplied via the
39
39
  * {@link AbstractMcpServerModule} constructor and merged with init-time options by
40
- * `McpServerLauncher.initializeServer` — init-time wins per field.
40
+ * `AbstractMcpServerLauncher.initializeServer` — init-time wins per field.
41
41
  */
42
42
  export const McpServerDefaults = Symbol('McpServerDefaults');
43
43
  export type McpServerDefaults = McpServerOptionsType;
@@ -17,7 +17,9 @@
17
17
  import { ServerNotification } from '@modelcontextprotocol/sdk/types.js';
18
18
  import { expect } from 'chai';
19
19
  import { McpProgressReporter } from './mcp-progress-reporter';
20
- import { McpRequestExtra, mcpRequestContext } from './mcp-request-context';
20
+ import { Container } from 'inversify';
21
+ import { NodeMcpRequestContext } from '../../node/server/node-mcp-request-context';
22
+ import { McpRequestContext, McpRequestExtra } from './mcp-request-context';
21
23
 
22
24
  function buildExtra(progressToken?: string | number): { extra: McpRequestExtra; sent: ServerNotification[] } {
23
25
  const sent: ServerNotification[] = [];
@@ -30,12 +32,20 @@ function buildExtra(progressToken?: string | number): { extra: McpRequestExtra;
30
32
  return { extra, sent };
31
33
  }
32
34
 
35
+ function buildReporter(): { reporter: McpProgressReporter; requestContext: McpRequestContext } {
36
+ const container = new Container();
37
+ const requestContext = new NodeMcpRequestContext();
38
+ container.bind(McpRequestContext).toConstantValue(requestContext);
39
+ container.bind(McpProgressReporter).toSelf().inSingletonScope();
40
+ return { reporter: container.get(McpProgressReporter), requestContext };
41
+ }
42
+
33
43
  describe('McpProgressReporter', () => {
34
44
  it('no-ops inside a request that has no progressToken (client did not opt in)', async () => {
35
- const reporter = new McpProgressReporter();
45
+ const { reporter, requestContext } = buildReporter();
36
46
  const { extra, sent } = buildExtra(undefined);
37
47
 
38
- await mcpRequestContext.run(extra, async () => {
48
+ await requestContext.run(extra, async () => {
39
49
  await reporter.emit({ progress: 0, message: 'starting' });
40
50
  });
41
51
 
@@ -43,10 +53,10 @@ describe('McpProgressReporter', () => {
43
53
  });
44
54
 
45
55
  it('emits notifications/progress when the request carries a progressToken', async () => {
46
- const reporter = new McpProgressReporter();
56
+ const { reporter, requestContext } = buildReporter();
47
57
  const { extra, sent } = buildExtra('tok-42');
48
58
 
49
- await mcpRequestContext.run(extra, async () => {
59
+ await requestContext.run(extra, async () => {
50
60
  await reporter.emit({ progress: 0, message: 'starting' });
51
61
  await reporter.emit({ progress: 1, total: 3, message: 'step 1/3' });
52
62
  });
@@ -63,10 +73,10 @@ describe('McpProgressReporter', () => {
63
73
  });
64
74
 
65
75
  it('accepts numeric progress tokens', async () => {
66
- const reporter = new McpProgressReporter();
76
+ const { reporter, requestContext } = buildReporter();
67
77
  const { extra, sent } = buildExtra(7);
68
78
 
69
- await mcpRequestContext.run(extra, async () => {
79
+ await requestContext.run(extra, async () => {
70
80
  await reporter.emit({ progress: 0 });
71
81
  });
72
82
 
@@ -75,7 +85,7 @@ describe('McpProgressReporter', () => {
75
85
  });
76
86
 
77
87
  it('swallows transport failures so a broken send never breaks the producing tool', async () => {
78
- const reporter = new McpProgressReporter();
88
+ const { reporter, requestContext } = buildReporter();
79
89
  const failingExtra = {
80
90
  sendNotification: async () => {
81
91
  throw new Error('transport closed');
@@ -83,7 +93,7 @@ describe('McpProgressReporter', () => {
83
93
  _meta: { progressToken: 'tok-1' }
84
94
  } as unknown as McpRequestExtra;
85
95
 
86
- await mcpRequestContext.run(failingExtra, async () => {
96
+ await requestContext.run(failingExtra, async () => {
87
97
  // Must complete without throwing. If we re-threw, every PNG export would hard-fail
88
98
  // when the client's SSE stream blipped — the opposite of progress reporting being
89
99
  // a UX nicety.
@@ -14,8 +14,8 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
 
17
- import { injectable } from 'inversify';
18
- import { mcpRequestContext } from './mcp-request-context';
17
+ import { inject, injectable, optional } from 'inversify';
18
+ import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
19
19
 
20
20
  /**
21
21
  * Per-call shape of a `notifications/progress` emission. Mirrors the SDK's
@@ -33,7 +33,7 @@ export interface McpProgressBeat {
33
33
 
34
34
  /**
35
35
  * Emits `notifications/progress` to the connected MCP client when the active request carries a
36
- * `progressToken` in its `_meta`. Built on the same {@link mcpRequestContext} as
36
+ * `progressToken` in its `_meta`. Built on the same {@link McpRequestContext} as
37
37
  * {@link McpLogger}; handlers don't need to thread `extra` through their own signatures.
38
38
  *
39
39
  * Behaviour:
@@ -43,14 +43,18 @@ export interface McpProgressBeat {
43
43
  * - Failures to deliver are swallowed: a broken transport must not break the producing tool.
44
44
  *
45
45
  * Shared across MCP clients on the same GLSP session; per-client routing is handled by the
46
- * active `mcpRequestContext` frame.
46
+ * active `McpRequestContext` frame.
47
47
  *
48
48
  * @experimental
49
49
  */
50
50
  @injectable()
51
51
  export class McpProgressReporter {
52
+ @inject(McpRequestContext)
53
+ @optional()
54
+ protected requestContext: McpRequestContext = new NoopMcpRequestContext();
55
+
52
56
  async emit(beat: McpProgressBeat): Promise<void> {
53
- const extra = mcpRequestContext.getStore();
57
+ const extra = this.requestContext.getStore();
54
58
  const progressToken = extra?._meta?.progressToken;
55
59
  if (extra === undefined || progressToken === undefined) {
56
60
  return;
@@ -15,13 +15,13 @@
15
15
  ********************************************************************************/
16
16
 
17
17
  import { ClientId, Logger, MaybePromise, ModelState } from '@eclipse-glsp/server';
18
- import { inject, injectable, interfaces } from 'inversify';
18
+ import { inject, injectable, interfaces, optional } from 'inversify';
19
19
  import { ZodObject, ZodRawShape } from 'zod/v4';
20
20
  import { GLSPMcpServer } from './glsp-mcp-server';
21
21
  import { McpPromptResult, McpToolError, extractErrorMessage } from './mcp-handler-shared';
22
22
  import { McpIdAliasService } from './mcp-id-alias-service';
23
23
  import { McpDiagramScopedInput } from './mcp-input-schemas';
24
- import { mcpRequestContext } from './mcp-request-context';
24
+ import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
25
25
 
26
26
  /**
27
27
  * Multi-binding key for **server-scope** prompt handlers — singletons that don't target a
@@ -45,6 +45,10 @@ export const McpPromptHandler = Symbol('McpPromptHandler');
45
45
  /** Shared infrastructure for both server- and diagram-scope prompt handlers. */
46
46
  @injectable()
47
47
  abstract class BaseMcpPromptHandler {
48
+ @inject(McpRequestContext)
49
+ @optional()
50
+ protected requestContext: McpRequestContext = new NoopMcpRequestContext();
51
+
48
52
  @inject(Logger) protected logger: Logger;
49
53
 
50
54
  /**
@@ -113,7 +117,7 @@ export abstract class AbstractMcpPromptHandler<T = Record<string, unknown>> exte
113
117
 
114
118
  registerPrompt(server: GLSPMcpServer): void {
115
119
  server.registerPrompt(this.name, this.toRegistrationConfig(), async (args, extra) =>
116
- mcpRequestContext.run(extra, () => this.execute(() => this.createResult(args as T)))
120
+ this.requestContext.run(extra, () => this.execute(() => this.createResult(args as T)))
117
121
  );
118
122
  }
119
123
  }
@@ -141,7 +145,7 @@ export abstract class AbstractMcpDiagramPromptHandler<
141
145
  protected abstract createResult(args: T): MaybePromise<McpPromptResult>;
142
146
 
143
147
  /**
144
- * Public dispatch entry point invoked by {@link McpServerLauncher}'s SDK callback.
148
+ * Public dispatch entry point invoked by {@link AbstractMcpServerLauncher}'s SDK callback.
145
149
  */
146
150
  handle(args: T): Promise<McpPromptResult> {
147
151
  return this.execute(() => this.createResult(args));
@@ -16,24 +16,28 @@
16
16
 
17
17
  import { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
18
18
  import { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
19
- import { AsyncLocalStorage } from 'node:async_hooks';
20
19
 
21
20
  export type McpRequestExtra = RequestHandlerExtra<ServerRequest, ServerNotification>;
22
21
 
22
+ export const McpRequestContext = Symbol('McpRequestContext');
23
+
23
24
  /**
24
- * Module-level `AsyncLocalStorage` carrying the SDK's per-request `extra` (notification sender,
25
- * progress token, request id, session id) for the duration of a tool/resource/prompt callback.
26
- *
27
- * The handler bases (tool / resource / prompt) wrap each registered SDK callback in
28
- * `mcpRequestContext.run(extra, () => …)`. Anything inside the handler — and any await chain
29
- * branching off it — can read the active context via {@link mcpRequestContext.getStore}.
30
- *
31
- * This lets {@link McpLogger} forward logs to the MCP client without every handler having to
32
- * thread `extra` through its own signature, and lets future progress-emission code (P1f / PNG
33
- * export) reach the same channel from inside `requestUntil` chains.
34
- *
35
- * Concurrent requests on the same MCP session each get their own AsyncLocalStorage frame —
36
- * no cross-talk. Code that runs OUTSIDE a request (init contributions, background timers)
37
- * sees `undefined` from `getStore()`.
25
+ * Carries the SDK's per-request `extra` (notification sender, progress token, request id,
26
+ * session id) for the duration of a tool/resource/prompt callback so consumers like the MCP
27
+ * logger and progress reporter can reach the client without threading `extra` through their
28
+ * own signatures.
38
29
  */
39
- export const mcpRequestContext = new AsyncLocalStorage<McpRequestExtra>();
30
+ export interface McpRequestContext {
31
+ run<R>(extra: McpRequestExtra, callback: () => R): R;
32
+ getStore(): McpRequestExtra | undefined;
33
+ }
34
+
35
+ /** No-op fallback used when no implementation is bound (e.g. in unit tests). */
36
+ export class NoopMcpRequestContext implements McpRequestContext {
37
+ run<R>(_extra: McpRequestExtra, callback: () => R): R {
38
+ return callback();
39
+ }
40
+ getStore(): McpRequestExtra | undefined {
41
+ return undefined;
42
+ }
43
+ }
@@ -18,7 +18,7 @@ import { ActionDispatcher, ClientId, Logger, MaybePromise, ModelState, RequestAc
18
18
  import { CompleteResourceTemplateCallback, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
19
19
  import { Variables } from '@modelcontextprotocol/sdk/shared/uriTemplate.js';
20
20
  import { Annotations, ListResourcesResult, Role } from '@modelcontextprotocol/sdk/types.js';
21
- import { inject, injectable, interfaces } from 'inversify';
21
+ import { inject, injectable, interfaces, optional } from 'inversify';
22
22
  import { ZodObject, ZodRawShape } from 'zod/v4';
23
23
  import { GLSPMcpServer } from './glsp-mcp-server';
24
24
  import {
@@ -33,7 +33,7 @@ import {
33
33
  import { McpIdAliasService } from './mcp-id-alias-service';
34
34
  import { McpDiagramScopedInput } from './mcp-input-schemas';
35
35
  import { McpMimeType } from './mcp-mime-types';
36
- import { mcpRequestContext } from './mcp-request-context';
36
+ import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
37
37
 
38
38
  /**
39
39
  * Multi-binding key for **server-scope** resource handlers — singletons that don't target a
@@ -55,6 +55,10 @@ export type McpResourceUri = string | { template: string };
55
55
  /** Shared infrastructure for both server- and diagram-scope resource handlers. */
56
56
  @injectable()
57
57
  abstract class BaseMcpResourceHandler {
58
+ @inject(McpRequestContext)
59
+ @optional()
60
+ protected requestContext: McpRequestContext = new NoopMcpRequestContext();
61
+
58
62
  @inject(Logger) protected logger: Logger;
59
63
 
60
64
  /**
@@ -184,7 +188,7 @@ abstract class BaseMcpResourceHandler {
184
188
  /** Builds the SDK `ResourceTemplate` for templated URIs (server-scope path). */
185
189
  protected buildResourceTemplate(template: string): ResourceTemplate {
186
190
  return new ResourceTemplate(template, {
187
- list: this.list ? async extra => mcpRequestContext.run(extra, () => this.list!()) : undefined,
191
+ list: this.list ? async extra => this.requestContext.run(extra, () => this.list!()) : undefined,
188
192
  complete: this.complete?.()
189
193
  });
190
194
  }
@@ -217,11 +221,11 @@ export abstract class AbstractMcpResourceHandler<T = Record<string, unknown>> ex
217
221
  if (typeof this.uri === 'string') {
218
222
  const uri = this.uri;
219
223
  server.registerResource(this.name, uri, config, async (_uri, extra) =>
220
- mcpRequestContext.run(extra, async () => this.toResourceResult(uri, await this.execute(() => this.createResult({} as T))))
224
+ this.requestContext.run(extra, async () => this.toResourceResult(uri, await this.execute(() => this.createResult({} as T))))
221
225
  );
222
226
  } else {
223
227
  server.registerResource(this.name, this.buildResourceTemplate(this.uri.template), config, async (uri, params, extra) =>
224
- mcpRequestContext.run(extra, async () =>
228
+ this.requestContext.run(extra, async () =>
225
229
  this.toResourceResult(uri.toString(), await this.execute(() => this.createResult(toParams(params) as T)))
226
230
  )
227
231
  );
@@ -250,7 +254,7 @@ export abstract class AbstractMcpResourceHandler<T = Record<string, unknown>> ex
250
254
  outputSchema: this.toolAlternativeOutputSchema
251
255
  },
252
256
  async (params, extra) =>
253
- mcpRequestContext.run(extra, async () => this.toToolResult(await this.execute(() => this.createResult(params as T))))
257
+ this.requestContext.run(extra, async () => this.toToolResult(await this.execute(() => this.createResult(params as T))))
254
258
  );
255
259
  }
256
260
  }
@@ -330,7 +334,7 @@ export abstract class AbstractMcpDiagramResourceHandler<
330
334
  }
331
335
 
332
336
  /**
333
- * Public dispatch entry point invoked by {@link McpServerLauncher}'s SDK callback for
337
+ * Public dispatch entry point invoked by {@link AbstractMcpServerLauncher}'s SDK callback for
334
338
  * resource reads. The launcher passes the URI it received from the SDK plus the URI-template
335
339
  * variable values normalized into a flat record.
336
340
  */
@@ -106,13 +106,13 @@ const matrix: Array<{
106
106
  name: 'create-nodes',
107
107
  Constructor: CreateNodesMcpToolHandler,
108
108
  schema: CreateNodesOutputSchema,
109
- sample: { createdNodes: [{ id: 'n1', elementTypeId: 'node:foo' }], errors: [], warnings: [] }
109
+ sample: { createdNodes: [{ id: 'n1', elementTypeId: 'node:foo' }], dispatchedCommands: 1, errors: [], warnings: [] }
110
110
  },
111
111
  {
112
112
  name: 'create-edges',
113
113
  Constructor: CreateEdgesMcpToolHandler,
114
114
  schema: CreateEdgesOutputSchema,
115
- sample: { createdEdges: [{ id: 'e1', elementTypeId: 'edge' }], errors: [] }
115
+ sample: { createdEdges: [{ id: 'e1', elementTypeId: 'edge' }], dispatchedCommands: 1, errors: [] }
116
116
  },
117
117
  {
118
118
  name: 'modify-nodes',
@@ -130,11 +130,11 @@ const matrix: Array<{
130
130
  name: 'delete-elements',
131
131
  Constructor: DeleteElementsMcpToolHandler,
132
132
  schema: DeleteElementsOutputSchema,
133
- sample: { deletedElements: [{ id: 'n1', elementTypeId: 'node:foo' }], deletedCount: 3 }
133
+ sample: { deletedElements: [{ id: 'n1', elementTypeId: 'node:foo' }], deletedCount: 3, dispatchedCommands: 1 }
134
134
  },
135
135
  { name: 'undo', Constructor: UndoMcpToolHandler, schema: UndoOutputSchema, sample: { commandsUndone: 2 } },
136
136
  { name: 'redo', Constructor: RedoMcpToolHandler, schema: RedoOutputSchema, sample: { commandsRedone: 2 } },
137
- { name: 'layout', Constructor: LayoutMcpToolHandler, schema: LayoutOutputSchema, sample: { applied: true } },
137
+ { name: 'layout', Constructor: LayoutMcpToolHandler, schema: LayoutOutputSchema, sample: { applied: true, dispatchedCommands: 1 } },
138
138
  {
139
139
  name: 'validate-diagram',
140
140
  Constructor: ValidateDiagramMcpToolHandler,
@@ -25,7 +25,7 @@ import {
25
25
  ResponseAction
26
26
  } from '@eclipse-glsp/server';
27
27
  import { ToolAnnotations } from '@modelcontextprotocol/sdk/types';
28
- import { inject, injectable, interfaces } from 'inversify';
28
+ import { inject, injectable, interfaces, optional } from 'inversify';
29
29
  import { ZodObject, ZodRawShape } from 'zod/v4';
30
30
  import { GLSPMcpServer } from './glsp-mcp-server';
31
31
  import {
@@ -44,7 +44,7 @@ import {
44
44
  import { McpIdAliasService } from './mcp-id-alias-service';
45
45
  import { ElementIdentity, McpDiagramScopedInput } from './mcp-input-schemas';
46
46
  import { McpLabelProvider } from './mcp-label-provider';
47
- import { mcpRequestContext } from './mcp-request-context';
47
+ import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
48
48
 
49
49
  /**
50
50
  * Multi-binding key for **server-scope** tool handlers — singletons that don't target a
@@ -75,6 +75,10 @@ export const McpToolHandler = Symbol('McpToolHandler');
75
75
  */
76
76
  @injectable()
77
77
  export abstract class BaseMcpToolHandler {
78
+ @inject(McpRequestContext)
79
+ @optional()
80
+ protected requestContext: McpRequestContext = new NoopMcpRequestContext();
81
+
78
82
  @inject(Logger) protected logger: Logger;
79
83
 
80
84
  /**
@@ -222,7 +226,7 @@ export abstract class AbstractMcpToolHandler<T = Record<string, unknown>> extend
222
226
 
223
227
  registerTool(server: GLSPMcpServer): void {
224
228
  server.registerTool(this.name, this.toRegistrationConfig(), async (params, extra) =>
225
- mcpRequestContext.run(extra, () => this.execute(() => this.createResult(params as T)))
229
+ this.requestContext.run(extra, () => this.execute(() => this.createResult(params as T)))
226
230
  );
227
231
  }
228
232
  }
@@ -253,7 +257,7 @@ export abstract class BaseMcpDiagramToolHandler<T extends McpDiagramScopedInput
253
257
  protected abstract createResult(params: T): MaybePromise<McpToolResult>;
254
258
 
255
259
  /**
256
- * Public dispatch entry point invoked by {@link McpServerLauncher}'s registered SDK
260
+ * Public dispatch entry point invoked by {@link AbstractMcpServerLauncher}'s registered SDK
257
261
  * callback. Each sibling sets its own policy — {@link AbstractMcpDiagramToolHandler}
258
262
  * passes through; {@link OperationMcpDiagramToolHandler} enforces the readonly gate.
259
263
  * Adopters don't call this directly.
@@ -17,7 +17,9 @@
17
17
  import { ClientId, GModelElement, Logger, ModelState, NullLogger } from '@eclipse-glsp/server';
18
18
  import { expect } from 'chai';
19
19
  import { Container, ContainerModule } from 'inversify';
20
- import { DefaultMcpLabelProvider, McpIdAliasService, McpLabelProvider, McpToolResult } from '../../server';
20
+ import { McpToolResult } from '../../server/mcp-handler-shared';
21
+ import { McpIdAliasService } from '../../server/mcp-id-alias-service';
22
+ import { DefaultMcpLabelProvider, McpLabelProvider } from '../../server/mcp-label-provider';
21
23
  import { CountElementsMcpToolHandler } from './count-elements-mcp-tool-handler';
22
24
 
23
25
  function makeElement(id: string, type: string): GModelElement {
@@ -16,7 +16,9 @@
16
16
 
17
17
  import { injectable } from 'inversify';
18
18
  import * as z from 'zod/v4';
19
- import { McpDiagramScopedInputSchema, AbstractMcpDiagramToolHandler, McpToolResult } from '../../server';
19
+ import { McpToolResult } from '../../server/mcp-handler-shared';
20
+ import { McpDiagramScopedInputSchema } from '../../server/mcp-input-schemas';
21
+ import { AbstractMcpDiagramToolHandler } from '../../server/mcp-tool-handler';
20
22
 
21
23
  export const CountElementsInputSchema = McpDiagramScopedInputSchema;
22
24
  export type CountElementsInput = z.infer<typeof CountElementsInputSchema>;
@@ -28,7 +28,9 @@ import {
28
28
  } from '@eclipse-glsp/server';
29
29
  import { expect } from 'chai';
30
30
  import { Container, ContainerModule } from 'inversify';
31
- import { DefaultMcpLabelProvider, McpIdAliasService, McpLabelProvider, McpToolResult } from '../../server';
31
+ import { McpToolResult } from '../../server/mcp-handler-shared';
32
+ import { McpIdAliasService } from '../../server/mcp-id-alias-service';
33
+ import { DefaultMcpLabelProvider, McpLabelProvider } from '../../server/mcp-label-provider';
32
34
  import { CreateEdgesInput, CreateEdgesMcpToolHandler } from './create-edges-mcp-tool-handler';
33
35
 
34
36
  function makeElement(id: string, type: string): GModelElement {