Skip to main content
Glama
devlimelabs

MCP Environment & Installation Manager

by devlimelabs

localize-mcp-server

Manage and configure MCP server environments by specifying configuration paths, server names, and package names for streamlined local setup and installation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
configPathYesPath to configuration file
packageNameYesPackage name to use
serverNameYesName of the server in the configuration

Implementation Reference

  • The MCP tool handler for 'localize-mcp-server', including input schema validation and delegation to WatcherService.updateServerConfig for the core logic.
    server.tool( "localize-mcp-server", { configPath: z.string().describe("Path to configuration file"), serverName: z.string().describe("Name of the server in the configuration"), packageName: z.string().describe("Package name to use") }, async ({ configPath, serverName, packageName }, extra) => { if (!configPath.trim()) { throw new Error("Config path cannot be empty"); } if (!serverName.trim()) { throw new Error("Server name cannot be empty"); } if (!packageName.trim()) { throw new Error("Package name cannot be empty"); } const result = await watcherService.updateServerConfig(configPath, serverName, packageName); if (!result.success) { throw new Error(`Failed to update server configuration: ${result.error}`); } return { content: [ { type: "text", text: JSON.stringify({ success: true, configPath, serverName, packageName }, null, 2) } ] }; } );
  • Core helper method in WatcherService that performs the actual localization by updating the MCP server config to use the local package's binary or dist/index.js, writing the config file, and tracking the reference.
    async updateServerConfig( configPath: string, serverName: string, packageName: string ): Promise<ConfigUpdateResult> { try { // Check if package is installed const installedPackage = this.packageManager.getInstalledPackage(packageName); if (!installedPackage) { return { success: false, configPath, serverName, packageName, error: `Package not installed: ${packageName}` }; } // Read the config file const config = await readJsonFileOrDefault<McpConfig>(configPath, { mcpServers: {} }); // Check if server exists if (!config.mcpServers || !config.mcpServers[serverName]) { return { success: false, configPath, serverName, packageName, error: `Server not found in config: ${serverName}` }; } // Update the command to use the local package const server = config.mcpServers[serverName]; // If bin path exists, use that if (installedPackage.binPath) { server.command = 'node'; server.args = [installedPackage.binPath]; } else { // Otherwise, use node with the package's main file server.command = 'node'; server.args = [path.join(installedPackage.localPath, 'dist/index.js')]; } // Write the updated config await fs.writeFile(configPath, JSON.stringify(config, null, 2)); // Update the cache this.configCache.set(configPath, config); // Add config reference await this.packageManager.addConfigReference(packageName, { path: configPath, platform: this.getPlatformForConfig(configPath), serverName }); return { success: true, configPath, serverName, packageName }; } catch (error) { return { success: false, configPath, serverName, packageName, 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