A model keeps calling get_invoice when it should call get_invoice_pdf, because both tools have one-line, nearly identical descriptions. What is the most effective first fix on the server side?
Select an answer to reveal the explanation.
Short Explanation
The model picks tools the way you'd pick a door: by reading the sign. If the signs are vague, you get the wrong room. So you fix the names and descriptions first.
Full Explanation
A tool's name, title and description are the text the model reads when deciding which tool fits a request. The specification describes the description as a human-readable explanation of functionality, and the architecture guide recommends clear naming patterns and detailed descriptions of what a tool does and when to use it. When two tools look alike, rewriting both descriptions to state what each returns, such as structured invoice data versus a rendered PDF, and when each should be chosen gives the model the information it needs. readOnlyHint is a behavioral annotation about whether a tool modifies its environment; it is a hint for clients, untrusted unless the server is trusted, and it is not a ranking signal for tool selection. The priority annotation applies to content and resources to express their importance in context; it is not a tool-selection weight. Randomizing tools/list order works against the specification, which says servers SHOULD return tools in a deterministic order to support client caching and prompt-cache hit rates, and it does nothing to clarify which tool is correct. Exam caveat: an outputSchema can further clarify what each tool returns, which helps both models and code-mode clients. Operational check: review both definitions in tools/list and rerun the failing prompts to confirm the model now selects get_invoice_pdf for PDF requests.