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 <ashwin-ant@users.noreply.github.com>
This commit is contained in:
claude[bot]
2025-05-30 14:39:54 +00:00
committed by GitHub
parent 850023f24a
commit 67d2d8682a

View File

@@ -46,25 +46,29 @@ export async function prepareMcpConfig(
try { try {
const additionalConfig = JSON.parse(additionalMcpConfig); const additionalConfig = JSON.parse(additionalMcpConfig);
// Merge mcpServers objects, with additional config overriding base config // Validate that parsed JSON is an object
if (additionalConfig.mcpServers) { if (typeof additionalConfig !== "object" || additionalConfig === null) {
baseMcpConfig.mcpServers = { throw new Error("MCP config must be a valid JSON object");
...baseMcpConfig.mcpServers,
...additionalConfig.mcpServers,
};
} }
// Merge any other top-level properties from additional config // Merge configurations with user config overriding built-in servers
const mergedConfig = { const mergedConfig = {
...baseMcpConfig, ...baseMcpConfig,
...additionalConfig, ...additionalConfig,
mcpServers: baseMcpConfig.mcpServers, // Ensure mcpServers uses the merged version mcpServers: {
...baseMcpConfig.mcpServers,
...additionalConfig.mcpServers,
},
}; };
return JSON.stringify(mergedConfig, null, 2); return JSON.stringify(mergedConfig, null, 2);
} catch (parseError) { } catch (parseError) {
const configPreview =
additionalMcpConfig.length > 100
? `${additionalMcpConfig.substring(0, 100)}...`
: additionalMcpConfig;
core.warning( 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.`,
); );
} }
} }