komodo-mcp-server 1.2.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/CHANGELOG.md +187 -0
- package/LICENSE +29 -0
- package/README.md +214 -0
- package/build/app/adapters.d.ts +20 -0
- package/build/app/adapters.js +36 -0
- package/build/app/api/base.d.ts +43 -0
- package/build/app/api/base.js +108 -0
- package/build/app/api/client.d.ts +17 -0
- package/build/app/api/client.js +102 -0
- package/build/app/api/index.d.ts +7 -0
- package/build/app/api/index.js +5 -0
- package/build/app/api/resources/containers.d.ts +23 -0
- package/build/app/api/resources/containers.js +90 -0
- package/build/app/api/resources/deployments.d.ts +23 -0
- package/build/app/api/resources/deployments.js +103 -0
- package/build/app/api/resources/index.d.ts +4 -0
- package/build/app/api/resources/index.js +4 -0
- package/build/app/api/resources/servers.d.ts +16 -0
- package/build/app/api/resources/servers.js +59 -0
- package/build/app/api/resources/stacks.d.ts +23 -0
- package/build/app/api/resources/stacks.js +103 -0
- package/build/app/api/types.d.ts +17 -0
- package/build/app/api/types.js +3 -0
- package/build/app/api/utils.d.ts +21 -0
- package/build/app/api/utils.js +53 -0
- package/build/app/client-initializer.d.ts +1 -0
- package/build/app/client-initializer.js +38 -0
- package/build/app/config/descriptions.d.ts +112 -0
- package/build/app/config/descriptions.js +112 -0
- package/build/app/config/env.d.ts +134 -0
- package/build/app/config/env.js +35 -0
- package/build/app/config/index.d.ts +12 -0
- package/build/app/config/index.js +11 -0
- package/build/app/config/mcp.config.d.ts +18 -0
- package/build/app/config/mcp.config.js +23 -0
- package/build/app/config/tools.config.d.ts +13 -0
- package/build/app/config/tools.config.js +13 -0
- package/build/app/config/transport.config.d.ts +11 -0
- package/build/app/config/transport.config.js +58 -0
- package/build/app/connection.d.ts +4 -0
- package/build/app/connection.js +2 -0
- package/build/app/errors/api.d.ts +33 -0
- package/build/app/errors/api.js +158 -0
- package/build/app/errors/factory.d.ts +112 -0
- package/build/app/errors/factory.js +54 -0
- package/build/app/errors/index.d.ts +5 -0
- package/build/app/errors/index.js +5 -0
- package/build/app/errors/messages.d.ts +33 -0
- package/build/app/errors/messages.js +38 -0
- package/build/app/errors/resource.d.ts +17 -0
- package/build/app/errors/resource.js +75 -0
- package/build/app/framework.d.ts +1 -0
- package/build/app/framework.js +1 -0
- package/build/app/index.d.ts +9 -0
- package/build/app/index.js +6 -0
- package/build/app/mcp/prompts/base.d.ts +55 -0
- package/build/app/mcp/prompts/base.js +23 -0
- package/build/app/mcp/prompts/config/index.d.ts +24 -0
- package/build/app/mcp/prompts/config/index.js +21 -0
- package/build/app/mcp/prompts/example-troubleshoot.d.ts +1 -0
- package/build/app/mcp/prompts/example-troubleshoot.js +117 -0
- package/build/app/mcp/prompts/factory.d.ts +38 -0
- package/build/app/mcp/prompts/factory.js +138 -0
- package/build/app/mcp/prompts/index.d.ts +3 -0
- package/build/app/mcp/prompts/index.js +6 -0
- package/build/app/mcp/resources/base.d.ts +51 -0
- package/build/app/mcp/resources/base.js +39 -0
- package/build/app/mcp/resources/config/index.d.ts +42 -0
- package/build/app/mcp/resources/config/index.js +31 -0
- package/build/app/mcp/resources/example-server-info.d.ts +1 -0
- package/build/app/mcp/resources/example-server-info.js +37 -0
- package/build/app/mcp/resources/factory.d.ts +35 -0
- package/build/app/mcp/resources/factory.js +76 -0
- package/build/app/mcp/resources/index.d.ts +3 -0
- package/build/app/mcp/resources/index.js +6 -0
- package/build/app/mcp/tools/base.d.ts +36 -0
- package/build/app/mcp/tools/base.js +96 -0
- package/build/app/mcp/tools/config/configure.d.ts +2 -0
- package/build/app/mcp/tools/config/configure.js +60 -0
- package/build/app/mcp/tools/config/health.d.ts +2 -0
- package/build/app/mcp/tools/config/health.js +102 -0
- package/build/app/mcp/tools/config/index.d.ts +2 -0
- package/build/app/mcp/tools/config/index.js +2 -0
- package/build/app/mcp/tools/container/index.d.ts +6 -0
- package/build/app/mcp/tools/container/index.js +6 -0
- package/build/app/mcp/tools/container/info.d.ts +2 -0
- package/build/app/mcp/tools/container/info.js +16 -0
- package/build/app/mcp/tools/container/list.d.ts +2 -0
- package/build/app/mcp/tools/container/list.js +17 -0
- package/build/app/mcp/tools/container/logs.d.ts +2 -0
- package/build/app/mcp/tools/container/logs.js +46 -0
- package/build/app/mcp/tools/container/manage.d.ts +6 -0
- package/build/app/mcp/tools/container/manage.js +89 -0
- package/build/app/mcp/tools/container/prune.d.ts +2 -0
- package/build/app/mcp/tools/container/prune.js +22 -0
- package/build/app/mcp/tools/container/search-logs.d.ts +2 -0
- package/build/app/mcp/tools/container/search-logs.js +45 -0
- package/build/app/mcp/tools/deployment/actions.d.ts +9 -0
- package/build/app/mcp/tools/deployment/actions.js +149 -0
- package/build/app/mcp/tools/deployment/index.d.ts +3 -0
- package/build/app/mcp/tools/deployment/index.js +3 -0
- package/build/app/mcp/tools/deployment/list.d.ts +2 -0
- package/build/app/mcp/tools/deployment/list.js +21 -0
- package/build/app/mcp/tools/deployment/manage.d.ts +5 -0
- package/build/app/mcp/tools/deployment/manage.js +128 -0
- package/build/app/mcp/tools/factory.d.ts +29 -0
- package/build/app/mcp/tools/factory.js +137 -0
- package/build/app/mcp/tools/index.d.ts +3 -0
- package/build/app/mcp/tools/index.js +54 -0
- package/build/app/mcp/tools/schemas/container-operations.schema.d.ts +12 -0
- package/build/app/mcp/tools/schemas/container-operations.schema.js +15 -0
- package/build/app/mcp/tools/schemas/deployment-config.schema.d.ts +416 -0
- package/build/app/mcp/tools/schemas/deployment-config.schema.js +90 -0
- package/build/app/mcp/tools/schemas/index.d.ts +4 -0
- package/build/app/mcp/tools/schemas/index.js +4 -0
- package/build/app/mcp/tools/schemas/server-config.schema.d.ts +109 -0
- package/build/app/mcp/tools/schemas/server-config.schema.js +66 -0
- package/build/app/mcp/tools/schemas/stack-config.schema.d.ts +370 -0
- package/build/app/mcp/tools/schemas/stack-config.schema.js +109 -0
- package/build/app/mcp/tools/server/index.d.ts +3 -0
- package/build/app/mcp/tools/server/index.js +3 -0
- package/build/app/mcp/tools/server/list.d.ts +2 -0
- package/build/app/mcp/tools/server/list.js +20 -0
- package/build/app/mcp/tools/server/manage.d.ts +5 -0
- package/build/app/mcp/tools/server/manage.js +54 -0
- package/build/app/mcp/tools/server/stats.d.ts +2 -0
- package/build/app/mcp/tools/server/stats.js +22 -0
- package/build/app/mcp/tools/stack/actions.d.ts +9 -0
- package/build/app/mcp/tools/stack/actions.js +149 -0
- package/build/app/mcp/tools/stack/index.d.ts +3 -0
- package/build/app/mcp/tools/stack/index.js +3 -0
- package/build/app/mcp/tools/stack/list.d.ts +2 -0
- package/build/app/mcp/tools/stack/list.js +20 -0
- package/build/app/mcp/tools/stack/manage.d.ts +5 -0
- package/build/app/mcp/tools/stack/manage.js +92 -0
- package/build/app/mcp/tools/tools.config.d.ts +34 -0
- package/build/app/mcp/tools/tools.config.js +34 -0
- package/build/app/mcp/tools/utils.d.ts +13 -0
- package/build/app/mcp/tools/utils.js +74 -0
- package/build/app/server-options.d.ts +6 -0
- package/build/app/server-options.js +117 -0
- package/build/app/telemetry.d.ts +7 -0
- package/build/app/telemetry.js +5 -0
- package/build/app/types.d.ts +14 -0
- package/build/app/types.js +1 -0
- package/build/app/utils/index.d.ts +1 -0
- package/build/app/utils/index.js +1 -0
- package/build/app/utils/response-formatter.d.ts +52 -0
- package/build/app/utils/response-formatter.js +111 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +38 -0
- package/build/server/builder/constants.d.ts +44 -0
- package/build/server/builder/constants.js +42 -0
- package/build/server/builder/index.d.ts +4 -0
- package/build/server/builder/index.js +3 -0
- package/build/server/builder/server-builder.d.ts +16 -0
- package/build/server/builder/server-builder.js +448 -0
- package/build/server/builder/types.d.ts +100 -0
- package/build/server/builder/types.js +12 -0
- package/build/server/config/env.d.ts +58 -0
- package/build/server/config/env.js +54 -0
- package/build/server/config/index.d.ts +24 -0
- package/build/server/config/index.js +9 -0
- package/build/server/config/server.config.d.ts +21 -0
- package/build/server/config/server.config.js +29 -0
- package/build/server/config/transport.config.d.ts +24 -0
- package/build/server/config/transport.config.js +69 -0
- package/build/server/connection/connection-state.d.ts +28 -0
- package/build/server/connection/connection-state.js +143 -0
- package/build/server/connection/core/base.d.ts +23 -0
- package/build/server/connection/core/base.js +52 -0
- package/build/server/connection/core/constants.d.ts +63 -0
- package/build/server/connection/core/constants.js +63 -0
- package/build/server/connection/core/index.d.ts +4 -0
- package/build/server/connection/core/index.js +3 -0
- package/build/server/connection/core/types.d.ts +46 -0
- package/build/server/connection/core/types.js +1 -0
- package/build/server/connection/index.d.ts +5 -0
- package/build/server/connection/index.js +4 -0
- package/build/server/connection/request-manager.d.ts +19 -0
- package/build/server/connection/request-manager.js +106 -0
- package/build/server/errors/categories/connection.d.ts +12 -0
- package/build/server/errors/categories/connection.js +59 -0
- package/build/server/errors/categories/index.d.ts +5 -0
- package/build/server/errors/categories/index.js +5 -0
- package/build/server/errors/categories/mcp.d.ts +45 -0
- package/build/server/errors/categories/mcp.js +218 -0
- package/build/server/errors/categories/operation.d.ts +19 -0
- package/build/server/errors/categories/operation.js +78 -0
- package/build/server/errors/categories/system.d.ts +20 -0
- package/build/server/errors/categories/system.js +90 -0
- package/build/server/errors/categories/validation.d.ts +27 -0
- package/build/server/errors/categories/validation.js +136 -0
- package/build/server/errors/core/base.d.ts +20 -0
- package/build/server/errors/core/base.js +115 -0
- package/build/server/errors/core/constants.d.ts +9 -0
- package/build/server/errors/core/constants.js +23 -0
- package/build/server/errors/core/error-codes.d.ts +29 -0
- package/build/server/errors/core/error-codes.js +27 -0
- package/build/server/errors/core/http.d.ts +24 -0
- package/build/server/errors/core/http.js +42 -0
- package/build/server/errors/core/index.d.ts +7 -0
- package/build/server/errors/core/index.js +6 -0
- package/build/server/errors/core/json-rpc.d.ts +14 -0
- package/build/server/errors/core/json-rpc.js +19 -0
- package/build/server/errors/core/messages.d.ts +88 -0
- package/build/server/errors/core/messages.js +101 -0
- package/build/server/errors/core/types.d.ts +35 -0
- package/build/server/errors/core/types.js +1 -0
- package/build/server/errors/factory.d.ts +73 -0
- package/build/server/errors/factory.js +81 -0
- package/build/server/errors/index.d.ts +4 -0
- package/build/server/errors/index.js +3 -0
- package/build/server/handlers/cancellation.d.ts +4 -0
- package/build/server/handlers/cancellation.js +30 -0
- package/build/server/handlers/core/constants.d.ts +26 -0
- package/build/server/handlers/core/constants.js +25 -0
- package/build/server/handlers/core/index.d.ts +2 -0
- package/build/server/handlers/core/index.js +1 -0
- package/build/server/handlers/core/types.d.ts +31 -0
- package/build/server/handlers/core/types.js +1 -0
- package/build/server/handlers/index.d.ts +6 -0
- package/build/server/handlers/index.js +5 -0
- package/build/server/handlers/ping.d.ts +4 -0
- package/build/server/handlers/ping.js +23 -0
- package/build/server/index.d.ts +19 -0
- package/build/server/index.js +15 -0
- package/build/server/logger/core/constants.d.ts +34 -0
- package/build/server/logger/core/constants.js +99 -0
- package/build/server/logger/core/context.d.ts +11 -0
- package/build/server/logger/core/context.js +57 -0
- package/build/server/logger/core/errors.d.ts +52 -0
- package/build/server/logger/core/errors.js +93 -0
- package/build/server/logger/core/format.d.ts +3 -0
- package/build/server/logger/core/format.js +10 -0
- package/build/server/logger/core/index.d.ts +7 -0
- package/build/server/logger/core/index.js +4 -0
- package/build/server/logger/core/types.d.ts +62 -0
- package/build/server/logger/core/types.js +1 -0
- package/build/server/logger/factory.d.ts +45 -0
- package/build/server/logger/factory.js +116 -0
- package/build/server/logger/formatters/index.d.ts +3 -0
- package/build/server/logger/formatters/index.js +3 -0
- package/build/server/logger/formatters/json-formatter.d.ts +13 -0
- package/build/server/logger/formatters/json-formatter.js +33 -0
- package/build/server/logger/formatters/schema.d.ts +57 -0
- package/build/server/logger/formatters/schema.js +106 -0
- package/build/server/logger/formatters/text-formatter.d.ts +13 -0
- package/build/server/logger/formatters/text-formatter.js +54 -0
- package/build/server/logger/index.d.ts +19 -0
- package/build/server/logger/index.js +17 -0
- package/build/server/logger/logger.d.ts +52 -0
- package/build/server/logger/logger.js +167 -0
- package/build/server/logger/mcp-logger.d.ts +38 -0
- package/build/server/logger/mcp-logger.js +116 -0
- package/build/server/logger/scrubbing/index.d.ts +2 -0
- package/build/server/logger/scrubbing/index.js +2 -0
- package/build/server/logger/scrubbing/injection-guard.d.ts +11 -0
- package/build/server/logger/scrubbing/injection-guard.js +29 -0
- package/build/server/logger/scrubbing/secret-scrubber.d.ts +9 -0
- package/build/server/logger/scrubbing/secret-scrubber.js +69 -0
- package/build/server/logger/writers/base-writer.d.ts +8 -0
- package/build/server/logger/writers/base-writer.js +12 -0
- package/build/server/logger/writers/composite-writer.d.ts +14 -0
- package/build/server/logger/writers/composite-writer.js +46 -0
- package/build/server/logger/writers/console-writer.d.ts +13 -0
- package/build/server/logger/writers/console-writer.js +28 -0
- package/build/server/logger/writers/file-writer.d.ts +24 -0
- package/build/server/logger/writers/file-writer.js +86 -0
- package/build/server/logger/writers/index.d.ts +5 -0
- package/build/server/logger/writers/index.js +5 -0
- package/build/server/logger/writers/mcp-writer.d.ts +17 -0
- package/build/server/logger/writers/mcp-writer.js +48 -0
- package/build/server/session/core/base.d.ts +21 -0
- package/build/server/session/core/base.js +54 -0
- package/build/server/session/core/constants.d.ts +24 -0
- package/build/server/session/core/constants.js +33 -0
- package/build/server/session/core/errors.d.ts +41 -0
- package/build/server/session/core/errors.js +168 -0
- package/build/server/session/core/events.d.ts +42 -0
- package/build/server/session/core/events.js +55 -0
- package/build/server/session/core/index.d.ts +11 -0
- package/build/server/session/core/index.js +6 -0
- package/build/server/session/core/metrics.d.ts +52 -0
- package/build/server/session/core/metrics.js +217 -0
- package/build/server/session/core/schemas.d.ts +120 -0
- package/build/server/session/core/schemas.js +184 -0
- package/build/server/session/core/types.d.ts +38 -0
- package/build/server/session/core/types.js +1 -0
- package/build/server/session/index.d.ts +5 -0
- package/build/server/session/index.js +4 -0
- package/build/server/session/operations/cleanup.d.ts +19 -0
- package/build/server/session/operations/cleanup.js +45 -0
- package/build/server/session/operations/heartbeat.d.ts +21 -0
- package/build/server/session/operations/heartbeat.js +67 -0
- package/build/server/session/operations/index.d.ts +3 -0
- package/build/server/session/operations/index.js +3 -0
- package/build/server/session/operations/lifecycle.d.ts +9 -0
- package/build/server/session/operations/lifecycle.js +60 -0
- package/build/server/session/session-manager.d.ts +35 -0
- package/build/server/session/session-manager.js +212 -0
- package/build/server/session/utils/format.d.ts +8 -0
- package/build/server/session/utils/format.js +67 -0
- package/build/server/session/utils/index.d.ts +2 -0
- package/build/server/session/utils/index.js +2 -0
- package/build/server/session/utils/validation.d.ts +11 -0
- package/build/server/session/utils/validation.js +43 -0
- package/build/server/telemetry/core/config.d.ts +3 -0
- package/build/server/telemetry/core/config.js +22 -0
- package/build/server/telemetry/core/constants.d.ts +85 -0
- package/build/server/telemetry/core/constants.js +85 -0
- package/build/server/telemetry/core/index.d.ts +3 -0
- package/build/server/telemetry/core/index.js +2 -0
- package/build/server/telemetry/core/types.d.ts +40 -0
- package/build/server/telemetry/core/types.js +1 -0
- package/build/server/telemetry/index.d.ts +12 -0
- package/build/server/telemetry/index.js +8 -0
- package/build/server/telemetry/metrics.d.ts +23 -0
- package/build/server/telemetry/metrics.js +170 -0
- package/build/server/telemetry/sdk.d.ts +3 -0
- package/build/server/telemetry/sdk.js +83 -0
- package/build/server/telemetry/tracing.d.ts +9 -0
- package/build/server/telemetry/tracing.js +98 -0
- package/build/server/transport/core/base.d.ts +27 -0
- package/build/server/transport/core/base.js +64 -0
- package/build/server/transport/core/constants.d.ts +44 -0
- package/build/server/transport/core/constants.js +46 -0
- package/build/server/transport/core/index.d.ts +4 -0
- package/build/server/transport/core/index.js +3 -0
- package/build/server/transport/core/types.d.ts +16 -0
- package/build/server/transport/core/types.js +1 -0
- package/build/server/transport/http-server.d.ts +16 -0
- package/build/server/transport/http-server.js +55 -0
- package/build/server/transport/index.d.ts +11 -0
- package/build/server/transport/index.js +8 -0
- package/build/server/transport/middleware/accept-header.d.ts +2 -0
- package/build/server/transport/middleware/accept-header.js +32 -0
- package/build/server/transport/middleware/content-type.d.ts +2 -0
- package/build/server/transport/middleware/content-type.js +20 -0
- package/build/server/transport/middleware/dns-rebinding.d.ts +2 -0
- package/build/server/transport/middleware/dns-rebinding.js +57 -0
- package/build/server/transport/middleware/index.d.ts +6 -0
- package/build/server/transport/middleware/index.js +6 -0
- package/build/server/transport/middleware/json-rpc.d.ts +2 -0
- package/build/server/transport/middleware/json-rpc.js +73 -0
- package/build/server/transport/middleware/protocol-version.d.ts +2 -0
- package/build/server/transport/middleware/protocol-version.js +22 -0
- package/build/server/transport/middleware/rate-limit.d.ts +7 -0
- package/build/server/transport/middleware/rate-limit.js +25 -0
- package/build/server/transport/routes/health.d.ts +11 -0
- package/build/server/transport/routes/health.js +91 -0
- package/build/server/transport/routes/index.d.ts +1 -0
- package/build/server/transport/routes/index.js +1 -0
- package/build/server/transport/sse/index.d.ts +5 -0
- package/build/server/transport/sse/index.js +3 -0
- package/build/server/transport/sse/lifecycle/constants.d.ts +53 -0
- package/build/server/transport/sse/lifecycle/constants.js +53 -0
- package/build/server/transport/sse/lifecycle/index.d.ts +3 -0
- package/build/server/transport/sse/lifecycle/index.js +2 -0
- package/build/server/transport/sse/lifecycle/types.d.ts +38 -0
- package/build/server/transport/sse/lifecycle/types.js +1 -0
- package/build/server/transport/sse/routes.d.ts +12 -0
- package/build/server/transport/sse/routes.js +133 -0
- package/build/server/transport/sse/transport.d.ts +22 -0
- package/build/server/transport/sse/transport.js +87 -0
- package/build/server/transport/sse/types.d.ts +4 -0
- package/build/server/transport/sse/types.js +1 -0
- package/build/server/transport/streamable-http/index.d.ts +4 -0
- package/build/server/transport/streamable-http/index.js +2 -0
- package/build/server/transport/streamable-http/lifecycle/constants.d.ts +62 -0
- package/build/server/transport/streamable-http/lifecycle/constants.js +62 -0
- package/build/server/transport/streamable-http/lifecycle/index.d.ts +3 -0
- package/build/server/transport/streamable-http/lifecycle/index.js +2 -0
- package/build/server/transport/streamable-http/lifecycle/types.d.ts +52 -0
- package/build/server/transport/streamable-http/lifecycle/types.js +1 -0
- package/build/server/transport/streamable-http/routes.d.ts +4 -0
- package/build/server/transport/streamable-http/routes.js +151 -0
- package/build/server/transport/streamable-http/types.d.ts +1 -0
- package/build/server/transport/streamable-http/types.js +1 -0
- package/build/server/transport/utils/index.d.ts +2 -0
- package/build/server/transport/utils/index.js +2 -0
- package/build/server/transport/utils/json-rpc.d.ts +16 -0
- package/build/server/transport/utils/json-rpc.js +16 -0
- package/build/server/transport/utils/logging.d.ts +4 -0
- package/build/server/transport/utils/logging.js +19 -0
- package/build/server/types/client.d.ts +14 -0
- package/build/server/types/client.js +8 -0
- package/build/server/types/index.d.ts +8 -0
- package/build/server/types/index.js +3 -0
- package/build/server/types/lifecycle.d.ts +32 -0
- package/build/server/types/lifecycle.js +6 -0
- package/build/server/types/registry.d.ts +62 -0
- package/build/server/types/registry.js +1 -0
- package/build/server/types/server-options.d.ts +51 -0
- package/build/server/types/server-options.js +4 -0
- package/build/server/types/tool-context.d.ts +14 -0
- package/build/server/types/tool-context.js +1 -0
- package/build/server/utils/env-helpers.d.ts +3 -0
- package/build/server/utils/env-helpers.js +9 -0
- package/build/server/utils/index.d.ts +1 -0
- package/build/server/utils/index.js +1 -0
- package/package.json +79 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
--------------------------------------------------------------
|
|
9
|
+
|
|
10
|
+
## [1.2.0] - Major Architecture Overhaul
|
|
11
|
+
|
|
12
|
+
This release introduces a complete internal restructuring of the codebase for better maintainability,
|
|
13
|
+
performance, and extensibility. The external API remains backwards compatible.
|
|
14
|
+
|
|
15
|
+
### ✨ Highlights
|
|
16
|
+
|
|
17
|
+
- **Clean Architecture**: Complete separation of framework (`server/`) and application (`app/`) layers
|
|
18
|
+
- **New Server Builder Pattern**: Declarative, fluent API for MCP server construction
|
|
19
|
+
- **OpenTelemetry Support**: Optional distributed tracing and metrics collection
|
|
20
|
+
- **Dynamic Tool Availability**: Tools are now enabled/disabled based on Komodo connection status
|
|
21
|
+
- **Improved Container Health Checks**: Smart readiness probes for better orchestration
|
|
22
|
+
- **Legacy SSE Support**: Optional backwards compatibility for older MCP clients
|
|
23
|
+
|
|
24
|
+
### 🔐 Security
|
|
25
|
+
- **Docker Image Signing**: All images are now signed using Sigstore/Cosign keyless signing
|
|
26
|
+
- **Build Attestation**: SLSA provenance is attached to all Docker images
|
|
27
|
+
- **SBOM Generation**: Software Bill of Materials included with every release
|
|
28
|
+
- **CORS Protection**: Wildcard origins blocked in production mode
|
|
29
|
+
- **Rate Limiting**: Configurable request limits (default: 1000/15min)
|
|
30
|
+
- **Session Limits**: Prevent memory exhaustion attacks
|
|
31
|
+
|
|
32
|
+
### 🚀 New Features
|
|
33
|
+
|
|
34
|
+
#### MCP Registry & npm Publishing
|
|
35
|
+
- **MCP Registry Publishing**: New workflow to publish to the official MCP Registry (`io.github.mp-tool/komodo-mcp-server`)
|
|
36
|
+
- **server.json**: Added MCP Registry metadata file for discoverability
|
|
37
|
+
- **npm Publishing**: New workflow for npm registry releases
|
|
38
|
+
- **Production Build**: Optimized builds without source maps for npm releases
|
|
39
|
+
|
|
40
|
+
#### Server Builder Pattern
|
|
41
|
+
Build MCP servers with a clean, declarative API:
|
|
42
|
+
```typescript
|
|
43
|
+
const server = new McpServerBuilder<KomodoClient>()
|
|
44
|
+
.withOptions(serverOptions)
|
|
45
|
+
.withToolProvider(toolAdapter)
|
|
46
|
+
.build();
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
#### Dynamic Tool Availability
|
|
50
|
+
- Tools requiring Komodo connection are disabled until connected
|
|
51
|
+
- `komodo_configure` is always available
|
|
52
|
+
- MCP clients automatically receive updated tool lists
|
|
53
|
+
|
|
54
|
+
#### OpenTelemetry Observability
|
|
55
|
+
- Enable with `OTEL_ENABLED=true`
|
|
56
|
+
- Automatic tracing for all API calls and tool executions
|
|
57
|
+
- Metrics collection for request counts, durations, and errors
|
|
58
|
+
- Compatible with Jaeger, Zipkin, and Datadog (not Tested)
|
|
59
|
+
|
|
60
|
+
#### Improved Health & Readiness Probes
|
|
61
|
+
- `/health` - Liveness probe (always 200 if server is running)
|
|
62
|
+
- `/ready` - Smart readiness with accurate status codes:
|
|
63
|
+
- `200` - Ready to accept traffic
|
|
64
|
+
- `503` - Komodo configured but not connected
|
|
65
|
+
- `429` - Session limits reached
|
|
66
|
+
|
|
67
|
+
#### Legacy SSE Transport
|
|
68
|
+
- Enable with `MCP_LEGACY_SSE_ENABLED=true`
|
|
69
|
+
- Supports older MCP clients using protocol 2024-11-05
|
|
70
|
+
- Both modern Streamable HTTP and legacy SSE can run simultaneously
|
|
71
|
+
|
|
72
|
+
### 🔧 Improvements
|
|
73
|
+
|
|
74
|
+
#### CI/CD Pipeline
|
|
75
|
+
- **Release Workflow**: Enhanced with image signing, build attestation, and improved release notes
|
|
76
|
+
- **Pre-release Support**: Versions with hyphen (e.g., `1.2.0-beta.1`) are now marked as pre-releases
|
|
77
|
+
- **Job Timeouts**: All CI jobs now have explicit timeouts for reliability
|
|
78
|
+
- **Dependabot**: Automated dependency updates for npm, GitHub Actions, and Docker
|
|
79
|
+
- **OSV Scanner**: New vulnerability scanning workflow for known CVEs
|
|
80
|
+
|
|
81
|
+
#### Performance
|
|
82
|
+
- **Faster Logging**: Pre-compiled regex patterns (~50-80% faster under load)
|
|
83
|
+
- **Cached Tool Registry**: Eliminates repeated array allocations
|
|
84
|
+
- **Efficient History Tracking**: O(1) circular buffer for connection state
|
|
85
|
+
|
|
86
|
+
#### Developer Experience
|
|
87
|
+
- **Structured Logging**: ECS-compatible JSON format for log aggregation
|
|
88
|
+
- **Request Cancellation**: Full AbortSignal support through all layers
|
|
89
|
+
- **Better Error Messages**: User-friendly recovery hints in error responses
|
|
90
|
+
|
|
91
|
+
### 📦 Configuration
|
|
92
|
+
|
|
93
|
+
New environment variables:
|
|
94
|
+
|
|
95
|
+
| Variable | Description | Default |
|
|
96
|
+
|----------|-------------|---------|
|
|
97
|
+
| `OTEL_ENABLED` | Enable OpenTelemetry tracing | `false` |
|
|
98
|
+
| `MCP_LEGACY_SSE_ENABLED` | Enable legacy SSE transport | `false` |
|
|
99
|
+
| `SESSION_MAX_COUNT` | Max Streamable HTTP sessions | `100` |
|
|
100
|
+
| `LEGACY_SSE_MAX_SESSIONS` | Max legacy SSE sessions | `50` |
|
|
101
|
+
|
|
102
|
+
### 🔄 Migration Notes
|
|
103
|
+
|
|
104
|
+
This release is **backwards compatible**. No changes required for existing deployments.
|
|
105
|
+
|
|
106
|
+
Internal changes (for contributors):
|
|
107
|
+
- Source code reorganized: `src/app/` for Komodo-specific code, `src/server/` for reusable framework
|
|
108
|
+
- API client moved from `src/api/` to `src/app/api/`
|
|
109
|
+
- Configuration split into `src/app/config/` and `src/server/config/`
|
|
110
|
+
- Error system moved to `src/server/errors/`
|
|
111
|
+
|
|
112
|
+
--------------------------------------------------------------
|
|
113
|
+
|
|
114
|
+
## [1.1.0] - Feature Parity Release
|
|
115
|
+
|
|
116
|
+
### 🚀 New Tools
|
|
117
|
+
- **Container Logs**: `komodo_get_container_logs`, `komodo_search_logs`
|
|
118
|
+
- **Deployment Lifecycle**: pull, start, stop, restart, pause, unpause, destroy
|
|
119
|
+
- **Stack Lifecycle**: pull, start, stop, restart, pause, unpause, destroy
|
|
120
|
+
|
|
121
|
+
### 🔧 Improvements
|
|
122
|
+
- Modernized transport layer using native MCP SDK
|
|
123
|
+
- Improved type safety across all 44 tools
|
|
124
|
+
- Better AI-agent-friendly tool descriptions
|
|
125
|
+
- Centralized schema system for consistent validation
|
|
126
|
+
|
|
127
|
+
--------------------------------------------------------------
|
|
128
|
+
|
|
129
|
+
## [1.0.7] - Security & Auth
|
|
130
|
+
|
|
131
|
+
### 🔒 Security
|
|
132
|
+
- Added `helmet` middleware for HTTP security headers
|
|
133
|
+
- API Key authentication support (`KOMODO_API_KEY`, `KOMODO_API_SECRET`)
|
|
134
|
+
|
|
135
|
+
### 📖 Documentation
|
|
136
|
+
- Comprehensive JSDoc documentation for all public APIs
|
|
137
|
+
|
|
138
|
+
--------------------------------------------------------------
|
|
139
|
+
|
|
140
|
+
## [1.0.6] - Advanced Logging
|
|
141
|
+
|
|
142
|
+
### 📝 Logging System
|
|
143
|
+
- Structured logging with configurable levels
|
|
144
|
+
- Automatic sensitive data redaction
|
|
145
|
+
- JWT and Bearer token scrubbing
|
|
146
|
+
- Log injection prevention (CWE-117)
|
|
147
|
+
- File logging support (`LOG_DIR`)
|
|
148
|
+
- JSON format support (`LOG_FORMAT=json`)
|
|
149
|
+
|
|
150
|
+
--------------------------------------------------------------
|
|
151
|
+
|
|
152
|
+
## [1.0.5] - Security Hardening
|
|
153
|
+
|
|
154
|
+
### 🔒 Security
|
|
155
|
+
- CodeQL and OpenSSF Scorecard workflows
|
|
156
|
+
- Automated dependency review
|
|
157
|
+
- DNS rebinding protection
|
|
158
|
+
- Rate limiting for MCP endpoints
|
|
159
|
+
- Protocol version validation
|
|
160
|
+
|
|
161
|
+
### 🔄 Transport
|
|
162
|
+
- Migrated to Streamable HTTP Transport (MCP Spec 2025-06-18)
|
|
163
|
+
- Active heartbeat mechanism
|
|
164
|
+
- Session resilience with fault tolerance
|
|
165
|
+
|
|
166
|
+
--------------------------------------------------------------
|
|
167
|
+
|
|
168
|
+
## [1.0.4] - Architecture Refactoring
|
|
169
|
+
|
|
170
|
+
### 🏗️ Architecture
|
|
171
|
+
- Refactored from monolithic to modular design
|
|
172
|
+
- Updated to latest `@modelcontextprotocol/sdk`
|
|
173
|
+
- Added Zod schemas for input validation
|
|
174
|
+
- Dynamic tool registry system
|
|
175
|
+
|
|
176
|
+
--------------------------------------------------------------
|
|
177
|
+
|
|
178
|
+
## [1.0.0] - Initial Release
|
|
179
|
+
|
|
180
|
+
First public release of Komodo MCP Server.
|
|
181
|
+
|
|
182
|
+
### Features
|
|
183
|
+
- Docker container management (start, stop, restart, pause, unpause)
|
|
184
|
+
- Server management and monitoring
|
|
185
|
+
- Stack management for Docker Compose
|
|
186
|
+
- Deployment management
|
|
187
|
+
- Dual transport support (Stdio and HTTP)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
GNU GENERAL PUBLIC LICENSE
|
|
2
|
+
Version 3, 29 June 2007
|
|
3
|
+
|
|
4
|
+
Copyright (C) 2025 Marcel Pfennig
|
|
5
|
+
|
|
6
|
+
This program is free software: you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU General Public License as published by
|
|
8
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
Komodo MCP Server - Model Context Protocol Server for Komodo Container Manager
|
|
22
|
+
Author: Marcel Pfennig
|
|
23
|
+
Repository: https://github.com/MP-Tool/komodo-mcp-server
|
|
24
|
+
|
|
25
|
+
This project enables AI assistants to interact with Docker containers,
|
|
26
|
+
deployments, stacks, and servers managed by Komodo through the Model Context Protocol.
|
|
27
|
+
|
|
28
|
+
For the full GPL-3.0 license text, visit:
|
|
29
|
+
https://www.gnu.org/licenses/gpl-3.0.en.html
|
package/README.md
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🦎 Komodo MCP Server
|
|
4
|
+
|
|
5
|
+
**Model Context Protocol Server for [Komodo](https://github.com/moghtech/komodo)**
|
|
6
|
+
|
|
7
|
+
Manage your Docker or Podman deployments through Komodo with AI assistants and automation tools.
|
|
8
|
+
|
|
9
|
+
Komodo MCP Server enables seamless interaction between AI assistants (like Claude, GitHub Copilot) and Komodo (Container Management Platform) for efficient container management, server orchestration, and deployment operations. The MCP-Server gives you the ability to control your Komodo-managed infrastructure by using natural language or automated workflows.
|
|
10
|
+
|
|
11
|
+
[](LICENSE) [](https://github.com/MP-Tool/komodo-mcp-server/releases) [](https://github.com/MP-Tool/komodo-mcp-server/pkgs/container/komodo-mcp-server) [](https://modelcontextprotocol.io)
|
|
12
|
+
|
|
13
|
+
[](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/release.yml) [](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/codeql.yml) [](https://securityscorecards.dev/viewer/?uri=github.com/MP-Tool/komodo-mcp-server) [](https://github.com/MP-Tool/komodo-mcp-server/issues)
|
|
14
|
+
|
|
15
|
+
[Features](#features) • [Quick Start](#quick-start) • [Examples](#examples) • [Documentation](#documentation)
|
|
16
|
+
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
<table>
|
|
24
|
+
<tr>
|
|
25
|
+
<td width="50%">
|
|
26
|
+
|
|
27
|
+
### 🐳 Container Management
|
|
28
|
+
- Start, stop, restart containers
|
|
29
|
+
- Pause and unpause operations
|
|
30
|
+
- List and monitor containers
|
|
31
|
+
- Cross-server management
|
|
32
|
+
|
|
33
|
+
</td>
|
|
34
|
+
<td width="50%">
|
|
35
|
+
|
|
36
|
+
### 📦 Deployment & Stacks
|
|
37
|
+
- Deploy containers and updates
|
|
38
|
+
- Manage Docker Compose stacks
|
|
39
|
+
- Multi-environment deployments
|
|
40
|
+
- Stack lifecycle control
|
|
41
|
+
|
|
42
|
+
</td>
|
|
43
|
+
</tr>
|
|
44
|
+
<tr>
|
|
45
|
+
<td width="50%">
|
|
46
|
+
|
|
47
|
+
### 🖥️ Server Operations
|
|
48
|
+
- List all managed servers
|
|
49
|
+
- Get server statistics
|
|
50
|
+
- Health monitoring
|
|
51
|
+
- Resource tracking
|
|
52
|
+
|
|
53
|
+
</td>
|
|
54
|
+
<td width="50%">
|
|
55
|
+
|
|
56
|
+
### 🤖 MCP Integration
|
|
57
|
+
- Works with any MCP client
|
|
58
|
+
- Claude Desktop ready
|
|
59
|
+
- VS Code Copilot support
|
|
60
|
+
- n8n automation compatible
|
|
61
|
+
- Dual Transport (Stdio + HTTP/SSE)
|
|
62
|
+
|
|
63
|
+
</td>
|
|
64
|
+
</tr>
|
|
65
|
+
<tr>
|
|
66
|
+
<td width="50%">
|
|
67
|
+
|
|
68
|
+
### ⚡ Performance
|
|
69
|
+
- Pre-compiled regex for logging
|
|
70
|
+
- Tool registry caching
|
|
71
|
+
- O(1) circular buffer history
|
|
72
|
+
- Request cancellation support
|
|
73
|
+
|
|
74
|
+
</td>
|
|
75
|
+
<td width="50%">
|
|
76
|
+
|
|
77
|
+
### 🔒 Security & Reliability
|
|
78
|
+
- DNS rebinding protection
|
|
79
|
+
- Rate limiting (configurable)
|
|
80
|
+
- CORS origin validation
|
|
81
|
+
- Graceful shutdown handling
|
|
82
|
+
|
|
83
|
+
</td>
|
|
84
|
+
</tr>
|
|
85
|
+
</table>
|
|
86
|
+
|
|
87
|
+
## Quick Start
|
|
88
|
+
|
|
89
|
+
### Option 1: Docker (Recommended)
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Pull the image
|
|
93
|
+
docker pull ghcr.io/mp-tool/komodo-mcp-server:latest
|
|
94
|
+
|
|
95
|
+
# Run with Docker Compose
|
|
96
|
+
cd examples/compose
|
|
97
|
+
cp .env.example .env
|
|
98
|
+
# Edit .env with your Komodo credentials
|
|
99
|
+
docker compose up -d
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Option 2: Claude Desktop
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Copy config
|
|
106
|
+
cp examples/claude/claude_desktop_config.json \
|
|
107
|
+
~/Library/Application\ Support/Claude/claude_desktop_config.json
|
|
108
|
+
|
|
109
|
+
# Edit credentials and restart Claude
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Option 3: VS Code
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# Global integration
|
|
116
|
+
mkdir -p ~/.vscode/mcp
|
|
117
|
+
cp examples/vscode/mcp.json ~/.vscode/mcp/
|
|
118
|
+
|
|
119
|
+
# Edit credentials and reload VS Code
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
> **📚 Full setup guides:** See [`examples/`](examples/) for detailed instructions
|
|
123
|
+
|
|
124
|
+
## Examples
|
|
125
|
+
|
|
126
|
+
### 💬 With AI Assistants
|
|
127
|
+
|
|
128
|
+
Ask Claude, Copilot, or any MCP-compatible assistant:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
"List all my Komodo servers"
|
|
132
|
+
"Show containers on production-server"
|
|
133
|
+
"Start the nginx container"
|
|
134
|
+
"Deploy my-app to staging"
|
|
135
|
+
"Get stats for dev-server"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 🔄 With n8n Automation
|
|
139
|
+
|
|
140
|
+
Comming soon: Pre-built n8n workflows for automated container health checks and deployment pipelines.
|
|
141
|
+
|
|
142
|
+
## Documentation
|
|
143
|
+
|
|
144
|
+
### Requirements
|
|
145
|
+
- **Komodo** v1.19.5 or later
|
|
146
|
+
- **Docker** (for containerized deployment)
|
|
147
|
+
- **Node.js 20+** (for local development)
|
|
148
|
+
- **Valid Komodo credentials** (API Key/Secret or username/password)
|
|
149
|
+
|
|
150
|
+
### Integration Guides
|
|
151
|
+
- **[Claude Desktop](examples/claude/)** - Direct MCP integration
|
|
152
|
+
- **[VS Code](examples/vscode/)** - GitHub Copilot Chat support
|
|
153
|
+
- **[Docker Compose](examples/compose/)** - Standalone deployment
|
|
154
|
+
- **[Docker Desktop](examples/docker-desktop/)** - Native MCP beta feature
|
|
155
|
+
|
|
156
|
+
### Observability (OpenTelemetry)
|
|
157
|
+
|
|
158
|
+
Enable distributed tracing and metrics with OpenTelemetry:
|
|
159
|
+
|
|
160
|
+
| Variable | Default | Description |
|
|
161
|
+
|----------|---------|-------------|
|
|
162
|
+
| `OTEL_ENABLED` | `false` | Enable OpenTelemetry |
|
|
163
|
+
| `OTEL_SERVICE_NAME` | `mcp-server` | Service name for traces |
|
|
164
|
+
| `OTEL_EXPORTER_OTLP_ENDPOINT` | - | OTLP endpoint (e.g., Jaeger, Grafana) |
|
|
165
|
+
| `OTEL_DEBUG` | `false` | Enable debug logging |
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
## License
|
|
169
|
+
GPL-3.0 License - see [LICENSE](LICENSE) for details.
|
|
170
|
+
|
|
171
|
+
## Contributing
|
|
172
|
+
Contributions are welcome! See our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
173
|
+
|
|
174
|
+
- 🐛 [Report bugs](https://github.com/MP-Tool/komodo-mcp-server/issues)
|
|
175
|
+
- 💡 [Request features](https://github.com/MP-Tool/komodo-mcp-server/issues)
|
|
176
|
+
- 🔧 [Submit PRs](https://github.com/MP-Tool/komodo-mcp-server/pulls)
|
|
177
|
+
|
|
178
|
+
### Development
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Clone and install
|
|
182
|
+
git clone https://github.com/MP-Tool/komodo-mcp-server.git
|
|
183
|
+
cd komodo-mcp-server
|
|
184
|
+
npm install
|
|
185
|
+
|
|
186
|
+
# Build and run
|
|
187
|
+
npm run build
|
|
188
|
+
npm start
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Security
|
|
192
|
+
Report security vulnerabilities via GitHub's Private Vulnerability Reporting (see [SECURITY.md](SECURITY.md)).
|
|
193
|
+
|
|
194
|
+
**Best practices:**
|
|
195
|
+
- Never commit credentials
|
|
196
|
+
- Use environment variables
|
|
197
|
+
- Keep dependencies updated
|
|
198
|
+
- Run as non-root user (default in Docker)
|
|
199
|
+
|
|
200
|
+
## Links
|
|
201
|
+
|
|
202
|
+
- **[Komodo GitHub](https://github.com/moghtech/komodo)** - Container orchestration platform
|
|
203
|
+
- **[Komodo Docs](https://komo.do/docs)** - Komodo documentation
|
|
204
|
+
- **[Model Context Protocol](https://modelcontextprotocol.io)** - MCP specification
|
|
205
|
+
- **[Examples & Integrations](examples/)** - Ready-to-use configurations
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
<div align="center">
|
|
210
|
+
|
|
211
|
+
**Built with ❤️ for the Komodo community 🦎**
|
|
212
|
+
[Report Bug](https://github.com/MP-Tool/komodo-mcp-server/issues) • [Request Feature](https://github.com/MP-Tool/komodo-mcp-server/issues) • [Discussions](https://github.com/MP-Tool/komodo-mcp-server/discussions)
|
|
213
|
+
|
|
214
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { KomodoClient } from './api/index.js';
|
|
2
|
+
import type { IToolProvider, IToolDefinition, IResourceProvider, IResourceDefinition, IResourceTemplateDefinition, IPromptProvider, IPromptDefinition } from './framework.js';
|
|
3
|
+
declare class ToolRegistryAdapter implements IToolProvider<KomodoClient> {
|
|
4
|
+
getTools(): ReadonlyArray<IToolDefinition<unknown, KomodoClient>>;
|
|
5
|
+
getAvailableTools(): ReadonlyArray<IToolDefinition<unknown, KomodoClient>>;
|
|
6
|
+
setConnectionState(connected: boolean): void;
|
|
7
|
+
}
|
|
8
|
+
export declare const toolRegistryAdapter: ToolRegistryAdapter;
|
|
9
|
+
declare class ResourceRegistryAdapter implements IResourceProvider {
|
|
10
|
+
getResources(): ReadonlyArray<IResourceDefinition>;
|
|
11
|
+
getTemplates(): ReadonlyArray<IResourceTemplateDefinition>;
|
|
12
|
+
hasResources(): boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const resourceRegistryAdapter: ResourceRegistryAdapter;
|
|
15
|
+
declare class PromptRegistryAdapter implements IPromptProvider {
|
|
16
|
+
getPrompts(): ReadonlyArray<IPromptDefinition>;
|
|
17
|
+
hasPrompts(): boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare const promptRegistryAdapter: PromptRegistryAdapter;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { toolRegistry } from './mcp/tools/index.js';
|
|
2
|
+
import { resourceRegistry } from './mcp/resources/index.js';
|
|
3
|
+
import { promptRegistry } from './mcp/prompts/index.js';
|
|
4
|
+
class ToolRegistryAdapter {
|
|
5
|
+
getTools() {
|
|
6
|
+
return toolRegistry.getTools();
|
|
7
|
+
}
|
|
8
|
+
getAvailableTools() {
|
|
9
|
+
return toolRegistry.getAvailableTools();
|
|
10
|
+
}
|
|
11
|
+
setConnectionState(connected) {
|
|
12
|
+
toolRegistry.setConnectionState(connected);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export const toolRegistryAdapter = new ToolRegistryAdapter();
|
|
16
|
+
class ResourceRegistryAdapter {
|
|
17
|
+
getResources() {
|
|
18
|
+
return resourceRegistry.getResources();
|
|
19
|
+
}
|
|
20
|
+
getTemplates() {
|
|
21
|
+
return resourceRegistry.getTemplates();
|
|
22
|
+
}
|
|
23
|
+
hasResources() {
|
|
24
|
+
return resourceRegistry.hasResources();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export const resourceRegistryAdapter = new ResourceRegistryAdapter();
|
|
28
|
+
class PromptRegistryAdapter {
|
|
29
|
+
getPrompts() {
|
|
30
|
+
return promptRegistry.getPrompts();
|
|
31
|
+
}
|
|
32
|
+
hasPrompts() {
|
|
33
|
+
return promptRegistry.hasPrompts();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export const promptRegistryAdapter = new PromptRegistryAdapter();
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { KomodoClient as CoreClient } from 'komodo_client';
|
|
2
|
+
export type OperationType = 'list' | 'get' | 'create' | 'update' | 'delete' | 'action' | 'logs';
|
|
3
|
+
export declare const OPERATION_TIMEOUTS: Record<OperationType, number>;
|
|
4
|
+
export interface ApiOperationOptions {
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
operationType?: OperationType;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const RETRYABLE_NETWORK_ERROR_CODES: readonly ["ECONNREFUSED", "ETIMEDOUT", "ECONNRESET", "ENOTFOUND", "ENETUNREACH", "EHOSTUNREACH", "EPIPE", "EAI_AGAIN"];
|
|
10
|
+
export interface ErrorWithCode extends Error {
|
|
11
|
+
code?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ErrorWithStatus extends Error {
|
|
14
|
+
status?: number;
|
|
15
|
+
response?: {
|
|
16
|
+
status?: number;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export declare function isErrorWithCode(error: unknown): error is ErrorWithCode;
|
|
20
|
+
export declare function isErrorWithStatus(error: unknown): error is ErrorWithStatus;
|
|
21
|
+
export declare function getErrorStatusCode(error: unknown): number | undefined;
|
|
22
|
+
export interface RetryConfig {
|
|
23
|
+
maxRetries: number;
|
|
24
|
+
baseDelayMs: number;
|
|
25
|
+
exponentialBackoff: boolean;
|
|
26
|
+
retryableStatusCodes: number[];
|
|
27
|
+
jitterFactor: number;
|
|
28
|
+
}
|
|
29
|
+
export declare const DEFAULT_RETRY_CONFIG: RetryConfig;
|
|
30
|
+
type ValidationFunction = (value: string) => void;
|
|
31
|
+
export declare abstract class BaseResource {
|
|
32
|
+
protected client: ReturnType<typeof CoreClient>;
|
|
33
|
+
protected logger: import("../framework.js").Logger;
|
|
34
|
+
constructor(client: ReturnType<typeof CoreClient>);
|
|
35
|
+
protected checkAborted(signal?: AbortSignal): void;
|
|
36
|
+
protected withValidation(value: string, validator: ValidationFunction, options?: ApiOperationOptions): void;
|
|
37
|
+
protected getTimeout(options?: ApiOperationOptions, defaultType?: OperationType): number;
|
|
38
|
+
protected withRetry<T>(operation: () => Promise<T>, config?: Partial<RetryConfig>, operationName?: string): Promise<T>;
|
|
39
|
+
private isRetryableError;
|
|
40
|
+
private calculateRetryDelay;
|
|
41
|
+
private sleep;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { logger as baseLogger } from '../framework.js';
|
|
2
|
+
export const OPERATION_TIMEOUTS = {
|
|
3
|
+
list: 10_000,
|
|
4
|
+
get: 10_000,
|
|
5
|
+
create: 30_000,
|
|
6
|
+
update: 30_000,
|
|
7
|
+
delete: 30_000,
|
|
8
|
+
action: 300_000,
|
|
9
|
+
logs: 60_000,
|
|
10
|
+
};
|
|
11
|
+
export const RETRYABLE_NETWORK_ERROR_CODES = [
|
|
12
|
+
'ECONNREFUSED',
|
|
13
|
+
'ETIMEDOUT',
|
|
14
|
+
'ECONNRESET',
|
|
15
|
+
'ENOTFOUND',
|
|
16
|
+
'ENETUNREACH',
|
|
17
|
+
'EHOSTUNREACH',
|
|
18
|
+
'EPIPE',
|
|
19
|
+
'EAI_AGAIN',
|
|
20
|
+
];
|
|
21
|
+
export function isErrorWithCode(error) {
|
|
22
|
+
return error instanceof Error && 'code' in error && typeof error.code === 'string';
|
|
23
|
+
}
|
|
24
|
+
export function isErrorWithStatus(error) {
|
|
25
|
+
if (!(error instanceof Error))
|
|
26
|
+
return false;
|
|
27
|
+
const err = error;
|
|
28
|
+
return typeof err.status === 'number' || typeof err.response?.status === 'number';
|
|
29
|
+
}
|
|
30
|
+
export function getErrorStatusCode(error) {
|
|
31
|
+
if (!isErrorWithStatus(error))
|
|
32
|
+
return undefined;
|
|
33
|
+
return error.status ?? error.response?.status;
|
|
34
|
+
}
|
|
35
|
+
export const DEFAULT_RETRY_CONFIG = {
|
|
36
|
+
maxRetries: 3,
|
|
37
|
+
baseDelayMs: 1000,
|
|
38
|
+
exponentialBackoff: true,
|
|
39
|
+
retryableStatusCodes: [408, 429, 500, 502, 503, 504],
|
|
40
|
+
jitterFactor: 0.2,
|
|
41
|
+
};
|
|
42
|
+
export class BaseResource {
|
|
43
|
+
client;
|
|
44
|
+
logger;
|
|
45
|
+
constructor(client) {
|
|
46
|
+
this.client = client;
|
|
47
|
+
this.logger = baseLogger.child({ component: this.constructor.name });
|
|
48
|
+
}
|
|
49
|
+
checkAborted(signal) {
|
|
50
|
+
if (signal?.aborted) {
|
|
51
|
+
const error = new Error('Operation cancelled');
|
|
52
|
+
error.name = 'AbortError';
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
withValidation(value, validator, options) {
|
|
57
|
+
validator(value);
|
|
58
|
+
this.checkAborted(options?.signal);
|
|
59
|
+
}
|
|
60
|
+
getTimeout(options, defaultType = 'get') {
|
|
61
|
+
if (options?.timeout) {
|
|
62
|
+
return options.timeout;
|
|
63
|
+
}
|
|
64
|
+
return OPERATION_TIMEOUTS[options?.operationType ?? defaultType];
|
|
65
|
+
}
|
|
66
|
+
async withRetry(operation, config = {}, operationName) {
|
|
67
|
+
const retryConfig = { ...DEFAULT_RETRY_CONFIG, ...config };
|
|
68
|
+
let lastError;
|
|
69
|
+
for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {
|
|
70
|
+
try {
|
|
71
|
+
return await operation();
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
lastError = error;
|
|
75
|
+
const isRetryable = this.isRetryableError(error, retryConfig.retryableStatusCodes);
|
|
76
|
+
if (!isRetryable || attempt >= retryConfig.maxRetries) {
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
const delay = this.calculateRetryDelay(attempt, retryConfig);
|
|
80
|
+
this.logger.warn(`${operationName ?? 'Operation'} failed (attempt ${attempt + 1}/${retryConfig.maxRetries + 1}), ` +
|
|
81
|
+
`retrying in ${delay}ms: ${error.message}`);
|
|
82
|
+
await this.sleep(delay);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
throw lastError ?? new Error('Retry failed');
|
|
86
|
+
}
|
|
87
|
+
isRetryableError(error, retryableStatusCodes) {
|
|
88
|
+
if (isErrorWithCode(error)) {
|
|
89
|
+
const errorCode = error.code;
|
|
90
|
+
if (errorCode && RETRYABLE_NETWORK_ERROR_CODES.includes(errorCode)) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const statusCode = getErrorStatusCode(error);
|
|
95
|
+
if (statusCode !== undefined && retryableStatusCodes.includes(statusCode)) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
calculateRetryDelay(attempt, config) {
|
|
101
|
+
const baseDelay = config.exponentialBackoff ? config.baseDelayMs * Math.pow(2, attempt) : config.baseDelayMs;
|
|
102
|
+
const jitter = baseDelay * config.jitterFactor * Math.random();
|
|
103
|
+
return Math.floor(baseDelay + jitter);
|
|
104
|
+
}
|
|
105
|
+
sleep(ms) {
|
|
106
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type IApiClient } from '../framework.js';
|
|
2
|
+
import { HealthCheckResult } from './types.js';
|
|
3
|
+
import { ServerResource, ContainerResource, StackResource, DeploymentResource } from './resources/index.js';
|
|
4
|
+
export declare class KomodoClient implements IApiClient {
|
|
5
|
+
readonly clientType: "komodo";
|
|
6
|
+
private client;
|
|
7
|
+
private baseUrl;
|
|
8
|
+
readonly servers: ServerResource;
|
|
9
|
+
readonly containers: ContainerResource;
|
|
10
|
+
readonly stacks: StackResource;
|
|
11
|
+
readonly deployments: DeploymentResource;
|
|
12
|
+
private constructor();
|
|
13
|
+
getBaseUrl(): string;
|
|
14
|
+
static login(baseUrl: string, username: string, password: string, timeoutMs?: number): Promise<KomodoClient>;
|
|
15
|
+
static connectWithApiKey(baseUrl: string, key: string, secret: string): KomodoClient;
|
|
16
|
+
healthCheck(): Promise<HealthCheckResult>;
|
|
17
|
+
}
|