@eclipse-glsp/server-mcp 2.7.0-next.9

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 (303) hide show
  1. package/LICENSE +642 -0
  2. package/README.md +57 -0
  3. package/lib/index.d.ts +23 -0
  4. package/lib/index.d.ts.map +1 -0
  5. package/lib/index.js +41 -0
  6. package/lib/index.js.map +1 -0
  7. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.d.ts +43 -0
  8. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.d.ts.map +1 -0
  9. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.js +96 -0
  10. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.js.map +1 -0
  11. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.d.ts +43 -0
  12. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.d.ts.map +1 -0
  13. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.js +95 -0
  14. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.js.map +1 -0
  15. package/lib/prompts/index.d.ts +18 -0
  16. package/lib/prompts/index.d.ts.map +1 -0
  17. package/lib/prompts/index.js +34 -0
  18. package/lib/prompts/index.js.map +1 -0
  19. package/lib/resources/handlers/diagram-png-mcp-resource-handler.d.ts +81 -0
  20. package/lib/resources/handlers/diagram-png-mcp-resource-handler.d.ts.map +1 -0
  21. package/lib/resources/handlers/diagram-png-mcp-resource-handler.js +174 -0
  22. package/lib/resources/handlers/diagram-png-mcp-resource-handler.js.map +1 -0
  23. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.d.ts +52 -0
  24. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.d.ts.map +1 -0
  25. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.js +96 -0
  26. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.js.map +1 -0
  27. package/lib/resources/index.d.ts +20 -0
  28. package/lib/resources/index.d.ts.map +1 -0
  29. package/lib/resources/index.js +36 -0
  30. package/lib/resources/index.js.map +1 -0
  31. package/lib/resources/services/element-types-provider.d.ts +65 -0
  32. package/lib/resources/services/element-types-provider.d.ts.map +1 -0
  33. package/lib/resources/services/element-types-provider.js +81 -0
  34. package/lib/resources/services/element-types-provider.js.map +1 -0
  35. package/lib/resources/services/mcp-model-serializer.d.ts +78 -0
  36. package/lib/resources/services/mcp-model-serializer.d.ts.map +1 -0
  37. package/lib/resources/services/mcp-model-serializer.js +188 -0
  38. package/lib/resources/services/mcp-model-serializer.js.map +1 -0
  39. package/lib/server/glsp-mcp-server.d.ts +82 -0
  40. package/lib/server/glsp-mcp-server.d.ts.map +1 -0
  41. package/lib/server/glsp-mcp-server.js +140 -0
  42. package/lib/server/glsp-mcp-server.js.map +1 -0
  43. package/lib/server/index.d.ts +37 -0
  44. package/lib/server/index.d.ts.map +1 -0
  45. package/lib/server/index.js +57 -0
  46. package/lib/server/index.js.map +1 -0
  47. package/lib/server/lru-event-store.d.ts +53 -0
  48. package/lib/server/lru-event-store.d.ts.map +1 -0
  49. package/lib/server/lru-event-store.js +100 -0
  50. package/lib/server/lru-event-store.js.map +1 -0
  51. package/lib/server/mcp-diagram-handler-dispatcher.d.ts +144 -0
  52. package/lib/server/mcp-diagram-handler-dispatcher.d.ts.map +1 -0
  53. package/lib/server/mcp-diagram-handler-dispatcher.js +382 -0
  54. package/lib/server/mcp-diagram-handler-dispatcher.js.map +1 -0
  55. package/lib/server/mcp-diagram-module.d.ts +123 -0
  56. package/lib/server/mcp-diagram-module.d.ts.map +1 -0
  57. package/lib/server/mcp-diagram-module.js +186 -0
  58. package/lib/server/mcp-diagram-module.js.map +1 -0
  59. package/lib/server/mcp-diagram-prompt-handler-registry.d.ts +33 -0
  60. package/lib/server/mcp-diagram-prompt-handler-registry.d.ts.map +1 -0
  61. package/lib/server/mcp-diagram-prompt-handler-registry.js +76 -0
  62. package/lib/server/mcp-diagram-prompt-handler-registry.js.map +1 -0
  63. package/lib/server/mcp-diagram-resource-handler-registry.d.ts +35 -0
  64. package/lib/server/mcp-diagram-resource-handler-registry.d.ts.map +1 -0
  65. package/lib/server/mcp-diagram-resource-handler-registry.js +94 -0
  66. package/lib/server/mcp-diagram-resource-handler-registry.js.map +1 -0
  67. package/lib/server/mcp-diagram-tool-handler-registry.d.ts +57 -0
  68. package/lib/server/mcp-diagram-tool-handler-registry.d.ts.map +1 -0
  69. package/lib/server/mcp-diagram-tool-handler-registry.js +111 -0
  70. package/lib/server/mcp-diagram-tool-handler-registry.js.map +1 -0
  71. package/lib/server/mcp-handler-shared.d.ts +142 -0
  72. package/lib/server/mcp-handler-shared.d.ts.map +1 -0
  73. package/lib/server/mcp-handler-shared.js +199 -0
  74. package/lib/server/mcp-handler-shared.js.map +1 -0
  75. package/lib/server/mcp-http-transport.d.ts +93 -0
  76. package/lib/server/mcp-http-transport.d.ts.map +1 -0
  77. package/lib/server/mcp-http-transport.js +350 -0
  78. package/lib/server/mcp-http-transport.js.map +1 -0
  79. package/lib/server/mcp-id-alias-service.d.ts +70 -0
  80. package/lib/server/mcp-id-alias-service.d.ts.map +1 -0
  81. package/lib/server/mcp-id-alias-service.js +85 -0
  82. package/lib/server/mcp-id-alias-service.js.map +1 -0
  83. package/lib/server/mcp-input-schemas.d.ts +73 -0
  84. package/lib/server/mcp-input-schemas.d.ts.map +1 -0
  85. package/lib/server/mcp-input-schemas.js +67 -0
  86. package/lib/server/mcp-input-schemas.js.map +1 -0
  87. package/lib/server/mcp-label-provider.d.ts +45 -0
  88. package/lib/server/mcp-label-provider.d.ts.map +1 -0
  89. package/lib/server/mcp-label-provider.js +42 -0
  90. package/lib/server/mcp-label-provider.js.map +1 -0
  91. package/lib/server/mcp-log-level-registry.d.ts +54 -0
  92. package/lib/server/mcp-log-level-registry.d.ts.map +1 -0
  93. package/lib/server/mcp-log-level-registry.js +80 -0
  94. package/lib/server/mcp-log-level-registry.js.map +1 -0
  95. package/lib/server/mcp-logger.d.ts +59 -0
  96. package/lib/server/mcp-logger.d.ts.map +1 -0
  97. package/lib/server/mcp-logger.js +104 -0
  98. package/lib/server/mcp-logger.js.map +1 -0
  99. package/lib/server/mcp-mime-types.d.ts +28 -0
  100. package/lib/server/mcp-mime-types.d.ts.map +1 -0
  101. package/lib/server/mcp-mime-types.js +18 -0
  102. package/lib/server/mcp-mime-types.js.map +1 -0
  103. package/lib/server/mcp-options.d.ts +39 -0
  104. package/lib/server/mcp-options.d.ts.map +1 -0
  105. package/lib/server/mcp-options.js +53 -0
  106. package/lib/server/mcp-options.js.map +1 -0
  107. package/lib/server/mcp-progress-reporter.d.ts +48 -0
  108. package/lib/server/mcp-progress-reporter.d.ts.map +1 -0
  109. package/lib/server/mcp-progress-reporter.js +66 -0
  110. package/lib/server/mcp-progress-reporter.js.map +1 -0
  111. package/lib/server/mcp-prompt-handler.d.ts +120 -0
  112. package/lib/server/mcp-prompt-handler.d.ts.map +1 -0
  113. package/lib/server/mcp-prompt-handler.js +131 -0
  114. package/lib/server/mcp-prompt-handler.js.map +1 -0
  115. package/lib/server/mcp-request-context.d.ts +37 -0
  116. package/lib/server/mcp-request-context.d.ts.map +1 -0
  117. package/lib/server/mcp-request-context.js +37 -0
  118. package/lib/server/mcp-request-context.js.map +1 -0
  119. package/lib/server/mcp-resource-handler.d.ts +212 -0
  120. package/lib/server/mcp-resource-handler.d.ts.map +1 -0
  121. package/lib/server/mcp-resource-handler.js +298 -0
  122. package/lib/server/mcp-resource-handler.js.map +1 -0
  123. package/lib/server/mcp-server-launcher.d.ts +143 -0
  124. package/lib/server/mcp-server-launcher.d.ts.map +1 -0
  125. package/lib/server/mcp-server-launcher.js +355 -0
  126. package/lib/server/mcp-server-launcher.js.map +1 -0
  127. package/lib/server/mcp-server-module.d.ts +143 -0
  128. package/lib/server/mcp-server-module.d.ts.map +1 -0
  129. package/lib/server/mcp-server-module.js +249 -0
  130. package/lib/server/mcp-server-module.js.map +1 -0
  131. package/lib/server/mcp-session.d.ts +44 -0
  132. package/lib/server/mcp-session.d.ts.map +1 -0
  133. package/lib/server/mcp-session.js +18 -0
  134. package/lib/server/mcp-session.js.map +1 -0
  135. package/lib/server/mcp-tool-handler.d.ts +259 -0
  136. package/lib/server/mcp-tool-handler.d.ts.map +1 -0
  137. package/lib/server/mcp-tool-handler.js +355 -0
  138. package/lib/server/mcp-tool-handler.js.map +1 -0
  139. package/lib/tools/handlers/count-elements-mcp-tool-handler.d.ts +46 -0
  140. package/lib/tools/handlers/count-elements-mcp-tool-handler.d.ts.map +1 -0
  141. package/lib/tools/handlers/count-elements-mcp-tool-handler.js +76 -0
  142. package/lib/tools/handlers/count-elements-mcp-tool-handler.js.map +1 -0
  143. package/lib/tools/handlers/create-edges-mcp-tool-handler.d.ts +112 -0
  144. package/lib/tools/handlers/create-edges-mcp-tool-handler.d.ts.map +1 -0
  145. package/lib/tools/handlers/create-edges-mcp-tool-handler.js +190 -0
  146. package/lib/tools/handlers/create-edges-mcp-tool-handler.js.map +1 -0
  147. package/lib/tools/handlers/create-nodes-mcp-tool-handler.d.ts +81 -0
  148. package/lib/tools/handlers/create-nodes-mcp-tool-handler.d.ts.map +1 -0
  149. package/lib/tools/handlers/create-nodes-mcp-tool-handler.js +123 -0
  150. package/lib/tools/handlers/create-nodes-mcp-tool-handler.js.map +1 -0
  151. package/lib/tools/handlers/delete-elements-mcp-tool-handler.d.ts +52 -0
  152. package/lib/tools/handlers/delete-elements-mcp-tool-handler.d.ts.map +1 -0
  153. package/lib/tools/handlers/delete-elements-mcp-tool-handler.js +73 -0
  154. package/lib/tools/handlers/delete-elements-mcp-tool-handler.js.map +1 -0
  155. package/lib/tools/handlers/diagram-model-mcp-tool-handler.d.ts +59 -0
  156. package/lib/tools/handlers/diagram-model-mcp-tool-handler.d.ts.map +1 -0
  157. package/lib/tools/handlers/diagram-model-mcp-tool-handler.js +78 -0
  158. package/lib/tools/handlers/diagram-model-mcp-tool-handler.js.map +1 -0
  159. package/lib/tools/handlers/element-types-mcp-tool-handler.d.ts +97 -0
  160. package/lib/tools/handlers/element-types-mcp-tool-handler.d.ts.map +1 -0
  161. package/lib/tools/handlers/element-types-mcp-tool-handler.js +155 -0
  162. package/lib/tools/handlers/element-types-mcp-tool-handler.js.map +1 -0
  163. package/lib/tools/handlers/get-selection-mcp-tool-handler.d.ts +43 -0
  164. package/lib/tools/handlers/get-selection-mcp-tool-handler.d.ts.map +1 -0
  165. package/lib/tools/handlers/get-selection-mcp-tool-handler.js +68 -0
  166. package/lib/tools/handlers/get-selection-mcp-tool-handler.js.map +1 -0
  167. package/lib/tools/handlers/layout-mcp-tool-handler.d.ts +43 -0
  168. package/lib/tools/handlers/layout-mcp-tool-handler.d.ts.map +1 -0
  169. package/lib/tools/handlers/layout-mcp-tool-handler.js +71 -0
  170. package/lib/tools/handlers/layout-mcp-tool-handler.js.map +1 -0
  171. package/lib/tools/handlers/modify-edges-mcp-tool-handler.d.ts +78 -0
  172. package/lib/tools/handlers/modify-edges-mcp-tool-handler.d.ts.map +1 -0
  173. package/lib/tools/handlers/modify-edges-mcp-tool-handler.js +136 -0
  174. package/lib/tools/handlers/modify-edges-mcp-tool-handler.js.map +1 -0
  175. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.d.ts +92 -0
  176. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.d.ts.map +1 -0
  177. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.js +125 -0
  178. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.js.map +1 -0
  179. package/lib/tools/handlers/query-elements-mcp-tool-handler.d.ts +102 -0
  180. package/lib/tools/handlers/query-elements-mcp-tool-handler.d.ts.map +1 -0
  181. package/lib/tools/handlers/query-elements-mcp-tool-handler.js +158 -0
  182. package/lib/tools/handlers/query-elements-mcp-tool-handler.js.map +1 -0
  183. package/lib/tools/handlers/redo-mcp-tool-handler.d.ts +45 -0
  184. package/lib/tools/handlers/redo-mcp-tool-handler.d.ts.map +1 -0
  185. package/lib/tools/handlers/redo-mcp-tool-handler.js +73 -0
  186. package/lib/tools/handlers/redo-mcp-tool-handler.js.map +1 -0
  187. package/lib/tools/handlers/save-model-mcp-tool-handler.d.ts +55 -0
  188. package/lib/tools/handlers/save-model-mcp-tool-handler.d.ts.map +1 -0
  189. package/lib/tools/handlers/save-model-mcp-tool-handler.js +91 -0
  190. package/lib/tools/handlers/save-model-mcp-tool-handler.js.map +1 -0
  191. package/lib/tools/handlers/session-info-mcp-tool-handler.d.ts +65 -0
  192. package/lib/tools/handlers/session-info-mcp-tool-handler.d.ts.map +1 -0
  193. package/lib/tools/handlers/session-info-mcp-tool-handler.js +108 -0
  194. package/lib/tools/handlers/session-info-mcp-tool-handler.js.map +1 -0
  195. package/lib/tools/handlers/set-selection-mcp-tool-handler.d.ts +60 -0
  196. package/lib/tools/handlers/set-selection-mcp-tool-handler.d.ts.map +1 -0
  197. package/lib/tools/handlers/set-selection-mcp-tool-handler.js +103 -0
  198. package/lib/tools/handlers/set-selection-mcp-tool-handler.js.map +1 -0
  199. package/lib/tools/handlers/set-view-mcp-tool-handler.d.ts +110 -0
  200. package/lib/tools/handlers/set-view-mcp-tool-handler.d.ts.map +1 -0
  201. package/lib/tools/handlers/set-view-mcp-tool-handler.js +142 -0
  202. package/lib/tools/handlers/set-view-mcp-tool-handler.js.map +1 -0
  203. package/lib/tools/handlers/undo-mcp-tool-handler.d.ts +45 -0
  204. package/lib/tools/handlers/undo-mcp-tool-handler.d.ts.map +1 -0
  205. package/lib/tools/handlers/undo-mcp-tool-handler.js +74 -0
  206. package/lib/tools/handlers/undo-mcp-tool-handler.js.map +1 -0
  207. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.d.ts +66 -0
  208. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.d.ts.map +1 -0
  209. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.js +0 -0
  210. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.js.map +1 -0
  211. package/lib/tools/index.d.ts +34 -0
  212. package/lib/tools/index.d.ts.map +1 -0
  213. package/lib/tools/index.js +50 -0
  214. package/lib/tools/index.js.map +1 -0
  215. package/lib/util/index.d.ts +18 -0
  216. package/lib/util/index.d.ts.map +1 -0
  217. package/lib/util/index.js +34 -0
  218. package/lib/util/index.js.map +1 -0
  219. package/lib/util/markdown-util.d.ts +20 -0
  220. package/lib/util/markdown-util.d.ts.map +1 -0
  221. package/lib/util/markdown-util.js +45 -0
  222. package/lib/util/markdown-util.js.map +1 -0
  223. package/lib/util/mcp-util.d.ts +22 -0
  224. package/lib/util/mcp-util.d.ts.map +1 -0
  225. package/lib/util/mcp-util.js +29 -0
  226. package/lib/util/mcp-util.js.map +1 -0
  227. package/package.json +63 -0
  228. package/src/index.ts +24 -0
  229. package/src/prompts/handlers/describe-diagram-mcp-prompt-handler.ts +89 -0
  230. package/src/prompts/handlers/suggest-improvements-mcp-prompt-handler.ts +86 -0
  231. package/src/prompts/index.ts +18 -0
  232. package/src/resources/handlers/diagram-png-mcp-resource-handler.ts +181 -0
  233. package/src/resources/handlers/diagram-svg-mcp-resource-handler.ts +89 -0
  234. package/src/resources/index.ts +20 -0
  235. package/src/resources/services/element-types-provider.ts +105 -0
  236. package/src/resources/services/mcp-model-serializer.ts +211 -0
  237. package/src/server/glsp-mcp-server.spec.ts +73 -0
  238. package/src/server/glsp-mcp-server.ts +196 -0
  239. package/src/server/index.ts +42 -0
  240. package/src/server/lru-event-store.spec.ts +121 -0
  241. package/src/server/lru-event-store.ts +112 -0
  242. package/src/server/mcp-diagram-handler-dispatcher.spec.ts +231 -0
  243. package/src/server/mcp-diagram-handler-dispatcher.ts +459 -0
  244. package/src/server/mcp-diagram-module.ts +248 -0
  245. package/src/server/mcp-diagram-prompt-handler-registry.ts +59 -0
  246. package/src/server/mcp-diagram-resource-handler-registry.ts +73 -0
  247. package/src/server/mcp-diagram-tool-handler-registry.ts +97 -0
  248. package/src/server/mcp-handler-shared.spec.ts +53 -0
  249. package/src/server/mcp-handler-shared.ts +247 -0
  250. package/src/server/mcp-http-transport-e2e.spec.ts +151 -0
  251. package/src/server/mcp-http-transport.spec.ts +385 -0
  252. package/src/server/mcp-http-transport.ts +368 -0
  253. package/src/server/mcp-id-alias-service.spec.ts +106 -0
  254. package/src/server/mcp-id-alias-service.ts +104 -0
  255. package/src/server/mcp-input-schemas.ts +82 -0
  256. package/src/server/mcp-label-provider.ts +52 -0
  257. package/src/server/mcp-log-level-registry.spec.ts +75 -0
  258. package/src/server/mcp-log-level-registry.ts +90 -0
  259. package/src/server/mcp-logger.spec.ts +227 -0
  260. package/src/server/mcp-logger.ts +91 -0
  261. package/src/server/mcp-mime-types.ts +31 -0
  262. package/src/server/mcp-options.ts +43 -0
  263. package/src/server/mcp-progress-reporter.spec.ts +93 -0
  264. package/src/server/mcp-progress-reporter.ts +67 -0
  265. package/src/server/mcp-prompt-handler.ts +157 -0
  266. package/src/server/mcp-request-context.ts +39 -0
  267. package/src/server/mcp-resource-handler.ts +389 -0
  268. package/src/server/mcp-server-launcher.spec.ts +173 -0
  269. package/src/server/mcp-server-launcher.ts +369 -0
  270. package/src/server/mcp-server-module.ts +287 -0
  271. package/src/server/mcp-session.ts +45 -0
  272. package/src/server/mcp-tool-handler.spec.ts +182 -0
  273. package/src/server/mcp-tool-handler.ts +431 -0
  274. package/src/server/raw-http.spec.ts +59 -0
  275. package/src/tools/handlers/count-elements-mcp-tool-handler.spec.ts +99 -0
  276. package/src/tools/handlers/count-elements-mcp-tool-handler.ts +66 -0
  277. package/src/tools/handlers/create-edges-mcp-tool-handler.spec.ts +196 -0
  278. package/src/tools/handlers/create-edges-mcp-tool-handler.ts +205 -0
  279. package/src/tools/handlers/create-nodes-mcp-tool-handler.spec.ts +197 -0
  280. package/src/tools/handlers/create-nodes-mcp-tool-handler.ts +131 -0
  281. package/src/tools/handlers/delete-elements-mcp-tool-handler.ts +73 -0
  282. package/src/tools/handlers/diagram-model-mcp-tool-handler.ts +66 -0
  283. package/src/tools/handlers/element-types-mcp-tool-handler.ts +151 -0
  284. package/src/tools/handlers/get-selection-mcp-tool-handler.ts +54 -0
  285. package/src/tools/handlers/layout-mcp-tool-handler.ts +56 -0
  286. package/src/tools/handlers/modify-edges-mcp-tool-handler.ts +148 -0
  287. package/src/tools/handlers/modify-nodes-mcp-tool-handler.ts +140 -0
  288. package/src/tools/handlers/query-elements-mcp-tool-handler.spec.ts +210 -0
  289. package/src/tools/handlers/query-elements-mcp-tool-handler.ts +161 -0
  290. package/src/tools/handlers/redo-mcp-tool-handler.ts +62 -0
  291. package/src/tools/handlers/save-model-mcp-tool-handler.ts +71 -0
  292. package/src/tools/handlers/session-info-mcp-tool-handler.spec.ts +152 -0
  293. package/src/tools/handlers/session-info-mcp-tool-handler.ts +97 -0
  294. package/src/tools/handlers/set-selection-mcp-tool-handler.spec.ts +118 -0
  295. package/src/tools/handlers/set-selection-mcp-tool-handler.ts +90 -0
  296. package/src/tools/handlers/set-view-mcp-tool-handler.ts +162 -0
  297. package/src/tools/handlers/undo-mcp-tool-handler.ts +61 -0
  298. package/src/tools/handlers/validate-diagram-mcp-tool-handler.ts +0 -0
  299. package/src/tools/index.ts +34 -0
  300. package/src/tools/tool-annotations.spec.ts +141 -0
  301. package/src/util/index.ts +18 -0
  302. package/src/util/markdown-util.ts +44 -0
  303. package/src/util/mcp-util.ts +25 -0
@@ -0,0 +1,143 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2025-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
+ import { ClientSessionManager, Disposable, DisposableCollection, GLSPServer, GLSPServerInitializer, GLSPServerListener, InitializeParameters, InitializeResult, Logger, McpServerConfiguration, McpServerInitOptions } from '@eclipse-glsp/server';
17
+ import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
18
+ import { GLSPMcpServer, GLSPMcpServerFactory } from './glsp-mcp-server';
19
+ import { McpDiagramHandlerDispatcher } from './mcp-diagram-handler-dispatcher';
20
+ import { McpHttpTransport } from './mcp-http-transport';
21
+ import { McpLogLevelRegistry } from './mcp-log-level-registry';
22
+ import { McpServerDefaults, McpServerOptions } from './mcp-options';
23
+ import { McpPromptHandler } from './mcp-prompt-handler';
24
+ import { McpResourceHandler } from './mcp-resource-handler';
25
+ import { McpSession } from './mcp-session';
26
+ import { McpToolHandler } from './mcp-tool-handler';
27
+ /**
28
+ * Stdout tag used to announce the started MCP server so IDE integrations can pick up the URL
29
+ * automatically. The full line is `MCP_SERVER_READY_MSG + JSON.stringify({name, url, route})`,
30
+ * mirroring how the GLSP server itself announces its port via `START_UP_COMPLETE_MSG`.
31
+ */
32
+ export declare const MCP_SERVER_READY_MSG = "[GLSP-MCP-Server]:Ready. ";
33
+ /**
34
+ * Server version reported in MCP `initialize` handshake responses (the SDK's `serverInfo.version`
35
+ * field). Sourced from the package's own `package.json` so adopters and clients can tell builds
36
+ * apart without the server author having to remember to bump a literal.
37
+ */
38
+ export declare const SERVER_VERSION: string;
39
+ /**
40
+ * Launcher's internal handoff shape: everything from the public {@link McpServerConfiguration}
41
+ * with all fields resolved, plus `host`. `host` is deliberately *not* in the public protocol's
42
+ * init schema — it lives on `McpServerDeployOptions` (deploy-only) rather than
43
+ * `McpServerInitOptions` (init-controllable). The launcher reads it from the adopter-supplied
44
+ * defaults via `McpServerOptions.values.host` (whose ship default lives in
45
+ * `DefaultMcpServerModule.DEFAULT_OPTIONS`). The init/deploy split limits blast radius:
46
+ * MCP clients can negotiate behavioral fields like `port` over the wire, but security-sensitive
47
+ * fields like the bind interface are settable only by the adopter at process start.
48
+ */
49
+ export type FullMcpServerConfiguration = Required<McpServerConfiguration> & {
50
+ host: string;
51
+ };
52
+ /**
53
+ * Defense-in-depth filter for the init-side options payload. The static type already rules
54
+ * out deploy-only fields (`host`, `allowedHosts`, `allowedOrigins`, `acknowledgedNoAuth`) on
55
+ * `McpServerConfiguration.options`, but the wire payload is JSON, so a malformed or
56
+ * malicious client could smuggle extra keys. Destructure-based pick drops anything outside
57
+ * the allowed set so deploy-only fields are sourced *only* from adopter defaults.
58
+ *
59
+ * **Update this allowlist when adding a field to `McpServerInitOptions`** — the destructure
60
+ * below is the single source of truth for which init-side fields cross the wire.
61
+ *
62
+ * Exported for regression-test access only; not part of the public package surface.
63
+ */
64
+ export declare function pickInitOptions(options: McpServerInitOptions): McpServerInitOptions;
65
+ /**
66
+ * Returns true iff `host` is a loopback bind: `localhost`, `::1`, or any IPv4 in
67
+ * `127.0.0.0/8`. Any other value (`0.0.0.0`, `::`, LAN/public addresses) is non-loopback.
68
+ * Used by {@link assertLoopbackOrAcknowledged} for the auth-footgun runtime check.
69
+ */
70
+ export declare function isLoopbackHost(host: string): boolean;
71
+ /**
72
+ * Refuse to bind on a non-loopback host unless the operator has acknowledged that traffic is
73
+ * authenticated externally (reverse proxy, mTLS, ACL). The MCP server has no built-in auth.
74
+ * Exported for regression tests only; not part of the public surface.
75
+ */
76
+ export declare function assertLoopbackOrAcknowledged(host: string, acknowledgedNoAuth: boolean | undefined): void;
77
+ /**
78
+ * Boots the embedded MCP HTTP server when a GLSP `initialize` call carries an `mcpServer`
79
+ * configuration. Runs in-process via the {@link GLSPServerInitializer} lifecycle — not a
80
+ * separate process runner. Diagram-scope handler discovery and dispatch are delegated to
81
+ * {@link McpDiagramHandlerDispatcher}.
82
+ */
83
+ export declare class McpServerLauncher implements GLSPServerInitializer, GLSPServerListener, Disposable {
84
+ protected logger: Logger;
85
+ protected mcpOptions: McpServerOptions;
86
+ protected mcpDefaults: McpServerDefaults;
87
+ protected transport: McpHttpTransport;
88
+ protected glspMcpServerFactory: GLSPMcpServerFactory;
89
+ protected dispatcher: McpDiagramHandlerDispatcher;
90
+ protected logLevelRegistry: McpLogLevelRegistry;
91
+ protected clientSessionManager: ClientSessionManager;
92
+ protected toolHandlers: McpToolHandler[];
93
+ protected resourceHandlers: McpResourceHandler[];
94
+ protected promptHandlers: McpPromptHandler[];
95
+ protected toDispose: DisposableCollection;
96
+ protected serverUrl: string | undefined;
97
+ protected serverConfig: FullMcpServerConfiguration | undefined;
98
+ /** Per-MCP-session GLSPMcpServer registry — populated on session-init, cleared on session-close. */
99
+ protected readonly sessionServers: Map<string, GLSPMcpServer>;
100
+ initializeServer(server: GLSPServer, params: InitializeParameters, result: InitializeResult): Promise<InitializeResult>;
101
+ protected onSessionInitialized(client: McpSession, config: FullMcpServerConfiguration): void;
102
+ protected onSessionClosed(sessionId: string): void;
103
+ /**
104
+ * Fire `notifications/resources/list_changed` to every connected MCP client when a GLSP
105
+ * session opens or closes — diagram-scope resources aggregate across GLSP sessions, so the
106
+ * visible list mutates with that lifecycle. No-op when no diagram-scope resources are bound.
107
+ */
108
+ protected installResourceListChangedNotifier(): void;
109
+ /** Best-effort fan-out — failures on individual MCP sessions (e.g. transport mid-close) are swallowed. */
110
+ protected broadcastResourceListChanged(): void;
111
+ /** Register `logging/setLevel` so a connected MCP client can adjust its message severity threshold. */
112
+ protected registerLogLevelHandler(glspMcpServer: GLSPMcpServer, sessionId: string): void;
113
+ protected createGlspMcpServer({ name, options }: FullMcpServerConfiguration): GLSPMcpServer;
114
+ /**
115
+ * Build the MCP capabilities map from what is actually bound. Only declare a key when at
116
+ * least one handler contributes — declaring a capability the SDK never registers a handler
117
+ * for produces `-32601 Method not found` on `<cap>/list`. Resources surfaced as tools
118
+ * (`dataMode === 'tools'`) count toward `tools`, not `resources`.
119
+ */
120
+ protected buildCapabilities(resourcesAsResources: boolean): ServerCapabilities;
121
+ /**
122
+ * Registers tool/resource/prompt handlers against the per-MCP-session GLSP MCP server. Two
123
+ * sources flow into the catalog:
124
+ *
125
+ * 1. **Server-scope handlers**: singletons bound under `McpToolHandler` /
126
+ * `McpResourceHandler` / `McpPromptHandler`. Registered via their `register*(server)`
127
+ * methods — they're already-instantiated objects that close over their own state.
128
+ *
129
+ * 2. **Diagram-scope handlers**: registered by {@link McpDiagramHandlerDispatcher}, which
130
+ * walks the catalogs harvested at server start and dispatches each registered SDK
131
+ * callback by `params.sessionId` → per-GLSP-session container → registry lookup.
132
+ */
133
+ protected registerHandlers(glspMcpServer: GLSPMcpServer, resourcesAsResources: boolean): void;
134
+ /**
135
+ * Warn when a server-scope prompt's {@link AbstractMcpPromptHandler.referencedToolNames}
136
+ * contains a name not registered on this MCP session — catches adopters who unbind a tool
137
+ * a shipped prompt references via `${OtherHandler.NAME}`.
138
+ */
139
+ protected validatePromptToolReferences(glspMcpServer: GLSPMcpServer): void;
140
+ serverShutDown(server: GLSPServer): void;
141
+ dispose(): void;
142
+ }
143
+ //# sourceMappingURL=mcp-server-launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server-launcher.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server-launcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ /********************************************************************************
3
+ * Copyright (c) 2025-2026 EclipseSource and others.
4
+ *
5
+ * This program and the accompanying materials are made available under the
6
+ * terms of the Eclipse Public License v. 2.0 which is available at
7
+ * http://www.eclipse.org/legal/epl-2.0.
8
+ *
9
+ * This Source Code may also be made available under the following Secondary
10
+ * Licenses when the conditions for such availability set forth in the Eclipse
11
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ * with the GNU Classpath Exception which is available at
13
+ * https://www.gnu.org/software/classpath/license.html.
14
+ *
15
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
+ ********************************************************************************/
17
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
22
+ };
23
+ var __metadata = (this && this.__metadata) || function (k, v) {
24
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.McpServerLauncher = exports.SERVER_VERSION = exports.MCP_SERVER_READY_MSG = void 0;
28
+ exports.pickInitOptions = pickInitOptions;
29
+ exports.isLoopbackHost = isLoopbackHost;
30
+ exports.assertLoopbackOrAcknowledged = assertLoopbackOrAcknowledged;
31
+ const server_1 = require("@eclipse-glsp/server");
32
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
33
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
34
+ const inversify_1 = require("inversify");
35
+ const package_json_1 = require("../../package.json");
36
+ const glsp_mcp_server_1 = require("./glsp-mcp-server");
37
+ const mcp_diagram_handler_dispatcher_1 = require("./mcp-diagram-handler-dispatcher");
38
+ const mcp_http_transport_1 = require("./mcp-http-transport");
39
+ const mcp_log_level_registry_1 = require("./mcp-log-level-registry");
40
+ const mcp_options_1 = require("./mcp-options");
41
+ const mcp_prompt_handler_1 = require("./mcp-prompt-handler");
42
+ const mcp_resource_handler_1 = require("./mcp-resource-handler");
43
+ const mcp_tool_handler_1 = require("./mcp-tool-handler");
44
+ /**
45
+ * Stdout tag used to announce the started MCP server so IDE integrations can pick up the URL
46
+ * automatically. The full line is `MCP_SERVER_READY_MSG + JSON.stringify({name, url, route})`,
47
+ * mirroring how the GLSP server itself announces its port via `START_UP_COMPLETE_MSG`.
48
+ */
49
+ exports.MCP_SERVER_READY_MSG = '[GLSP-MCP-Server]:Ready. ';
50
+ /**
51
+ * Server version reported in MCP `initialize` handshake responses (the SDK's `serverInfo.version`
52
+ * field). Sourced from the package's own `package.json` so adopters and clients can tell builds
53
+ * apart without the server author having to remember to bump a literal.
54
+ */
55
+ exports.SERVER_VERSION = package_json_1.version;
56
+ /**
57
+ * Defense-in-depth filter for the init-side options payload. The static type already rules
58
+ * out deploy-only fields (`host`, `allowedHosts`, `allowedOrigins`, `acknowledgedNoAuth`) on
59
+ * `McpServerConfiguration.options`, but the wire payload is JSON, so a malformed or
60
+ * malicious client could smuggle extra keys. Destructure-based pick drops anything outside
61
+ * the allowed set so deploy-only fields are sourced *only* from adopter defaults.
62
+ *
63
+ * **Update this allowlist when adding a field to `McpServerInitOptions`** — the destructure
64
+ * below is the single source of truth for which init-side fields cross the wire.
65
+ *
66
+ * Exported for regression-test access only; not part of the public package surface.
67
+ */
68
+ function pickInitOptions(options) {
69
+ const { dataMode, agentPersona, eventStoreLimit } = options;
70
+ const picked = {};
71
+ if (dataMode !== undefined)
72
+ picked.dataMode = dataMode;
73
+ if (agentPersona !== undefined)
74
+ picked.agentPersona = agentPersona;
75
+ if (eventStoreLimit !== undefined)
76
+ picked.eventStoreLimit = eventStoreLimit;
77
+ return picked;
78
+ }
79
+ /**
80
+ * Returns true iff `host` is a loopback bind: `localhost`, `::1`, or any IPv4 in
81
+ * `127.0.0.0/8`. Any other value (`0.0.0.0`, `::`, LAN/public addresses) is non-loopback.
82
+ * Used by {@link assertLoopbackOrAcknowledged} for the auth-footgun runtime check.
83
+ */
84
+ function isLoopbackHost(host) {
85
+ return host === 'localhost' || host === '::1' || /^127\./.test(host);
86
+ }
87
+ /**
88
+ * Refuse to bind on a non-loopback host unless the operator has acknowledged that traffic is
89
+ * authenticated externally (reverse proxy, mTLS, ACL). The MCP server has no built-in auth.
90
+ * Exported for regression tests only; not part of the public surface.
91
+ */
92
+ function assertLoopbackOrAcknowledged(host, acknowledgedNoAuth) {
93
+ if (isLoopbackHost(host) || acknowledgedNoAuth === true) {
94
+ return;
95
+ }
96
+ throw new Error(`Refusing to bind MCP server to non-loopback host '${host}' without authentication. ` +
97
+ 'The MCP server has no built-in auth; binding to a non-loopback interface exposes an ' +
98
+ 'unauthenticated MCP endpoint to the network. If this is intentional (e.g., the endpoint ' +
99
+ 'is fronted by a reverse proxy, mTLS, or a network ACL that authenticates traffic), set ' +
100
+ '`acknowledgedNoAuth: true` on the McpServerDefaults you pass to the server module.');
101
+ }
102
+ /**
103
+ * Boots the embedded MCP HTTP server when a GLSP `initialize` call carries an `mcpServer`
104
+ * configuration. Runs in-process via the {@link GLSPServerInitializer} lifecycle — not a
105
+ * separate process runner. Diagram-scope handler discovery and dispatch are delegated to
106
+ * {@link McpDiagramHandlerDispatcher}.
107
+ */
108
+ let McpServerLauncher = class McpServerLauncher {
109
+ constructor() {
110
+ this.toolHandlers = [];
111
+ this.resourceHandlers = [];
112
+ this.promptHandlers = [];
113
+ this.toDispose = new server_1.DisposableCollection();
114
+ /** Per-MCP-session GLSPMcpServer registry — populated on session-init, cleared on session-close. */
115
+ this.sessionServers = new Map();
116
+ }
117
+ async initializeServer(server, params, result) {
118
+ var _a, _b;
119
+ const mcpServerParam = server_1.McpInitializeParameters.getServerConfig(params);
120
+ if (!mcpServerParam) {
121
+ return result;
122
+ }
123
+ // Idempotent: subsequent client sessions of the same GLSP server reuse the existing
124
+ // MCP HTTP server. Only the first call starts it.
125
+ if (this.serverUrl && this.serverConfig) {
126
+ return server_1.McpInitializeResult.attachServer(result, { name: this.serverConfig.name, url: this.serverUrl });
127
+ }
128
+ // Port defaults to 0 (random); the resolved URL is announced via the stdout marker
129
+ // below. `host` is intentionally NOT in the init-time schema — it comes from the
130
+ // server module's adopter defaults (no DNS-rebinding foot-gun via the LLM path).
131
+ const { port = 0, route = '/mcp', name = 'glsp', options = {} } = mcpServerParam;
132
+ // Init-time options win per field, but only fields in the init allowlist —
133
+ // `pickInitOptions` strips any wire-smuggled deploy-only keys before merge.
134
+ const mergedOptions = { ...this.mcpDefaults, ...pickInitOptions(options) };
135
+ this.mcpOptions.values = mergedOptions;
136
+ const host = (_a = mergedOptions.host) !== null && _a !== void 0 ? _a : '127.0.0.1';
137
+ // Auth-footgun guard: refuse non-loopback bind unless the operator opted in via
138
+ // `acknowledgedNoAuth`. Runs BEFORE the transport binds the socket so a careless
139
+ // `host: '0.0.0.0'` doesn't get a chance to expose an unauthenticated endpoint.
140
+ assertLoopbackOrAcknowledged(host, mergedOptions.acknowledgedNoAuth);
141
+ const mcpServerConfig = { port, host, route, name, options: mergedOptions };
142
+ this.dispatcher.harvest();
143
+ // Capture the per-init subscription disposables so a dispose-then-restart cycle
144
+ // (transport is `inSingletonScope()`) doesn't accumulate stale listeners.
145
+ this.toDispose.push(this.transport.onSessionInitialized(client => this.onSessionInitialized(client, mcpServerConfig)));
146
+ this.toDispose.push(this.transport.onSessionClosed(sessionId => this.onSessionClosed(sessionId)));
147
+ this.toDispose.push(this.transport);
148
+ this.installResourceListChangedNotifier();
149
+ const endpoint = await this.transport.start(mcpServerConfig);
150
+ this.serverUrl = endpoint.url;
151
+ this.serverConfig = mcpServerConfig;
152
+ this.logger.info(`MCP server '${mcpServerConfig.name}' is ready to accept new client requests on: ${(_b = this.serverUrl) !== null && _b !== void 0 ? _b : '(no network endpoint)'}`);
153
+ // stdout ready-marker for parent processes to discover the URL. Uses `console.log`
154
+ // (not the GLSP logger) so adopter logger config can never hide it.
155
+ console.log(exports.MCP_SERVER_READY_MSG + JSON.stringify({ name: mcpServerConfig.name, url: this.serverUrl, route }));
156
+ if (endpoint.url) {
157
+ return server_1.McpInitializeResult.attachServer(result, {
158
+ name: mcpServerConfig.name,
159
+ url: endpoint.url,
160
+ headers: endpoint.headers
161
+ });
162
+ }
163
+ return result;
164
+ }
165
+ onSessionInitialized(client, config) {
166
+ this.logger.info(`MCP session initialized with ID: ${client.sessionId}`);
167
+ const glspMcpServer = this.createGlspMcpServer(config);
168
+ this.sessionServers.set(client.sessionId, glspMcpServer);
169
+ this.registerLogLevelHandler(glspMcpServer, client.sessionId);
170
+ // server assumes control of the connection
171
+ glspMcpServer.connect(client);
172
+ }
173
+ onSessionClosed(sessionId) {
174
+ const glspMcpServer = this.sessionServers.get(sessionId);
175
+ if (glspMcpServer) {
176
+ this.sessionServers.delete(sessionId);
177
+ this.logLevelRegistry.clear(sessionId);
178
+ // The transport already closes the client end; close the SDK server end too.
179
+ glspMcpServer.dispose();
180
+ this.logger.info(`MCP session closed: ${sessionId}`);
181
+ }
182
+ }
183
+ /**
184
+ * Fire `notifications/resources/list_changed` to every connected MCP client when a GLSP
185
+ * session opens or closes — diagram-scope resources aggregate across GLSP sessions, so the
186
+ * visible list mutates with that lifecycle. No-op when no diagram-scope resources are bound.
187
+ */
188
+ installResourceListChangedNotifier() {
189
+ if (!this.dispatcher.hasDiagramResources()) {
190
+ return;
191
+ }
192
+ const listener = {
193
+ sessionCreated: () => this.broadcastResourceListChanged(),
194
+ sessionDisposed: () => this.broadcastResourceListChanged()
195
+ };
196
+ this.clientSessionManager.addListener(listener);
197
+ this.toDispose.push(server_1.Disposable.create(() => this.clientSessionManager.removeListener(listener)));
198
+ }
199
+ /** Best-effort fan-out — failures on individual MCP sessions (e.g. transport mid-close) are swallowed. */
200
+ broadcastResourceListChanged() {
201
+ for (const glspMcpServer of this.sessionServers.values()) {
202
+ glspMcpServer
203
+ .getRawServer()
204
+ .server.sendResourceListChanged()
205
+ .catch(err => this.logger.debug('sendResourceListChanged failed:', err));
206
+ }
207
+ }
208
+ /** Register `logging/setLevel` so a connected MCP client can adjust its message severity threshold. */
209
+ registerLogLevelHandler(glspMcpServer, sessionId) {
210
+ glspMcpServer.getRawServer().server.setRequestHandler(types_js_1.SetLevelRequestSchema, async (request) => {
211
+ this.logLevelRegistry.setLevel(sessionId, request.params.level);
212
+ return {};
213
+ });
214
+ }
215
+ createGlspMcpServer({ name, options }) {
216
+ const resourcesAsResources = options.dataMode === 'resources';
217
+ const server = new mcp_js_1.McpServer({ name, version: exports.SERVER_VERSION }, {
218
+ capabilities: this.buildCapabilities(resourcesAsResources),
219
+ instructions: options.agentPersona
220
+ });
221
+ const glspMcpServer = this.glspMcpServerFactory(server, options);
222
+ this.registerHandlers(glspMcpServer, resourcesAsResources);
223
+ return glspMcpServer;
224
+ }
225
+ /**
226
+ * Build the MCP capabilities map from what is actually bound. Only declare a key when at
227
+ * least one handler contributes — declaring a capability the SDK never registers a handler
228
+ * for produces `-32601 Method not found` on `<cap>/list`. Resources surfaced as tools
229
+ * (`dataMode === 'tools'`) count toward `tools`, not `resources`.
230
+ */
231
+ buildCapabilities(resourcesAsResources) {
232
+ const hasStaticTools = this.toolHandlers.length > 0;
233
+ const hasStaticPrompts = this.promptHandlers.length > 0;
234
+ const hasStaticResources = this.resourceHandlers.length > 0;
235
+ const hasDiagramTools = this.dispatcher.hasDiagramTools();
236
+ const hasDiagramPrompts = this.dispatcher.hasDiagramPrompts();
237
+ const hasDiagramResources = this.dispatcher.hasDiagramResources();
238
+ const anyResources = hasStaticResources || hasDiagramResources;
239
+ const hasTools = hasStaticTools || hasDiagramTools || (!resourcesAsResources && anyResources);
240
+ const hasPrompts = hasStaticPrompts || hasDiagramPrompts;
241
+ const hasResources = resourcesAsResources && anyResources;
242
+ return {
243
+ logging: {},
244
+ ...(hasTools ? { tools: { listChanged: false } } : {}),
245
+ // `resources.listChanged: true` iff the catalog contains diagram-scope resources —
246
+ // those aggregate across open GLSP sessions, so the visible list mutates with
247
+ // session add/remove. Server-scope-only catalogs are static, so the flag stays
248
+ // honest at `false` (the SDK reads it; clients refetch only when notified).
249
+ ...(hasResources ? { resources: { listChanged: hasDiagramResources } } : {}),
250
+ ...(hasPrompts ? { prompts: { listChanged: false } } : {})
251
+ };
252
+ }
253
+ /**
254
+ * Registers tool/resource/prompt handlers against the per-MCP-session GLSP MCP server. Two
255
+ * sources flow into the catalog:
256
+ *
257
+ * 1. **Server-scope handlers**: singletons bound under `McpToolHandler` /
258
+ * `McpResourceHandler` / `McpPromptHandler`. Registered via their `register*(server)`
259
+ * methods — they're already-instantiated objects that close over their own state.
260
+ *
261
+ * 2. **Diagram-scope handlers**: registered by {@link McpDiagramHandlerDispatcher}, which
262
+ * walks the catalogs harvested at server start and dispatches each registered SDK
263
+ * callback by `params.sessionId` → per-GLSP-session container → registry lookup.
264
+ */
265
+ registerHandlers(glspMcpServer, resourcesAsResources) {
266
+ this.toolHandlers.forEach(handler => handler.registerTool(glspMcpServer));
267
+ this.promptHandlers.forEach(handler => handler.registerPrompt(glspMcpServer));
268
+ if (resourcesAsResources) {
269
+ this.resourceHandlers.forEach(handler => handler.registerResource(glspMcpServer));
270
+ }
271
+ else {
272
+ this.resourceHandlers.forEach(handler => { var _a; return (_a = handler.registerToolAlternative) === null || _a === void 0 ? void 0 : _a.call(handler, glspMcpServer); });
273
+ }
274
+ this.dispatcher.registerAll(glspMcpServer, resourcesAsResources);
275
+ this.validatePromptToolReferences(glspMcpServer);
276
+ }
277
+ /**
278
+ * Warn when a server-scope prompt's {@link AbstractMcpPromptHandler.referencedToolNames}
279
+ * contains a name not registered on this MCP session — catches adopters who unbind a tool
280
+ * a shipped prompt references via `${OtherHandler.NAME}`.
281
+ */
282
+ validatePromptToolReferences(glspMcpServer) {
283
+ for (const handler of this.promptHandlers) {
284
+ const missing = handler.referencedToolNames().filter(name => !glspMcpServer.hasTool(name));
285
+ if (missing.length > 0) {
286
+ this.logger.warn(`Prompt '${handler.name}' references unbound tool(s): ${missing.join(', ')}. ` +
287
+ 'The prompt will still register but its text points at tools the LLM cannot invoke.');
288
+ }
289
+ }
290
+ }
291
+ serverShutDown(server) {
292
+ this.dispose();
293
+ }
294
+ dispose() {
295
+ this.sessionServers.forEach(glspMcpServer => glspMcpServer.dispose());
296
+ this.sessionServers.clear();
297
+ this.toDispose.dispose();
298
+ this.toDispose.clear();
299
+ this.serverUrl = undefined;
300
+ this.serverConfig = undefined;
301
+ this.dispatcher.reset();
302
+ }
303
+ };
304
+ exports.McpServerLauncher = McpServerLauncher;
305
+ __decorate([
306
+ (0, inversify_1.inject)(server_1.Logger),
307
+ __metadata("design:type", server_1.Logger)
308
+ ], McpServerLauncher.prototype, "logger", void 0);
309
+ __decorate([
310
+ (0, inversify_1.inject)(mcp_options_1.McpServerOptions),
311
+ __metadata("design:type", mcp_options_1.McpServerOptions)
312
+ ], McpServerLauncher.prototype, "mcpOptions", void 0);
313
+ __decorate([
314
+ (0, inversify_1.inject)(mcp_options_1.McpServerDefaults),
315
+ __metadata("design:type", Object)
316
+ ], McpServerLauncher.prototype, "mcpDefaults", void 0);
317
+ __decorate([
318
+ (0, inversify_1.inject)(mcp_http_transport_1.McpHttpTransport),
319
+ __metadata("design:type", mcp_http_transport_1.McpHttpTransport)
320
+ ], McpServerLauncher.prototype, "transport", void 0);
321
+ __decorate([
322
+ (0, inversify_1.inject)(glsp_mcp_server_1.GLSPMcpServerFactory),
323
+ __metadata("design:type", Function)
324
+ ], McpServerLauncher.prototype, "glspMcpServerFactory", void 0);
325
+ __decorate([
326
+ (0, inversify_1.inject)(mcp_diagram_handler_dispatcher_1.McpDiagramHandlerDispatcher),
327
+ __metadata("design:type", Object)
328
+ ], McpServerLauncher.prototype, "dispatcher", void 0);
329
+ __decorate([
330
+ (0, inversify_1.inject)(mcp_log_level_registry_1.McpLogLevelRegistry),
331
+ __metadata("design:type", Object)
332
+ ], McpServerLauncher.prototype, "logLevelRegistry", void 0);
333
+ __decorate([
334
+ (0, inversify_1.inject)(server_1.ClientSessionManager),
335
+ __metadata("design:type", Object)
336
+ ], McpServerLauncher.prototype, "clientSessionManager", void 0);
337
+ __decorate([
338
+ (0, inversify_1.multiInject)(mcp_tool_handler_1.McpToolHandler),
339
+ (0, inversify_1.optional)(),
340
+ __metadata("design:type", Array)
341
+ ], McpServerLauncher.prototype, "toolHandlers", void 0);
342
+ __decorate([
343
+ (0, inversify_1.multiInject)(mcp_resource_handler_1.McpResourceHandler),
344
+ (0, inversify_1.optional)(),
345
+ __metadata("design:type", Array)
346
+ ], McpServerLauncher.prototype, "resourceHandlers", void 0);
347
+ __decorate([
348
+ (0, inversify_1.multiInject)(mcp_prompt_handler_1.McpPromptHandler),
349
+ (0, inversify_1.optional)(),
350
+ __metadata("design:type", Array)
351
+ ], McpServerLauncher.prototype, "promptHandlers", void 0);
352
+ exports.McpServerLauncher = McpServerLauncher = __decorate([
353
+ (0, inversify_1.injectable)()
354
+ ], McpServerLauncher);
355
+ //# sourceMappingURL=mcp-server-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server-launcher.js","sourceRoot":"","sources":["../../src/server/mcp-server-launcher.ts"],"names":[],"mappings":"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"}