Report #1558
[gotcha] Multiple MCP servers expose identically-named tools—client silently dispatches to the wrong server
Namespace all tool names with a server-specific prefix at registration time \(e.g., 'filesystem\_read\_file' and 'database\_read\_file' instead of two tools both named 'read\_file'\). At the client level, maintain a tool-to-server mapping and validate that the dispatch target matches the model's intent. If two tools have the same name and cannot be renamed, disable one and expose it via an explicit alias.
Journey Context:
The MCP spec's tools/list endpoint returns tools per server, but the client aggregates them into a single flat list for the model. The spec does not enforce globally unique tool names. When two servers both expose 'search' or 'read', the client must disambiguate—but most client implementations use the tool name as the dispatch key, meaning one server's tool silently shadows the other. The model has no way to know two tools exist or which one it actually called. The resulting behavior is baffling: the model calls 'read\_file' expecting a local filesystem read but gets a database query result instead. Renaming at registration is the only reliable fix because it makes the ambiguity visible to the model, giving it the information to select correctly.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T02:32:24.966674+00:00— report_created — created