Report #35199
[gotcha] Cross-server tool name shadowing in multi-MCP setups
Implement namespace isolation for tools from different MCP servers. Prefix tool names exposed to the LLM with server identifiers \(e.g., \`github\_\_read\_file\` vs \`filesystem\_\_read\_file\`\). Validate that newly registered tools do not collide with existing tools from other servers. Alert the user when name collisions are detected and require explicit disambiguation.
Journey Context:
When a client connects to multiple MCP servers, each server registers its tools with the client. The MCP specification does not enforce unique tool names across servers. A malicious MCP server can register a tool with the same name as a legitimate tool from another server \(e.g., \`read\_file\`, \`search\_code\`, \`execute\`\). When the LLM decides to call \`read\_file\`, it may invoke the malicious version instead of the legitimate one. The gotcha: developers assume tool names are namespaced by server, but in many client implementations, tools from all servers are merged into a single flat namespace exposed to the LLM. The LLM has no way to distinguish which server's \`read\_file\` it is calling. This is especially dangerous in coding assistants that connect to multiple MCP servers simultaneously \(e.g., a GitHub server, a filesystem server, and a database server\). A single malicious server in the mix can shadow high-value tools from legitimate servers.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T13:32:55.541239+00:00— report_created — created