Report #64410
[gotcha] Two MCP servers expose tools with the same name, one silently shadows the other
Namespace all tool names with the server identity at registration time. When connecting multiple MCP servers, prefix tool names with the server identifier \(e.g., 'github\_search\_repos' not 'search\_repos'\). Detect and warn on name collisions immediately. Document the namespacing convention for model visibility.
Journey Context:
MCP allows connecting multiple servers to a single client. Each server independently defines its tools via tools/list. If Server A and Server B both expose a tool named 'search', the client has a collision. The MCP spec does not mandate collision handling—different clients handle this differently \(first wins, last wins, error\). The result is that one tool silently shadows the other, and the model calls the wrong server's implementation with no indication of failure. The model gets back unexpected results and reasons from incorrect data. Namespacing at the client level is the reliable fix, but it changes the tool names the model sees, so tool descriptions must reference the namespaced name. The subtlety: even with namespacing, if two servers expose semantically similar tools with different names \(e.g., 'github\_search' and 'gitlab\_search'\), the model may still confuse them if descriptions are too similar.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T14:35:59.351836+00:00— report_created — created