Skip to main content
Glama
devlimelabs

MCP Environment & Installation Manager

by devlimelabs

install-mcp

Install specific packages and versions using the MCP Environment & Installation Manager. Simplify local package setup and ensure consistent configurations across your server environment.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
packageNameYesPackage name to install
versionNoSpecific version to install

Implementation Reference

  • The async handler function for the 'install-mcp' MCP tool. Validates inputs and delegates installation to the PackageManager service.
    async ({ packageName, version }, extra) => { if (!packageName.trim()) { throw new Error("Package name cannot be empty"); } const result = await packageManager.installPackage(packageName, version); if (!result.success) { throw new Error(`Failed to install 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 defining inputs for install-mcp tool: packageName (string), version (optional string)
    { packageName: z.string().describe("Package name to install"), version: z.string().optional().describe("Specific version to install") },
  • MCP server.tool registration for the 'install-mcp' tool, including schema and handler
    server.tool( "install-mcp", { packageName: z.string().describe("Package name to install"), version: z.string().optional().describe("Specific version to install") }, async ({ packageName, version }, extra) => { if (!packageName.trim()) { throw new Error("Package name cannot be empty"); } const result = await packageManager.installPackage(packageName, version); if (!result.success) { throw new Error(`Failed to install package: ${result.error}`); } return { content: [ { type: "text", text: JSON.stringify({ success: true, packageName: result.packageName, version: result.version, localPath: result.localPath }, null, 2) } ] }; } );
  • src/server.ts:30-35 (registration)
    Top-level registration of tool groups including installation tools (which contains install-mcp) in the main server initialization
    // Register all tools registerEnvironmentTools(server, configService); registerProfileTools(server, configService); registerInstallationTools(server, configService, packageManager); registerWatcherTools(server, configService, watcherService);
  • PackageManager.installPackage method containing the core logic for installing MCP packages: creates directory, sets up package.json, installs via preferred package manager, discovers version/bin path, and updates the package registry.
    async installPackage(packageName: string, version?: string): Promise<InstallResult> { try { // Create package-specific directory const packageDir = path.join(this.packagesDir, packageName.replace('/', '-')); await ensureDir(packageDir); // Create package.json if it doesn't exist const packageJsonPath = path.join(packageDir, 'package.json'); if (!(await fileExists(packageJsonPath))) { await writeJsonFile(packageJsonPath, { name: 'mcp-package-wrapper', version: '1.0.0', private: true, type: 'module' }); } // Install the package const installCmd = this.getInstallCommand(packageName, version); await exec(installCmd, { 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); // Add to registry const now = new Date().toISOString(); const localPath = path.join(nodeModulesDir, packageName); const installedPackage: InstalledPackage = { name: packageName, version: installedVersion, localPath, binPath, installedAt: now, updatedAt: now, dependencies: [], // TODO: Extract dependencies usedByConfigs: [] }; this.registry.packages[packageName] = installedPackage; await this.saveRegistry(); return { success: true, packageName, version: installedVersion, localPath, binPath }; } catch (error) { return { success: false, packageName, version: version || 'latest', localPath: '', error: error instanceof Error ? error.message : String(error) }; } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/devlimelabs/mcp-env-manager-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server