From 67d2d8682a7a24d3b2cde91e55603d199dbdb866 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 14:39:54 +0000 Subject: [PATCH] refactor: improve MCP config validation and merging logic - Add JSON validation to ensure parsed config is an object - Simplify merge logic with explicit mcpServers merging - Enhance error logging with config preview for debugging Co-authored-by: ashwin-ant --- src/mcp/install-mcp-server.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/mcp/install-mcp-server.ts b/src/mcp/install-mcp-server.ts index f07d00b..546fa0d 100644 --- a/src/mcp/install-mcp-server.ts +++ b/src/mcp/install-mcp-server.ts @@ -46,25 +46,29 @@ export async function prepareMcpConfig( try { const additionalConfig = JSON.parse(additionalMcpConfig); - // Merge mcpServers objects, with additional config overriding base config - if (additionalConfig.mcpServers) { - baseMcpConfig.mcpServers = { - ...baseMcpConfig.mcpServers, - ...additionalConfig.mcpServers, - }; + // Validate that parsed JSON is an object + if (typeof additionalConfig !== "object" || additionalConfig === null) { + throw new Error("MCP config must be a valid JSON object"); } - // Merge any other top-level properties from additional config + // Merge configurations with user config overriding built-in servers const mergedConfig = { ...baseMcpConfig, ...additionalConfig, - mcpServers: baseMcpConfig.mcpServers, // Ensure mcpServers uses the merged version + mcpServers: { + ...baseMcpConfig.mcpServers, + ...additionalConfig.mcpServers, + }, }; return JSON.stringify(mergedConfig, null, 2); } catch (parseError) { + const configPreview = + additionalMcpConfig.length > 100 + ? `${additionalMcpConfig.substring(0, 100)}...` + : additionalMcpConfig; core.warning( - `Failed to parse additional MCP config: ${parseError}. Using base config only.`, + `Failed to parse additional MCP config: ${parseError}. Invalid config: "${configPreview}". Using base config only.`, ); } }