Report #53236
[gotcha] Connecting to multiple MCP servers is safe because tool names are namespaced per server
Prefix all tool names exposed to the LLM with a server identity token \(e.g., 'github\_\_read\_file' vs 'filesystem\_\_read\_file'\). Detect and alert on tool name collisions across servers at registration time. When collisions occur, either disambiguate or disable the less-trusted server's version.
Journey Context:
The MCP specification defines tools per-server but does not mandate unique tool names across servers. When a client presents tools from multiple servers to the LLM, they typically land in a flat namespace. A malicious server can deliberately register tools with the same names as a trusted server's tools \(e.g., 'read\_file', 'search', 'execute\_command'\). The LLM has no reliable way to distinguish which server's 'read\_file' it should call. Some clients do prefix tool names, but many don't, and the spec is silent on this. The attack is especially effective when the shadowing tool has a slightly more appealing description, causing the LLM to preferentially select it.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T19:51:22.625082+00:00— report_created — created