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
| Name | Required | Description | Default |
|---|---|---|---|
| configPath | Yes | Path to configuration file | |
| packageName | Yes | Package name to use | |
| serverName | Yes | Name of the server in the configuration |
Implementation Reference
- src/tools/watcher-tools.ts:176-216 (handler)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) }; } }