@ibm/ibmi-mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -0
- package/dist/config/index.d.ts +100 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +463 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/resolver.d.ts +32 -0
- package/dist/config/resolver.d.ts.map +1 -0
- package/dist/config/resolver.js +60 -0
- package/dist/config/resolver.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/crypto.d.ts +11 -0
- package/dist/ibmi-mcp-server/auth/crypto.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/crypto.js +100 -0
- package/dist/ibmi-mcp-server/auth/crypto.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.d.ts +28 -0
- package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js +243 -0
- package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/index.d.ts +9 -0
- package/dist/ibmi-mcp-server/auth/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/index.js +8 -0
- package/dist/ibmi-mcp-server/auth/index.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/tokenManager.d.ts +86 -0
- package/dist/ibmi-mcp-server/auth/tokenManager.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/tokenManager.js +214 -0
- package/dist/ibmi-mcp-server/auth/tokenManager.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/types.d.ts +31 -0
- package/dist/ibmi-mcp-server/auth/types.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/types.js +5 -0
- package/dist/ibmi-mcp-server/auth/types.js.map +1 -0
- package/dist/ibmi-mcp-server/index.d.ts +8 -0
- package/dist/ibmi-mcp-server/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/index.js +126 -0
- package/dist/ibmi-mcp-server/index.js.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/index.d.ts +7 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/index.js +7 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/index.js.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.d.ts +106 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.js +145 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.js.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.d.ts +16 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.js +110 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.js.map +1 -0
- package/dist/ibmi-mcp-server/schemas/common.d.ts +174 -0
- package/dist/ibmi-mcp-server/schemas/common.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/schemas/common.js +119 -0
- package/dist/ibmi-mcp-server/schemas/common.js.map +1 -0
- package/dist/ibmi-mcp-server/schemas/config.d.ts +858 -0
- package/dist/ibmi-mcp-server/schemas/config.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/schemas/config.js +248 -0
- package/dist/ibmi-mcp-server/schemas/config.js.map +1 -0
- package/dist/ibmi-mcp-server/schemas/index.d.ts +12 -0
- package/dist/ibmi-mcp-server/schemas/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/schemas/index.js +20 -0
- package/dist/ibmi-mcp-server/schemas/index.js.map +1 -0
- package/dist/ibmi-mcp-server/schemas/tools.d.ts +287 -0
- package/dist/ibmi-mcp-server/schemas/tools.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/schemas/tools.js +167 -0
- package/dist/ibmi-mcp-server/schemas/tools.js.map +1 -0
- package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts +82 -0
- package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js +262 -0
- package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js.map +1 -0
- package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts +130 -0
- package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/baseConnectionPool.js +431 -0
- package/dist/ibmi-mcp-server/services/baseConnectionPool.js.map +1 -0
- package/dist/ibmi-mcp-server/services/connectionPool.d.ts +60 -0
- package/dist/ibmi-mcp-server/services/connectionPool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/connectionPool.js +153 -0
- package/dist/ibmi-mcp-server/services/connectionPool.js.map +1 -0
- package/dist/ibmi-mcp-server/services/securityValidation.d.ts +35 -0
- package/dist/ibmi-mcp-server/services/securityValidation.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/securityValidation.js +93 -0
- package/dist/ibmi-mcp-server/services/securityValidation.js.map +1 -0
- package/dist/ibmi-mcp-server/services/sourceManager.d.ts +82 -0
- package/dist/ibmi-mcp-server/services/sourceManager.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/sourceManager.js +151 -0
- package/dist/ibmi-mcp-server/services/sourceManager.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts +9 -0
- package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/index.js +9 -0
- package/dist/ibmi-mcp-server/tools/executeSql/index.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts +51 -0
- package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/logic.js +179 -0
- package/dist/ibmi-mcp-server/tools/executeSql/logic.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts +52 -0
- package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/registration.js +161 -0
- package/dist/ibmi-mcp-server/tools/executeSql/registration.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts +13 -0
- package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/index.js +13 -0
- package/dist/ibmi-mcp-server/tools/generateSql/index.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts +64 -0
- package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/logic.js +190 -0
- package/dist/ibmi-mcp-server/tools/generateSql/logic.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts +18 -0
- package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/registration.js +64 -0
- package/dist/ibmi-mcp-server/tools/generateSql/registration.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts +42 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.js +156 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/cli/index.d.ts +6 -0
- package/dist/ibmi-mcp-server/utils/cli/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/cli/index.js +6 -0
- package/dist/ibmi-mcp-server/utils/cli/index.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.d.ts +77 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.js +309 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts +143 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js +665 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigCache.d.ts +71 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigCache.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigCache.js +158 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigCache.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts +206 -0
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js +236 -0
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts +65 -0
- package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolFactory.js +236 -0
- package/dist/ibmi-mcp-server/utils/config/toolFactory.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolProcessor.d.ts +175 -0
- package/dist/ibmi-mcp-server/utils/config/toolProcessor.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolProcessor.js +460 -0
- package/dist/ibmi-mcp-server/utils/config/toolProcessor.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts +126 -0
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.js +240 -0
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/types.d.ts +74 -0
- package/dist/ibmi-mcp-server/utils/config/types.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/types.js +8 -0
- package/dist/ibmi-mcp-server/utils/config/types.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts +116 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js +426 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.d.ts +182 -0
- package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.js +726 -0
- package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.d.ts +90 -0
- package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.js +187 -0
- package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +270 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/constants.d.ts +13 -0
- package/dist/mcp-server/constants.d.ts.map +1 -0
- package/dist/mcp-server/constants.js +13 -0
- package/dist/mcp-server/constants.js.map +1 -0
- package/dist/mcp-server/logging/index.d.ts +8 -0
- package/dist/mcp-server/logging/index.d.ts.map +1 -0
- package/dist/mcp-server/logging/index.js +8 -0
- package/dist/mcp-server/logging/index.js.map +1 -0
- package/dist/mcp-server/logging/setLevelHandler.d.ts +38 -0
- package/dist/mcp-server/logging/setLevelHandler.d.ts.map +1 -0
- package/dist/mcp-server/logging/setLevelHandler.js +83 -0
- package/dist/mcp-server/logging/setLevelHandler.js.map +1 -0
- package/dist/mcp-server/resources/echoResource/index.d.ts +14 -0
- package/dist/mcp-server/resources/echoResource/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/echoResource/index.js +14 -0
- package/dist/mcp-server/resources/echoResource/index.js.map +1 -0
- package/dist/mcp-server/resources/echoResource/logic.d.ts +37 -0
- package/dist/mcp-server/resources/echoResource/logic.d.ts.map +1 -0
- package/dist/mcp-server/resources/echoResource/logic.js +46 -0
- package/dist/mcp-server/resources/echoResource/logic.js.map +1 -0
- package/dist/mcp-server/resources/echoResource/registration.d.ts +7 -0
- package/dist/mcp-server/resources/echoResource/registration.d.ts.map +1 -0
- package/dist/mcp-server/resources/echoResource/registration.js +51 -0
- package/dist/mcp-server/resources/echoResource/registration.js.map +1 -0
- package/dist/mcp-server/resources/index.d.ts +10 -0
- package/dist/mcp-server/resources/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/index.js +19 -0
- package/dist/mcp-server/resources/index.js.map +1 -0
- package/dist/mcp-server/resources/utils/resource-utils.d.ts +43 -0
- package/dist/mcp-server/resources/utils/resource-utils.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/resource-utils.js +44 -0
- package/dist/mcp-server/resources/utils/resource-utils.js.map +1 -0
- package/dist/mcp-server/server.d.ts +23 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +114 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/index.d.ts +8 -0
- package/dist/mcp-server/tools/catFactFetcher/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/index.js +8 -0
- package/dist/mcp-server/tools/catFactFetcher/index.js.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/logic.d.ts +52 -0
- package/dist/mcp-server/tools/catFactFetcher/logic.d.ts.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/logic.js +95 -0
- package/dist/mcp-server/tools/catFactFetcher/logic.js.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/registration.d.ts +9 -0
- package/dist/mcp-server/tools/catFactFetcher/registration.d.ts.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/registration.js +43 -0
- package/dist/mcp-server/tools/catFactFetcher/registration.js.map +1 -0
- package/dist/mcp-server/tools/echoTool/index.d.ts +13 -0
- package/dist/mcp-server/tools/echoTool/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/echoTool/index.js +13 -0
- package/dist/mcp-server/tools/echoTool/index.js.map +1 -0
- package/dist/mcp-server/tools/echoTool/logic.d.ts +69 -0
- package/dist/mcp-server/tools/echoTool/logic.d.ts.map +1 -0
- package/dist/mcp-server/tools/echoTool/logic.js +119 -0
- package/dist/mcp-server/tools/echoTool/logic.js.map +1 -0
- package/dist/mcp-server/tools/echoTool/registration.d.ts +9 -0
- package/dist/mcp-server/tools/echoTool/registration.d.ts.map +1 -0
- package/dist/mcp-server/tools/echoTool/registration.js +45 -0
- package/dist/mcp-server/tools/echoTool/registration.js.map +1 -0
- package/dist/mcp-server/tools/imageTest/index.d.ts +7 -0
- package/dist/mcp-server/tools/imageTest/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/imageTest/index.js +7 -0
- package/dist/mcp-server/tools/imageTest/index.js.map +1 -0
- package/dist/mcp-server/tools/imageTest/logic.d.ts +27 -0
- package/dist/mcp-server/tools/imageTest/logic.d.ts.map +1 -0
- package/dist/mcp-server/tools/imageTest/logic.js +44 -0
- package/dist/mcp-server/tools/imageTest/logic.js.map +1 -0
- package/dist/mcp-server/tools/imageTest/registration.d.ts +9 -0
- package/dist/mcp-server/tools/imageTest/registration.d.ts.map +1 -0
- package/dist/mcp-server/tools/imageTest/registration.js +49 -0
- package/dist/mcp-server/tools/imageTest/registration.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +4 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.js +13 -0
- package/dist/mcp-server/tools/index.js.map +1 -0
- package/dist/mcp-server/tools/utils/tool-utils.d.ts +43 -0
- package/dist/mcp-server/tools/utils/tool-utils.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/tool-utils.js +44 -0
- package/dist/mcp-server/tools/utils/tool-utils.js.map +1 -0
- package/dist/mcp-server/transports/auth/authFactory.d.ts +11 -0
- package/dist/mcp-server/transports/auth/authFactory.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/authFactory.js +46 -0
- package/dist/mcp-server/transports/auth/authFactory.js.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts +20 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.js +58 -0
- package/dist/mcp-server/transports/auth/authMiddleware.js.map +1 -0
- package/dist/mcp-server/transports/auth/index.d.ts +14 -0
- package/dist/mcp-server/transports/auth/index.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/index.js +12 -0
- package/dist/mcp-server/transports/auth/index.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authContext.d.ts +34 -0
- package/dist/mcp-server/transports/auth/lib/authContext.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authContext.js +25 -0
- package/dist/mcp-server/transports/auth/lib/authContext.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +15 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js +9 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +19 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js +53 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts +18 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.js +2 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.d.ts +21 -0
- package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.js +64 -0
- package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts +8 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +118 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts +8 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +118 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -0
- package/dist/mcp-server/transports/core/autoTransportManager.d.ts +48 -0
- package/dist/mcp-server/transports/core/autoTransportManager.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/autoTransportManager.js +57 -0
- package/dist/mcp-server/transports/core/autoTransportManager.js.map +1 -0
- package/dist/mcp-server/transports/core/baseTransportManager.d.ts +17 -0
- package/dist/mcp-server/transports/core/baseTransportManager.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/baseTransportManager.js +20 -0
- package/dist/mcp-server/transports/core/baseTransportManager.js.map +1 -0
- package/dist/mcp-server/transports/core/headerUtils.d.ts +27 -0
- package/dist/mcp-server/transports/core/headerUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/headerUtils.js +53 -0
- package/dist/mcp-server/transports/core/headerUtils.js.map +1 -0
- package/dist/mcp-server/transports/core/honoNodeBridge.d.ts +77 -0
- package/dist/mcp-server/transports/core/honoNodeBridge.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/honoNodeBridge.js +150 -0
- package/dist/mcp-server/transports/core/honoNodeBridge.js.map +1 -0
- package/dist/mcp-server/transports/core/statefulTransportManager.d.ts +81 -0
- package/dist/mcp-server/transports/core/statefulTransportManager.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/statefulTransportManager.js +326 -0
- package/dist/mcp-server/transports/core/statefulTransportManager.js.map +1 -0
- package/dist/mcp-server/transports/core/statelessTransportManager.d.ts +57 -0
- package/dist/mcp-server/transports/core/statelessTransportManager.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/statelessTransportManager.js +151 -0
- package/dist/mcp-server/transports/core/statelessTransportManager.js.map +1 -0
- package/dist/mcp-server/transports/core/transportRequest.d.ts +9 -0
- package/dist/mcp-server/transports/core/transportRequest.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/transportRequest.js +2 -0
- package/dist/mcp-server/transports/core/transportRequest.js.map +1 -0
- package/dist/mcp-server/transports/core/transportTypes.d.ts +112 -0
- package/dist/mcp-server/transports/core/transportTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/transportTypes.js +15 -0
- package/dist/mcp-server/transports/core/transportTypes.js.map +1 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts +25 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.js +86 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts +27 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.js +407 -0
- package/dist/mcp-server/transports/http/httpTransport.js.map +1 -0
- package/dist/mcp-server/transports/http/httpTypes.d.ts +17 -0
- package/dist/mcp-server/transports/http/httpTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpTypes.js +6 -0
- package/dist/mcp-server/transports/http/httpTypes.js.map +1 -0
- package/dist/mcp-server/transports/http/index.d.ts +8 -0
- package/dist/mcp-server/transports/http/index.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/index.js +7 -0
- package/dist/mcp-server/transports/http/index.js.map +1 -0
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts +21 -0
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.js +54 -0
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.js.map +1 -0
- package/dist/mcp-server/transports/stdio/index.d.ts +6 -0
- package/dist/mcp-server/transports/stdio/index.d.ts.map +1 -0
- package/dist/mcp-server/transports/stdio/index.js +6 -0
- package/dist/mcp-server/transports/stdio/index.js.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +43 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js +71 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -0
- package/dist/services/duck-db/duckDBConnectionManager.d.ts +55 -0
- package/dist/services/duck-db/duckDBConnectionManager.d.ts.map +1 -0
- package/dist/services/duck-db/duckDBConnectionManager.js +184 -0
- package/dist/services/duck-db/duckDBConnectionManager.js.map +1 -0
- package/dist/services/duck-db/duckDBQueryExecutor.d.ts +18 -0
- package/dist/services/duck-db/duckDBQueryExecutor.d.ts.map +1 -0
- package/dist/services/duck-db/duckDBQueryExecutor.js +115 -0
- package/dist/services/duck-db/duckDBQueryExecutor.js.map +1 -0
- package/dist/services/duck-db/duckDBService.d.ts +27 -0
- package/dist/services/duck-db/duckDBService.d.ts.map +1 -0
- package/dist/services/duck-db/duckDBService.js +151 -0
- package/dist/services/duck-db/duckDBService.js.map +1 -0
- package/dist/services/duck-db/types.d.ts +135 -0
- package/dist/services/duck-db/types.d.ts.map +1 -0
- package/dist/services/duck-db/types.js +6 -0
- package/dist/services/duck-db/types.js.map +1 -0
- package/dist/services/llm-providers/openRouterProvider.d.ts +36 -0
- package/dist/services/llm-providers/openRouterProvider.d.ts.map +1 -0
- package/dist/services/llm-providers/openRouterProvider.js +235 -0
- package/dist/services/llm-providers/openRouterProvider.js.map +1 -0
- package/dist/services/supabase/supabaseClient.d.ts +25 -0
- package/dist/services/supabase/supabaseClient.d.ts.map +1 -0
- package/dist/services/supabase/supabaseClient.js +68 -0
- package/dist/services/supabase/supabaseClient.js.map +1 -0
- package/dist/storage/duckdbExample.d.ts +8 -0
- package/dist/storage/duckdbExample.d.ts.map +1 -0
- package/dist/storage/duckdbExample.js +197 -0
- package/dist/storage/duckdbExample.js.map +1 -0
- package/dist/types-global/errors.d.ts +101 -0
- package/dist/types-global/errors.d.ts.map +1 -0
- package/dist/types-global/errors.js +109 -0
- package/dist/types-global/errors.js.map +1 -0
- package/dist/utils/formatting/index.d.ts +10 -0
- package/dist/utils/formatting/index.d.ts.map +1 -0
- package/dist/utils/formatting/index.js +10 -0
- package/dist/utils/formatting/index.js.map +1 -0
- package/dist/utils/formatting/markdownBuilder.d.ts +348 -0
- package/dist/utils/formatting/markdownBuilder.d.ts.map +1 -0
- package/dist/utils/formatting/markdownBuilder.js +501 -0
- package/dist/utils/formatting/markdownBuilder.js.map +1 -0
- package/dist/utils/formatting/sqlFormattingUtils.d.ts +69 -0
- package/dist/utils/formatting/sqlFormattingUtils.d.ts.map +1 -0
- package/dist/utils/formatting/sqlFormattingUtils.js +131 -0
- package/dist/utils/formatting/sqlFormattingUtils.js.map +1 -0
- package/dist/utils/formatting/tableFormatter.d.ts +268 -0
- package/dist/utils/formatting/tableFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/tableFormatter.js +550 -0
- package/dist/utils/formatting/tableFormatter.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/internal/asyncContext.d.ts +35 -0
- package/dist/utils/internal/asyncContext.d.ts.map +1 -0
- package/dist/utils/internal/asyncContext.js +38 -0
- package/dist/utils/internal/asyncContext.js.map +1 -0
- package/dist/utils/internal/errorHandler.d.ts +95 -0
- package/dist/utils/internal/errorHandler.d.ts.map +1 -0
- package/dist/utils/internal/errorHandler.js +210 -0
- package/dist/utils/internal/errorHandler.js.map +1 -0
- package/dist/utils/internal/index.d.ts +12 -0
- package/dist/utils/internal/index.d.ts.map +1 -0
- package/dist/utils/internal/index.js +12 -0
- package/dist/utils/internal/index.js.map +1 -0
- package/dist/utils/internal/logger.d.ts +30 -0
- package/dist/utils/internal/logger.d.ts.map +1 -0
- package/dist/utils/internal/logger.js +228 -0
- package/dist/utils/internal/logger.js.map +1 -0
- package/dist/utils/internal/logging-helpers.d.ts +49 -0
- package/dist/utils/internal/logging-helpers.d.ts.map +1 -0
- package/dist/utils/internal/logging-helpers.js +60 -0
- package/dist/utils/internal/logging-helpers.js.map +1 -0
- package/dist/utils/internal/performance.d.ts +19 -0
- package/dist/utils/internal/performance.d.ts.map +1 -0
- package/dist/utils/internal/performance.js +110 -0
- package/dist/utils/internal/performance.js.map +1 -0
- package/dist/utils/internal/requestContext.d.ts +41 -0
- package/dist/utils/internal/requestContext.d.ts.map +1 -0
- package/dist/utils/internal/requestContext.js +47 -0
- package/dist/utils/internal/requestContext.js.map +1 -0
- package/dist/utils/metrics/index.d.ts +8 -0
- package/dist/utils/metrics/index.d.ts.map +1 -0
- package/dist/utils/metrics/index.js +8 -0
- package/dist/utils/metrics/index.js.map +1 -0
- package/dist/utils/metrics/tokenCounter.d.ts +36 -0
- package/dist/utils/metrics/tokenCounter.d.ts.map +1 -0
- package/dist/utils/metrics/tokenCounter.js +115 -0
- package/dist/utils/metrics/tokenCounter.js.map +1 -0
- package/dist/utils/network/fetchWithTimeout.d.ts +22 -0
- package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -0
- package/dist/utils/network/fetchWithTimeout.js +78 -0
- package/dist/utils/network/fetchWithTimeout.js.map +1 -0
- package/dist/utils/network/index.d.ts +7 -0
- package/dist/utils/network/index.d.ts.map +1 -0
- package/dist/utils/network/index.js +6 -0
- package/dist/utils/network/index.js.map +1 -0
- package/dist/utils/parsing/dateParser.d.ts +73 -0
- package/dist/utils/parsing/dateParser.d.ts.map +1 -0
- package/dist/utils/parsing/dateParser.js +108 -0
- package/dist/utils/parsing/dateParser.js.map +1 -0
- package/dist/utils/parsing/index.d.ts +9 -0
- package/dist/utils/parsing/index.d.ts.map +1 -0
- package/dist/utils/parsing/index.js +9 -0
- package/dist/utils/parsing/index.js.map +1 -0
- package/dist/utils/parsing/jsonParser.d.ts +83 -0
- package/dist/utils/parsing/jsonParser.d.ts.map +1 -0
- package/dist/utils/parsing/jsonParser.js +128 -0
- package/dist/utils/parsing/jsonParser.js.map +1 -0
- package/dist/utils/scheduling/index.d.ts +7 -0
- package/dist/utils/scheduling/index.d.ts.map +1 -0
- package/dist/utils/scheduling/index.js +7 -0
- package/dist/utils/scheduling/index.js.map +1 -0
- package/dist/utils/scheduling/scheduler.d.ts +73 -0
- package/dist/utils/scheduling/scheduler.d.ts.map +1 -0
- package/dist/utils/scheduling/scheduler.js +155 -0
- package/dist/utils/scheduling/scheduler.js.map +1 -0
- package/dist/utils/security/idGenerator.d.ts +144 -0
- package/dist/utils/security/idGenerator.d.ts.map +1 -0
- package/dist/utils/security/idGenerator.js +232 -0
- package/dist/utils/security/idGenerator.js.map +1 -0
- package/dist/utils/security/index.d.ts +10 -0
- package/dist/utils/security/index.d.ts.map +1 -0
- package/dist/utils/security/index.js +10 -0
- package/dist/utils/security/index.js.map +1 -0
- package/dist/utils/security/rateLimiter.d.ts +109 -0
- package/dist/utils/security/rateLimiter.d.ts.map +1 -0
- package/dist/utils/security/rateLimiter.js +202 -0
- package/dist/utils/security/rateLimiter.js.map +1 -0
- package/dist/utils/security/sanitization.d.ts +185 -0
- package/dist/utils/security/sanitization.d.ts.map +1 -0
- package/dist/utils/security/sanitization.js +472 -0
- package/dist/utils/security/sanitization.js.map +1 -0
- package/dist/utils/telemetry/instrumentation.d.ts +8 -0
- package/dist/utils/telemetry/instrumentation.d.ts.map +1 -0
- package/dist/utils/telemetry/instrumentation.js +121 -0
- package/dist/utils/telemetry/instrumentation.js.map +1 -0
- package/dist/utils/telemetry/semconv.d.ts +16 -0
- package/dist/utils/telemetry/semconv.d.ts.map +1 -0
- package/dist/utils/telemetry/semconv.js +16 -0
- package/dist/utils/telemetry/semconv.js.map +1 -0
- package/package.json +161 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Implements a stateful transport manager for the MCP SDK.
|
|
3
|
+
*
|
|
4
|
+
* This manager handles multiple, persistent MCP sessions. It creates and maintains
|
|
5
|
+
* a dedicated McpServer and StreamableHTTPServerTransport instance for each session,
|
|
6
|
+
* allowing for stateful, multi-turn interactions. It includes robust mechanisms for
|
|
7
|
+
* session lifecycle management, including garbage collection of stale sessions and
|
|
8
|
+
* concurrency controls to prevent race conditions.
|
|
9
|
+
*
|
|
10
|
+
* SCALABILITY NOTE: This manager maintains all session state in local process memory.
|
|
11
|
+
* For horizontal scaling across multiple server instances, a load balancer with
|
|
12
|
+
* sticky sessions (session affinity) is required to ensure that all requests for a
|
|
13
|
+
* given session are routed to the same process instance that holds that session's state.
|
|
14
|
+
*
|
|
15
|
+
* @module src/mcp-server/transports/core/statefulTransportManager
|
|
16
|
+
*/
|
|
17
|
+
import { JsonRpcErrorCode, McpError } from "../../../types-global/errors.js";
|
|
18
|
+
import { ErrorHandler, logger, requestContextService, } from "../../../utils/index.js";
|
|
19
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
20
|
+
import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
|
21
|
+
import { randomUUID } from "node:crypto";
|
|
22
|
+
import { Readable } from "stream";
|
|
23
|
+
import { BaseTransportManager } from "./baseTransportManager.js";
|
|
24
|
+
import { convertNodeHeadersToWebHeaders } from "./headerUtils.js";
|
|
25
|
+
import { HonoStreamResponse } from "./honoNodeBridge.js";
|
|
26
|
+
import { SessionState, // Import SessionState
|
|
27
|
+
} from "./transportTypes.js";
|
|
28
|
+
/**
|
|
29
|
+
* Manages persistent, stateful MCP sessions.
|
|
30
|
+
*/
|
|
31
|
+
export class StatefulTransportManager extends BaseTransportManager {
|
|
32
|
+
transports = new Map();
|
|
33
|
+
servers = new Map();
|
|
34
|
+
sessions = new Map();
|
|
35
|
+
garbageCollector;
|
|
36
|
+
options;
|
|
37
|
+
/**
|
|
38
|
+
* @param createServerInstanceFn - A factory function to create new McpServer instances.
|
|
39
|
+
* @param options - Configuration options for the manager.
|
|
40
|
+
*/
|
|
41
|
+
constructor(createServerInstanceFn, options) {
|
|
42
|
+
super(createServerInstanceFn);
|
|
43
|
+
this.options = options;
|
|
44
|
+
const context = requestContextService.createRequestContext({
|
|
45
|
+
operation: "StatefulTransportManager.constructor",
|
|
46
|
+
});
|
|
47
|
+
logger.info(context, "Starting session garbage collector.");
|
|
48
|
+
const intervalMs = Math.max(10_000, Math.floor(this.options.staleSessionTimeoutMs / 2));
|
|
49
|
+
this.garbageCollector = setInterval(() => this.cleanupStaleSessions(), intervalMs);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Initializes a new stateful session and handles the first request.
|
|
53
|
+
*
|
|
54
|
+
* @param headers - The incoming request headers.
|
|
55
|
+
* @param body - The parsed body of the request.
|
|
56
|
+
* @param context - The request context.
|
|
57
|
+
* @returns A promise resolving to a streaming TransportResponse with a session ID.
|
|
58
|
+
* @private
|
|
59
|
+
*/
|
|
60
|
+
async initializeAndHandle(headers, body, context) {
|
|
61
|
+
const opContext = {
|
|
62
|
+
...context,
|
|
63
|
+
operation: "StatefulTransportManager.initializeAndHandle",
|
|
64
|
+
};
|
|
65
|
+
logger.debug(opContext, "Initializing new stateful session.");
|
|
66
|
+
let server;
|
|
67
|
+
let transport;
|
|
68
|
+
try {
|
|
69
|
+
server = await this.createServerInstanceFn();
|
|
70
|
+
const mockRes = new HonoStreamResponse();
|
|
71
|
+
const currentServer = server;
|
|
72
|
+
transport = new StreamableHTTPServerTransport({
|
|
73
|
+
sessionIdGenerator: () => randomUUID(),
|
|
74
|
+
onsessioninitialized: (sessionId) => {
|
|
75
|
+
const sessionContext = { ...opContext, sessionId };
|
|
76
|
+
this.transports.set(sessionId, transport);
|
|
77
|
+
this.servers.set(sessionId, currentServer);
|
|
78
|
+
this.sessions.set(sessionId, {
|
|
79
|
+
id: sessionId,
|
|
80
|
+
state: SessionState.ACTIVE, // Set initial state
|
|
81
|
+
createdAt: new Date(),
|
|
82
|
+
lastAccessedAt: new Date(),
|
|
83
|
+
activeRequests: 0,
|
|
84
|
+
});
|
|
85
|
+
logger.info(sessionContext, `MCP Session created: ${sessionId}`);
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
transport.onclose = () => {
|
|
89
|
+
const sessionId = transport.sessionId;
|
|
90
|
+
if (sessionId) {
|
|
91
|
+
const closeContext = { ...opContext, sessionId };
|
|
92
|
+
this.closeSession(sessionId, closeContext).catch((err) => logger.error({ error: err, ...closeContext }, `Error during transport.onclose cleanup for session ${sessionId}`));
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
await server.connect(transport);
|
|
96
|
+
logger.debug(opContext, "Server connected, handling initial request.");
|
|
97
|
+
const mockReq = {
|
|
98
|
+
headers,
|
|
99
|
+
method: "POST",
|
|
100
|
+
url: this.options.mcpHttpEndpointPath,
|
|
101
|
+
};
|
|
102
|
+
await transport.handleRequest(mockReq, mockRes, body);
|
|
103
|
+
const responseHeaders = convertNodeHeadersToWebHeaders(mockRes.getHeaders());
|
|
104
|
+
if (transport.sessionId) {
|
|
105
|
+
responseHeaders.set("Mcp-Session-Id", transport.sessionId);
|
|
106
|
+
}
|
|
107
|
+
const webStream = Readable.toWeb(mockRes);
|
|
108
|
+
return {
|
|
109
|
+
type: "stream",
|
|
110
|
+
headers: responseHeaders,
|
|
111
|
+
statusCode: mockRes.statusCode,
|
|
112
|
+
stream: webStream,
|
|
113
|
+
sessionId: transport.sessionId,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
logger.error({ ...opContext, error: error }, "Failed to initialize stateful session. Cleaning up orphaned resources.");
|
|
118
|
+
const sessionInitialized = transport?.sessionId && this.transports.has(transport.sessionId);
|
|
119
|
+
if (!sessionInitialized) {
|
|
120
|
+
(async () => {
|
|
121
|
+
await ErrorHandler.tryCatch(async () => {
|
|
122
|
+
if (transport)
|
|
123
|
+
await transport.close();
|
|
124
|
+
if (server)
|
|
125
|
+
await server.close();
|
|
126
|
+
}, {
|
|
127
|
+
operation: "initializeAndHandle.cleanupOrphaned",
|
|
128
|
+
context: opContext,
|
|
129
|
+
});
|
|
130
|
+
})();
|
|
131
|
+
}
|
|
132
|
+
throw ErrorHandler.handleError(error, {
|
|
133
|
+
operation: opContext.operation,
|
|
134
|
+
context: opContext,
|
|
135
|
+
rethrow: true,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The new public entry point that conforms to the TransportManager interface.
|
|
141
|
+
* It routes the request to the appropriate handler based on whether it's an
|
|
142
|
+
* initialization request or a subsequent request for an existing session.
|
|
143
|
+
*/
|
|
144
|
+
async handleRequest(request) {
|
|
145
|
+
const { headers, body, context, sessionId } = request;
|
|
146
|
+
if (sessionId) {
|
|
147
|
+
const sessionContext = {
|
|
148
|
+
...context,
|
|
149
|
+
sessionId,
|
|
150
|
+
operation: "StatefulTransportManager.handleRequest",
|
|
151
|
+
};
|
|
152
|
+
const transport = this.transports.get(sessionId);
|
|
153
|
+
const session = this.sessions.get(sessionId);
|
|
154
|
+
if (!transport || !session) {
|
|
155
|
+
logger.warning(sessionContext, `Request for non-existent session: ${sessionId}`);
|
|
156
|
+
return {
|
|
157
|
+
type: "buffered",
|
|
158
|
+
headers: new Headers({ "Content-Type": "application/json" }),
|
|
159
|
+
statusCode: 404,
|
|
160
|
+
body: {
|
|
161
|
+
jsonrpc: "2.0",
|
|
162
|
+
error: { code: -32601, message: "Session not found" },
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Check session state before accepting the request
|
|
167
|
+
if (session.state === SessionState.CLOSING) {
|
|
168
|
+
logger.warning(sessionContext, `Request received for session in CLOSING state: ${sessionId}`);
|
|
169
|
+
throw new McpError(JsonRpcErrorCode.Conflict, // Use Conflict status
|
|
170
|
+
"Session is currently closing. Please start a new session.", sessionContext);
|
|
171
|
+
}
|
|
172
|
+
session.lastAccessedAt = new Date();
|
|
173
|
+
session.activeRequests += 1;
|
|
174
|
+
logger.debug(sessionContext, `Incremented activeRequests for session ${sessionId}. Count: ${session.activeRequests}`);
|
|
175
|
+
try {
|
|
176
|
+
const mockReq = {
|
|
177
|
+
headers,
|
|
178
|
+
method: "POST",
|
|
179
|
+
url: this.options.mcpHttpEndpointPath,
|
|
180
|
+
};
|
|
181
|
+
const mockRes = new HonoStreamResponse();
|
|
182
|
+
await transport.handleRequest(mockReq, mockRes, body);
|
|
183
|
+
const responseHeaders = convertNodeHeadersToWebHeaders(mockRes.getHeaders());
|
|
184
|
+
const webStream = Readable.toWeb(mockRes);
|
|
185
|
+
return {
|
|
186
|
+
type: "stream",
|
|
187
|
+
headers: responseHeaders,
|
|
188
|
+
statusCode: mockRes.statusCode,
|
|
189
|
+
stream: webStream,
|
|
190
|
+
sessionId: transport.sessionId,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
throw ErrorHandler.handleError(error, {
|
|
195
|
+
operation: sessionContext.operation,
|
|
196
|
+
context: sessionContext,
|
|
197
|
+
rethrow: true,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
session.activeRequests -= 1;
|
|
202
|
+
session.lastAccessedAt = new Date();
|
|
203
|
+
logger.debug(sessionContext, `Decremented activeRequests for session ${sessionId}. Count: ${session.activeRequests}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (isInitializeRequest(body)) {
|
|
207
|
+
return this.initializeAndHandle(headers, body, context);
|
|
208
|
+
}
|
|
209
|
+
throw new McpError(JsonRpcErrorCode.InvalidRequest, "A session ID or an initialize request is required for stateful mode.", context);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Handles a request to explicitly delete a session.
|
|
213
|
+
*/
|
|
214
|
+
async handleDeleteRequest(sessionId, context) {
|
|
215
|
+
const sessionContext = {
|
|
216
|
+
...context,
|
|
217
|
+
sessionId,
|
|
218
|
+
operation: "StatefulTransportManager.handleDeleteRequest",
|
|
219
|
+
};
|
|
220
|
+
logger.info(sessionContext, `Attempting to delete session: ${sessionId}`);
|
|
221
|
+
if (!this.transports.has(sessionId)) {
|
|
222
|
+
logger.warning(sessionContext, `Attempted to delete non-existent session: ${sessionId}`);
|
|
223
|
+
throw new McpError(JsonRpcErrorCode.NotFound, "Session not found or expired.", sessionContext);
|
|
224
|
+
}
|
|
225
|
+
await this.closeSession(sessionId, sessionContext);
|
|
226
|
+
return {
|
|
227
|
+
type: "buffered",
|
|
228
|
+
headers: new Headers({ "Content-Type": "application/json" }),
|
|
229
|
+
statusCode: 200,
|
|
230
|
+
body: { status: "session_closed", sessionId },
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Retrieves information about a specific session.
|
|
235
|
+
*/
|
|
236
|
+
getSession(sessionId) {
|
|
237
|
+
return this.sessions.get(sessionId);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Gracefully shuts down the manager, closing all active sessions.
|
|
241
|
+
*/
|
|
242
|
+
async shutdown() {
|
|
243
|
+
const context = requestContextService.createRequestContext({
|
|
244
|
+
operation: "StatefulTransportManager.shutdown",
|
|
245
|
+
});
|
|
246
|
+
logger.info(context, "Shutting down stateful transport manager...");
|
|
247
|
+
clearInterval(this.garbageCollector);
|
|
248
|
+
logger.debug(context, "Garbage collector stopped.");
|
|
249
|
+
const sessionIds = Array.from(this.transports.keys());
|
|
250
|
+
if (sessionIds.length > 0) {
|
|
251
|
+
logger.info(context, `Closing ${sessionIds.length} active sessions.`);
|
|
252
|
+
const closePromises = sessionIds.map((sessionId) => this.closeSession(sessionId, context));
|
|
253
|
+
await Promise.all(closePromises);
|
|
254
|
+
}
|
|
255
|
+
this.transports.clear();
|
|
256
|
+
this.sessions.clear();
|
|
257
|
+
this.servers.clear();
|
|
258
|
+
logger.info(context, "All active sessions closed and manager shut down.");
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Closes a single session and releases its associated resources.
|
|
262
|
+
*/
|
|
263
|
+
async closeSession(sessionId, context) {
|
|
264
|
+
const sessionContext = {
|
|
265
|
+
...context,
|
|
266
|
+
sessionId,
|
|
267
|
+
operation: "StatefulTransportManager.closeSession",
|
|
268
|
+
};
|
|
269
|
+
logger.debug(sessionContext, `Closing session: ${sessionId}`);
|
|
270
|
+
const session = this.sessions.get(sessionId);
|
|
271
|
+
if (!session) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
if (session.state === SessionState.CLOSING) {
|
|
275
|
+
logger.debug(sessionContext, `Session is already in CLOSING state.`);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
session.state = SessionState.CLOSING;
|
|
279
|
+
logger.debug(sessionContext, `Marking session ${sessionId} as CLOSING.`);
|
|
280
|
+
const transport = this.transports.get(sessionId);
|
|
281
|
+
const server = this.servers.get(sessionId);
|
|
282
|
+
await ErrorHandler.tryCatch(async () => {
|
|
283
|
+
if (transport)
|
|
284
|
+
await transport.close();
|
|
285
|
+
if (server)
|
|
286
|
+
await server.close();
|
|
287
|
+
}, { operation: "closeSession.cleanup", context: sessionContext });
|
|
288
|
+
this.transports.delete(sessionId);
|
|
289
|
+
this.servers.delete(sessionId);
|
|
290
|
+
this.sessions.delete(sessionId);
|
|
291
|
+
logger.info(sessionContext, `MCP Session closed and resources released: ${sessionId}`);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Periodically runs to find and clean up stale, inactive sessions.
|
|
295
|
+
*/
|
|
296
|
+
async cleanupStaleSessions() {
|
|
297
|
+
const context = requestContextService.createRequestContext({
|
|
298
|
+
operation: "StatefulTransportManager.cleanupStaleSessions",
|
|
299
|
+
});
|
|
300
|
+
logger.debug(context, "Running stale session cleanup...");
|
|
301
|
+
const now = Date.now();
|
|
302
|
+
const STALE_TIMEOUT_MS = this.options.staleSessionTimeoutMs;
|
|
303
|
+
const staleSessionIds = [];
|
|
304
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
305
|
+
if (now - session.lastAccessedAt.getTime() > STALE_TIMEOUT_MS) {
|
|
306
|
+
if (session.activeRequests > 0) {
|
|
307
|
+
logger.info({ ...context, sessionId }, `Session ${sessionId} is stale but has ${session.activeRequests} active requests. Skipping cleanup.`);
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
staleSessionIds.push(sessionId);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (staleSessionIds.length > 0) {
|
|
314
|
+
logger.info(context, `Found ${staleSessionIds.length} stale sessions. Closing concurrently.`);
|
|
315
|
+
const closePromises = staleSessionIds.map((sessionId) => this.closeSession(sessionId, context).catch((err) => {
|
|
316
|
+
logger.error({ error: err, ...context, sessionId }, `Error during concurrent stale session cleanup for ${sessionId}`);
|
|
317
|
+
}));
|
|
318
|
+
await Promise.all(closePromises);
|
|
319
|
+
logger.info(context, `Stale session cleanup complete. Closed ${staleSessionIds.length} sessions.`);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
logger.debug(context, "No stale sessions found.");
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=statefulTransportManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statefulTransportManager.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/core/statefulTransportManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Implements a stateless transport manager for the MCP SDK.
|
|
3
|
+
*
|
|
4
|
+
* This manager handles single, ephemeral MCP operations. For each incoming request,
|
|
5
|
+
* it dynamically creates a temporary McpServer and transport instance, processes the
|
|
6
|
+
* request, and then immediately schedules the resources for cleanup. This approach
|
|
7
|
+
* is ideal for simple, one-off tool calls that do not require persistent session state.
|
|
8
|
+
*
|
|
9
|
+
* The key challenge addressed here is bridging the Node.js-centric MCP SDK with
|
|
10
|
+
* modern, Web Standards-based frameworks like Hono. This is achieved by deferring
|
|
11
|
+
* resource cleanup until the response stream has been fully consumed by the web
|
|
12
|
+
* framework, preventing premature closure and truncated responses.
|
|
13
|
+
*
|
|
14
|
+
* @module src/mcp-server/transports/core/statelessTransportManager
|
|
15
|
+
*/
|
|
16
|
+
import { BaseTransportManager } from "./baseTransportManager.js";
|
|
17
|
+
import { McpTransportRequest } from "./transportRequest.js";
|
|
18
|
+
import { TransportResponse } from "./transportTypes.js";
|
|
19
|
+
/**
|
|
20
|
+
* Manages ephemeral, single-request MCP operations.
|
|
21
|
+
*/
|
|
22
|
+
export declare class StatelessTransportManager extends BaseTransportManager {
|
|
23
|
+
/**
|
|
24
|
+
* Handles a single, stateless MCP request.
|
|
25
|
+
*
|
|
26
|
+
* This method orchestrates the creation of temporary server and transport instances,
|
|
27
|
+
* handles the request, and ensures resources are cleaned up only after the
|
|
28
|
+
* response stream is closed.
|
|
29
|
+
*
|
|
30
|
+
* @param headers - The incoming request headers.
|
|
31
|
+
* @param body - The parsed body of the request.
|
|
32
|
+
* @param context - The request context for logging and tracing.
|
|
33
|
+
* @returns A promise resolving to a streaming TransportResponse.
|
|
34
|
+
*/
|
|
35
|
+
handleRequest({ headers, body, context, }: McpTransportRequest): Promise<TransportResponse>;
|
|
36
|
+
/**
|
|
37
|
+
* Attaches listeners to the response stream to trigger resource cleanup
|
|
38
|
+
* only after the stream has been fully consumed or has errored.
|
|
39
|
+
*
|
|
40
|
+
* @param stream - The response stream bridge.
|
|
41
|
+
* @param server - The ephemeral McpServer instance.
|
|
42
|
+
* @param transport - The ephemeral transport instance.
|
|
43
|
+
* @param context - The request context for logging.
|
|
44
|
+
*/
|
|
45
|
+
private setupDeferredCleanup;
|
|
46
|
+
/**
|
|
47
|
+
* Performs the actual cleanup of ephemeral resources.
|
|
48
|
+
* This method is designed to be "fire-and-forget".
|
|
49
|
+
*/
|
|
50
|
+
private cleanup;
|
|
51
|
+
/**
|
|
52
|
+
* Shuts down the manager. For the stateless manager, this is a no-op
|
|
53
|
+
* as there are no persistent resources to manage.
|
|
54
|
+
*/
|
|
55
|
+
shutdown(): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=statelessTransportManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statelessTransportManager.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/transports/core/statelessTransportManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAkB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExE;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,oBAAoB;IACjE;;;;;;;;;;;OAWG;IACG,aAAa,CAAC,EAClB,OAAO,EACP,IAAI,EACJ,OAAO,GACR,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoEnD;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;;OAGG;IACH,OAAO,CAAC,OAAO;IA0Bf;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAUhC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Implements a stateless transport manager for the MCP SDK.
|
|
3
|
+
*
|
|
4
|
+
* This manager handles single, ephemeral MCP operations. For each incoming request,
|
|
5
|
+
* it dynamically creates a temporary McpServer and transport instance, processes the
|
|
6
|
+
* request, and then immediately schedules the resources for cleanup. This approach
|
|
7
|
+
* is ideal for simple, one-off tool calls that do not require persistent session state.
|
|
8
|
+
*
|
|
9
|
+
* The key challenge addressed here is bridging the Node.js-centric MCP SDK with
|
|
10
|
+
* modern, Web Standards-based frameworks like Hono. This is achieved by deferring
|
|
11
|
+
* resource cleanup until the response stream has been fully consumed by the web
|
|
12
|
+
* framework, preventing premature closure and truncated responses.
|
|
13
|
+
*
|
|
14
|
+
* @module src/mcp-server/transports/core/statelessTransportManager
|
|
15
|
+
*/
|
|
16
|
+
import { ErrorHandler, logger, requestContextService, } from "../../../utils/index.js";
|
|
17
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
18
|
+
import { Readable } from "stream";
|
|
19
|
+
import { BaseTransportManager } from "./baseTransportManager.js";
|
|
20
|
+
import { convertNodeHeadersToWebHeaders } from "./headerUtils.js";
|
|
21
|
+
import { HonoStreamResponse } from "./honoNodeBridge.js";
|
|
22
|
+
/**
|
|
23
|
+
* Manages ephemeral, single-request MCP operations.
|
|
24
|
+
*/
|
|
25
|
+
export class StatelessTransportManager extends BaseTransportManager {
|
|
26
|
+
/**
|
|
27
|
+
* Handles a single, stateless MCP request.
|
|
28
|
+
*
|
|
29
|
+
* This method orchestrates the creation of temporary server and transport instances,
|
|
30
|
+
* handles the request, and ensures resources are cleaned up only after the
|
|
31
|
+
* response stream is closed.
|
|
32
|
+
*
|
|
33
|
+
* @param headers - The incoming request headers.
|
|
34
|
+
* @param body - The parsed body of the request.
|
|
35
|
+
* @param context - The request context for logging and tracing.
|
|
36
|
+
* @returns A promise resolving to a streaming TransportResponse.
|
|
37
|
+
*/
|
|
38
|
+
async handleRequest({ headers, body, context, }) {
|
|
39
|
+
const opContext = {
|
|
40
|
+
...context,
|
|
41
|
+
operation: "StatelessTransportManager.handleRequest",
|
|
42
|
+
};
|
|
43
|
+
logger.debug(opContext, "Creating ephemeral server instance for stateless request.");
|
|
44
|
+
let server;
|
|
45
|
+
let transport;
|
|
46
|
+
try {
|
|
47
|
+
// 1. Create ephemeral instances for this request.
|
|
48
|
+
server = await this.createServerInstanceFn();
|
|
49
|
+
transport = new StreamableHTTPServerTransport({
|
|
50
|
+
sessionIdGenerator: undefined,
|
|
51
|
+
onsessioninitialized: undefined,
|
|
52
|
+
});
|
|
53
|
+
await server.connect(transport);
|
|
54
|
+
logger.debug(opContext, "Ephemeral server connected to transport.");
|
|
55
|
+
// 2. Set up the Node.js-to-Web stream bridge.
|
|
56
|
+
const mockReq = {
|
|
57
|
+
headers,
|
|
58
|
+
method: "POST",
|
|
59
|
+
};
|
|
60
|
+
const mockResBridge = new HonoStreamResponse();
|
|
61
|
+
// 3. Defer cleanup until the stream is fully processed.
|
|
62
|
+
// This is the critical fix to prevent premature resource release.
|
|
63
|
+
this.setupDeferredCleanup(mockResBridge, server, transport, opContext);
|
|
64
|
+
// 4. Process the request using the MCP transport.
|
|
65
|
+
const mockRes = mockResBridge;
|
|
66
|
+
await transport.handleRequest(mockReq, mockRes, body);
|
|
67
|
+
logger.info(opContext, "Stateless request handled successfully.");
|
|
68
|
+
// 5. Convert headers and create the final streaming response.
|
|
69
|
+
const responseHeaders = convertNodeHeadersToWebHeaders(mockRes.getHeaders());
|
|
70
|
+
const webStream = Readable.toWeb(mockResBridge);
|
|
71
|
+
return {
|
|
72
|
+
type: "stream",
|
|
73
|
+
headers: responseHeaders,
|
|
74
|
+
statusCode: mockRes.statusCode,
|
|
75
|
+
stream: webStream,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
// If an error occurs before the stream is returned, we must clean up immediately.
|
|
80
|
+
if (server || transport) {
|
|
81
|
+
this.cleanup(server, transport, opContext);
|
|
82
|
+
}
|
|
83
|
+
throw ErrorHandler.handleError(error, {
|
|
84
|
+
operation: "StatelessTransportManager.handleRequest",
|
|
85
|
+
context: opContext,
|
|
86
|
+
rethrow: true,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Attaches listeners to the response stream to trigger resource cleanup
|
|
92
|
+
* only after the stream has been fully consumed or has errored.
|
|
93
|
+
*
|
|
94
|
+
* @param stream - The response stream bridge.
|
|
95
|
+
* @param server - The ephemeral McpServer instance.
|
|
96
|
+
* @param transport - The ephemeral transport instance.
|
|
97
|
+
* @param context - The request context for logging.
|
|
98
|
+
*/
|
|
99
|
+
setupDeferredCleanup(stream, server, transport, context) {
|
|
100
|
+
let cleanedUp = false;
|
|
101
|
+
const cleanupFn = (error) => {
|
|
102
|
+
if (cleanedUp)
|
|
103
|
+
return;
|
|
104
|
+
cleanedUp = true;
|
|
105
|
+
if (error) {
|
|
106
|
+
logger.warning({
|
|
107
|
+
...context,
|
|
108
|
+
error,
|
|
109
|
+
}, "Stream ended with an error, proceeding to cleanup.");
|
|
110
|
+
}
|
|
111
|
+
// Cleanup is fire-and-forget.
|
|
112
|
+
this.cleanup(server, transport, context);
|
|
113
|
+
};
|
|
114
|
+
// 'close' is the most reliable event, firing on both normal completion and abrupt termination.
|
|
115
|
+
stream.on("close", () => cleanupFn());
|
|
116
|
+
stream.on("error", (err) => cleanupFn(err));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Performs the actual cleanup of ephemeral resources.
|
|
120
|
+
* This method is designed to be "fire-and-forget".
|
|
121
|
+
*/
|
|
122
|
+
cleanup(server, transport, context) {
|
|
123
|
+
const opContext = {
|
|
124
|
+
...context,
|
|
125
|
+
operation: "StatelessTransportManager.cleanup",
|
|
126
|
+
};
|
|
127
|
+
logger.debug(opContext, "Scheduling cleanup for ephemeral resources.");
|
|
128
|
+
Promise.all([transport?.close(), server?.close()])
|
|
129
|
+
.then(() => {
|
|
130
|
+
logger.debug(opContext, "Ephemeral resources cleaned up successfully.");
|
|
131
|
+
})
|
|
132
|
+
.catch((cleanupError) => {
|
|
133
|
+
logger.warning({
|
|
134
|
+
...opContext,
|
|
135
|
+
error: cleanupError,
|
|
136
|
+
}, "Error during stateless resource cleanup.");
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Shuts down the manager. For the stateless manager, this is a no-op
|
|
141
|
+
* as there are no persistent resources to manage.
|
|
142
|
+
*/
|
|
143
|
+
async shutdown() {
|
|
144
|
+
const context = requestContextService.createRequestContext({
|
|
145
|
+
operation: "StatelessTransportManager.shutdown",
|
|
146
|
+
});
|
|
147
|
+
logger.info(context, "Stateless transport manager shutdown - no persistent resources to clean up.");
|
|
148
|
+
return Promise.resolve();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=statelessTransportManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statelessTransportManager.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/core/statelessTransportManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IncomingHttpHeaders } from "http";
|
|
2
|
+
import type { RequestContext } from "../../../utils/index.js";
|
|
3
|
+
export interface McpTransportRequest {
|
|
4
|
+
headers: IncomingHttpHeaders;
|
|
5
|
+
body: unknown;
|
|
6
|
+
context: RequestContext;
|
|
7
|
+
sessionId?: string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=transportRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transportRequest.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/transports/core/transportRequest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transportRequest.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/core/transportRequest.ts"],"names":[],"mappings":""}
|