@1mcp/agent 0.27.4 ā 0.28.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/build/commands/app/consolidate.js +1 -1
- package/build/commands/app/consolidate.js.map +1 -1
- package/build/commands/mcp/add.js +1 -1
- package/build/commands/mcp/add.js.map +1 -1
- package/build/commands/mcp/enable.js +1 -1
- package/build/commands/mcp/enable.js.map +1 -1
- package/build/commands/mcp/index.d.ts.map +1 -1
- package/build/commands/mcp/index.js +64 -1
- package/build/commands/mcp/index.js.map +1 -1
- package/build/commands/mcp/install.d.ts +28 -0
- package/build/commands/mcp/install.d.ts.map +1 -0
- package/build/commands/mcp/install.js +472 -0
- package/build/commands/mcp/install.js.map +1 -0
- package/build/commands/mcp/list.d.ts +3 -0
- package/build/commands/mcp/list.d.ts.map +1 -1
- package/build/commands/mcp/list.js +49 -4
- package/build/commands/mcp/list.js.map +1 -1
- package/build/commands/mcp/remove.js +1 -1
- package/build/commands/mcp/remove.js.map +1 -1
- package/build/commands/mcp/status.js +1 -1
- package/build/commands/mcp/status.js.map +1 -1
- package/build/commands/mcp/tokens.js +1 -1
- package/build/commands/mcp/tokens.js.map +1 -1
- package/build/commands/mcp/uninstall.d.ts +28 -0
- package/build/commands/mcp/uninstall.d.ts.map +1 -0
- package/build/commands/mcp/uninstall.js +103 -0
- package/build/commands/mcp/uninstall.js.map +1 -0
- package/build/commands/mcp/update.d.ts +16 -1
- package/build/commands/mcp/update.d.ts.map +1 -1
- package/build/commands/mcp/update.js +33 -2
- package/build/commands/mcp/update.js.map +1 -1
- package/build/commands/mcp/utils/installWizard.d.ts +35 -0
- package/build/commands/mcp/utils/installWizard.d.ts.map +1 -0
- package/build/commands/mcp/utils/installWizard.js +137 -0
- package/build/commands/mcp/utils/installWizard.js.map +1 -0
- package/build/commands/mcp/utils/mcpServerConfig.d.ts +31 -0
- package/build/commands/mcp/utils/mcpServerConfig.d.ts.map +1 -0
- package/build/commands/mcp/utils/mcpServerConfig.js +79 -0
- package/build/commands/mcp/utils/mcpServerConfig.js.map +1 -0
- package/build/commands/mcp/utils/serverUtils.d.ts +40 -0
- package/build/commands/mcp/utils/serverUtils.d.ts.map +1 -0
- package/build/commands/mcp/utils/serverUtils.js +103 -0
- package/build/commands/mcp/utils/serverUtils.js.map +1 -0
- package/build/commands/mcp/wizard/components/serverDetailsDisplay.d.ts +14 -0
- package/build/commands/mcp/wizard/components/serverDetailsDisplay.d.ts.map +1 -0
- package/build/commands/mcp/wizard/components/serverDetailsDisplay.js +56 -0
- package/build/commands/mcp/wizard/components/serverDetailsDisplay.js.map +1 -0
- package/build/commands/mcp/wizard/components/stepIndicator.d.ts +11 -0
- package/build/commands/mcp/wizard/components/stepIndicator.d.ts.map +1 -0
- package/build/commands/mcp/wizard/components/stepIndicator.js +38 -0
- package/build/commands/mcp/wizard/components/stepIndicator.js.map +1 -0
- package/build/commands/mcp/wizard/components/welcomeScreen.d.ts +5 -0
- package/build/commands/mcp/wizard/components/welcomeScreen.d.ts.map +1 -0
- package/build/commands/mcp/wizard/components/welcomeScreen.js +25 -0
- package/build/commands/mcp/wizard/components/welcomeScreen.js.map +1 -0
- package/build/commands/mcp/wizard/configuration.d.ts +31 -0
- package/build/commands/mcp/wizard/configuration.d.ts.map +1 -0
- package/build/commands/mcp/wizard/configuration.js +360 -0
- package/build/commands/mcp/wizard/configuration.js.map +1 -0
- package/build/commands/mcp/wizard/display.d.ts +31 -0
- package/build/commands/mcp/wizard/display.d.ts.map +1 -0
- package/build/commands/mcp/wizard/display.js +131 -0
- package/build/commands/mcp/wizard/display.js.map +1 -0
- package/build/commands/mcp/wizard/index.d.ts +8 -0
- package/build/commands/mcp/wizard/index.d.ts.map +1 -0
- package/build/commands/mcp/wizard/index.js +10 -0
- package/build/commands/mcp/wizard/index.js.map +1 -0
- package/build/commands/mcp/wizard/metadata.d.ts +48 -0
- package/build/commands/mcp/wizard/metadata.d.ts.map +1 -0
- package/build/commands/mcp/wizard/metadata.js +126 -0
- package/build/commands/mcp/wizard/metadata.js.map +1 -0
- package/build/commands/mcp/wizard/navigation/keyboardHandler.d.ts +14 -0
- package/build/commands/mcp/wizard/navigation/keyboardHandler.d.ts.map +1 -0
- package/build/commands/mcp/wizard/navigation/keyboardHandler.js +99 -0
- package/build/commands/mcp/wizard/navigation/keyboardHandler.js.map +1 -0
- package/build/commands/mcp/wizard/navigation.d.ts +12 -0
- package/build/commands/mcp/wizard/navigation.d.ts.map +1 -0
- package/build/commands/mcp/wizard/navigation.js +99 -0
- package/build/commands/mcp/wizard/navigation.js.map +1 -0
- package/build/commands/mcp/wizard/search.d.ts +23 -0
- package/build/commands/mcp/wizard/search.d.ts.map +1 -0
- package/build/commands/mcp/wizard/search.js +101 -0
- package/build/commands/mcp/wizard/search.js.map +1 -0
- package/build/commands/mcp/wizard/selection.d.ts +14 -0
- package/build/commands/mcp/wizard/selection.d.ts.map +1 -0
- package/build/commands/mcp/wizard/selection.js +40 -0
- package/build/commands/mcp/wizard/selection.js.map +1 -0
- package/build/commands/registry/search.d.ts +1 -1
- package/build/commands/registry/search.d.ts.map +1 -1
- package/build/commands/registry/search.js +10 -7
- package/build/commands/registry/search.js.map +1 -1
- package/build/commands/serve/index.d.ts +10 -0
- package/build/commands/serve/index.d.ts.map +1 -1
- package/build/commands/serve/index.js +28 -1
- package/build/commands/serve/index.js.map +1 -1
- package/build/commands/serve/serve.d.ts +2 -0
- package/build/commands/serve/serve.d.ts.map +1 -1
- package/build/commands/serve/serve.js +33 -8
- package/build/commands/serve/serve.js.map +1 -1
- package/build/commands/shared/{configUtils.d.ts ā baseConfigUtils.d.ts} +1 -1
- package/build/commands/shared/baseConfigUtils.d.ts.map +1 -0
- package/build/commands/shared/{configUtils.js ā baseConfigUtils.js} +1 -1
- package/build/commands/shared/baseConfigUtils.js.map +1 -0
- package/build/config/configManager.d.ts +125 -0
- package/build/config/configManager.d.ts.map +1 -0
- package/build/config/configManager.js +412 -0
- package/build/config/configManager.js.map +1 -0
- package/build/constants/mcp.d.ts +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.d.ts +1 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.d.ts.map +1 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.js +6 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.js.map +1 -1
- package/build/core/capabilities/capabilityAggregator.d.ts +1 -0
- package/build/core/capabilities/capabilityAggregator.d.ts.map +1 -1
- package/build/core/capabilities/capabilityAggregator.js +21 -0
- package/build/core/capabilities/capabilityAggregator.js.map +1 -1
- package/build/core/capabilities/internal/discoveryTools.d.ts +28 -0
- package/build/core/capabilities/internal/discoveryTools.d.ts.map +1 -0
- package/build/core/capabilities/internal/discoveryTools.js +59 -0
- package/build/core/capabilities/internal/discoveryTools.js.map +1 -0
- package/build/core/capabilities/internal/installationTools.d.ts +20 -0
- package/build/core/capabilities/internal/installationTools.d.ts.map +1 -0
- package/build/core/capabilities/internal/installationTools.js +36 -0
- package/build/core/capabilities/internal/installationTools.js.map +1 -0
- package/build/core/capabilities/internal/managementTools.d.ts +32 -0
- package/build/core/capabilities/internal/managementTools.d.ts.map +1 -0
- package/build/core/capabilities/internal/managementTools.js +69 -0
- package/build/core/capabilities/internal/managementTools.js.map +1 -0
- package/build/core/capabilities/internalCapabilitiesProvider.d.ts +41 -0
- package/build/core/capabilities/internalCapabilitiesProvider.d.ts.map +1 -0
- package/build/core/capabilities/internalCapabilitiesProvider.js +275 -0
- package/build/core/capabilities/internalCapabilitiesProvider.js.map +1 -0
- package/build/core/client/clientManager.d.ts +5 -0
- package/build/core/client/clientManager.d.ts.map +1 -1
- package/build/core/client/clientManager.js +34 -0
- package/build/core/client/clientManager.js.map +1 -1
- package/build/core/configChangeHandler.d.ts +78 -0
- package/build/core/configChangeHandler.d.ts.map +1 -0
- package/build/core/configChangeHandler.js +310 -0
- package/build/core/configChangeHandler.js.map +1 -0
- package/build/core/flags/flagManager.d.ts +90 -0
- package/build/core/flags/flagManager.d.ts.map +1 -0
- package/build/core/flags/flagManager.js +209 -0
- package/build/core/flags/flagManager.js.map +1 -0
- package/build/core/protocol/requestHandlers.d.ts.map +1 -1
- package/build/core/protocol/requestHandlers.js +32 -1
- package/build/core/protocol/requestHandlers.js.map +1 -1
- package/build/core/server/agentConfig.d.ts +20 -0
- package/build/core/server/agentConfig.d.ts.map +1 -1
- package/build/core/server/agentConfig.js +40 -0
- package/build/core/server/agentConfig.js.map +1 -1
- package/build/core/server/pidFileManager.d.ts +14 -1
- package/build/core/server/pidFileManager.d.ts.map +1 -1
- package/build/core/server/pidFileManager.js +24 -2
- package/build/core/server/pidFileManager.js.map +1 -1
- package/build/core/server/serverManager.d.ts +46 -1
- package/build/core/server/serverManager.d.ts.map +1 -1
- package/build/core/server/serverManager.js +260 -3
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/tools/handlers/searchHandler.js +1 -1
- package/build/core/tools/handlers/searchHandler.js.map +1 -1
- package/build/core/tools/handlers/serverManagementHandler.d.ts +262 -0
- package/build/core/tools/handlers/serverManagementHandler.d.ts.map +1 -0
- package/build/core/tools/handlers/serverManagementHandler.js +430 -0
- package/build/core/tools/handlers/serverManagementHandler.js.map +1 -0
- package/build/core/tools/internal/adapters/discoveryAdapter.d.ts +148 -0
- package/build/core/tools/internal/adapters/discoveryAdapter.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/discoveryAdapter.js +163 -0
- package/build/core/tools/internal/adapters/discoveryAdapter.js.map +1 -0
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +62 -0
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/helpers/configTransformers.js +79 -0
- package/build/core/tools/internal/adapters/helpers/configTransformers.js.map +1 -0
- package/build/core/tools/internal/adapters/index.d.ts +58 -0
- package/build/core/tools/internal/adapters/index.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/index.js +85 -0
- package/build/core/tools/internal/adapters/index.js.map +1 -0
- package/build/core/tools/internal/adapters/installation/directInstallation.d.ts +16 -0
- package/build/core/tools/internal/adapters/installation/directInstallation.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/installation/directInstallation.js +103 -0
- package/build/core/tools/internal/adapters/installation/directInstallation.js.map +1 -0
- package/build/core/tools/internal/adapters/installation/packageResolver.d.ts +7 -0
- package/build/core/tools/internal/adapters/installation/packageResolver.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/installation/packageResolver.js +86 -0
- package/build/core/tools/internal/adapters/installation/packageResolver.js.map +1 -0
- package/build/core/tools/internal/adapters/installation/types.d.ts +100 -0
- package/build/core/tools/internal/adapters/installation/types.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/installation/types.js +2 -0
- package/build/core/tools/internal/adapters/installation/types.js.map +1 -0
- package/build/core/tools/internal/adapters/installationAdapter.d.ts +89 -0
- package/build/core/tools/internal/adapters/installationAdapter.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/installationAdapter.js +335 -0
- package/build/core/tools/internal/adapters/installationAdapter.js.map +1 -0
- package/build/core/tools/internal/adapters/management/index.d.ts +5 -0
- package/build/core/tools/internal/adapters/management/index.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/index.js +5 -0
- package/build/core/tools/internal/adapters/management/index.js.map +1 -0
- package/build/core/tools/internal/adapters/management/managementAdapter.d.ts +51 -0
- package/build/core/tools/internal/adapters/management/managementAdapter.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/managementAdapter.js +402 -0
- package/build/core/tools/internal/adapters/management/managementAdapter.js.map +1 -0
- package/build/core/tools/internal/adapters/management/toolHandlers.d.ts +6 -0
- package/build/core/tools/internal/adapters/management/toolHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/toolHandlers.js +154 -0
- package/build/core/tools/internal/adapters/management/toolHandlers.js.map +1 -0
- package/build/core/tools/internal/adapters/management/types.d.ts +179 -0
- package/build/core/tools/internal/adapters/management/types.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/types.js +2 -0
- package/build/core/tools/internal/adapters/management/types.js.map +1 -0
- package/build/core/tools/internal/adapters/management/validation.d.ts +9 -0
- package/build/core/tools/internal/adapters/management/validation.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/validation.js +204 -0
- package/build/core/tools/internal/adapters/management/validation.js.map +1 -0
- package/build/core/tools/internal/adapters/validation/configValidation.d.ts +22 -0
- package/build/core/tools/internal/adapters/validation/configValidation.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/validation/configValidation.js +185 -0
- package/build/core/tools/internal/adapters/validation/configValidation.js.map +1 -0
- package/build/core/tools/internal/discoveryHandlers.d.ts +26 -0
- package/build/core/tools/internal/discoveryHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/discoveryHandlers.js +283 -0
- package/build/core/tools/internal/discoveryHandlers.js.map +1 -0
- package/build/core/tools/internal/index.d.ts +279 -0
- package/build/core/tools/internal/index.d.ts.map +1 -0
- package/build/core/tools/internal/index.js +236 -0
- package/build/core/tools/internal/index.js.map +1 -0
- package/build/core/tools/internal/installationHandlers.d.ts +18 -0
- package/build/core/tools/internal/installationHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/installationHandlers.js +314 -0
- package/build/core/tools/internal/installationHandlers.js.map +1 -0
- package/build/core/tools/internal/managementHandlers.d.ts +26 -0
- package/build/core/tools/internal/managementHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/managementHandlers.js +306 -0
- package/build/core/tools/internal/managementHandlers.js.map +1 -0
- package/build/core/tools/internal/schemas/discovery.d.ts +233 -0
- package/build/core/tools/internal/schemas/discovery.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/discovery.js +189 -0
- package/build/core/tools/internal/schemas/discovery.js.map +1 -0
- package/build/core/tools/internal/schemas/edit.d.ts +96 -0
- package/build/core/tools/internal/schemas/edit.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/edit.js +76 -0
- package/build/core/tools/internal/schemas/edit.js.map +1 -0
- package/build/core/tools/internal/schemas/index.d.ts +629 -0
- package/build/core/tools/internal/schemas/index.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/index.js +158 -0
- package/build/core/tools/internal/schemas/index.js.map +1 -0
- package/build/core/tools/internal/schemas/installation.d.ts +210 -0
- package/build/core/tools/internal/schemas/installation.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/installation.js +212 -0
- package/build/core/tools/internal/schemas/installation.js.map +1 -0
- package/build/core/tools/internal/schemas/management.d.ts +232 -0
- package/build/core/tools/internal/schemas/management.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/management.js +188 -0
- package/build/core/tools/internal/schemas/management.js.map +1 -0
- package/build/core/tools/internal/toolHandlers.d.ts +7 -0
- package/build/core/tools/internal/toolHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/toolHandlers.js +8 -0
- package/build/core/tools/internal/toolHandlers.js.map +1 -0
- package/build/core/tools/internal/toolSchemas.d.ts +16 -0
- package/build/core/tools/internal/toolSchemas.d.ts.map +1 -0
- package/build/core/tools/internal/toolSchemas.js +22 -0
- package/build/core/tools/internal/toolSchemas.js.map +1 -0
- package/build/domains/installation/configurators/cliArgsConfigurator.d.ts +7 -0
- package/build/domains/installation/configurators/cliArgsConfigurator.d.ts.map +1 -0
- package/build/domains/installation/configurators/cliArgsConfigurator.js +146 -0
- package/build/domains/installation/configurators/cliArgsConfigurator.js.map +1 -0
- package/build/domains/installation/configurators/envVarConfigurator.d.ts +7 -0
- package/build/domains/installation/configurators/envVarConfigurator.d.ts.map +1 -0
- package/build/domains/installation/configurators/envVarConfigurator.js +122 -0
- package/build/domains/installation/configurators/envVarConfigurator.js.map +1 -0
- package/build/domains/installation/configurators/tagsConfigurator.d.ts +23 -0
- package/build/domains/installation/configurators/tagsConfigurator.d.ts.map +1 -0
- package/build/domains/installation/configurators/tagsConfigurator.js +46 -0
- package/build/domains/installation/configurators/tagsConfigurator.js.map +1 -0
- package/build/domains/installation/index.d.ts +12 -0
- package/build/domains/installation/index.d.ts.map +1 -0
- package/build/domains/installation/index.js +16 -0
- package/build/domains/installation/index.js.map +1 -0
- package/build/domains/installation/metadata/defaultsProvider.d.ts +12 -0
- package/build/domains/installation/metadata/defaultsProvider.d.ts.map +1 -0
- package/build/domains/installation/metadata/defaultsProvider.js +43 -0
- package/build/domains/installation/metadata/defaultsProvider.js.map +1 -0
- package/build/domains/installation/metadata/metadataExtractor.d.ts +11 -0
- package/build/domains/installation/metadata/metadataExtractor.d.ts.map +1 -0
- package/build/domains/installation/metadata/metadataExtractor.js +59 -0
- package/build/domains/installation/metadata/metadataExtractor.js.map +1 -0
- package/build/domains/installation/types.d.ts +27 -0
- package/build/domains/installation/types.d.ts.map +1 -0
- package/build/domains/installation/types.js +5 -0
- package/build/domains/installation/types.js.map +1 -0
- package/build/domains/installation/validators/conflictDetector.d.ts +24 -0
- package/build/domains/installation/validators/conflictDetector.d.ts.map +1 -0
- package/build/domains/installation/validators/conflictDetector.js +41 -0
- package/build/domains/installation/validators/conflictDetector.js.map +1 -0
- package/build/domains/installation/validators/serverNameValidator.d.ts +17 -0
- package/build/domains/installation/validators/serverNameValidator.d.ts.map +1 -0
- package/build/domains/installation/validators/serverNameValidator.js +58 -0
- package/build/domains/installation/validators/serverNameValidator.js.map +1 -0
- package/build/domains/registry/formatters/serverDetailFormatter.js +22 -9
- package/build/domains/registry/formatters/serverDetailFormatter.js.map +1 -1
- package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -1
- package/build/domains/registry/mcpRegistryClient.js +46 -18
- package/build/domains/registry/mcpRegistryClient.js.map +1 -1
- package/build/domains/registry/mcpToolSchemas.d.ts +2 -2
- package/build/domains/registry/mcpToolSchemas.d.ts.map +1 -1
- package/build/domains/registry/mcpToolSchemas.js +1 -1
- package/build/domains/registry/mcpToolSchemas.js.map +1 -1
- package/build/domains/registry/types.d.ts +2 -3
- package/build/domains/registry/types.d.ts.map +1 -1
- package/build/domains/server-management/index.d.ts +11 -0
- package/build/domains/server-management/index.d.ts.map +1 -0
- package/build/domains/server-management/index.js +13 -0
- package/build/domains/server-management/index.js.map +1 -0
- package/build/domains/server-management/progressTrackingService.d.ts +49 -0
- package/build/domains/server-management/progressTrackingService.d.ts.map +1 -0
- package/build/domains/server-management/progressTrackingService.js +102 -0
- package/build/domains/server-management/progressTrackingService.js.map +1 -0
- package/build/domains/server-management/serverInstallationService.d.ts +48 -0
- package/build/domains/server-management/serverInstallationService.d.ts.map +1 -0
- package/build/domains/server-management/serverInstallationService.js +299 -0
- package/build/domains/server-management/serverInstallationService.js.map +1 -0
- package/build/domains/server-management/services/versionResolver.d.ts +36 -0
- package/build/domains/server-management/services/versionResolver.d.ts.map +1 -0
- package/build/domains/server-management/services/versionResolver.js +74 -0
- package/build/domains/server-management/services/versionResolver.js.map +1 -0
- package/build/domains/server-management/types.d.ts +215 -0
- package/build/domains/server-management/types.d.ts.map +1 -0
- package/build/domains/server-management/types.js +28 -0
- package/build/domains/server-management/types.js.map +1 -0
- package/build/server.d.ts +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +18 -12
- package/build/server.js.map +1 -1
- package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js +2 -2
- package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js.map +1 -1
- package/build/utils/schemaUtils.d.ts +25 -0
- package/build/utils/schemaUtils.d.ts.map +1 -0
- package/build/utils/schemaUtils.js +43 -0
- package/build/utils/schemaUtils.js.map +1 -0
- package/package.json +3 -2
- package/build/application/services/configReloadService.d.ts +0 -55
- package/build/application/services/configReloadService.d.ts.map +0 -1
- package/build/application/services/configReloadService.js +0 -195
- package/build/application/services/configReloadService.js.map +0 -1
- package/build/commands/mcp/utils/configUtils.d.ts +0 -71
- package/build/commands/mcp/utils/configUtils.d.ts.map +0 -1
- package/build/commands/mcp/utils/configUtils.js +0 -326
- package/build/commands/mcp/utils/configUtils.js.map +0 -1
- package/build/commands/shared/configUtils.d.ts.map +0 -1
- package/build/commands/shared/configUtils.js.map +0 -1
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
import { MCPRegistryClient } from '../../domains/registry/mcpRegistryClient.js';
|
|
2
|
+
import { createServerInstallationService, getProgressTrackingService } from '../../domains/server-management/index.js';
|
|
3
|
+
import logger from '../../logger/logger.js';
|
|
4
|
+
import boxen from 'boxen';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { InstallWizard } from './utils/installWizard.js';
|
|
7
|
+
import { backupConfig, getAllServers, initializeConfigContext, reloadMcpConfig, serverExists, } from './utils/mcpServerConfig.js';
|
|
8
|
+
import { generateOperationId, parseServerNameVersion, validateVersion } from './utils/serverUtils.js';
|
|
9
|
+
/**
|
|
10
|
+
* Build the install command configuration
|
|
11
|
+
*/
|
|
12
|
+
export function buildInstallCommand(yargs) {
|
|
13
|
+
return yargs
|
|
14
|
+
.positional('serverName', {
|
|
15
|
+
describe: 'Server name or name@version to install',
|
|
16
|
+
type: 'string',
|
|
17
|
+
demandOption: false,
|
|
18
|
+
})
|
|
19
|
+
.option('force', {
|
|
20
|
+
describe: 'Force installation even if already exists',
|
|
21
|
+
type: 'boolean',
|
|
22
|
+
default: false,
|
|
23
|
+
})
|
|
24
|
+
.option('dry-run', {
|
|
25
|
+
describe: 'Show what would be installed without installing',
|
|
26
|
+
type: 'boolean',
|
|
27
|
+
default: false,
|
|
28
|
+
})
|
|
29
|
+
.option('interactive', {
|
|
30
|
+
describe: 'Launch interactive wizard for guided installation',
|
|
31
|
+
type: 'boolean',
|
|
32
|
+
default: false,
|
|
33
|
+
alias: 'i',
|
|
34
|
+
})
|
|
35
|
+
.option('verbose', {
|
|
36
|
+
describe: 'Detailed output',
|
|
37
|
+
type: 'boolean',
|
|
38
|
+
default: false,
|
|
39
|
+
alias: 'v',
|
|
40
|
+
})
|
|
41
|
+
.example([
|
|
42
|
+
['$0 mcp install', 'Launch interactive installation wizard'],
|
|
43
|
+
['$0 mcp install filesystem', 'Install latest version (requires exact registry ID)'],
|
|
44
|
+
['$0 mcp install io.github.user/filesystem', 'Install with full registry ID'],
|
|
45
|
+
['1mcp registry search mysql && 1mcp mcp install <registry-id>', 'Search then install workflow'],
|
|
46
|
+
['$0 mcp install filesystem@1.0.0', 'Install specific version'],
|
|
47
|
+
['$0 mcp install filesystem --interactive', 'Install with interactive configuration'],
|
|
48
|
+
['$0 mcp install filesystem --force', 'Force reinstallation'],
|
|
49
|
+
['$0 mcp install filesystem --dry-run', 'Preview installation'],
|
|
50
|
+
]);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Install command handler
|
|
54
|
+
*/
|
|
55
|
+
export async function installCommand(argv) {
|
|
56
|
+
const { serverName: inputServerName, config: configPath, 'config-dir': configDir, force = false, dryRun = false, verbose = false, interactive = false, } = argv;
|
|
57
|
+
try {
|
|
58
|
+
// Initialize configuration context
|
|
59
|
+
initializeConfigContext(configPath, configDir);
|
|
60
|
+
if (verbose) {
|
|
61
|
+
logger.info('Starting installation process...');
|
|
62
|
+
}
|
|
63
|
+
// Launch interactive wizard if no server name provided or --interactive flag set
|
|
64
|
+
if (!inputServerName || interactive) {
|
|
65
|
+
await runInteractiveInstallation(argv);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Parse server name and version
|
|
69
|
+
const { name: registryServerId, version } = parseServerNameVersion(inputServerName);
|
|
70
|
+
// Validate version format if provided
|
|
71
|
+
if (version && !validateVersion(version)) {
|
|
72
|
+
throw new Error(`Invalid version format: '${version}'. Expected semantic version (e.g., 1.2.3).`);
|
|
73
|
+
}
|
|
74
|
+
if (verbose) {
|
|
75
|
+
logger.info(`Parsed registry server ID: ${registryServerId}, version: ${version || 'latest'}`);
|
|
76
|
+
}
|
|
77
|
+
// For registry installations, we need to validate the registry server ID format
|
|
78
|
+
// and then derive a valid local server name
|
|
79
|
+
validateRegistryServerId(registryServerId);
|
|
80
|
+
// Derive a valid local server name from the registry ID
|
|
81
|
+
const serverName = deriveLocalServerName(registryServerId);
|
|
82
|
+
if (verbose) {
|
|
83
|
+
logger.info(`Derived local server name: ${serverName} from registry ID: ${registryServerId}`);
|
|
84
|
+
}
|
|
85
|
+
// Check if server already exists
|
|
86
|
+
if (serverExists(serverName)) {
|
|
87
|
+
if (!force) {
|
|
88
|
+
throw new Error(`Server '${serverName}' already exists. Use --force to reinstall.`);
|
|
89
|
+
}
|
|
90
|
+
if (verbose) {
|
|
91
|
+
logger.info(`Server '${serverName}' exists, will reinstall due to --force flag`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Dry run mode
|
|
95
|
+
if (dryRun) {
|
|
96
|
+
console.log('š Dry run mode - no changes will be made\n');
|
|
97
|
+
console.log(`Would install: ${serverName}${version ? `@${version}` : ''}`);
|
|
98
|
+
console.log(`From registry: https://registry.modelcontextprotocol.io\n`);
|
|
99
|
+
console.log('Use without --dry-run to perform actual installation.');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// Create operation ID for tracking
|
|
103
|
+
const operationId = generateOperationId();
|
|
104
|
+
const progressTracker = getProgressTrackingService();
|
|
105
|
+
// Start progress tracking
|
|
106
|
+
progressTracker.startOperation(operationId, 'install', 5);
|
|
107
|
+
try {
|
|
108
|
+
// Get installation service
|
|
109
|
+
const installationService = createServerInstallationService();
|
|
110
|
+
// Update progress: Validating
|
|
111
|
+
progressTracker.updateProgress(operationId, 1, 'Validating server', `Checking registry for ${serverName}`);
|
|
112
|
+
// Create backup if replacing existing server
|
|
113
|
+
let backupPath;
|
|
114
|
+
if (serverExists(serverName)) {
|
|
115
|
+
progressTracker.updateProgress(operationId, 2, 'Creating backup', `Backing up existing configuration`);
|
|
116
|
+
backupPath = backupConfig();
|
|
117
|
+
logger.info(`Backup created: ${backupPath}`);
|
|
118
|
+
}
|
|
119
|
+
// Update progress: Installing
|
|
120
|
+
progressTracker.updateProgress(operationId, 3, 'Installing server', `Installing ${serverName}${version ? `@${version}` : ''}`);
|
|
121
|
+
// Perform installation - pass the registry server ID for fetching from registry
|
|
122
|
+
// but use the derived local name for configuration
|
|
123
|
+
const result = await installationService.installServer(registryServerId, version, {
|
|
124
|
+
force,
|
|
125
|
+
verbose,
|
|
126
|
+
localServerName: serverName, // Pass the derived local name
|
|
127
|
+
registryServerId: registryServerId, // Pass the registry ID for tagging
|
|
128
|
+
});
|
|
129
|
+
// Update progress: Finalizing
|
|
130
|
+
progressTracker.updateProgress(operationId, 4, 'Finalizing', 'Saving configuration');
|
|
131
|
+
// Save the configuration returned by the installation service
|
|
132
|
+
if (result.config) {
|
|
133
|
+
const { setServer } = await import('./utils/mcpServerConfig.js');
|
|
134
|
+
setServer(serverName, result.config);
|
|
135
|
+
if (verbose) {
|
|
136
|
+
logger.info(`Configuration saved for server '${serverName}'`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Update progress: Reloading
|
|
140
|
+
progressTracker.updateProgress(operationId, 5, 'Reloading configuration', 'Applying changes');
|
|
141
|
+
// Reload MCP configuration
|
|
142
|
+
reloadMcpConfig();
|
|
143
|
+
// Update progress: Complete (completeOperation logs completion)
|
|
144
|
+
// Complete the operation
|
|
145
|
+
const duration = result.installedAt ? Date.now() - result.installedAt.getTime() : 0;
|
|
146
|
+
progressTracker.completeOperation(operationId, {
|
|
147
|
+
success: true,
|
|
148
|
+
operationId,
|
|
149
|
+
duration,
|
|
150
|
+
message: `Successfully installed ${serverName}`,
|
|
151
|
+
});
|
|
152
|
+
// Report success
|
|
153
|
+
console.log(`\nā
Successfully installed server '${serverName}'${version ? ` version ${version}` : ''}`);
|
|
154
|
+
if (backupPath) {
|
|
155
|
+
console.log(`š Backup created: ${backupPath}`);
|
|
156
|
+
}
|
|
157
|
+
if (result.warnings.length > 0) {
|
|
158
|
+
console.log('\nā ļø Warnings:');
|
|
159
|
+
result.warnings.forEach((warning) => console.log(` ⢠${warning}`));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
progressTracker.failOperation(operationId, error);
|
|
164
|
+
throw error;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
169
|
+
// Enhanced error guidance for registry-related failures
|
|
170
|
+
if (errorMessage.includes('Failed to fetch server with ID') ||
|
|
171
|
+
errorMessage.includes('not found in registry') ||
|
|
172
|
+
(errorMessage.includes('Server') && errorMessage.includes('not found'))) {
|
|
173
|
+
console.error(`\nā Server '${inputServerName}' not found in registry.\n`);
|
|
174
|
+
console.error(`š” Suggestions:\n`);
|
|
175
|
+
console.error(` ⢠Search for available servers:`);
|
|
176
|
+
console.error(` 1mcp registry search ${inputServerName}\n`);
|
|
177
|
+
console.error(` ⢠Use interactive mode to browse:`);
|
|
178
|
+
console.error(` 1mcp mcp install --interactive\n`);
|
|
179
|
+
console.error(` ⢠Try the full registry ID if you know it:`);
|
|
180
|
+
console.error(` 1mcp mcp install io.github.username/${inputServerName}\n`);
|
|
181
|
+
console.error(` ⢠View available servers:`);
|
|
182
|
+
console.error(` 1mcp registry search\n`);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
console.error(`\nā Installation failed: ${errorMessage}\n`);
|
|
186
|
+
}
|
|
187
|
+
if (error instanceof Error && error.stack) {
|
|
188
|
+
logger.error('Installation error stack:', error.stack);
|
|
189
|
+
}
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Validate registry server ID format
|
|
195
|
+
* Registry server IDs can contain dots, slashes, and hyphens (e.g., io.github.user/server-name)
|
|
196
|
+
*/
|
|
197
|
+
function validateRegistryServerId(registryId) {
|
|
198
|
+
if (!registryId || registryId.trim().length === 0) {
|
|
199
|
+
throw new Error('Registry server ID cannot be empty');
|
|
200
|
+
}
|
|
201
|
+
const trimmedId = registryId.trim();
|
|
202
|
+
// Check for invalid characters that should never be in server IDs
|
|
203
|
+
// eslint-disable-next-line no-control-regex
|
|
204
|
+
const invalidChars = /[<>"\\|?*\x00-\x1f]/;
|
|
205
|
+
if (invalidChars.test(trimmedId)) {
|
|
206
|
+
throw new Error(`Registry server ID contains invalid characters: ${registryId}`);
|
|
207
|
+
}
|
|
208
|
+
// Check length limits
|
|
209
|
+
if (trimmedId.length > 255) {
|
|
210
|
+
throw new Error(`Registry server ID too long (max 255 characters): ${registryId}`);
|
|
211
|
+
}
|
|
212
|
+
// Check for invalid patterns
|
|
213
|
+
if (trimmedId.includes('//') || trimmedId.startsWith('/') || trimmedId.endsWith('/')) {
|
|
214
|
+
throw new Error(`Registry server ID has invalid format: ${registryId}`);
|
|
215
|
+
}
|
|
216
|
+
logger.debug(`Registry server ID validation passed: ${trimmedId}`);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Derive a valid local server name from a registry server ID
|
|
220
|
+
* Example: io.github.SnowLeopard-AI/bigquery-mcp -> bigquery-mcp
|
|
221
|
+
*/
|
|
222
|
+
function deriveLocalServerName(registryId) {
|
|
223
|
+
// Extract the last part after the slash, or use the full ID if no slash
|
|
224
|
+
const lastPart = registryId.includes('/') ? registryId.split('/').pop() : registryId;
|
|
225
|
+
// If it already starts with a letter and only contains valid chars, use it as-is
|
|
226
|
+
const localNameRegex = /^[a-zA-Z][a-zA-Z0-9_-]*$/;
|
|
227
|
+
if (localNameRegex.test(lastPart) && lastPart.length <= 50) {
|
|
228
|
+
return lastPart;
|
|
229
|
+
}
|
|
230
|
+
// Otherwise, sanitize it:
|
|
231
|
+
// 1. Replace invalid characters with underscores
|
|
232
|
+
// 2. Ensure it starts with a letter
|
|
233
|
+
// 3. Truncate if too long
|
|
234
|
+
let sanitized = lastPart.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
235
|
+
// Ensure it starts with a letter
|
|
236
|
+
if (!/^[a-zA-Z]/.test(sanitized)) {
|
|
237
|
+
sanitized = `server_${sanitized}`;
|
|
238
|
+
}
|
|
239
|
+
// Truncate to 50 characters if longer
|
|
240
|
+
if (sanitized.length > 50) {
|
|
241
|
+
sanitized = sanitized.substring(0, 50);
|
|
242
|
+
}
|
|
243
|
+
// Ensure it's not empty after sanitization
|
|
244
|
+
if (sanitized.length === 0) {
|
|
245
|
+
sanitized = 'server';
|
|
246
|
+
}
|
|
247
|
+
logger.debug(`Derived local server name '${sanitized}' from registry ID '${registryId}'`);
|
|
248
|
+
return sanitized;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Run interactive installation workflow
|
|
252
|
+
*/
|
|
253
|
+
async function runInteractiveInstallation(argv) {
|
|
254
|
+
const { serverName: initialServerId, config: configPath, 'config-dir': configDir, force = false, dryRun = false, verbose = false, } = argv;
|
|
255
|
+
// Initialize configuration context
|
|
256
|
+
initializeConfigContext(configPath, configDir);
|
|
257
|
+
// Create registry client
|
|
258
|
+
const registryClient = new MCPRegistryClient({
|
|
259
|
+
baseUrl: 'https://registry.modelcontextprotocol.io',
|
|
260
|
+
timeout: 30000,
|
|
261
|
+
cache: {
|
|
262
|
+
defaultTtl: 300,
|
|
263
|
+
maxSize: 100,
|
|
264
|
+
cleanupInterval: 60000,
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
// Create wizard
|
|
268
|
+
const wizard = new InstallWizard(registryClient);
|
|
269
|
+
// Get existing server names for conflict detection
|
|
270
|
+
const getExistingNames = () => Object.keys(getAllServers());
|
|
271
|
+
// Run wizard loop (supports installing multiple servers)
|
|
272
|
+
let continueInstalling = true;
|
|
273
|
+
let currentServerId = initialServerId;
|
|
274
|
+
try {
|
|
275
|
+
while (continueInstalling) {
|
|
276
|
+
const existingNames = getExistingNames();
|
|
277
|
+
const wizardResult = await wizard.run(currentServerId, existingNames);
|
|
278
|
+
if (wizardResult.cancelled) {
|
|
279
|
+
console.log('\nā Installation cancelled.\n');
|
|
280
|
+
wizard.cleanup();
|
|
281
|
+
process.exit(0);
|
|
282
|
+
}
|
|
283
|
+
// Perform installation with collected configuration
|
|
284
|
+
try {
|
|
285
|
+
const registryServerId = wizardResult.serverId;
|
|
286
|
+
const version = wizardResult.version;
|
|
287
|
+
const serverName = wizardResult.localName || deriveLocalServerName(registryServerId);
|
|
288
|
+
// Use forceOverride from wizard if user selected override option
|
|
289
|
+
const shouldForce = force || wizardResult.forceOverride || false;
|
|
290
|
+
// Check if server already exists (early check)
|
|
291
|
+
const serverAlreadyExists = serverExists(serverName);
|
|
292
|
+
if (serverAlreadyExists && !shouldForce) {
|
|
293
|
+
console.error(`\nā Server '${serverName}' already exists. Use --force to reinstall.\n`);
|
|
294
|
+
wizard.cleanup();
|
|
295
|
+
if (wizardResult.installAnother) {
|
|
296
|
+
currentServerId = undefined;
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
process.exit(1);
|
|
300
|
+
}
|
|
301
|
+
// Dry run mode
|
|
302
|
+
if (dryRun) {
|
|
303
|
+
console.log('š Dry run mode - no changes will be made\n');
|
|
304
|
+
console.log(`Would install: ${serverName}${version ? `@${version}` : ''}`);
|
|
305
|
+
console.log(`From registry: https://registry.modelcontextprotocol.io\n`);
|
|
306
|
+
if (wizardResult.installAnother) {
|
|
307
|
+
currentServerId = undefined;
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
wizard.cleanup();
|
|
311
|
+
process.exit(0);
|
|
312
|
+
}
|
|
313
|
+
// Create operation ID for tracking
|
|
314
|
+
const operationId = generateOperationId();
|
|
315
|
+
const progressTracker = getProgressTrackingService();
|
|
316
|
+
// Helper function to show step indicator
|
|
317
|
+
const showStepIndicator = (currentStep, skipClear = false) => {
|
|
318
|
+
if (!skipClear) {
|
|
319
|
+
console.clear();
|
|
320
|
+
}
|
|
321
|
+
const steps = ['Search', 'Select', 'Configure', 'Confirm', 'Install'];
|
|
322
|
+
const stepBar = steps
|
|
323
|
+
.map((step, index) => {
|
|
324
|
+
const num = index + 1;
|
|
325
|
+
if (num < currentStep) {
|
|
326
|
+
return chalk.green(`ā ${step}`);
|
|
327
|
+
}
|
|
328
|
+
else if (num === currentStep) {
|
|
329
|
+
return chalk.cyan.bold(`āŗ ${step}`);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
return chalk.gray(`ā ${step}`);
|
|
333
|
+
}
|
|
334
|
+
})
|
|
335
|
+
.join(' ā ');
|
|
336
|
+
console.log(boxen(stepBar, { padding: { left: 2, right: 2, top: 0, bottom: 0 }, borderStyle: 'round' }));
|
|
337
|
+
console.log('');
|
|
338
|
+
};
|
|
339
|
+
// Show Install step indicator (clear screen before starting)
|
|
340
|
+
showStepIndicator(5, false);
|
|
341
|
+
// Start progress tracking
|
|
342
|
+
progressTracker.startOperation(operationId, 'install', 5);
|
|
343
|
+
try {
|
|
344
|
+
// Get installation service
|
|
345
|
+
const installationService = createServerInstallationService();
|
|
346
|
+
// Update progress: Validating
|
|
347
|
+
console.log(chalk.cyan('ā³ Validating server...'));
|
|
348
|
+
progressTracker.updateProgress(operationId, 1, 'Validating server', `Checking registry for ${serverName}`);
|
|
349
|
+
// Create backup if replacing existing server
|
|
350
|
+
let backupPath;
|
|
351
|
+
if (serverAlreadyExists) {
|
|
352
|
+
console.log(chalk.cyan('ā³ Creating backup...'));
|
|
353
|
+
progressTracker.updateProgress(operationId, 2, 'Creating backup', `Backing up existing configuration`);
|
|
354
|
+
backupPath = backupConfig();
|
|
355
|
+
console.log(chalk.gray(` Backup created: ${backupPath}`));
|
|
356
|
+
logger.info(`Backup created: ${backupPath}`);
|
|
357
|
+
// Remove the existing server before reinstalling to prevent duplicates
|
|
358
|
+
const { removeServer } = await import('./utils/mcpServerConfig.js');
|
|
359
|
+
const removed = removeServer(serverName);
|
|
360
|
+
if (removed) {
|
|
361
|
+
console.log(chalk.gray(` Removed existing server '${serverName}'`));
|
|
362
|
+
if (verbose) {
|
|
363
|
+
logger.info(`Removed existing server '${serverName}' before reinstalling`);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
// Update progress: Installing
|
|
368
|
+
console.log(chalk.cyan(`ā³ Installing ${serverName}${version ? `@${version}` : ''}...`));
|
|
369
|
+
progressTracker.updateProgress(operationId, 3, 'Installing server', `Installing ${serverName}${version ? `@${version}` : ''}`);
|
|
370
|
+
// Perform installation
|
|
371
|
+
const result = await installationService.installServer(registryServerId, version, {
|
|
372
|
+
force: shouldForce,
|
|
373
|
+
verbose,
|
|
374
|
+
localServerName: serverName,
|
|
375
|
+
registryServerId: registryServerId, // Pass the registry ID for tagging
|
|
376
|
+
tags: wizardResult.tags,
|
|
377
|
+
env: wizardResult.env,
|
|
378
|
+
args: wizardResult.args,
|
|
379
|
+
});
|
|
380
|
+
// Update progress: Finalizing
|
|
381
|
+
console.log(chalk.cyan('ā³ Finalizing...'));
|
|
382
|
+
progressTracker.updateProgress(operationId, 4, 'Finalizing', 'Saving configuration');
|
|
383
|
+
// Save the configuration returned by the installation service
|
|
384
|
+
if (result.config) {
|
|
385
|
+
const { setServer } = await import('./utils/mcpServerConfig.js');
|
|
386
|
+
setServer(serverName, result.config);
|
|
387
|
+
if (verbose) {
|
|
388
|
+
logger.info(`Configuration saved for server '${serverName}'`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
// Update progress: Reloading
|
|
392
|
+
console.log(chalk.cyan('ā³ Reloading configuration...'));
|
|
393
|
+
progressTracker.updateProgress(operationId, 5, 'Reloading configuration', 'Applying changes');
|
|
394
|
+
// Reload MCP configuration
|
|
395
|
+
reloadMcpConfig();
|
|
396
|
+
// Complete the operation
|
|
397
|
+
const duration = result.installedAt ? Date.now() - result.installedAt.getTime() : 0;
|
|
398
|
+
progressTracker.completeOperation(operationId, {
|
|
399
|
+
success: true,
|
|
400
|
+
operationId,
|
|
401
|
+
duration,
|
|
402
|
+
message: `Successfully installed ${serverName}`,
|
|
403
|
+
});
|
|
404
|
+
// Show completed step indicator with all steps marked as done (don't clear logs)
|
|
405
|
+
console.log('');
|
|
406
|
+
showStepIndicator(6, true); // 6 means all steps are completed, true = skip clear
|
|
407
|
+
// Report success
|
|
408
|
+
console.log(chalk.green.bold(`ā
Successfully installed server '${serverName}'${version ? ` version ${version}` : ''}`));
|
|
409
|
+
if (backupPath) {
|
|
410
|
+
console.log(chalk.gray(`š Backup created: ${backupPath}`));
|
|
411
|
+
}
|
|
412
|
+
if (result.warnings.length > 0) {
|
|
413
|
+
console.log(chalk.yellow('\nā ļø Warnings:'));
|
|
414
|
+
result.warnings.forEach((warning) => console.log(chalk.yellow(` ⢠${warning}`)));
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
catch (error) {
|
|
418
|
+
progressTracker.failOperation(operationId, error);
|
|
419
|
+
throw error;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
424
|
+
// Enhanced error guidance for registry-related failures in interactive mode
|
|
425
|
+
if (errorMessage.includes('Failed to fetch server with ID') ||
|
|
426
|
+
errorMessage.includes('not found in registry') ||
|
|
427
|
+
(errorMessage.includes('Server') && errorMessage.includes('not found'))) {
|
|
428
|
+
console.error(`\nā Server '${wizardResult.serverId}' not found in registry.\n`);
|
|
429
|
+
console.error(`š” Suggestions:\n`);
|
|
430
|
+
console.error(` ⢠Try searching for the server first:`);
|
|
431
|
+
console.error(` 1mcp registry search ${wizardResult.serverId}\n`);
|
|
432
|
+
console.error(` ⢠Use the exact Registry ID from search results\n`);
|
|
433
|
+
console.error(` ⢠Try searching with different keywords\n`);
|
|
434
|
+
console.error(` ⢠Or continue to search for another server\n`);
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
console.error(`\nā Installation failed: ${errorMessage}\n`);
|
|
438
|
+
}
|
|
439
|
+
if (error instanceof Error && error.stack) {
|
|
440
|
+
logger.error('Installation error stack:', error.stack);
|
|
441
|
+
}
|
|
442
|
+
if (wizardResult.installAnother) {
|
|
443
|
+
const continueAfterError = await wizard.run(undefined, getExistingNames());
|
|
444
|
+
if (continueAfterError.cancelled) {
|
|
445
|
+
wizard.cleanup();
|
|
446
|
+
process.exit(1);
|
|
447
|
+
}
|
|
448
|
+
currentServerId = undefined;
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
451
|
+
wizard.cleanup();
|
|
452
|
+
process.exit(1);
|
|
453
|
+
}
|
|
454
|
+
// Check if user wants to install another
|
|
455
|
+
if (wizardResult.installAnother) {
|
|
456
|
+
currentServerId = undefined;
|
|
457
|
+
continueInstalling = true;
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
continueInstalling = false;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
finally {
|
|
465
|
+
// Always cleanup wizard resources
|
|
466
|
+
wizard.cleanup();
|
|
467
|
+
}
|
|
468
|
+
// Explicitly exit after successful completion to prevent hanging
|
|
469
|
+
// This ensures stdin doesn't keep the process alive
|
|
470
|
+
process.exit(0);
|
|
471
|
+
}
|
|
472
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/mcp/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ export interface ListCommandArgs extends GlobalOptions {
|
|
|
5
5
|
'show-secrets'?: boolean;
|
|
6
6
|
tags?: string;
|
|
7
7
|
verbose?: boolean;
|
|
8
|
+
outdated?: boolean;
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
11
|
* Build the list command configuration
|
|
@@ -17,6 +18,8 @@ export declare function buildListCommand(yargs: Argv): Argv<{
|
|
|
17
18
|
tags: string | undefined;
|
|
18
19
|
} & {
|
|
19
20
|
verbose: boolean;
|
|
21
|
+
} & {
|
|
22
|
+
outdated: boolean;
|
|
20
23
|
}>;
|
|
21
24
|
/**
|
|
22
25
|
* List all configured MCP servers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/mcp/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/mcp/list.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAStD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAMlC,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI;;;;;;;;;;GAoC3C;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FtE"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { createServerInstallationService } from '../../domains/server-management/serverInstallationService.js';
|
|
1
2
|
import { inferTransportType } from '../../transport/transportFactory.js';
|
|
2
3
|
import { redactCommandArgs, redactSensitiveValue, redactUrl, sanitizeHeaders, } from '../../utils/validation/sanitization.js';
|
|
3
|
-
import { getAllServers, initializeConfigContext, parseTags, validateConfigPath } from './utils/
|
|
4
|
+
import { getAllServers, initializeConfigContext, parseTags, validateConfigPath } from './utils/mcpServerConfig.js';
|
|
5
|
+
import { calculateServerStatus } from './utils/serverUtils.js';
|
|
4
6
|
import { validateTags } from './utils/validation.js';
|
|
5
7
|
/**
|
|
6
8
|
* Build the list command configuration
|
|
@@ -27,12 +29,18 @@ export function buildListCommand(yargs) {
|
|
|
27
29
|
type: 'boolean',
|
|
28
30
|
default: false,
|
|
29
31
|
alias: 'v',
|
|
32
|
+
})
|
|
33
|
+
.option('outdated', {
|
|
34
|
+
describe: 'Show only servers with available updates',
|
|
35
|
+
type: 'boolean',
|
|
36
|
+
default: false,
|
|
30
37
|
})
|
|
31
38
|
.example([
|
|
32
39
|
['$0 mcp list', 'List all enabled servers'],
|
|
33
40
|
['$0 mcp list --show-disabled', 'List all servers including disabled'],
|
|
34
41
|
['$0 mcp list --show-secrets', 'Show sensitive values in verbose output'],
|
|
35
42
|
['$0 mcp list --tags=prod,api', 'List servers with specific tags'],
|
|
43
|
+
['$0 mcp list --outdated', 'List only servers with available updates'],
|
|
36
44
|
['$0 mcp list --verbose', 'List servers with detailed config'],
|
|
37
45
|
]);
|
|
38
46
|
}
|
|
@@ -41,7 +49,7 @@ export function buildListCommand(yargs) {
|
|
|
41
49
|
*/
|
|
42
50
|
export async function listCommand(argv) {
|
|
43
51
|
try {
|
|
44
|
-
const { config: configPath, 'config-dir': configDir, 'show-disabled': showDisabled = false, 'show-secrets': showSecrets = false, tags: tagsFilter, verbose = false, } = argv;
|
|
52
|
+
const { config: configPath, 'config-dir': configDir, 'show-disabled': showDisabled = false, 'show-secrets': showSecrets = false, tags: tagsFilter, verbose = false, outdated = false, } = argv;
|
|
45
53
|
// Initialize config context with CLI options
|
|
46
54
|
initializeConfigContext(configPath, configDir);
|
|
47
55
|
// Validate config path
|
|
@@ -57,8 +65,11 @@ export async function listCommand(argv) {
|
|
|
57
65
|
console.log('\nš” Use "server add <name>" to add your first server.');
|
|
58
66
|
return;
|
|
59
67
|
}
|
|
60
|
-
// Filter servers
|
|
61
|
-
|
|
68
|
+
// Filter servers (apply outdated filter if requested)
|
|
69
|
+
let filteredServers = filterServers(allServers, showDisabled, tagsFilter);
|
|
70
|
+
if (outdated) {
|
|
71
|
+
filteredServers = await getOutdatedServers(filteredServers);
|
|
72
|
+
}
|
|
62
73
|
if (Object.keys(filteredServers).length === 0) {
|
|
63
74
|
if (tagsFilter) {
|
|
64
75
|
console.log(`No servers found matching the specified tags: ${tagsFilter}`);
|
|
@@ -105,6 +116,29 @@ export async function listCommand(argv) {
|
|
|
105
116
|
process.exit(1);
|
|
106
117
|
}
|
|
107
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Filter servers to show only those with available updates
|
|
121
|
+
*/
|
|
122
|
+
async function getOutdatedServers(servers) {
|
|
123
|
+
const outdated = {};
|
|
124
|
+
// Create service to check for updates
|
|
125
|
+
const installationService = createServerInstallationService();
|
|
126
|
+
// Get list of server names
|
|
127
|
+
const serverNames = Object.keys(servers);
|
|
128
|
+
// Check for updates for all servers
|
|
129
|
+
const updateResults = await installationService.checkForUpdates(serverNames);
|
|
130
|
+
// Filter to only servers with available updates
|
|
131
|
+
const serversWithUpdates = updateResults
|
|
132
|
+
.filter((result) => result.hasUpdate || result.updateAvailable)
|
|
133
|
+
.map((result) => result.serverName);
|
|
134
|
+
// Return only outdated servers
|
|
135
|
+
for (const serverName of serversWithUpdates) {
|
|
136
|
+
if (servers[serverName]) {
|
|
137
|
+
outdated[serverName] = servers[serverName];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return outdated;
|
|
141
|
+
}
|
|
108
142
|
/**
|
|
109
143
|
* Filter servers based on criteria
|
|
110
144
|
*/
|
|
@@ -135,11 +169,22 @@ function filterServers(servers, showDisabled, tagsFilter) {
|
|
|
135
169
|
function displayServer(name, config, verbose, showSecrets = false) {
|
|
136
170
|
const statusIcon = config.disabled ? 'š“' : 'š¢';
|
|
137
171
|
const statusText = config.disabled ? 'Disabled' : 'Enabled';
|
|
172
|
+
// Get installation metadata
|
|
173
|
+
const version = 'unknown';
|
|
174
|
+
// Calculate server status
|
|
175
|
+
const serverStatus = calculateServerStatus(version);
|
|
138
176
|
// Infer type if missing
|
|
139
177
|
const inferredConfig = config.type ? config : inferTransportType(config, name);
|
|
140
178
|
const displayType = inferredConfig.type || 'unknown';
|
|
179
|
+
// Display with installation metadata
|
|
141
180
|
console.log(`${statusIcon} ${name} (${statusText})`);
|
|
142
181
|
console.log(` Type: ${displayType}`);
|
|
182
|
+
console.log(` Version: ${version}`);
|
|
183
|
+
// Show status if outdated
|
|
184
|
+
if (serverStatus === 'outdated') {
|
|
185
|
+
console.log(` Status: ā ļø Update available`);
|
|
186
|
+
}
|
|
187
|
+
// Installation date would be shown here when metadata storage is fully implemented
|
|
143
188
|
// Type-specific information
|
|
144
189
|
if (inferredConfig.type === 'stdio') {
|
|
145
190
|
console.log(` Command: ${inferredConfig.command}`);
|