This prompt is designed for integration developers and backend engineers who need to prevent malformed tool calls from reaching execution. Its core job is to force the model to refuse a function call when required arguments are missing, rather than guessing, hallucinating defaults, or calling the tool with incomplete data. The primary reader is someone wiring an LLM into a production system where a single missing field—such as an empty user_id or a null transaction_amount—can corrupt state, trigger a confusing error downstream, or silently produce incorrect results. This is not a prompt for improving tool selection accuracy or resolving ambiguity between multiple tools; it is strictly for enforcing argument completeness on a specific, already-selected tool call.
Prompt
Tool Call Refusal for Missing Required Arguments Prompt

When to Use This Prompt
Define the job, reader, and constraints for the Tool Call Refusal for Missing Required Arguments prompt.
Use this prompt when your application layer cannot safely fill missing arguments from session state, user profiles, or deterministic defaults. It is most valuable in systems where the model is expected to extract structured arguments from natural language user input, and where the cost of an incomplete call is high—for example, initiating a payment, updating a medical record, or modifying a production configuration. The prompt should be placed immediately before the tool call execution step in your pipeline, acting as a guard that either returns a validated call or a structured refusal. Do not use this prompt as a substitute for proper schema design; the tool's JSON Schema definition should already mark required fields, and this prompt adds a semantic layer that catches cases where the model might otherwise populate a required field with a nonsense value like "unknown" or an empty string.
Avoid this prompt when your application already has robust pre-execution validation that can deterministically reject incomplete calls and request missing information from the user without an additional model round-trip. It is also unnecessary for low-risk read operations where a missing filter argument might just return a broader result set that the user can refine. In regulated domains such as healthcare or finance, this prompt is a useful defense-in-depth layer, but it must be paired with deterministic schema validation and human review gates for high-risk operations. The output of this prompt should be logged as part of your tool-call audit trail, capturing both the refusal reason and the specific missing arguments identified.
Use Case Fit
Where this prompt works and where it does not. Use these cards to decide if the Tool Call Refusal for Missing Required Arguments pattern fits your integration context.
Good Fit: Strict API Contracts
Use when: your tools have non-negotiable required fields (e.g., user_id, account_number) and calling without them will cause a 400 error or corrupt state. Guardrail: The prompt refuses with a structured list of missing arguments, preventing a malformed API call that your backend would reject anyway.
Bad Fit: Optional-Heavy Workflows
Avoid when: most tool arguments are optional with sensible defaults, and refusing on missing fields would create unnecessary friction. Guardrail: Use argument-filling prompts instead, which pull defaults from context rather than blocking execution.
Required Input: Complete Tool Schema
Risk: The model cannot refuse for missing arguments if it doesn't know which arguments are required. Guardrail: Always supply the full function schema with required arrays in JSON Schema format. The prompt template uses [TOOL_SCHEMA] as a required input placeholder.
Operational Risk: Silent Failures
Risk: Without this prompt, models often guess values for missing arguments (e.g., user_id: "unknown"), producing a successful tool call that silently operates on wrong or empty data. Guardrail: The refusal response includes a missing_args array your application can log and alert on before any tool executes.
Operational Risk: User Experience Degradation
Risk: Over-refusal on fields the user already provided in conversation context but weren't extracted correctly leads to frustrating loops. Guardrail: Pair this prompt with an argument-extraction step that populates [CONVERSATION_CONTEXT] before the refusal check runs.
Good Fit: Regulated or Audited Systems
Use when: you need an audit trail showing that incomplete tool calls were intentionally blocked, not silently dropped. Guardrail: The structured refusal output (with missing_args and refusal_reason) becomes an auditable record that downstream governance systems can ingest.
Copy-Ready Prompt Template
A reusable prompt that forces the model to refuse a tool call when required arguments are missing, returning a structured refusal with the specific missing fields instead of guessing or calling with incomplete data.
This prompt template is designed to be placed in your system instructions or as a pre-tool-call guard prompt. It instructs the model to inspect the user's request and the available conversation context against the required arguments for any candidate tool. When required arguments are absent, the model must produce a structured refusal object that identifies each missing argument by name, explains why it is required, and asks the user to supply the missing information. This prevents the most common production failure mode for tool calls: execution with null, empty, or hallucinated argument values that corrupt downstream state or produce confusing errors.
textYou are a tool-use assistant with strict argument-completeness discipline. Before you call any tool, you must verify that every required argument for that tool is present and non-empty in the user's request or the conversation context. If one or more required arguments are missing, you MUST NOT call the tool. Instead, respond with a structured refusal using the exact format below. ## Refusal Format { "action": "refuse_tool_call", "tool_name": "[name of the tool you would have called]", "missing_arguments": [ { "argument_name": "[exact parameter name from the tool schema]", "reason_required": "[one sentence explaining what this argument is used for and why it cannot be defaulted or guessed]", "clarification_question": "[a specific question the user can answer to supply this argument]" } ], "refusal_message": "[a polite, user-facing message explaining that you need more information before proceeding, referencing the missing arguments]", "partial_arguments_provided": { "[argument_name]": "[value already available from context]" } } ## Rules 1. Never guess, fabricate, or default a required argument. If the user did not provide it and it is not in the conversation context, it is missing. 2. If the user's request is ambiguous about which tool to call, first resolve the tool selection, then check argument completeness for the selected tool. 3. If all required arguments are present, proceed with the tool call normally. 4. If optional arguments are missing, you may proceed without them unless the tool description explicitly states they are conditionally required. 5. Always include the `partial_arguments_provided` field so the user can see what you already understood correctly. ## Available Tools [TOOLS] ## Conversation Context [CONTEXT] ## User Request [INPUT]
To adapt this template, replace [TOOLS] with your actual tool definitions in the format your model expects (OpenAI function schemas, Anthropic tool use blocks, or a custom JSON schema). Replace [CONTEXT] with the conversation history or relevant session state. Replace [INPUT] with the user's latest message. For high-risk domains such as finance or healthcare, add a [RISK_LEVEL] field to the refusal object and require human review when risk is elevated. Test this prompt against a golden dataset of requests with known missing arguments to verify that the model refuses correctly and identifies the right missing fields. The partial_arguments_provided field is critical for user experience—it shows the user that the system understood part of their request and only needs specific missing pieces, reducing frustration and rework.
Prompt Variables
Placeholders required by the Tool Call Refusal for Missing Required Arguments prompt. Each variable must be populated before the prompt is sent to the model. Validation notes describe how to programmatically verify the placeholder is correctly filled.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[TOOL_NAME] | Identifies the specific tool being invoked so the refusal message can reference it by name. | create_customer_record | Must match a tool name in the function registry. Validate via exact string match against the active tool manifest. |
[TOOL_DESCRIPTION] | Provides the model with the tool's purpose to contextualize why arguments are required. | Creates a new customer record in the CRM with contact and account details. | Must be a non-empty string. Validate length > 10 characters. Should be sourced from the canonical tool definition, not rewritten per call. |
[REQUIRED_ARGUMENTS_SCHEMA] | Defines the required arguments and their expected types so the model can detect which are missing. | {"customer_name": "string", "email": "string", "plan_type": "enum:free,pro,enterprise"} | Must be valid JSON. Validate parse succeeds. Each key must have a type or constraint. Schema should be extracted from the tool's parameter definition. |
[PROVIDED_ARGUMENTS] | Contains the arguments the user or system has supplied so far, which the model compares against the required schema. | {"customer_name": "Acme Corp"} | Must be valid JSON. Validate parse succeeds. Keys must be a subset of [REQUIRED_ARGUMENTS_SCHEMA] keys. Null or empty object is allowed if no arguments were provided. |
[REFUSAL_TONE] | Sets the communication style for the refusal message to match the application's voice. | professional_and_helpful | Must be one of a predefined enum: professional_and_helpful, technical_direct, concise. Validate against allowed values. Reject unknown tones. |
[OUTPUT_FORMAT] | Specifies the exact JSON structure the model must return, including fields for missing arguments and the user-facing message. | {"action": "refuse", "missing_arguments": ["email", "plan_type"], "user_message": "..."} | Must be valid JSON Schema or a strict example. Validate parse succeeds. Must include 'missing_arguments' as an array and 'user_message' as a string. |
[MAX_MISSING_ARGUMENTS] | Limits how many missing arguments are reported to avoid overwhelming the user with a long list. | 3 | Must be a positive integer. Validate type is number and value >= 1. If more arguments are missing, the prompt should instruct the model to list the first N and note the remainder. |
Implementation Harness Notes
How to wire the Tool Call Refusal for Missing Required Arguments prompt into a production application with validation, retries, and observability.
This prompt is designed to sit between the model's initial tool selection and the actual execution of the tool call. In a production harness, you should never execute a tool call directly from the model's output without first passing it through a validation layer. The prompt's refusal output is a structured signal that your application code must parse and act on—typically by surfacing the missing arguments to the user or logging the refusal for review. The harness should treat a refusal as a non-exceptional control flow outcome, not an error.
Implement a pre-execution guard that intercepts the model's response before any tool is invoked. Parse the output for a refusal indicator—such as a refusal key set to true or a top-level error_type of missing_required_arguments. When a refusal is detected, extract the missing_arguments list and the user_prompt field, then surface them to the user interface without calling any backend tool. If the model instead returns a tool call, validate that every argument marked as required in the tool's JSON Schema definition is present and non-null. Missing required arguments should trigger a retry with this refusal prompt, passing the original user input, the tool schema, and the incomplete argument payload as context. Limit retries to a maximum of two attempts before escalating to a human review queue. Log every refusal and retry with the model's reasoning, the missing fields, and the final resolution for later eval analysis.
For high-risk domains such as finance or healthcare, add a human-in-the-loop gate after the second retry. Do not fall back to guessing default values or calling the tool with partial arguments. The harness should also track refusal rates per tool and per argument to identify schema design problems—if a particular required field consistently triggers refusals, the tool description or the user interface may need to be redesigned to collect that information earlier. Wire the refusal events into your observability stack with structured metadata: tool_name, missing_arguments, retry_count, resolution (user_provided, escalated, abandoned), and latency_ms. This data feeds directly into the argument completeness eval and helps tune the prompt's refusal threshold over time.
Expected Output Contract
The expected JSON output when the model refuses to call a tool due to missing required arguments. Use this contract to validate the refusal payload before surfacing it to the user or logging it.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
refusal | boolean | Must be exactly true | |
tool_name | string | Must match a tool name from the provided tool definitions list | |
missing_arguments | array of strings | Each element must be a parameter name defined as required in the target tool's schema; array must not be empty | |
reason | string | Must be a non-empty string explaining why the call cannot proceed; must not contain hallucinated parameter names | |
suggestion | string | Must be a non-empty string requesting the user to supply the missing arguments; must reference the specific missing argument names from the missing_arguments array | |
confidence | number | If present, must be a float between 0.0 and 1.0 representing the model's confidence in the refusal decision | |
alternative_tools | array of objects | If present, each object must contain a name field matching a valid tool name and a reason field explaining why it is a weaker match; array may be empty |
Common Failure Modes
What breaks first when a model is asked to refuse tool calls for missing arguments, and how to guard against it.
Model Hallucinates Missing Arguments
What to watch: The model invents a plausible value for a missing required argument instead of refusing the call. This is the most dangerous failure because it silently executes a tool with bad data. Guardrail: Add a strict pre-execution validation layer in your application code that checks for null, empty, or out-of-distribution values before the tool runs, regardless of the model's refusal decision.
Refusal When Arguments Are Present but Implicit
What to watch: The model refuses to call a tool because it fails to extract a required argument that is present in the conversation history or system context, leading to unnecessary clarification loops. Guardrail: Structure your prompt to explicitly instruct the model to search the full message history and provided context for argument values before concluding they are missing.
Inconsistent Refusal Format Breaks Downstream Parsers
What to watch: The model correctly identifies missing arguments but returns the refusal in an unstructured natural language string instead of the strict JSON schema your application expects, causing a parsing error. Guardrail: Provide a required refusal_schema in the prompt with fields like missing_arguments (array of strings) and clarification_request (string), and validate the output structure before processing.
Over-Refusal on Optional or Inferred Arguments
What to watch: The model treats an optional argument as required or refuses to use a safe default value, blocking a valid workflow and frustrating users with unnecessary questions. Guardrail: Clearly demarcate required vs optional arguments in the tool schema and include a policy in the system prompt that allows the model to proceed with documented defaults for optional fields.
Prompt Injection via Clarification Request
What to watch: An attacker provides a malicious user input that, when the model refuses and asks for the missing argument, tricks the model into echoing or acting on injected instructions in the follow-up turn. Guardrail: Design the refusal prompt to ask for a specific data type (e.g., "Please provide a valid date in YYYY-MM-DD format") rather than an open-ended request, and sanitize user inputs before they re-enter the context window.
Eval Drift: Refusal Rate Degrades After Prompt Updates
What to watch: A minor change to the system prompt or tool description unintentionally causes the model to stop refusing on a specific edge case, silently regressing to hallucinated arguments. Guardrail: Maintain a golden dataset of inputs with known missing arguments and run a regression test that asserts a refusal decision before every deployment. Track the refusal rate as a key health metric.
Evaluation Rubric
Use this rubric to test whether the Tool Call Refusal for Missing Required Arguments Prompt correctly identifies missing arguments and produces a structured refusal instead of guessing or calling with incomplete data.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Missing required argument detection | All missing required arguments are identified and listed in the refusal output | Refusal omits a missing required argument or lists an argument that is actually present | Run against a golden set of 20 tool call requests with known missing arguments; check precision and recall of missing-argument list |
No hallucinated arguments | Refusal never invents argument names that do not exist in the tool schema | Refusal references an argument not defined in the provided tool schema | Parse refusal output and cross-reference each named argument against the tool schema definition; flag any schema mismatch |
Refusal format compliance | Output matches the specified refusal schema exactly with all required fields populated | Output is missing required fields, uses wrong types, or returns a tool call instead of a refusal | Validate output against the refusal JSON schema; reject any output that fails structural validation |
No silent guessing | Model never calls the tool when required arguments are missing; always produces a refusal | Model generates a tool call with empty strings, nulls, or placeholder values for missing arguments | Run 50 incomplete-input test cases; assert zero tool calls are generated when required arguments are absent |
Specific missing-argument identification | Each missing argument is identified by its schema name, not a vague description | Refusal says 'some information is missing' without naming specific arguments | Check that refusal payload contains an array of argument names matching the tool schema field names exactly |
User-facing request clarity | The user-facing message explains what is missing and how to provide it in plain language | User message is empty, overly technical, or repeats the raw schema field name without explanation | Human review of 10 refusal messages; rate clarity on a 1-5 scale; require average score of 4 or higher |
Optional argument non-interference | Model does not refuse when only optional arguments are missing; proceeds with required arguments present | Model refuses to call the tool when all required arguments are present but optional arguments are absent | Run test cases where required arguments are complete but optional arguments are missing; assert tool call proceeds normally |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Start with the base refusal template and a single required-argument schema. Use a lightweight validator that checks only for the presence of required keys, not type correctness or business-rule compliance. Keep the refusal message simple: list missing arguments and ask the user to provide them.
codeYou are a tool-call validator. Given a proposed tool call and its schema, check that all required arguments are present. If any required argument is missing, refuse the call and list the missing arguments. Tool schema: [TOOL_SCHEMA] Proposed call: [PROPOSED_CALL] Respond with either: {"decision": "proceed", "missing_args": []} or {"decision": "refuse", "missing_args": ["arg1", "arg2"], "message": "..."}
Watch for
- Schema drift when tool definitions change during prototyping
- Overly strict refusal on optional arguments that have safe defaults
- Missing argument names that don't match the schema field names exactly

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us