Twelve servers, one flat list

Lesson 3 of 5 in Tool Selection at Scale: Forty Tools, One Context.

MCP made tool catalogs composable, and composition is where large catalogs actually come from. Nobody writes forty tools; a host connects to nine servers that each export a handful, and the pile assembles itself. Which raises a question the protocol answers precisely — and not in the way people assume.

Read that carefully, because two different namespaces are in play and only one of them is protected. Server identity is verifiable through the registry. Tool names inside a server are whatever that server says they are — and when your host flattens nine servers into one array for the model, collisions are not a hypothetical. Two servers exporting search. Three exporting create_issue. Your client must pick a rule, and the rule leaks into the model’s prompt, because the prefixed name is what the model reads and reasons about.

Disambiguation strategies your host can adopt, and what each does to the model’s job
StrategyWhat the model seesVerdict

First server wins

search — with no hint that a second search was silently dropped

Avoid. The dropped tool becomes a ghost: present in the catalog, unreachable, and invisible in any audit. Connection order becomes load-bearing configuration

Server prefix

github__search, confluence__search

The default worth adopting. Collisions become impossible, provenance becomes readable in the trace, and the prefix is a genuine routing signal — the model learns which system it is talking to

Prefix only on collision

search and confluence__search

Tempting, and unstable: adding a server silently renames a tool the model was already using. Tool names are part of your prompt surface — treat a rename as a change that needs testing

Curated aliases

search_code, search_docs — names you chose, mapped to servers in config

Best routing quality, highest maintenance. Worth it for the ten tools that carry your core workflows; not worth it for the long tail

Provenance is the other half. When create_issue fires, three questions should be answerable from the trace alone: which server executed it, which credential it used, and what description was in context when the model chose it. The first two are ordinary span attributes. The third is the one teams omit and later wish they had, because it is the only way to reconstruct why a past run made a choice that today’s catalog would not produce.

Key terms: namespace, tool gateway, tool-description poisoning, rug pull, tool sprawl, provenance

Interactive checkpoint quiz (2 questions) — open this page in a browser to take it.