Federico Mariani created CAMEL-23958:
----------------------------------------

             Summary: camel-openai: duplicate MCP tool names from multiple 
servers are all sent to the model
                 Key: CAMEL-23958
                 URL: https://issues.apache.org/jira/browse/CAMEL-23958
             Project: Camel
          Issue Type: Bug
          Components: camel-openai
    Affects Versions: 4.21.0
            Reporter: Federico Mariani


When two configured MCP servers expose a tool with the same name, 
{{OpenAIEndpoint.initializeMcpServers}} deduplicates the *dispatch* map but not 
the *advertised* tool list:
{code:java}
cachedMcpTools.addAll(McpToolConverter.convert(tools));   // adds ALL tools, 
duplicates included

for (McpSchema.Tool tool : tools) {
    if (toolClientMap.putIfAbsent(tool.name(), mcpClient) != null) {
        LOG.warn("Duplicate MCP tool name '{}' from server '{}', using first 
registered", ...);
    }
    ...
}
{code}
Consequences:
* the chat completion request contains two {{function}} tools with the same 
name (the OpenAI API rejects duplicate function names; OpenAI-compatible 
servers behave unpredictably);
* even where the request is accepted, the model may generate arguments against 
the *second* server's schema, but dispatch by name routes the call to the 
*first* server — a silent cross-server misdispatch.

The same defect exists in {{reconnectMcpServer}}, which re-adds all re-listed 
tools without checking for names owned by other servers.

h3. Suggested fix
Only add a converted tool to {{cachedMcpTools}} when its name won the 
{{putIfAbsent}} registration (and mirror that in the reconnect path), keeping 
the existing WARN. A follow-up option for explicit disambiguation/filtering is 
proposed separately (MCP tool filtering).

_This issue was drafted by Claude Code on behalf of Federico Mariani_



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to