update-mcp
Update MCP server packages to specific versions, managing dependencies and configurations for the environment and installation manager.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| packageName | Yes | Package name to update | |
| version | No | Specific version to update to |
Implementation Reference
- src/tools/installation-tools.ts:116-147 (registration)Registration of the 'update-mcp' MCP tool, including Zod input schema (packageName, optional version) and handler that validates input and calls PackageManager.updatePackage, returning JSON result.server.tool( "update-mcp", { packageName: z.string().describe("Package name to update"), version: z.string().optional().describe("Specific version to update to") }, async ({ packageName, version }, extra) => { if (!packageName.trim()) { throw new Error("Package name cannot be empty"); } const result = await packageManager.updatePackage(packageName, version); if (!result.success) { throw new Error(`Failed to update package: ${result.error}`); } return { content: [ { type: "text", text: JSON.stringify({ success: true, packageName: result.packageName, version: result.version, localPath: result.localPath }, null, 2) } ] }; } );
- src/tools/installation-tools.ts:123-147 (handler)MCP tool handler for 'update-mcp': validates packageName, calls packageManager.updatePackage(), handles errors, returns structured content response.if (!packageName.trim()) { throw new Error("Package name cannot be empty"); } const result = await packageManager.updatePackage(packageName, version); if (!result.success) { throw new Error(`Failed to update package: ${result.error}`); } return { content: [ { type: "text", text: JSON.stringify({ success: true, packageName: result.packageName, version: result.version, localPath: result.localPath }, null, 2) } ] }; } );
- Zod schema for 'update-mcp' tool parameters: required packageName (string), optional version (string).packageName: z.string().describe("Package name to update"), version: z.string().optional().describe("Specific version to update to") },
- PackageManager.updatePackage(): core implementation that updates package via exec install command, refreshes metadata (version, binPath), updates registry. Falls back to install if not existing./** * Updates an installed package * @param packageName Package name to update * @param version Optional target version */ async updatePackage(packageName: string, version?: string): Promise<InstallResult> { const existing = this.getInstalledPackage(packageName); if (!existing) { return this.installPackage(packageName, version); } try { const packageDir = path.dirname(path.dirname(existing.localPath)); // Update the package const updateCmd = this.getInstallCommand(packageName, version); await exec(updateCmd, { cwd: packageDir }); // Get installed version const nodeModulesDir = path.join(packageDir, 'node_modules'); const installedVersion = await this.getInstalledVersion(nodeModulesDir, packageName); // Find bin path if it exists const binPath = await this.findPackageBin(nodeModulesDir, packageName); // Update registry const now = new Date().toISOString(); const localPath = path.join(nodeModulesDir, packageName); this.registry.packages[packageName] = { ...existing, version: installedVersion, localPath, binPath, updatedAt: now }; await this.saveRegistry(); return { success: true, packageName, version: installedVersion, localPath, binPath }; } catch (error) { return { success: false, packageName, version: version || 'latest', localPath: existing.localPath, error: error instanceof Error ? error.message : String(error) }; } }