uninstall-mcp
Remove specific packages from the MCP server environment with optional forced uninstallation to handle configuration conflicts.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force uninstallation even if referenced by configs | |
| packageName | Yes | Package name to uninstall |
Implementation Reference
- src/tools/installation-tools.ts:150-186 (registration)Registration of the 'uninstall-mcp' MCP tool, including Zod input schema (packageName required, force optional) and inline async handler that performs validation, checks for config dependencies, calls PackageManager.uninstallPackage, and returns JSON result.server.tool( "uninstall-mcp", { packageName: z.string().describe("Package name to uninstall"), force: z.boolean().optional().describe("Force uninstallation even if referenced by configs") }, async ({ packageName, force = false }, extra) => { if (!packageName.trim()) { throw new Error("Package name cannot be empty"); } const pkg = packageManager.getInstalledPackage(packageName); if (!pkg) { throw new Error(`Package not installed: ${packageName}`); } // Check if package is used by any configs if (pkg.usedByConfigs.length > 0 && !force) { throw new Error(`Package is used by ${pkg.usedByConfigs.length} configurations. Use force=true to override.`); } const success = await packageManager.uninstallPackage(packageName); return { content: [ { type: "text", text: JSON.stringify({ success, packageName }, null, 2) } ] }; } );
- Core uninstall helper in PackageManager class: checks if package exists, computes package directory from registry, executes preferred package manager's 'remove' command (npm/yarn/pnpm), deletes from local registry, handles errors gracefully.async uninstallPackage(packageName: string): Promise<boolean> { const existing = this.getInstalledPackage(packageName); if (!existing) { return false; } try { const packageDir = path.dirname(path.dirname(existing.localPath)); // Uninstall the package const uninstallCmd = `${this.preferredPackageManager} remove ${packageName}`; await exec(uninstallCmd, { cwd: packageDir }); // Remove from registry delete this.registry.packages[packageName]; await this.saveRegistry(); return true; } catch (error) { console.error(`Failed to uninstall package ${packageName}:`, error); return false; } }