mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-08-22 03:18:54 +08:00
fix(mcp): recognize mcp__github aggregate selector for GitHub MCP server initialization (#1657)
* fix(mcp): accept shorthand selectors for GitHub MCP server initialization ## Problem Signed-off-by: anish <anishesg@users.noreply.github.com> * address review feedback: fix prettier formatting Signed-off-by: anish <anishesg@users.noreply.github.com> --------- Signed-off-by: anish <anishesg@users.noreply.github.com> Co-authored-by: anish <anishesg@users.noreply.github.com>
This commit is contained in:
@@ -83,20 +83,25 @@ export async function prepareMcpConfig(
|
|||||||
// Detect if we're in agent mode (explicit prompt provided)
|
// Detect if we're in agent mode (explicit prompt provided)
|
||||||
const isAgentMode = mode === "agent";
|
const isAgentMode = mode === "agent";
|
||||||
|
|
||||||
const hasGitHubCommentTools = allowedToolsList.some((tool) =>
|
const hasGitHubCommentTools = allowedToolsList.some(
|
||||||
tool.startsWith("mcp__github_comment__"),
|
(tool) =>
|
||||||
|
tool === "mcp__github_comment" ||
|
||||||
|
tool.startsWith("mcp__github_comment__"),
|
||||||
);
|
);
|
||||||
|
|
||||||
const hasGitHubMcpTools = allowedToolsList.some((tool) =>
|
const hasGitHubMcpTools = allowedToolsList.some(
|
||||||
tool.startsWith("mcp__github__"),
|
(tool) => tool === "mcp__github" || tool.startsWith("mcp__github__"),
|
||||||
);
|
);
|
||||||
|
|
||||||
const hasInlineCommentTools = allowedToolsList.some((tool) =>
|
const hasInlineCommentTools = allowedToolsList.some(
|
||||||
tool.startsWith("mcp__github_inline_comment__"),
|
(tool) =>
|
||||||
|
tool === "mcp__github_inline_comment" ||
|
||||||
|
tool.startsWith("mcp__github_inline_comment__"),
|
||||||
);
|
);
|
||||||
|
|
||||||
const hasGitHubCITools = allowedToolsList.some((tool) =>
|
const hasGitHubCITools = allowedToolsList.some(
|
||||||
tool.startsWith("mcp__github_ci__"),
|
(tool) =>
|
||||||
|
tool === "mcp__github_ci" || tool.startsWith("mcp__github_ci__"),
|
||||||
);
|
);
|
||||||
|
|
||||||
const baseMcpConfig: { mcpServers: Record<string, unknown> } = {
|
const baseMcpConfig: { mcpServers: Record<string, unknown> } = {
|
||||||
|
|||||||
@@ -354,4 +354,102 @@ describe("prepareMcpConfig", () => {
|
|||||||
const parsed = JSON.parse(result);
|
const parsed = JSON.parse(result);
|
||||||
expect(parsed.mcpServers.github_ci).not.toBeDefined();
|
expect(parsed.mcpServers.github_ci).not.toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("should include github MCP server when mcp__github shorthand is used", async () => {
|
||||||
|
const result = await prepareMcpConfig({
|
||||||
|
githubToken: "test-token",
|
||||||
|
owner: "test-owner",
|
||||||
|
repo: "test-repo",
|
||||||
|
branch: "test-branch",
|
||||||
|
baseBranch: "main",
|
||||||
|
allowedTools: ["mcp__github"],
|
||||||
|
mode: "agent",
|
||||||
|
context: mockContext,
|
||||||
|
});
|
||||||
|
|
||||||
|
const parsed = JSON.parse(result);
|
||||||
|
expect(parsed.mcpServers.github).toBeDefined();
|
||||||
|
expect(parsed.mcpServers.github.command).toBe("docker");
|
||||||
|
expect(parsed.mcpServers.github.env.GITHUB_PERSONAL_ACCESS_TOKEN).toBe(
|
||||||
|
"test-token",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("should include inline comment server when mcp__github_inline_comment shorthand is used", async () => {
|
||||||
|
const result = await prepareMcpConfig({
|
||||||
|
githubToken: "test-token",
|
||||||
|
owner: "test-owner",
|
||||||
|
repo: "test-repo",
|
||||||
|
branch: "test-branch",
|
||||||
|
baseBranch: "main",
|
||||||
|
allowedTools: ["mcp__github_inline_comment"],
|
||||||
|
mode: "agent",
|
||||||
|
context: mockPRContext,
|
||||||
|
});
|
||||||
|
|
||||||
|
const parsed = JSON.parse(result);
|
||||||
|
expect(parsed.mcpServers.github_inline_comment).toBeDefined();
|
||||||
|
expect(parsed.mcpServers.github_inline_comment.env.GITHUB_TOKEN).toBe(
|
||||||
|
"test-token",
|
||||||
|
);
|
||||||
|
expect(parsed.mcpServers.github_inline_comment.env.PR_NUMBER).toBe("456");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("should include comment server in agent mode when mcp__github_comment shorthand is used", async () => {
|
||||||
|
const result = await prepareMcpConfig({
|
||||||
|
githubToken: "test-token",
|
||||||
|
owner: "test-owner",
|
||||||
|
repo: "test-repo",
|
||||||
|
branch: "test-branch",
|
||||||
|
baseBranch: "main",
|
||||||
|
allowedTools: ["mcp__github_comment"],
|
||||||
|
mode: "agent",
|
||||||
|
context: mockContext,
|
||||||
|
});
|
||||||
|
|
||||||
|
const parsed = JSON.parse(result);
|
||||||
|
expect(parsed.mcpServers.github_comment).toBeDefined();
|
||||||
|
expect(parsed.mcpServers.github_comment.env.GITHUB_TOKEN).toBe(
|
||||||
|
"test-token",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("should include CI server in agent mode when mcp__github_ci shorthand is used", async () => {
|
||||||
|
process.env.DEFAULT_WORKFLOW_TOKEN = "workflow-token";
|
||||||
|
|
||||||
|
const result = await prepareMcpConfig({
|
||||||
|
githubToken: "test-token",
|
||||||
|
owner: "test-owner",
|
||||||
|
repo: "test-repo",
|
||||||
|
branch: "test-branch",
|
||||||
|
baseBranch: "main",
|
||||||
|
allowedTools: ["mcp__github_ci"],
|
||||||
|
mode: "agent",
|
||||||
|
context: mockPRContext,
|
||||||
|
});
|
||||||
|
|
||||||
|
const parsed = JSON.parse(result);
|
||||||
|
expect(parsed.mcpServers.github_ci).toBeDefined();
|
||||||
|
expect(parsed.mcpServers.github_ci.env.GITHUB_TOKEN).toBe("workflow-token");
|
||||||
|
expect(parsed.mcpServers.github_ci.env.PR_NUMBER).toBe("456");
|
||||||
|
|
||||||
|
delete process.env.DEFAULT_WORKFLOW_TOKEN;
|
||||||
|
});
|
||||||
|
|
||||||
|
test("should not include github MCP server when unrelated tool is specified", async () => {
|
||||||
|
const result = await prepareMcpConfig({
|
||||||
|
githubToken: "test-token",
|
||||||
|
owner: "test-owner",
|
||||||
|
repo: "test-repo",
|
||||||
|
branch: "test-branch",
|
||||||
|
baseBranch: "main",
|
||||||
|
allowedTools: ["Bash", "Read", "Grep"],
|
||||||
|
mode: "agent",
|
||||||
|
context: mockContext,
|
||||||
|
});
|
||||||
|
|
||||||
|
const parsed = JSON.parse(result);
|
||||||
|
expect(parsed.mcpServers.github).not.toBeDefined();
|
||||||
|
expect(parsed.mcpServers.github_inline_comment).not.toBeDefined();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user