@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,407 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Configures and starts the HTTP MCP transport using Hono.
|
|
3
|
+
* This file has been refactored to correctly integrate Hono's streaming
|
|
4
|
+
* capabilities with the Model Context Protocol SDK's transport layer.
|
|
5
|
+
* @module src/mcp-server/transports/http/httpTransport
|
|
6
|
+
*/
|
|
7
|
+
import { serve } from "@hono/node-server";
|
|
8
|
+
import { Hono } from "hono";
|
|
9
|
+
import { cors } from "hono/cors";
|
|
10
|
+
import { logger as honoLogger } from "hono/logger";
|
|
11
|
+
import { secureHeaders } from "hono/secure-headers";
|
|
12
|
+
import { stream } from "hono/streaming";
|
|
13
|
+
import http from "http";
|
|
14
|
+
import { config } from "../../../config/index.js";
|
|
15
|
+
import { handleAuthRequest, enforceTLS } from "../../../ibmi-mcp-server/auth/index.js";
|
|
16
|
+
import { getPublicKeyMetadata } from "../../../ibmi-mcp-server/auth/crypto.js";
|
|
17
|
+
import { JsonRpcErrorCode, McpError } from "../../../types-global/errors.js";
|
|
18
|
+
import { logger, rateLimiter, requestContextService, } from "../../../utils/index.js";
|
|
19
|
+
import { authContext, createAuthMiddleware, createAuthStrategy, } from "../auth/index.js";
|
|
20
|
+
import { AutoTransportManager } from "../core/autoTransportManager.js";
|
|
21
|
+
import { StatelessTransportManager } from "../core/statelessTransportManager.js";
|
|
22
|
+
import { StatefulTransportManager } from "./../core/statefulTransportManager.js";
|
|
23
|
+
import { setServerReplacementCallback } from "../../../ibmi-mcp-server/index.js";
|
|
24
|
+
import { httpErrorHandler } from "./httpErrorHandler.js";
|
|
25
|
+
import { mcpTransportMiddleware } from "./mcpTransportMiddleware.js";
|
|
26
|
+
const HTTP_PORT = config.mcpHttpPort;
|
|
27
|
+
const HTTP_HOST = config.mcpHttpHost;
|
|
28
|
+
const MCP_ENDPOINT_PATH = config.mcpHttpEndpointPath;
|
|
29
|
+
/**
|
|
30
|
+
* Extracts the client IP address from the request, prioritizing common proxy headers.
|
|
31
|
+
* @param c - The Hono context object.
|
|
32
|
+
* @returns The client's IP address or a default string if not found.
|
|
33
|
+
*/
|
|
34
|
+
function getClientIp(c) {
|
|
35
|
+
const forwardedFor = c.req.header("x-forwarded-for");
|
|
36
|
+
return ((forwardedFor?.split(",")[0] ?? "").trim() ||
|
|
37
|
+
c.req.header("x-real-ip") ||
|
|
38
|
+
"unknown_ip");
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Converts a Fetch API Headers object to Node.js IncomingHttpHeaders.
|
|
42
|
+
* Hono uses Fetch API Headers, but the underlying transport managers expect
|
|
43
|
+
* Node's native IncomingHttpHeaders.
|
|
44
|
+
* @param headers - The Headers object to convert.
|
|
45
|
+
* @returns An object compatible with IncomingHttpHeaders.
|
|
46
|
+
*/
|
|
47
|
+
async function isPortInUse(port, host, parentContext) {
|
|
48
|
+
const context = { ...parentContext, operation: "isPortInUse", port, host };
|
|
49
|
+
logger.debug(context, `Checking if port ${port} is in use...`);
|
|
50
|
+
return new Promise((resolve) => {
|
|
51
|
+
const tempServer = http.createServer();
|
|
52
|
+
tempServer
|
|
53
|
+
.once("error", (err) => {
|
|
54
|
+
const inUse = err.code === "EADDRINUSE";
|
|
55
|
+
logger.debug(context, `Port check resulted in error: ${err.code}. Port in use: ${inUse}`);
|
|
56
|
+
resolve(inUse);
|
|
57
|
+
})
|
|
58
|
+
.once("listening", () => {
|
|
59
|
+
logger.debug(context, `Successfully bound to port ${port} temporarily. Port is not in use.`);
|
|
60
|
+
tempServer.close(() => resolve(false));
|
|
61
|
+
})
|
|
62
|
+
.listen(port, host);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function startHttpServerWithRetry(app, initialPort, host, maxRetries, parentContext) {
|
|
66
|
+
const startContext = {
|
|
67
|
+
...parentContext,
|
|
68
|
+
operation: "startHttpServerWithRetry",
|
|
69
|
+
};
|
|
70
|
+
logger.info(startContext, `Attempting to start HTTP server on port ${initialPort} with ${maxRetries} retries.`);
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
const tryBind = (port, attempt) => {
|
|
73
|
+
const attemptContext = { ...startContext, port, attempt };
|
|
74
|
+
if (attempt > maxRetries + 1) {
|
|
75
|
+
const error = new Error(`Failed to bind to any port after ${maxRetries} retries.`);
|
|
76
|
+
logger.fatal(attemptContext, error.message);
|
|
77
|
+
return reject(error);
|
|
78
|
+
}
|
|
79
|
+
isPortInUse(port, host, attemptContext)
|
|
80
|
+
.then((inUse) => {
|
|
81
|
+
if (inUse) {
|
|
82
|
+
logger.warning(attemptContext, `Port ${port} is in use, retrying on port ${port + 1}...`);
|
|
83
|
+
setTimeout(() => tryBind(port + 1, attempt + 1), config.mcpHttpPortRetryDelayMs);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const serverInstance = serve({ fetch: app.fetch, port, hostname: host }, (info) => {
|
|
88
|
+
const serverAddress = `http://${info.address}:${info.port}${MCP_ENDPOINT_PATH}`;
|
|
89
|
+
logger.info({
|
|
90
|
+
...attemptContext,
|
|
91
|
+
address: serverAddress,
|
|
92
|
+
sessionMode: config.mcpSessionMode,
|
|
93
|
+
}, `HTTP transport listening at ${serverAddress}`);
|
|
94
|
+
if (process.stdout.isTTY) {
|
|
95
|
+
console.log(`\n🚀 MCP Server running at: ${serverAddress}`);
|
|
96
|
+
console.log(` Session Mode: ${config.mcpSessionMode}\n`);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
resolve(serverInstance);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
if (err &&
|
|
103
|
+
typeof err === "object" &&
|
|
104
|
+
"code" in err &&
|
|
105
|
+
err.code !== "EADDRINUSE") {
|
|
106
|
+
const errorToLog = err instanceof Error ? err : new Error(String(err));
|
|
107
|
+
logger.error({ error: errorToLog, ...attemptContext }, "An unexpected error occurred while starting the server.");
|
|
108
|
+
return reject(err);
|
|
109
|
+
}
|
|
110
|
+
logger.warning(attemptContext, `Encountered EADDRINUSE race condition on port ${port}, retrying...`);
|
|
111
|
+
setTimeout(() => tryBind(port + 1, attempt + 1), config.mcpHttpPortRetryDelayMs);
|
|
112
|
+
}
|
|
113
|
+
})
|
|
114
|
+
.catch((err) => {
|
|
115
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
116
|
+
logger.fatal({
|
|
117
|
+
error,
|
|
118
|
+
...attemptContext,
|
|
119
|
+
}, "Failed to check if port is in use.");
|
|
120
|
+
reject(err);
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
tryBind(initialPort, 1);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function createTransportManager(createServerInstanceFn, sessionMode, context) {
|
|
127
|
+
const opContext = {
|
|
128
|
+
...context,
|
|
129
|
+
operation: "createTransportManager",
|
|
130
|
+
sessionMode,
|
|
131
|
+
};
|
|
132
|
+
logger.info(opContext, `Creating transport manager for session mode: ${sessionMode}`);
|
|
133
|
+
const statefulOptions = {
|
|
134
|
+
staleSessionTimeoutMs: config.mcpStatefulSessionStaleTimeoutMs,
|
|
135
|
+
mcpHttpEndpointPath: config.mcpHttpEndpointPath,
|
|
136
|
+
};
|
|
137
|
+
switch (sessionMode) {
|
|
138
|
+
case "stateless":
|
|
139
|
+
return new StatelessTransportManager(createServerInstanceFn);
|
|
140
|
+
case "stateful":
|
|
141
|
+
return new StatefulTransportManager(createServerInstanceFn, statefulOptions);
|
|
142
|
+
case "auto":
|
|
143
|
+
default:
|
|
144
|
+
logger.info(opContext, "Using 'auto' mode manager.");
|
|
145
|
+
return new AutoTransportManager(createServerInstanceFn, statefulOptions);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Middleware to enforce 'application/json' content type for POST requests.
|
|
150
|
+
*/
|
|
151
|
+
const enforceJsonContentType = async (c, next) => {
|
|
152
|
+
if (c.req.method === "POST") {
|
|
153
|
+
const contentType = c.req.header("content-type");
|
|
154
|
+
if (!contentType || !contentType.startsWith("application/json")) {
|
|
155
|
+
// Use the request context if available
|
|
156
|
+
const context = requestContextService.createRequestContext({
|
|
157
|
+
operation: "enforceJsonContentType",
|
|
158
|
+
});
|
|
159
|
+
throw new McpError(JsonRpcErrorCode.InvalidRequest, "Unsupported Media Type: Content-Type must be 'application/json'.", context);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
await next();
|
|
163
|
+
};
|
|
164
|
+
export function createHttpApp(transportManager, createServerInstanceFn, parentContext) {
|
|
165
|
+
const app = new Hono();
|
|
166
|
+
const transportContext = {
|
|
167
|
+
...parentContext,
|
|
168
|
+
component: "HttpTransportSetup",
|
|
169
|
+
};
|
|
170
|
+
logger.info(transportContext, "Creating Hono HTTP application.");
|
|
171
|
+
// 1. HTTP Access Logging
|
|
172
|
+
app.use(honoLogger());
|
|
173
|
+
// 2. Security Headers
|
|
174
|
+
app.use(secureHeaders());
|
|
175
|
+
// 3. CORS
|
|
176
|
+
app.use("*", cors({
|
|
177
|
+
origin: config.mcpAllowedOrigins && config.mcpAllowedOrigins.length > 0
|
|
178
|
+
? config.mcpAllowedOrigins
|
|
179
|
+
: config.environment === "production"
|
|
180
|
+
? []
|
|
181
|
+
: "*",
|
|
182
|
+
allowMethods: ["GET", "POST", "DELETE", "OPTIONS"],
|
|
183
|
+
allowHeaders: [
|
|
184
|
+
"Content-Type",
|
|
185
|
+
"Mcp-Session-Id",
|
|
186
|
+
"Last-Event-ID",
|
|
187
|
+
"Authorization",
|
|
188
|
+
],
|
|
189
|
+
credentials: true,
|
|
190
|
+
}));
|
|
191
|
+
// 4. Content Type Enforcement (Specific to MCP endpoint)
|
|
192
|
+
app.use(MCP_ENDPOINT_PATH, enforceJsonContentType);
|
|
193
|
+
// 5. Authentication and Advanced Rate Limiting (Order Matters)
|
|
194
|
+
const authStrategy = createAuthStrategy();
|
|
195
|
+
// Define the rate limiting logic as a reusable middleware
|
|
196
|
+
const rateLimitHandler = async (c, next) => {
|
|
197
|
+
const clientIp = getClientIp(c);
|
|
198
|
+
let key;
|
|
199
|
+
let clientId;
|
|
200
|
+
if (authStrategy) {
|
|
201
|
+
// If auth is enabled, authContext should be populated by the preceding authMiddleware.
|
|
202
|
+
const store = authContext.getStore();
|
|
203
|
+
clientId = store?.authInfo.clientId;
|
|
204
|
+
// Key should be clientId if authenticated, otherwise fallback to IP.
|
|
205
|
+
key = clientId || clientIp;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// If auth is disabled, key is always IP.
|
|
209
|
+
key = clientIp;
|
|
210
|
+
}
|
|
211
|
+
const context = requestContextService.createRequestContext({
|
|
212
|
+
operation: "httpRateLimitCheck",
|
|
213
|
+
rateLimitKey: key,
|
|
214
|
+
ipAddress: clientIp,
|
|
215
|
+
clientId: clientId,
|
|
216
|
+
});
|
|
217
|
+
try {
|
|
218
|
+
rateLimiter.check(key, context);
|
|
219
|
+
logger.debug(context, "Rate limit check passed.");
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
logger.warning({ ...context, error: error }, "Rate limit check failed.");
|
|
223
|
+
throw error;
|
|
224
|
+
}
|
|
225
|
+
await next();
|
|
226
|
+
};
|
|
227
|
+
if (authStrategy) {
|
|
228
|
+
logger.info(transportContext, "Authentication strategy found, enabling auth middleware.");
|
|
229
|
+
// Auth Middleware first
|
|
230
|
+
app.use(MCP_ENDPOINT_PATH, createAuthMiddleware(authStrategy));
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
logger.info(transportContext, "No authentication strategy found, auth middleware disabled.");
|
|
234
|
+
}
|
|
235
|
+
// Rate Limiting second (can now leverage auth context if available)
|
|
236
|
+
app.use(MCP_ENDPOINT_PATH, rateLimitHandler);
|
|
237
|
+
app.onError(httpErrorHandler);
|
|
238
|
+
app.get("/healthz", (c) => {
|
|
239
|
+
return c.json({
|
|
240
|
+
status: "ok",
|
|
241
|
+
timestamp: new Date().toISOString(),
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
// IBM i HTTP Authentication endpoint (conditional)
|
|
245
|
+
if (config.ibmiHttpAuth.enabled) {
|
|
246
|
+
app.post("/api/v1/auth", enforceTLS, handleAuthRequest);
|
|
247
|
+
app.get("/api/v1/auth/public-key", (c) => {
|
|
248
|
+
const { keyId, publicKey } = getPublicKeyMetadata();
|
|
249
|
+
return c.json({ keyId, publicKey });
|
|
250
|
+
});
|
|
251
|
+
logger.info(transportContext, "IBM i HTTP authentication endpoint enabled at /api/v1/auth");
|
|
252
|
+
}
|
|
253
|
+
app.get(MCP_ENDPOINT_PATH, async (c) => {
|
|
254
|
+
const sessionId = c.req.header("mcp-session-id");
|
|
255
|
+
if (sessionId) {
|
|
256
|
+
return c.text("GET requests to existing sessions are not supported.", 405);
|
|
257
|
+
}
|
|
258
|
+
// Since this is a stateless endpoint, we create a temporary instance
|
|
259
|
+
// to report on the server's configuration.
|
|
260
|
+
const serverInstance = await createServerInstanceFn();
|
|
261
|
+
await serverInstance.close(); // ensure cleanup
|
|
262
|
+
return c.json({
|
|
263
|
+
status: "ok",
|
|
264
|
+
server: {
|
|
265
|
+
name: config.mcpServerName,
|
|
266
|
+
version: config.mcpServerVersion,
|
|
267
|
+
description: config.pkg?.description ||
|
|
268
|
+
"No description provided.",
|
|
269
|
+
nodeVersion: process.version,
|
|
270
|
+
environment: config.environment,
|
|
271
|
+
},
|
|
272
|
+
sessionMode: config.mcpSessionMode,
|
|
273
|
+
message: "Server is running. POST to this endpoint to execute a tool call.",
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
app.post(MCP_ENDPOINT_PATH, mcpTransportMiddleware(transportManager), (c) => {
|
|
277
|
+
const response = c.get("mcpResponse");
|
|
278
|
+
if (!response) {
|
|
279
|
+
// This case should ideally not be reached if middleware runs correctly
|
|
280
|
+
return c.json({
|
|
281
|
+
jsonrpc: "2.0",
|
|
282
|
+
error: {
|
|
283
|
+
code: JsonRpcErrorCode.InternalError,
|
|
284
|
+
message: "Middleware failed to produce a response.",
|
|
285
|
+
},
|
|
286
|
+
id: c.get("requestId") ?? null,
|
|
287
|
+
}, 500);
|
|
288
|
+
}
|
|
289
|
+
if (response.sessionId) {
|
|
290
|
+
c.header("Mcp-Session-Id", response.sessionId);
|
|
291
|
+
}
|
|
292
|
+
response.headers.forEach((value, key) => {
|
|
293
|
+
c.header(key, value);
|
|
294
|
+
});
|
|
295
|
+
c.status(response.statusCode);
|
|
296
|
+
if (response.type === "stream") {
|
|
297
|
+
return stream(c, async (s) => {
|
|
298
|
+
await s.pipe(response.stream);
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
const body = typeof response.body === "object" && response.body !== null
|
|
303
|
+
? response.body
|
|
304
|
+
: { body: response.body };
|
|
305
|
+
return c.json(body);
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
app.delete(MCP_ENDPOINT_PATH, async (c) => {
|
|
309
|
+
const sessionId = c.req.header("mcp-session-id");
|
|
310
|
+
const context = requestContextService.createRequestContext({
|
|
311
|
+
...transportContext,
|
|
312
|
+
operation: "handleDeleteRequest",
|
|
313
|
+
sessionId,
|
|
314
|
+
});
|
|
315
|
+
if (sessionId) {
|
|
316
|
+
// Type-safe check for the optional method
|
|
317
|
+
if (transportManager.handleDeleteRequest) {
|
|
318
|
+
const response = await transportManager.handleDeleteRequest(sessionId, context);
|
|
319
|
+
if (response.type === "buffered") {
|
|
320
|
+
const body = typeof response.body === "object" && response.body !== null
|
|
321
|
+
? response.body
|
|
322
|
+
: { body: response.body };
|
|
323
|
+
return c.json(body, response.statusCode);
|
|
324
|
+
}
|
|
325
|
+
// Fallback for unexpected stream response on DELETE
|
|
326
|
+
return c.body(null, response.statusCode);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
return c.json({
|
|
330
|
+
error: "Method Not Allowed",
|
|
331
|
+
message: "DELETE operations are not supported in this mode.",
|
|
332
|
+
}, 405);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
return c.json({
|
|
337
|
+
status: "stateless_mode",
|
|
338
|
+
message: "No sessions to delete in stateless mode",
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
logger.info(transportContext, "Hono application setup complete.");
|
|
343
|
+
return app;
|
|
344
|
+
}
|
|
345
|
+
export async function startHttpTransport(createServerInstanceFn, parentContext) {
|
|
346
|
+
const transportContext = {
|
|
347
|
+
...parentContext,
|
|
348
|
+
component: "HttpTransportStart",
|
|
349
|
+
};
|
|
350
|
+
logger.info(transportContext, "Starting HTTP transport.");
|
|
351
|
+
const transportManager = createTransportManager(createServerInstanceFn, config.mcpSessionMode, transportContext);
|
|
352
|
+
// Eager loading: Create and register tools during startup for HTTP mode
|
|
353
|
+
// This pre-warms the system and ensures tools are available immediately
|
|
354
|
+
const eagerLoadContext = {
|
|
355
|
+
...transportContext,
|
|
356
|
+
operation: "EagerToolLoading",
|
|
357
|
+
};
|
|
358
|
+
logger.info(eagerLoadContext, "Pre-loading and caching YAML tools during HTTP server startup");
|
|
359
|
+
try {
|
|
360
|
+
// Create a temporary server instance to trigger eager loading
|
|
361
|
+
const preloadServer = await createServerInstanceFn();
|
|
362
|
+
logger.info(eagerLoadContext, `YAML tools pre-loaded successfully during startup`);
|
|
363
|
+
// Clean up the temporary server
|
|
364
|
+
await preloadServer.close();
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
logger.error(eagerLoadContext, `Failed to pre-load YAML tools during startup: ${error instanceof Error ? error.message : String(error)}`);
|
|
368
|
+
// Continue with startup even if pre-loading fails
|
|
369
|
+
}
|
|
370
|
+
// Register server replacement callback for YAML auto-reload if the transport manager supports it
|
|
371
|
+
if (transportManager && "replaceAllServerInstances" in transportManager) {
|
|
372
|
+
const callbackContext = {
|
|
373
|
+
...transportContext,
|
|
374
|
+
operation: "RegisterServerReplacementCallback",
|
|
375
|
+
};
|
|
376
|
+
logger.debug(callbackContext, "Registering server replacement callback for HTTP transport manager");
|
|
377
|
+
setServerReplacementCallback(async (_newServer) => {
|
|
378
|
+
const replacementContext = {
|
|
379
|
+
...callbackContext,
|
|
380
|
+
operation: "ReplaceServerInstancesViaCallback",
|
|
381
|
+
};
|
|
382
|
+
logger.info(replacementContext, "YAML auto-reload triggered, replacing server instances in HTTP transport manager");
|
|
383
|
+
try {
|
|
384
|
+
// The transport manager will handle replacing its managed server instances
|
|
385
|
+
// We don't directly use the newServer parameter since the transport manager
|
|
386
|
+
// creates its own server instances via createServerInstanceFn
|
|
387
|
+
if ("replaceAllServerInstances" in transportManager &&
|
|
388
|
+
typeof transportManager.replaceAllServerInstances === "function") {
|
|
389
|
+
await transportManager.replaceAllServerInstances();
|
|
390
|
+
}
|
|
391
|
+
logger.info(replacementContext, "HTTP transport manager server instances replaced successfully");
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
logger.error(replacementContext, `Failed to replace server instances in HTTP transport manager: ${error instanceof Error ? error.message : String(error)}`);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
logger.info(callbackContext, `Server replacement callback registered for ${config.mcpSessionMode} transport mode`);
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
logger.debug(transportContext, `Transport manager (${config.mcpSessionMode}) does not support server replacement - auto-reload will only work for new connections`);
|
|
401
|
+
}
|
|
402
|
+
const app = createHttpApp(transportManager, createServerInstanceFn, transportContext);
|
|
403
|
+
const server = await startHttpServerWithRetry(app, HTTP_PORT, HTTP_HOST, config.mcpHttpMaxPortRetries, transportContext);
|
|
404
|
+
logger.info(transportContext, "HTTP transport started successfully.");
|
|
405
|
+
return { app, server, transportManager };
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=httpTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpTransport.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/httpTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Defines custom types for the Hono HTTP transport layer.
|
|
3
|
+
* @module src/mcp-server/transports/http/httpTypes
|
|
4
|
+
*/
|
|
5
|
+
import type { IncomingMessage, ServerResponse } from "http";
|
|
6
|
+
/**
|
|
7
|
+
* Extends Hono's Bindings to include the raw Node.js request and response objects.
|
|
8
|
+
* This is necessary for integrating with libraries like the MCP SDK that
|
|
9
|
+
* need to write directly to the response stream.
|
|
10
|
+
*
|
|
11
|
+
* As per `@hono/node-server`, the response object is available on `c.env.outgoing`.
|
|
12
|
+
*/
|
|
13
|
+
export type HonoNodeBindings = {
|
|
14
|
+
incoming: IncomingMessage;
|
|
15
|
+
outgoing: ServerResponse;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=httpTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpTypes.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/httpTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpTypes.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/httpTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Barrel file for the HTTP transport module.
|
|
3
|
+
* @module src/mcp-server/transports/http/index
|
|
4
|
+
*/
|
|
5
|
+
export { createHttpApp, startHttpTransport } from "./httpTransport.js";
|
|
6
|
+
export { httpErrorHandler } from "./httpErrorHandler.js";
|
|
7
|
+
export type { HonoNodeBindings } from "./httpTypes.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Barrel file for the HTTP transport module.
|
|
3
|
+
* @module src/mcp-server/transports/http/index
|
|
4
|
+
*/
|
|
5
|
+
export { createHttpApp, startHttpTransport } from "./httpTransport.js";
|
|
6
|
+
export { httpErrorHandler } from "./httpErrorHandler.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Hono middleware for handling MCP transport logic.
|
|
3
|
+
* This middleware is responsible for adapting an incoming Hono request into a
|
|
4
|
+
* standardized McpTransportRequest object and delegating all further processing
|
|
5
|
+
* to the provided TransportManager. It no longer contains any session logic itself.
|
|
6
|
+
* @module src/mcp-server/transports/http/mcpTransportMiddleware
|
|
7
|
+
*/
|
|
8
|
+
import { MiddlewareHandler } from "hono";
|
|
9
|
+
import { TransportManager, TransportResponse } from "../core/transportTypes.js";
|
|
10
|
+
import { HonoNodeBindings } from "./httpTypes.js";
|
|
11
|
+
type McpMiddlewareEnv = {
|
|
12
|
+
Variables: {
|
|
13
|
+
mcpResponse: TransportResponse;
|
|
14
|
+
requestId: string | number | null;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare const mcpTransportMiddleware: (transportManager: TransportManager) => MiddlewareHandler<McpMiddlewareEnv & {
|
|
18
|
+
Bindings: HonoNodeBindings;
|
|
19
|
+
}>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=mcpTransportMiddleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpTransportMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/mcpTransportMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAQzC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE;QACT,WAAW,EAAE,iBAAiB,CAAC;QAE/B,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,kBAAkB,gBAAgB,KACjC,iBAAiB,CAAC,gBAAgB,GAAG;IAAE,QAAQ,EAAE,gBAAgB,CAAA;CAAE,CAsDrE,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Hono middleware for handling MCP transport logic.
|
|
3
|
+
* This middleware is responsible for adapting an incoming Hono request into a
|
|
4
|
+
* standardized McpTransportRequest object and delegating all further processing
|
|
5
|
+
* to the provided TransportManager. It no longer contains any session logic itself.
|
|
6
|
+
* @module src/mcp-server/transports/http/mcpTransportMiddleware
|
|
7
|
+
*/
|
|
8
|
+
import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
|
|
9
|
+
import { createMiddleware } from "hono/factory";
|
|
10
|
+
import { requestContextService, withRequestContext, } from "../../../utils/index.js";
|
|
11
|
+
import { convertWebHeadersToNodeHeaders } from "../core/headerUtils.js"; // Import the utility
|
|
12
|
+
export const mcpTransportMiddleware = (transportManager) => {
|
|
13
|
+
return createMiddleware(async (c, next) => {
|
|
14
|
+
const sessionId = c.req.header("mcp-session-id");
|
|
15
|
+
const context = requestContextService.createRequestContext({
|
|
16
|
+
operation: "mcpTransportMiddleware",
|
|
17
|
+
sessionId,
|
|
18
|
+
transport: "http",
|
|
19
|
+
});
|
|
20
|
+
await withRequestContext(context, async () => {
|
|
21
|
+
let body;
|
|
22
|
+
let requestId = null;
|
|
23
|
+
try {
|
|
24
|
+
body = await c.req.json();
|
|
25
|
+
// Safely extract ID
|
|
26
|
+
if (body && typeof body === "object" && "id" in body) {
|
|
27
|
+
const id = body.id;
|
|
28
|
+
if (typeof id === "string" ||
|
|
29
|
+
typeof id === "number" ||
|
|
30
|
+
id === null) {
|
|
31
|
+
requestId = id;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (_error) {
|
|
36
|
+
// Ensure requestId is set even if parsing fails
|
|
37
|
+
c.set("requestId", null);
|
|
38
|
+
throw new McpError(ErrorCode.ParseError, "Failed to parse request body as JSON.");
|
|
39
|
+
}
|
|
40
|
+
c.set("requestId", requestId); // Store in context
|
|
41
|
+
const transportRequest = {
|
|
42
|
+
// Use the centralized utility
|
|
43
|
+
headers: convertWebHeadersToNodeHeaders(c.req.raw.headers),
|
|
44
|
+
body,
|
|
45
|
+
context,
|
|
46
|
+
sessionId: sessionId || undefined,
|
|
47
|
+
};
|
|
48
|
+
const response = await transportManager.handleRequest(transportRequest);
|
|
49
|
+
c.set("mcpResponse", response);
|
|
50
|
+
await next();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=mcpTransportMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpTransportMiddleware.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/mcpTransportMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC,CAAC,qBAAqB;AAa9F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,gBAAkC,EACoC,EAAE;IACxE,OAAO,gBAAgB,CACrB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAChB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,wBAAwB;YACnC,SAAS;YACT,SAAS,EAAE,MAAM;SAClB,CAAC,CAAC;QAEH,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YAC3C,IAAI,IAAa,CAAC;YAClB,IAAI,SAAS,GAA2B,IAAI,CAAC;YAE7C,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAE1B,oBAAoB;gBACpB,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;oBACrD,MAAM,EAAE,GAAI,IAAwB,CAAC,EAAE,CAAC;oBACxC,IACE,OAAO,EAAE,KAAK,QAAQ;wBACtB,OAAO,EAAE,KAAK,QAAQ;wBACtB,EAAE,KAAK,IAAI,EACX,CAAC;wBACD,SAAS,GAAG,EAAE,CAAC;oBACjB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,gDAAgD;gBAChD,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACzB,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,UAAU,EACpB,uCAAuC,CACxC,CAAC;YACJ,CAAC;YAED,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,mBAAmB;YAElD,MAAM,gBAAgB,GAAwB;gBAC5C,8BAA8B;gBAC9B,OAAO,EAAE,8BAA8B,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC1D,IAAI;gBACJ,OAAO;gBACP,SAAS,EAAE,SAAS,IAAI,SAAS;aAClC,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAExE,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC/B,MAAM,IAAI,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/transports/stdio/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp-server/transports/stdio/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Handles the setup and connection for the Stdio MCP transport.
|
|
3
|
+
* Implements the MCP Specification 2025-03-26 for stdio transport.
|
|
4
|
+
* This transport communicates directly over standard input (stdin) and
|
|
5
|
+
* standard output (stdout), typically used when the MCP server is launched
|
|
6
|
+
* as a child process by a host application.
|
|
7
|
+
*
|
|
8
|
+
* Specification Reference:
|
|
9
|
+
* https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-03-26/basic/transports.mdx#stdio
|
|
10
|
+
*
|
|
11
|
+
* --- Authentication Note ---
|
|
12
|
+
* As per the MCP Authorization Specification (2025-03-26, Section 1.2),
|
|
13
|
+
* STDIO transports SHOULD NOT implement HTTP-based authentication flows.
|
|
14
|
+
* Authorization is typically handled implicitly by the host application
|
|
15
|
+
* controlling the server process. This implementation follows that guideline.
|
|
16
|
+
*
|
|
17
|
+
* @see {@link https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-03-26/basic/authorization.mdx | MCP Authorization Specification}
|
|
18
|
+
* @module src/mcp-server/transports/stdioTransport
|
|
19
|
+
*/
|
|
20
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
21
|
+
import { RequestContext } from "../../../utils/index.js";
|
|
22
|
+
/**
|
|
23
|
+
* Connects a given `McpServer` instance to the Stdio transport.
|
|
24
|
+
* This function initializes the SDK's `StdioServerTransport`, which manages
|
|
25
|
+
* communication over `process.stdin` and `process.stdout` according to the
|
|
26
|
+
* MCP stdio transport specification.
|
|
27
|
+
*
|
|
28
|
+
* MCP Spec Points Covered by SDK's `StdioServerTransport`:
|
|
29
|
+
* - Reads JSON-RPC messages (requests, notifications, responses, batches) from stdin.
|
|
30
|
+
* - Writes JSON-RPC messages to stdout.
|
|
31
|
+
* - Handles newline delimiters and ensures no embedded newlines in output messages.
|
|
32
|
+
* - Ensures only valid MCP messages are written to stdout.
|
|
33
|
+
*
|
|
34
|
+
* Logging via the `logger` utility MAY result in output to stderr, which is
|
|
35
|
+
* permitted by the spec for logging purposes.
|
|
36
|
+
*
|
|
37
|
+
* @param server - The `McpServer` instance.
|
|
38
|
+
* @param parentContext - The logging and tracing context from the calling function.
|
|
39
|
+
* @returns A promise that resolves when the Stdio transport is successfully connected.
|
|
40
|
+
* @throws {Error} If the connection fails during setup.
|
|
41
|
+
*/
|
|
42
|
+
export declare function startStdioTransport(server: McpServer, parentContext: RequestContext): Promise<void>;
|
|
43
|
+
//# sourceMappingURL=stdioTransport.d.ts.map
|