The common first attempt at tool safety is a sentence in the system prompt: do not use the refund tool unless the user asks twice. That fails for the same reason any prompt-only constraint fails. The model predicts one token at a time, and nothing in the decoding process has been told that certain outputs are forbidden. Research on constrained decoding shows that hard guarantees come from filtering the token distribution at generation time, not from asking politely in the constrained decoding overview.
The security equivalent of that lesson is to filter the tool list before the model ever sees it. Function calling works by handing the model a library of function definitions and letting it choose, with your application executing the selected function and returning the result in this function calling explainer. If the dangerous function is not in that library, the model cannot choose it. There is no argument to parse, no name to hallucinate into a real endpoint, and nothing to talk the model out of.
Practitioners describe this as dynamic tool filtering, one of the levers a team actually controls once a model has been chosen, alongside tool descriptions, atomic tool design and ongoing evaluations in the Paragon tool calling guide. The registry is where that filter gets its data.
The distinction matters for cost too. Every tool schema you send occupies context. A caller that is cleared for four read-only tools does not need to carry forty definitions, and loading unnecessary tools is one of the ways a system becomes too slow or expensive for production in the same Paragon guide. Tier filtering therefore buys security and latency at the same time.



