A new team member asks how a client refers to a specific tool, resource or prompt when it wants to use one. Which description of MCP's addressing is correct?
Select an answer to reveal the explanation.
Short Explanation
Resources live at addresses, like web pages, so you fetch them by URI. Tools and prompts are more like named commands you call out by name. If an option gives a tool a URI, it's swapped the roles.
Full Explanation
MCP addresses each server primitive in the way that suits its purpose. Resources represent data and are identified by URIs, so a client reads one with resources/read and the resource's URI, and resource templates describe parameterized URI patterns. Tools are identified by name; a tools/call request carries the tool's name and its arguments, and the name must match exactly what tools/list returned. Prompts are likewise identified by name, and prompts/get takes the prompt's name plus any arguments. Giving tools URIs swaps the scheme: tools are named functions, and their names are unique within a server rather than locations of data. Giving prompts URIs makes the same mistake for templates, which are retrieved by name. Addressing primitives by list position would break whenever a list changes or is paginated; even though servers SHOULD keep tools in a deterministic order, the order exists for caching, not identification. Exam caveat: tools can return resource links that carry URIs, but the link points to a resource, not to the tool itself. Operational check: when building a request, confirm resources/read carries a uri parameter, while tools/call and prompts/get carry a name that matches the corresponding list result exactly.