Report #14295
[gotcha] Multiple MCP servers register tools with the same name causing silent misrouting \(cross-origin tool shadowing\)
Namespace all tool names with the server identity at aggregation time \(e.g., 'github.search' vs 'internal.search'\). On tool list aggregation, detect duplicate names and fail explicitly rather than silently picking one. Log all name collisions as security events. Reject server connections that attempt to register tool names already claimed by another connected server.
Journey Context:
When multiple MCP servers are connected to the same host, they may provide tools with identical names — two servers both providing a 'search' or 'read\_file' tool. The MCP spec doesn't define collision resolution, so the host implementation decides, often silently picking the first or last registered tool. An attacker who controls one server can shadow a legitimate tool by registering the same name, causing the LLM to call the malicious tool instead of the intended one. This is cross-origin tool shadowing. The fix seems obvious — namespace tools — but many implementations don't do it because it breaks the clean developer UX of calling 'search' and requires the LLM to disambiguate, which adds prompt complexity and failure modes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T21:13:47.635370+00:00— report_created — created