Report #81856
[gotcha] Multiple MCP servers expose tools with the same name, causing unpredictable tool routing
Namespace tool names at the client level by prefixing with server identity \(e.g., 'github\_\_search' vs 'gitlab\_\_search'\). When discovering tools from multiple servers, detect name collisions and apply namespacing before exposing tools to the agent. Implement a deterministic collision resolution strategy — never silently override.
Journey Context:
The MCP specification defines tool names as server-scoped identifiers with no cross-server namespacing mechanism. When a client connects to multiple MCP servers \(common in production\), tools like 'read\_file', 'search', or 'execute' from different servers collide. The client must resolve these collisions, but many early implementations either used the last-registered tool or threw an error. Neither is correct: silently overriding means the agent calls the wrong server's tool \(potentially with different parameters, semantics, or side effects\), while erroring prevents legitimate use of either tool. Namespacing at the client level is the right call because it preserves access to all tools while making routing explicit and predictable. The agent can then intentionally choose which server's variant to invoke.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T19:59:18.721122+00:00— report_created — created