The schema is the contract
What the model sees before it calls
A tool publishes its input schema alongside its name and description. That schema is not paperwork. It is the only description of the call a model has in front of it while deciding what to send.
Every rule you keep out of the schema is a rule the model has to discover by getting it wrong first.
A rule in the wrong place still works, badly
You can accept any number and check the range in the body of the tool. Calls with a bad value do get refused, so it looks correct from the inside.
From the outside it is worse in two ways. The model cannot see the rule, so it cannot obey it, and every violation costs a whole round trip to find out.
Put the rule in the schema and both problems disappear at once. The Software Development Kit refuses the call before your code runs, and returns a tool failure saying exactly which property was wrong.
What to do
Register repeat with text and times. Constrain times in the schema: a whole number, no less than one, no more than five.
The starter does no checking at all, so it will happily repeat something ninety nine times. Two checks fail on that, and both are fixed by the same change.
Written against revision 2026-07-28