@eclipse-glsp/server-mcp 2.7.0-next.10 → 2.7.0-next.14
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
|
@@ -73,6 +73,19 @@ export const ElementIdentitySchema = z.object({
|
|
|
73
73
|
/** Inferred shape of {@link ElementIdentitySchema} — see its docstring for usage. */
|
|
74
74
|
export type ElementIdentity = z.infer<typeof ElementIdentitySchema>;
|
|
75
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Shared output field for mutating tools — the number of underlying GLSP operations a single
|
|
78
|
+
* call dispatched. Adopters chain `undo` / `redo` against this count to roll back or replay a
|
|
79
|
+
* full user action (a single MCP call may produce several commands, e.g. create-with-label).
|
|
80
|
+
* Always non-negative; `0` when nothing was dispatched (e.g. all inputs hit a pre-dispatch
|
|
81
|
+
* validation error).
|
|
82
|
+
*/
|
|
83
|
+
export const dispatchedCommands = z
|
|
84
|
+
.number()
|
|
85
|
+
.int()
|
|
86
|
+
.nonnegative()
|
|
87
|
+
.describe('Number of underlying GLSP operations dispatched. Useful when chaining `undo` / `redo`.');
|
|
88
|
+
|
|
76
89
|
/**
|
|
77
90
|
* Inferred shape of {@link McpDiagramScopedInputSchema} — `{ sessionId: string }`. Any
|
|
78
91
|
* adopter input schema that extends `McpDiagramScopedInputSchema` infers a type structurally
|
|
@@ -21,7 +21,7 @@ export const McpLogLevelRegistry = Symbol('McpLogLevelRegistry');
|
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Per-MCP-session minimum-severity threshold for `notifications/message`. Updated by the
|
|
24
|
-
* server's `logging/setLevel` request handler (registered in {@link
|
|
24
|
+
* server's `logging/setLevel` request handler (registered in {@link AbstractMcpServerLauncher} on
|
|
25
25
|
* session-init); read by {@link McpLogger} to gate message delivery.
|
|
26
26
|
*
|
|
27
27
|
* Bound as a server-scope singleton: one registry shared across MCP sessions, keyed by
|
|
@@ -20,7 +20,8 @@ import { expect } from 'chai';
|
|
|
20
20
|
import { Container, ContainerModule } from 'inversify';
|
|
21
21
|
import { DefaultMcpLogLevelRegistry, McpLogLevelRegistry } from './mcp-log-level-registry';
|
|
22
22
|
import { McpLogger } from './mcp-logger';
|
|
23
|
-
import {
|
|
23
|
+
import { NodeMcpRequestContext } from '../../node/server/node-mcp-request-context';
|
|
24
|
+
import { McpRequestContext, McpRequestExtra } from './mcp-request-context';
|
|
24
25
|
|
|
25
26
|
interface RecordedLog {
|
|
26
27
|
level: string;
|
|
@@ -43,18 +44,25 @@ class RecordingLogger extends NullLogger {
|
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
function buildLogger(): {
|
|
47
|
+
function buildLogger(): {
|
|
48
|
+
logger: McpLogger;
|
|
49
|
+
glspLogger: RecordingLogger;
|
|
50
|
+
levelRegistry: DefaultMcpLogLevelRegistry;
|
|
51
|
+
requestContext: McpRequestContext;
|
|
52
|
+
} {
|
|
47
53
|
const container = new Container();
|
|
48
54
|
const glspLogger = new RecordingLogger();
|
|
49
55
|
const levelRegistry = new DefaultMcpLogLevelRegistry();
|
|
56
|
+
const requestContext = new NodeMcpRequestContext();
|
|
50
57
|
container.load(
|
|
51
58
|
new ContainerModule(bind => {
|
|
52
59
|
bind(Logger).toConstantValue(glspLogger);
|
|
53
60
|
bind(McpLogLevelRegistry).toConstantValue(levelRegistry);
|
|
61
|
+
bind(McpRequestContext).toConstantValue(requestContext);
|
|
54
62
|
bind(McpLogger).toSelf().inSingletonScope();
|
|
55
63
|
})
|
|
56
64
|
);
|
|
57
|
-
return { logger: container.get(McpLogger), glspLogger, levelRegistry };
|
|
65
|
+
return { logger: container.get(McpLogger), glspLogger, levelRegistry, requestContext };
|
|
58
66
|
}
|
|
59
67
|
|
|
60
68
|
/**
|
|
@@ -92,12 +100,12 @@ describe('McpLogger', () => {
|
|
|
92
100
|
});
|
|
93
101
|
});
|
|
94
102
|
|
|
95
|
-
describe('inside an
|
|
103
|
+
describe('inside an requestContext.run frame', () => {
|
|
96
104
|
it('emits notifications/message to the bound MCP client AND the GLSP Logger', async () => {
|
|
97
|
-
const { logger, glspLogger } = buildLogger();
|
|
105
|
+
const { logger, glspLogger, requestContext } = buildLogger();
|
|
98
106
|
const { extra, sent } = buildExtra();
|
|
99
107
|
|
|
100
|
-
await
|
|
108
|
+
await requestContext.run(extra, async () => {
|
|
101
109
|
logger.info('one');
|
|
102
110
|
logger.warn('two');
|
|
103
111
|
logger.error('three');
|
|
@@ -122,14 +130,14 @@ describe('McpLogger', () => {
|
|
|
122
130
|
});
|
|
123
131
|
|
|
124
132
|
it('swallows transport failures so a broken MCP send never breaks the producing tool', async () => {
|
|
125
|
-
const { logger, glspLogger } = buildLogger();
|
|
133
|
+
const { logger, glspLogger, requestContext } = buildLogger();
|
|
126
134
|
const failingExtra = {
|
|
127
135
|
sendNotification: async () => {
|
|
128
136
|
throw new Error('transport closed');
|
|
129
137
|
}
|
|
130
138
|
} as unknown as McpRequestExtra;
|
|
131
139
|
|
|
132
|
-
await
|
|
140
|
+
await requestContext.run(failingExtra, async () => {
|
|
133
141
|
expect(() => logger.error('still works')).to.not.throw();
|
|
134
142
|
await new Promise(resolve => setImmediate(resolve));
|
|
135
143
|
});
|
|
@@ -141,17 +149,17 @@ describe('McpLogger', () => {
|
|
|
141
149
|
|
|
142
150
|
describe('concurrent request contexts', () => {
|
|
143
151
|
it('keeps each request frame isolated via AsyncLocalStorage', async () => {
|
|
144
|
-
const { logger } = buildLogger();
|
|
152
|
+
const { logger, requestContext } = buildLogger();
|
|
145
153
|
const { extra: extraA, sent: sentA } = buildExtra();
|
|
146
154
|
const { extra: extraB, sent: sentB } = buildExtra();
|
|
147
155
|
|
|
148
156
|
await Promise.all([
|
|
149
|
-
|
|
157
|
+
requestContext.run(extraA, async () => {
|
|
150
158
|
logger.info('A');
|
|
151
159
|
await new Promise(resolve => setImmediate(resolve));
|
|
152
160
|
logger.info('A-after-yield');
|
|
153
161
|
}),
|
|
154
|
-
|
|
162
|
+
requestContext.run(extraB, async () => {
|
|
155
163
|
logger.info('B');
|
|
156
164
|
await new Promise(resolve => setImmediate(resolve));
|
|
157
165
|
logger.info('B-after-yield');
|
|
@@ -165,12 +173,12 @@ describe('McpLogger', () => {
|
|
|
165
173
|
|
|
166
174
|
describe('logging/setLevel threshold gate (G4)', () => {
|
|
167
175
|
it('drops messages below the per-session threshold; the GLSP-side log still fires', async () => {
|
|
168
|
-
const { logger, glspLogger, levelRegistry } = buildLogger();
|
|
176
|
+
const { logger, glspLogger, levelRegistry, requestContext } = buildLogger();
|
|
169
177
|
const { extra, sent } = buildExtra('session-X');
|
|
170
178
|
// Client opted down to "warning" — info and debug must be dropped on the MCP side.
|
|
171
179
|
levelRegistry.setLevel('session-X', 'warning');
|
|
172
180
|
|
|
173
|
-
await
|
|
181
|
+
await requestContext.run(extra, async () => {
|
|
174
182
|
logger.info('chatty');
|
|
175
183
|
logger.debug('verbose');
|
|
176
184
|
logger.warn('important');
|
|
@@ -185,19 +193,19 @@ describe('McpLogger', () => {
|
|
|
185
193
|
});
|
|
186
194
|
|
|
187
195
|
it('isolates thresholds across sessions (different setLevel per session id)', async () => {
|
|
188
|
-
const { logger, levelRegistry } = buildLogger();
|
|
196
|
+
const { logger, levelRegistry, requestContext } = buildLogger();
|
|
189
197
|
const { extra: extraA, sent: sentA } = buildExtra('session-A');
|
|
190
198
|
const { extra: extraB, sent: sentB } = buildExtra('session-B');
|
|
191
199
|
levelRegistry.setLevel('session-A', 'error');
|
|
192
200
|
levelRegistry.setLevel('session-B', 'debug');
|
|
193
201
|
|
|
194
202
|
await Promise.all([
|
|
195
|
-
|
|
203
|
+
requestContext.run(extraA, async () => {
|
|
196
204
|
logger.info('A-info');
|
|
197
205
|
logger.error('A-error');
|
|
198
206
|
await new Promise(resolve => setImmediate(resolve));
|
|
199
207
|
}),
|
|
200
|
-
|
|
208
|
+
requestContext.run(extraB, async () => {
|
|
201
209
|
logger.info('B-info');
|
|
202
210
|
logger.error('B-error');
|
|
203
211
|
await new Promise(resolve => setImmediate(resolve));
|
|
@@ -209,11 +217,11 @@ describe('McpLogger', () => {
|
|
|
209
217
|
});
|
|
210
218
|
|
|
211
219
|
it('default threshold (no setLevel sent) lets every level through (preserves prior behavior)', async () => {
|
|
212
|
-
const { logger } = buildLogger();
|
|
220
|
+
const { logger, requestContext } = buildLogger();
|
|
213
221
|
const { extra, sent } = buildExtra('session-default');
|
|
214
222
|
// No setLevel call → default threshold = 'debug' → everything emitted.
|
|
215
223
|
|
|
216
|
-
await
|
|
224
|
+
await requestContext.run(extra, async () => {
|
|
217
225
|
logger.debug('d');
|
|
218
226
|
logger.info('i');
|
|
219
227
|
logger.warn('w');
|
|
@@ -16,16 +16,16 @@
|
|
|
16
16
|
|
|
17
17
|
import { Logger } from '@eclipse-glsp/server';
|
|
18
18
|
import type { LoggingLevel } from '@modelcontextprotocol/sdk/types.js';
|
|
19
|
-
import { inject, injectable } from 'inversify';
|
|
19
|
+
import { inject, injectable, optional } from 'inversify';
|
|
20
20
|
import { McpLogLevelRegistry, passesLogThreshold } from './mcp-log-level-registry';
|
|
21
|
-
import {
|
|
21
|
+
import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Logger that writes to BOTH the GLSP-side server log and the connected MCP client.
|
|
25
25
|
*
|
|
26
26
|
* Mirrors the {@link Logger} shape so handlers can drop-in switch from `@inject(Logger)` to
|
|
27
27
|
* `@inject(McpLogger)`. The server-side route always fires; the MCP-side route fires only when
|
|
28
|
-
* a call is made from inside an MCP request callback (tracked via {@link
|
|
28
|
+
* a call is made from inside an MCP request callback (tracked via {@link McpRequestContext}).
|
|
29
29
|
*
|
|
30
30
|
* We deliberately do NOT auto-forward arbitrary GLSP `Logger.info` calls to MCP clients —
|
|
31
31
|
* that would leak unrelated server-wide log lines into every connected LLM. Adopters opt in
|
|
@@ -38,13 +38,17 @@ import { mcpRequestContext } from './mcp-request-context';
|
|
|
38
38
|
* - `debug` → `debug`
|
|
39
39
|
*
|
|
40
40
|
* Shared across MCP clients on the same GLSP session; per-client routing is handled by the
|
|
41
|
-
* active `
|
|
41
|
+
* active `McpRequestContext` frame, and the per-MCP-session `logging/setLevel` threshold is
|
|
42
42
|
* stored in {@link McpLogLevelRegistry}.
|
|
43
43
|
*
|
|
44
44
|
* @experimental
|
|
45
45
|
*/
|
|
46
46
|
@injectable()
|
|
47
47
|
export class McpLogger {
|
|
48
|
+
@inject(McpRequestContext)
|
|
49
|
+
@optional()
|
|
50
|
+
protected requestContext: McpRequestContext = new NoopMcpRequestContext();
|
|
51
|
+
|
|
48
52
|
@inject(Logger) protected glspLogger: Logger;
|
|
49
53
|
|
|
50
54
|
@inject(McpLogLevelRegistry) protected levelRegistry: McpLogLevelRegistry;
|
|
@@ -78,7 +82,7 @@ export class McpLogger {
|
|
|
78
82
|
* Failures to deliver are swallowed — a broken transport must not break the producing tool.
|
|
79
83
|
*/
|
|
80
84
|
protected notify(level: LoggingLevel, data: string): void {
|
|
81
|
-
const extra =
|
|
85
|
+
const extra = this.requestContext.getStore();
|
|
82
86
|
if (!extra) {
|
|
83
87
|
return;
|
|
84
88
|
}
|
|
@@ -37,7 +37,7 @@ export class McpServerOptions {
|
|
|
37
37
|
/**
|
|
38
38
|
* DI binding identifier for adopter-provided default options. Supplied via the
|
|
39
39
|
* {@link AbstractMcpServerModule} constructor and merged with init-time options by
|
|
40
|
-
* `
|
|
40
|
+
* `AbstractMcpServerLauncher.initializeServer` — init-time wins per field.
|
|
41
41
|
*/
|
|
42
42
|
export const McpServerDefaults = Symbol('McpServerDefaults');
|
|
43
43
|
export type McpServerDefaults = McpServerOptionsType;
|
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
import { ServerNotification } from '@modelcontextprotocol/sdk/types.js';
|
|
18
18
|
import { expect } from 'chai';
|
|
19
19
|
import { McpProgressReporter } from './mcp-progress-reporter';
|
|
20
|
-
import {
|
|
20
|
+
import { Container } from 'inversify';
|
|
21
|
+
import { NodeMcpRequestContext } from '../../node/server/node-mcp-request-context';
|
|
22
|
+
import { McpRequestContext, McpRequestExtra } from './mcp-request-context';
|
|
21
23
|
|
|
22
24
|
function buildExtra(progressToken?: string | number): { extra: McpRequestExtra; sent: ServerNotification[] } {
|
|
23
25
|
const sent: ServerNotification[] = [];
|
|
@@ -30,12 +32,20 @@ function buildExtra(progressToken?: string | number): { extra: McpRequestExtra;
|
|
|
30
32
|
return { extra, sent };
|
|
31
33
|
}
|
|
32
34
|
|
|
35
|
+
function buildReporter(): { reporter: McpProgressReporter; requestContext: McpRequestContext } {
|
|
36
|
+
const container = new Container();
|
|
37
|
+
const requestContext = new NodeMcpRequestContext();
|
|
38
|
+
container.bind(McpRequestContext).toConstantValue(requestContext);
|
|
39
|
+
container.bind(McpProgressReporter).toSelf().inSingletonScope();
|
|
40
|
+
return { reporter: container.get(McpProgressReporter), requestContext };
|
|
41
|
+
}
|
|
42
|
+
|
|
33
43
|
describe('McpProgressReporter', () => {
|
|
34
44
|
it('no-ops inside a request that has no progressToken (client did not opt in)', async () => {
|
|
35
|
-
const reporter =
|
|
45
|
+
const { reporter, requestContext } = buildReporter();
|
|
36
46
|
const { extra, sent } = buildExtra(undefined);
|
|
37
47
|
|
|
38
|
-
await
|
|
48
|
+
await requestContext.run(extra, async () => {
|
|
39
49
|
await reporter.emit({ progress: 0, message: 'starting' });
|
|
40
50
|
});
|
|
41
51
|
|
|
@@ -43,10 +53,10 @@ describe('McpProgressReporter', () => {
|
|
|
43
53
|
});
|
|
44
54
|
|
|
45
55
|
it('emits notifications/progress when the request carries a progressToken', async () => {
|
|
46
|
-
const reporter =
|
|
56
|
+
const { reporter, requestContext } = buildReporter();
|
|
47
57
|
const { extra, sent } = buildExtra('tok-42');
|
|
48
58
|
|
|
49
|
-
await
|
|
59
|
+
await requestContext.run(extra, async () => {
|
|
50
60
|
await reporter.emit({ progress: 0, message: 'starting' });
|
|
51
61
|
await reporter.emit({ progress: 1, total: 3, message: 'step 1/3' });
|
|
52
62
|
});
|
|
@@ -63,10 +73,10 @@ describe('McpProgressReporter', () => {
|
|
|
63
73
|
});
|
|
64
74
|
|
|
65
75
|
it('accepts numeric progress tokens', async () => {
|
|
66
|
-
const reporter =
|
|
76
|
+
const { reporter, requestContext } = buildReporter();
|
|
67
77
|
const { extra, sent } = buildExtra(7);
|
|
68
78
|
|
|
69
|
-
await
|
|
79
|
+
await requestContext.run(extra, async () => {
|
|
70
80
|
await reporter.emit({ progress: 0 });
|
|
71
81
|
});
|
|
72
82
|
|
|
@@ -75,7 +85,7 @@ describe('McpProgressReporter', () => {
|
|
|
75
85
|
});
|
|
76
86
|
|
|
77
87
|
it('swallows transport failures so a broken send never breaks the producing tool', async () => {
|
|
78
|
-
const reporter =
|
|
88
|
+
const { reporter, requestContext } = buildReporter();
|
|
79
89
|
const failingExtra = {
|
|
80
90
|
sendNotification: async () => {
|
|
81
91
|
throw new Error('transport closed');
|
|
@@ -83,7 +93,7 @@ describe('McpProgressReporter', () => {
|
|
|
83
93
|
_meta: { progressToken: 'tok-1' }
|
|
84
94
|
} as unknown as McpRequestExtra;
|
|
85
95
|
|
|
86
|
-
await
|
|
96
|
+
await requestContext.run(failingExtra, async () => {
|
|
87
97
|
// Must complete without throwing. If we re-threw, every PNG export would hard-fail
|
|
88
98
|
// when the client's SSE stream blipped — the opposite of progress reporting being
|
|
89
99
|
// a UX nicety.
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
16
|
|
|
17
|
-
import { injectable } from 'inversify';
|
|
18
|
-
import {
|
|
17
|
+
import { inject, injectable, optional } from 'inversify';
|
|
18
|
+
import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Per-call shape of a `notifications/progress` emission. Mirrors the SDK's
|
|
@@ -33,7 +33,7 @@ export interface McpProgressBeat {
|
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
35
|
* Emits `notifications/progress` to the connected MCP client when the active request carries a
|
|
36
|
-
* `progressToken` in its `_meta`. Built on the same {@link
|
|
36
|
+
* `progressToken` in its `_meta`. Built on the same {@link McpRequestContext} as
|
|
37
37
|
* {@link McpLogger}; handlers don't need to thread `extra` through their own signatures.
|
|
38
38
|
*
|
|
39
39
|
* Behaviour:
|
|
@@ -43,14 +43,18 @@ export interface McpProgressBeat {
|
|
|
43
43
|
* - Failures to deliver are swallowed: a broken transport must not break the producing tool.
|
|
44
44
|
*
|
|
45
45
|
* Shared across MCP clients on the same GLSP session; per-client routing is handled by the
|
|
46
|
-
* active `
|
|
46
|
+
* active `McpRequestContext` frame.
|
|
47
47
|
*
|
|
48
48
|
* @experimental
|
|
49
49
|
*/
|
|
50
50
|
@injectable()
|
|
51
51
|
export class McpProgressReporter {
|
|
52
|
+
@inject(McpRequestContext)
|
|
53
|
+
@optional()
|
|
54
|
+
protected requestContext: McpRequestContext = new NoopMcpRequestContext();
|
|
55
|
+
|
|
52
56
|
async emit(beat: McpProgressBeat): Promise<void> {
|
|
53
|
-
const extra =
|
|
57
|
+
const extra = this.requestContext.getStore();
|
|
54
58
|
const progressToken = extra?._meta?.progressToken;
|
|
55
59
|
if (extra === undefined || progressToken === undefined) {
|
|
56
60
|
return;
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
********************************************************************************/
|
|
16
16
|
|
|
17
17
|
import { ClientId, Logger, MaybePromise, ModelState } from '@eclipse-glsp/server';
|
|
18
|
-
import { inject, injectable, interfaces } from 'inversify';
|
|
18
|
+
import { inject, injectable, interfaces, optional } from 'inversify';
|
|
19
19
|
import { ZodObject, ZodRawShape } from 'zod/v4';
|
|
20
20
|
import { GLSPMcpServer } from './glsp-mcp-server';
|
|
21
21
|
import { McpPromptResult, McpToolError, extractErrorMessage } from './mcp-handler-shared';
|
|
22
22
|
import { McpIdAliasService } from './mcp-id-alias-service';
|
|
23
23
|
import { McpDiagramScopedInput } from './mcp-input-schemas';
|
|
24
|
-
import {
|
|
24
|
+
import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Multi-binding key for **server-scope** prompt handlers — singletons that don't target a
|
|
@@ -45,6 +45,10 @@ export const McpPromptHandler = Symbol('McpPromptHandler');
|
|
|
45
45
|
/** Shared infrastructure for both server- and diagram-scope prompt handlers. */
|
|
46
46
|
@injectable()
|
|
47
47
|
abstract class BaseMcpPromptHandler {
|
|
48
|
+
@inject(McpRequestContext)
|
|
49
|
+
@optional()
|
|
50
|
+
protected requestContext: McpRequestContext = new NoopMcpRequestContext();
|
|
51
|
+
|
|
48
52
|
@inject(Logger) protected logger: Logger;
|
|
49
53
|
|
|
50
54
|
/**
|
|
@@ -113,7 +117,7 @@ export abstract class AbstractMcpPromptHandler<T = Record<string, unknown>> exte
|
|
|
113
117
|
|
|
114
118
|
registerPrompt(server: GLSPMcpServer): void {
|
|
115
119
|
server.registerPrompt(this.name, this.toRegistrationConfig(), async (args, extra) =>
|
|
116
|
-
|
|
120
|
+
this.requestContext.run(extra, () => this.execute(() => this.createResult(args as T)))
|
|
117
121
|
);
|
|
118
122
|
}
|
|
119
123
|
}
|
|
@@ -141,7 +145,7 @@ export abstract class AbstractMcpDiagramPromptHandler<
|
|
|
141
145
|
protected abstract createResult(args: T): MaybePromise<McpPromptResult>;
|
|
142
146
|
|
|
143
147
|
/**
|
|
144
|
-
* Public dispatch entry point invoked by {@link
|
|
148
|
+
* Public dispatch entry point invoked by {@link AbstractMcpServerLauncher}'s SDK callback.
|
|
145
149
|
*/
|
|
146
150
|
handle(args: T): Promise<McpPromptResult> {
|
|
147
151
|
return this.execute(() => this.createResult(args));
|
|
@@ -16,24 +16,28 @@
|
|
|
16
16
|
|
|
17
17
|
import { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
|
|
18
18
|
import { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
19
|
-
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
20
19
|
|
|
21
20
|
export type McpRequestExtra = RequestHandlerExtra<ServerRequest, ServerNotification>;
|
|
22
21
|
|
|
22
|
+
export const McpRequestContext = Symbol('McpRequestContext');
|
|
23
|
+
|
|
23
24
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* `mcpRequestContext.run(extra, () => …)`. Anything inside the handler — and any await chain
|
|
29
|
-
* branching off it — can read the active context via {@link mcpRequestContext.getStore}.
|
|
30
|
-
*
|
|
31
|
-
* This lets {@link McpLogger} forward logs to the MCP client without every handler having to
|
|
32
|
-
* thread `extra` through its own signature, and lets future progress-emission code (P1f / PNG
|
|
33
|
-
* export) reach the same channel from inside `requestUntil` chains.
|
|
34
|
-
*
|
|
35
|
-
* Concurrent requests on the same MCP session each get their own AsyncLocalStorage frame —
|
|
36
|
-
* no cross-talk. Code that runs OUTSIDE a request (init contributions, background timers)
|
|
37
|
-
* sees `undefined` from `getStore()`.
|
|
25
|
+
* Carries the SDK's per-request `extra` (notification sender, progress token, request id,
|
|
26
|
+
* session id) for the duration of a tool/resource/prompt callback so consumers like the MCP
|
|
27
|
+
* logger and progress reporter can reach the client without threading `extra` through their
|
|
28
|
+
* own signatures.
|
|
38
29
|
*/
|
|
39
|
-
export
|
|
30
|
+
export interface McpRequestContext {
|
|
31
|
+
run<R>(extra: McpRequestExtra, callback: () => R): R;
|
|
32
|
+
getStore(): McpRequestExtra | undefined;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** No-op fallback used when no implementation is bound (e.g. in unit tests). */
|
|
36
|
+
export class NoopMcpRequestContext implements McpRequestContext {
|
|
37
|
+
run<R>(_extra: McpRequestExtra, callback: () => R): R {
|
|
38
|
+
return callback();
|
|
39
|
+
}
|
|
40
|
+
getStore(): McpRequestExtra | undefined {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -18,7 +18,7 @@ import { ActionDispatcher, ClientId, Logger, MaybePromise, ModelState, RequestAc
|
|
|
18
18
|
import { CompleteResourceTemplateCallback, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
19
19
|
import { Variables } from '@modelcontextprotocol/sdk/shared/uriTemplate.js';
|
|
20
20
|
import { Annotations, ListResourcesResult, Role } from '@modelcontextprotocol/sdk/types.js';
|
|
21
|
-
import { inject, injectable, interfaces } from 'inversify';
|
|
21
|
+
import { inject, injectable, interfaces, optional } from 'inversify';
|
|
22
22
|
import { ZodObject, ZodRawShape } from 'zod/v4';
|
|
23
23
|
import { GLSPMcpServer } from './glsp-mcp-server';
|
|
24
24
|
import {
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
import { McpIdAliasService } from './mcp-id-alias-service';
|
|
34
34
|
import { McpDiagramScopedInput } from './mcp-input-schemas';
|
|
35
35
|
import { McpMimeType } from './mcp-mime-types';
|
|
36
|
-
import {
|
|
36
|
+
import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
39
|
* Multi-binding key for **server-scope** resource handlers — singletons that don't target a
|
|
@@ -55,6 +55,10 @@ export type McpResourceUri = string | { template: string };
|
|
|
55
55
|
/** Shared infrastructure for both server- and diagram-scope resource handlers. */
|
|
56
56
|
@injectable()
|
|
57
57
|
abstract class BaseMcpResourceHandler {
|
|
58
|
+
@inject(McpRequestContext)
|
|
59
|
+
@optional()
|
|
60
|
+
protected requestContext: McpRequestContext = new NoopMcpRequestContext();
|
|
61
|
+
|
|
58
62
|
@inject(Logger) protected logger: Logger;
|
|
59
63
|
|
|
60
64
|
/**
|
|
@@ -184,7 +188,7 @@ abstract class BaseMcpResourceHandler {
|
|
|
184
188
|
/** Builds the SDK `ResourceTemplate` for templated URIs (server-scope path). */
|
|
185
189
|
protected buildResourceTemplate(template: string): ResourceTemplate {
|
|
186
190
|
return new ResourceTemplate(template, {
|
|
187
|
-
list: this.list ? async extra =>
|
|
191
|
+
list: this.list ? async extra => this.requestContext.run(extra, () => this.list!()) : undefined,
|
|
188
192
|
complete: this.complete?.()
|
|
189
193
|
});
|
|
190
194
|
}
|
|
@@ -217,11 +221,11 @@ export abstract class AbstractMcpResourceHandler<T = Record<string, unknown>> ex
|
|
|
217
221
|
if (typeof this.uri === 'string') {
|
|
218
222
|
const uri = this.uri;
|
|
219
223
|
server.registerResource(this.name, uri, config, async (_uri, extra) =>
|
|
220
|
-
|
|
224
|
+
this.requestContext.run(extra, async () => this.toResourceResult(uri, await this.execute(() => this.createResult({} as T))))
|
|
221
225
|
);
|
|
222
226
|
} else {
|
|
223
227
|
server.registerResource(this.name, this.buildResourceTemplate(this.uri.template), config, async (uri, params, extra) =>
|
|
224
|
-
|
|
228
|
+
this.requestContext.run(extra, async () =>
|
|
225
229
|
this.toResourceResult(uri.toString(), await this.execute(() => this.createResult(toParams(params) as T)))
|
|
226
230
|
)
|
|
227
231
|
);
|
|
@@ -250,7 +254,7 @@ export abstract class AbstractMcpResourceHandler<T = Record<string, unknown>> ex
|
|
|
250
254
|
outputSchema: this.toolAlternativeOutputSchema
|
|
251
255
|
},
|
|
252
256
|
async (params, extra) =>
|
|
253
|
-
|
|
257
|
+
this.requestContext.run(extra, async () => this.toToolResult(await this.execute(() => this.createResult(params as T))))
|
|
254
258
|
);
|
|
255
259
|
}
|
|
256
260
|
}
|
|
@@ -330,7 +334,7 @@ export abstract class AbstractMcpDiagramResourceHandler<
|
|
|
330
334
|
}
|
|
331
335
|
|
|
332
336
|
/**
|
|
333
|
-
* Public dispatch entry point invoked by {@link
|
|
337
|
+
* Public dispatch entry point invoked by {@link AbstractMcpServerLauncher}'s SDK callback for
|
|
334
338
|
* resource reads. The launcher passes the URI it received from the SDK plus the URI-template
|
|
335
339
|
* variable values normalized into a flat record.
|
|
336
340
|
*/
|
|
@@ -106,13 +106,13 @@ const matrix: Array<{
|
|
|
106
106
|
name: 'create-nodes',
|
|
107
107
|
Constructor: CreateNodesMcpToolHandler,
|
|
108
108
|
schema: CreateNodesOutputSchema,
|
|
109
|
-
sample: { createdNodes: [{ id: 'n1', elementTypeId: 'node:foo' }], errors: [], warnings: [] }
|
|
109
|
+
sample: { createdNodes: [{ id: 'n1', elementTypeId: 'node:foo' }], dispatchedCommands: 1, errors: [], warnings: [] }
|
|
110
110
|
},
|
|
111
111
|
{
|
|
112
112
|
name: 'create-edges',
|
|
113
113
|
Constructor: CreateEdgesMcpToolHandler,
|
|
114
114
|
schema: CreateEdgesOutputSchema,
|
|
115
|
-
sample: { createdEdges: [{ id: 'e1', elementTypeId: 'edge' }], errors: [] }
|
|
115
|
+
sample: { createdEdges: [{ id: 'e1', elementTypeId: 'edge' }], dispatchedCommands: 1, errors: [] }
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
118
|
name: 'modify-nodes',
|
|
@@ -130,11 +130,11 @@ const matrix: Array<{
|
|
|
130
130
|
name: 'delete-elements',
|
|
131
131
|
Constructor: DeleteElementsMcpToolHandler,
|
|
132
132
|
schema: DeleteElementsOutputSchema,
|
|
133
|
-
sample: { deletedElements: [{ id: 'n1', elementTypeId: 'node:foo' }], deletedCount: 3 }
|
|
133
|
+
sample: { deletedElements: [{ id: 'n1', elementTypeId: 'node:foo' }], deletedCount: 3, dispatchedCommands: 1 }
|
|
134
134
|
},
|
|
135
135
|
{ name: 'undo', Constructor: UndoMcpToolHandler, schema: UndoOutputSchema, sample: { commandsUndone: 2 } },
|
|
136
136
|
{ name: 'redo', Constructor: RedoMcpToolHandler, schema: RedoOutputSchema, sample: { commandsRedone: 2 } },
|
|
137
|
-
{ name: 'layout', Constructor: LayoutMcpToolHandler, schema: LayoutOutputSchema, sample: { applied: true } },
|
|
137
|
+
{ name: 'layout', Constructor: LayoutMcpToolHandler, schema: LayoutOutputSchema, sample: { applied: true, dispatchedCommands: 1 } },
|
|
138
138
|
{
|
|
139
139
|
name: 'validate-diagram',
|
|
140
140
|
Constructor: ValidateDiagramMcpToolHandler,
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
ResponseAction
|
|
26
26
|
} from '@eclipse-glsp/server';
|
|
27
27
|
import { ToolAnnotations } from '@modelcontextprotocol/sdk/types';
|
|
28
|
-
import { inject, injectable, interfaces } from 'inversify';
|
|
28
|
+
import { inject, injectable, interfaces, optional } from 'inversify';
|
|
29
29
|
import { ZodObject, ZodRawShape } from 'zod/v4';
|
|
30
30
|
import { GLSPMcpServer } from './glsp-mcp-server';
|
|
31
31
|
import {
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
import { McpIdAliasService } from './mcp-id-alias-service';
|
|
45
45
|
import { ElementIdentity, McpDiagramScopedInput } from './mcp-input-schemas';
|
|
46
46
|
import { McpLabelProvider } from './mcp-label-provider';
|
|
47
|
-
import {
|
|
47
|
+
import { McpRequestContext, NoopMcpRequestContext } from './mcp-request-context';
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
50
|
* Multi-binding key for **server-scope** tool handlers — singletons that don't target a
|
|
@@ -75,6 +75,10 @@ export const McpToolHandler = Symbol('McpToolHandler');
|
|
|
75
75
|
*/
|
|
76
76
|
@injectable()
|
|
77
77
|
export abstract class BaseMcpToolHandler {
|
|
78
|
+
@inject(McpRequestContext)
|
|
79
|
+
@optional()
|
|
80
|
+
protected requestContext: McpRequestContext = new NoopMcpRequestContext();
|
|
81
|
+
|
|
78
82
|
@inject(Logger) protected logger: Logger;
|
|
79
83
|
|
|
80
84
|
/**
|
|
@@ -222,7 +226,7 @@ export abstract class AbstractMcpToolHandler<T = Record<string, unknown>> extend
|
|
|
222
226
|
|
|
223
227
|
registerTool(server: GLSPMcpServer): void {
|
|
224
228
|
server.registerTool(this.name, this.toRegistrationConfig(), async (params, extra) =>
|
|
225
|
-
|
|
229
|
+
this.requestContext.run(extra, () => this.execute(() => this.createResult(params as T)))
|
|
226
230
|
);
|
|
227
231
|
}
|
|
228
232
|
}
|
|
@@ -253,7 +257,7 @@ export abstract class BaseMcpDiagramToolHandler<T extends McpDiagramScopedInput
|
|
|
253
257
|
protected abstract createResult(params: T): MaybePromise<McpToolResult>;
|
|
254
258
|
|
|
255
259
|
/**
|
|
256
|
-
* Public dispatch entry point invoked by {@link
|
|
260
|
+
* Public dispatch entry point invoked by {@link AbstractMcpServerLauncher}'s registered SDK
|
|
257
261
|
* callback. Each sibling sets its own policy — {@link AbstractMcpDiagramToolHandler}
|
|
258
262
|
* passes through; {@link OperationMcpDiagramToolHandler} enforces the readonly gate.
|
|
259
263
|
* Adopters don't call this directly.
|
|
@@ -18,7 +18,13 @@ import { ChangeRoutingPointsOperation, CreateEdgeOperation, DiagramConfiguration
|
|
|
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 {
|
|
21
|
+
import {
|
|
22
|
+
ElementIdentity,
|
|
23
|
+
ElementIdentitySchema,
|
|
24
|
+
McpDiagramScopedInputSchema,
|
|
25
|
+
dispatchedCommands,
|
|
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
|
|
|
@@ -53,6 +59,7 @@ export const CreateEdgesValidationResultSchema = z.object({
|
|
|
53
59
|
|
|
54
60
|
export const CreateEdgesOutputSchema = z.object({
|
|
55
61
|
createdEdges: z.array(ElementIdentitySchema).describe('Identity of each edge successfully created. Empty in `dryRun` mode.'),
|
|
62
|
+
dispatchedCommands,
|
|
56
63
|
errors: z.array(z.string()).describe('Per-input failure messages; absent or empty when every input succeeded.'),
|
|
57
64
|
validationResults: z
|
|
58
65
|
.array(CreateEdgesValidationResultSchema)
|
|
@@ -159,7 +166,7 @@ export class CreateEdgesMcpToolHandler extends OperationMcpDiagramToolHandler<Cr
|
|
|
159
166
|
// Per-input errors are surfaced in `errors`; the call itself still succeeds — rolling back partial creates would require operation-level transactions.
|
|
160
167
|
return this.success(
|
|
161
168
|
`Successfully created ${createdEdges.length} edge(s) (in ${dispatchedOperations} commands):\n${successListStr}${formatNoticeList('errors', errors)}`,
|
|
162
|
-
{ createdEdges, errors }
|
|
169
|
+
{ createdEdges, dispatchedCommands: dispatchedOperations, errors }
|
|
163
170
|
);
|
|
164
171
|
}
|
|
165
172
|
|
|
@@ -18,7 +18,13 @@ import { ApplyLabelEditOperation, CreateNodeOperation } from '@eclipse-glsp/serv
|
|
|
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 {
|
|
21
|
+
import {
|
|
22
|
+
ElementIdentity,
|
|
23
|
+
ElementIdentitySchema,
|
|
24
|
+
McpDiagramScopedInputSchema,
|
|
25
|
+
dispatchedCommands,
|
|
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
|
|
|
@@ -43,6 +49,7 @@ export const CreateNodesOutputSchema = z.object({
|
|
|
43
49
|
createdNodes: z
|
|
44
50
|
.array(ElementIdentitySchema)
|
|
45
51
|
.describe('Nodes successfully created, in input order. `label` is only present when the type actually accepted text.'),
|
|
52
|
+
dispatchedCommands,
|
|
46
53
|
errors: z.array(z.string()).describe('Per-input hard-failure messages — the creation could not complete.'),
|
|
47
54
|
warnings: z
|
|
48
55
|
.array(z.string())
|
|
@@ -120,7 +127,7 @@ export class CreateNodesMcpToolHandler extends OperationMcpDiagramToolHandler<Cr
|
|
|
120
127
|
`Successfully created ${createdNodes.length} node(s) (in ${dispatchedOperations} commands):\n${successListStr}` +
|
|
121
128
|
formatNoticeList('errors', errors) +
|
|
122
129
|
formatNoticeList('warnings', warnings),
|
|
123
|
-
{ createdNodes, errors, warnings }
|
|
130
|
+
{ createdNodes, dispatchedCommands: dispatchedOperations, errors, warnings }
|
|
124
131
|
);
|
|
125
132
|
}
|
|
126
133
|
}
|