One flat list of tools

Connect five servers and the model sees one list of tools, all of it in the prompt, all of it trusted the same. Cost and risk both add up.

By the end of this lesson you can

  • describe how a host merges tool lists from several servers;
  • explain name collisions and how namespacing fixes them;
  • name three consequences of a flat list: failure isolation, selection accuracy, shared trust.

Servers in, one list out

The host keeps one client per server and merges every tools/list into a single list for the model. The model never sees servers, only tools. Two servers that both call a tool search collide unless the host renames them.

Merging tool lists

Modelsees only tools Host: the model's tool list github server searchcreate_issueget_pull_request jira server searchcreate_issuetransition clientclient searchwhich one? create_issuewhich one? get_pull_request search create_issue transition mcp__github__search mcp__github__create_issue mcp__github__get_pull_request mcp__jira__search mcp__jira__create_issue mcp__jira__transition tool_use: "search"route to github or jira? mcp__jira__searchroutes to jira, unambiguous the whole list is in the prompt every turn 3 tools 3 tools
  1. The host has one client per server. Each client calls tools/list on its own server.
  2. Each server answers with its tools. Neither knows the other exists.
  3. The host merges them into one flat list for the model. search and create_issue now appear twice.
  4. The model asks for search. The host cannot tell which server it meant.
  5. Hosts therefore prefix names with the server, mcp__server__tool. Every name is unique and routes to exactly one client.

Make two servers collide

github server

    jira server

      What the model sees

        Three consequences of a flat list

        Key idea

        Context cost is additive: every schema from every server is in the prompt on every turn, unless the host uses tool search or lazy loading. Lesson 14 puts numbers on it.

        Quick check

        Does the model know which server a tool comes from?

        • Yes, the protocol tells it
        • Only if the host puts it in the name or description; it sees one flat list
        • Yes, it calls server/discover itself
        The model sees tools, not servers. Prefixes like mcp__github__search are how hosts make the origin visible and routing unambiguous.

        Names are now unique. What can still go wrong with two search tools?

        • Nothing
        • The model can still pick the wrong one if their descriptions are vague
        • The host will crash
        Selection is done by the model reading descriptions. Unique names fix routing, not judgement.

        Recap