UNPKG

@aurracloud/mcp-cli

Version:

A command-line tool to install, manage, and setup MCP (Model Context Protocol) servers with Docker support

133 lines 5.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.uninstallCommand = uninstallCommand; const logger_1 = require("../utils/logger"); const client_ops_1 = require("../client-ops"); const git_1 = require("../git"); /** * Resolves the actual package name from a GitHub URL or npm package name */ async function resolvePackageName(packageName) { // If it's a GitHub URL, try to get the actual package name from package.json if (packageName.includes('github.com')) { try { logger_1.logger.info(`Resolving package name from GitHub repository: ${packageName}`); const gitResult = await (0, git_1.checkGitRepoExistence)(packageName); if (gitResult.exists && gitResult.packageInfo && gitResult.clonePath) { try { const packageJson = gitResult.packageInfo; if (packageJson.name) { logger_1.logger.info(`Resolved package name from package.json: ${packageJson.name}`); // Clean up cloned repository (0, git_1.cleanupClonedRepo)(gitResult.clonePath); return packageJson.name; } } catch (error) { logger_1.logger.warn(`Failed to read package name from package.json: ${error}`); } // Clean up cloned repository even if we couldn't read the package.json (0, git_1.cleanupClonedRepo)(gitResult.clonePath); } } catch (error) { logger_1.logger.warn(`Failed to resolve package name from Git repository: ${error}`); } // Fallback: extract repository name from URL logger_1.logger.info('Falling back to extracting repository name from URL'); const urlParts = packageName.replace(/\.git$/, '').split('/'); if (urlParts.length >= 2) { const repoName = urlParts[urlParts.length - 1]; logger_1.logger.info(`Using repository name as fallback: ${repoName}`); return repoName; } } // For npm packages or if GitHub resolution failed, return as-is return packageName; } /** * Find installed server by checking multiple possible names */ function findInstalledServer(mcpServers, packageName, resolvedName) { // Check exact match with resolved name first if (mcpServers[resolvedName]) { return resolvedName; } // Check exact match with original package name if (mcpServers[packageName]) { return packageName; } // If it's a GitHub URL, try some variations if (packageName.includes('github.com')) { // Try repository name without owner const urlParts = packageName.replace(/\.git$/, '').split('/'); if (urlParts.length >= 2) { const repoName = urlParts[urlParts.length - 1]; if (mcpServers[repoName]) { return repoName; } // Try owner/repo format const ownerRepo = `${urlParts[urlParts.length - 2]}/${repoName}`; if (mcpServers[ownerRepo]) { return ownerRepo; } } } // Try to find by partial match in server names const serverNames = Object.keys(mcpServers); // Look for servers that contain the resolved name const partialMatch = serverNames.find(name => name.includes(resolvedName) || resolvedName.includes(name)); if (partialMatch) { return partialMatch; } return null; } /** * Command to uninstall an MCP server */ async function uninstallCommand(options) { // Package is now a required positional argument const packageName = options.package; logger_1.logger.info(`Uninstalling MCP server ${packageName} from ${options.client} environment`); try { const config = (0, client_ops_1.readConfig)(options.client); if (config.type === "command") { logger_1.logger.info("Command client detected, skipping uninstallation"); return; } const mcpServers = config.mcpServers; // Resolve the actual package name if it's a GitHub URL const resolvedPackageName = await resolvePackageName(packageName); // Find the installed server using various name matching strategies const installedServerName = findInstalledServer(mcpServers, packageName, resolvedPackageName); if (!installedServerName) { logger_1.logger.warn(`MCP server not found. Tried the following names:`); logger_1.logger.warn(` - ${packageName}`); if (resolvedPackageName !== packageName) { logger_1.logger.warn(` - ${resolvedPackageName}`); } // Show available servers for reference const availableServers = Object.keys(mcpServers); if (availableServers.length > 0) { logger_1.logger.info(`Available installed servers: ${availableServers.join(', ')}`); } else { logger_1.logger.info('No MCP servers are currently installed'); } return; } // Remove the package from the configuration delete mcpServers[installedServerName]; // Update the configuration file (0, client_ops_1.writeConfig)(options.client, config); logger_1.logger.success(`MCP server ${installedServerName} uninstalled successfully!`); if (installedServerName !== packageName) { logger_1.logger.info(`Note: Server was installed as "${installedServerName}" but requested as "${packageName}"`); } } catch (error) { logger_1.logger.error('Uninstallation failed', error); process.exit(1); } } //# sourceMappingURL=uninstall.js.map