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