An agent tool call is JSON the model wrote. When that JSON contains a field like command, query, or path typed as an open string, your function receives attacker-influenced text, because the model cannot reliably separate instructions from data. OWASP documents this directly: LLMs process natural language instructions and external data together without a clear separation, so a malicious page, email, or document can steer the tool call the OWASP prompt injection overview. The same cheat sheet notes that the top impact includes unauthorized actions via connected tools and APIs the OWASP prevention cheat sheet.
The practical consequence is a decision rule you can apply today: any string argument that reaches a shell, a SQL engine, a URL, or a filesystem is a liability unless it is constrained. Microsoft's guidance on indirect prompt injection states that traditional input validation is insufficient precisely because the model cannot tell user input from external content, which is why it recommends defense in depth with deterministic layers the Microsoft guidance. Parameterized tool schemas are one of those deterministic layers, and unlike prompt-level defenses they do not depend on the model's cooperation.
Simon Willison's lethal trifecta framing gives you the triage question: an agent with private data access, exposure to untrusted content, and an external communication path can be tricked into exfiltration the lethal trifecta. If your tool sits at that intersection, string fields are the shortest route from untrusted content to action, and typing them is the cheapest control you can deploy.



