diff --git a/packages/coding-agent/src/mcp/config.ts b/packages/coding-agent/src/mcp/config.ts index a23eee852..1189d7fe0 100644 --- a/packages/coding-agent/src/mcp/config.ts +++ b/packages/coding-agent/src/mcp/config.ts @@ -244,8 +244,10 @@ function getRequestedExaMcpTools(config: MCPServerConfig): string[] | null { } if (!config.type || config.type === "stdio") { const stdioConfig = config as { args?: string[] }; - for (const arg of stdioConfig.args ?? []) { - const match = arg.match(/(?:^|[\s?&])tools=([^&\s]+)/i) ?? arg.match(/--?tools[=\s]([^\s]+)/i); + const args = stdioConfig.args ?? []; + for (let i = 0; i < args.length; i++) { + if (/^--?tools$/i.test(args[i])) return args[i + 1]; + const match = args[i].match(/(?:^|[\s?&])tools=([^&\s]+)/i) ?? args[i].match(/--?tools[=\s]([^\s]+)/i); if (match) return match[1]; } } diff --git a/packages/coding-agent/test/mcp-exa-filter.test.ts b/packages/coding-agent/test/mcp-exa-filter.test.ts index 4ea89a8c7..cb36019f9 100644 --- a/packages/coding-agent/test/mcp-exa-filter.test.ts +++ b/packages/coding-agent/test/mcp-exa-filter.test.ts @@ -63,4 +63,17 @@ describe("Exa MCP filtering", () => { expect(Object.keys(result.configs)).toEqual(["exa"]); }); + + test("keeps a stdio exa server with a separate tools argument", () => { + const configs: Record = { + exa: { + type: "stdio", + command: "npx", + args: ["-y", "exa-mcp-server", "--tools", "web_search_exa,web_fetch_exa"], + }, + }; + const result = filterExaMCPServers(configs, { exa: SOURCE }); + + expect(Object.keys(result.configs)).toEqual(["exa"]); + }); });