From 850023f24a164e124c4ae9e27da9cdef6af95d1e Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 14:30:04 +0000 Subject: [PATCH] feat: add mcp_config input that merges with existing mcp server - Add mcp_config input parameter to action.yml - Modify prepareMcpConfig() to accept and merge additional config - Provided config overrides built-in servers in case of naming collisions - Pass MCP_CONFIG environment variable from action to prepare step Co-authored-by: ashwin-ant --- action.yml | 5 +++++ src/entrypoints/prepare.ts | 2 ++ src/mcp/install-mcp-server.ts | 33 +++++++++++++++++++++++++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index 319a6de9..d544f673 100644 --- a/action.yml +++ b/action.yml @@ -39,6 +39,10 @@ inputs: description: "Direct instruction for Claude (bypasses normal trigger detection)" required: false default: "" + mcp_config: + description: "Additional MCP configuration (JSON string) that merges with the built-in GitHub MCP servers" + required: false + default: "" # Auth configuration anthropic_api_key: @@ -92,6 +96,7 @@ runs: ALLOWED_TOOLS: ${{ inputs.allowed_tools }} CUSTOM_INSTRUCTIONS: ${{ inputs.custom_instructions }} DIRECT_PROMPT: ${{ inputs.direct_prompt }} + MCP_CONFIG: ${{ inputs.mcp_config }} OVERRIDE_GITHUB_TOKEN: ${{ inputs.github_token }} GITHUB_RUN_ID: ${{ github.run_id }} diff --git a/src/entrypoints/prepare.ts b/src/entrypoints/prepare.ts index c3e0b38e..006a62ef 100644 --- a/src/entrypoints/prepare.ts +++ b/src/entrypoints/prepare.ts @@ -84,11 +84,13 @@ async function run() { ); // Step 11: Get MCP configuration + const additionalMcpConfig = process.env.MCP_CONFIG || ""; const mcpConfig = await prepareMcpConfig( githubToken, context.repository.owner, context.repository.repo, branchInfo.currentBranch, + additionalMcpConfig, ); core.setOutput("mcp_config", mcpConfig); } catch (error) { diff --git a/src/mcp/install-mcp-server.ts b/src/mcp/install-mcp-server.ts index 462967db..f07d00bd 100644 --- a/src/mcp/install-mcp-server.ts +++ b/src/mcp/install-mcp-server.ts @@ -5,9 +5,10 @@ export async function prepareMcpConfig( owner: string, repo: string, branch: string, + additionalMcpConfig?: string, ): Promise { try { - const mcpConfig = { + const baseMcpConfig = { mcpServers: { github: { command: "docker", @@ -40,7 +41,35 @@ export async function prepareMcpConfig( }, }; - return JSON.stringify(mcpConfig, null, 2); + // Merge with additional MCP config if provided + if (additionalMcpConfig && additionalMcpConfig.trim()) { + try { + const additionalConfig = JSON.parse(additionalMcpConfig); + + // Merge mcpServers objects, with additional config overriding base config + if (additionalConfig.mcpServers) { + baseMcpConfig.mcpServers = { + ...baseMcpConfig.mcpServers, + ...additionalConfig.mcpServers, + }; + } + + // Merge any other top-level properties from additional config + const mergedConfig = { + ...baseMcpConfig, + ...additionalConfig, + mcpServers: baseMcpConfig.mcpServers, // Ensure mcpServers uses the merged version + }; + + return JSON.stringify(mergedConfig, null, 2); + } catch (parseError) { + core.warning( + `Failed to parse additional MCP config: ${parseError}. Using base config only.`, + ); + } + } + + return JSON.stringify(baseMcpConfig, null, 2); } catch (error) { core.setFailed(`Install MCP server failed with error: ${error}`); process.exit(1);