How to write MCP tool descriptions the model will follow

The model picks a tool from the name, the description and the argument schema. Marketing copy makes it call the tool when it should not.

Say when to use it, when not to, and what it changes. “A powerful file tool” says nothing. Write “read or replace files inside the allowlisted directory; does not run a shell”.

Use domain words for arguments and write the constraints: path must stay under the root, limit defaults to 20, dry_run defaults to true. List every enum value. Do not leave required vs optional to guesswork.

Keep tools small. One “do any Git thing” entry makes the model miss the arguments. Split status, diff and create_pr. See writing an MCP server on this site.

Try two or three real tasks: does the model pick the right tool, fill arguments once, and switch on failure? Retest after you edit the copy. Do not pile on synonyms.