A developer has registered an MCP server in Copilot Studio that exposes an 'inventory-lookup' tool. During testing, the agent fails to pass the correct parameters to the tool, and the tool returns errors. The developer reviews the MCP server's tool schema and discovers the schema is missing the 'required' array for its input parameters. What is the impact of omitting the 'required' array in an MCP tool schema, and how should it be fixed?
Select an answer to reveal the explanation.
Short Explanation and Infographic
The 'required' array is the MCP tool's way of saying 'don't call me without these'—like a form that marks certain fields with an asterisk. Without it, the AI might call the tool half-empty and get an error back.
Full explanation below image
Full Explanation
In the MCP (Model Context Protocol) specification, each tool exposes an inputSchema (a JSON Schema object) that describes the parameters the tool accepts. Within this schema, the 'required' array explicitly lists which parameters must be provided before the tool can be invoked. This metadata is critical because it guides the LLM (large language model) driving the agent—when required parameters are declared, the agent knows to gather missing inputs from the user before invoking the tool.
Option D is correct because omitting the 'required' array causes all parameters to be treated as optional by the LLM. The agent may invoke the 'inventory-lookup' tool without providing mandatory inputs (such as a product ID or location code), causing the tool to fail with a missing parameter error. The fix is to add the 'required' array to the tool's inputSchema, for example: { 'required': ['productId', 'warehouseCode'] }.
Option A is wrong because Copilot Studio and the underlying LLM do not infer required parameters from descriptions alone. Descriptions help the LLM understand what a parameter does, but they do not enforce that the parameter must be provided before invocation. Only the 'required' array enforces this contract.
Option B is wrong in its framing—while it correctly identifies that parameters without 'required' are treated as optional, it misattributes the failure mechanism. The precise issue is that the LLM may not prompt for missing inputs, not that it cannot invoke the tool. The diagnosis and fix described in option B are partially correct but less precise than option D.
Option C is wrong because the 'required' array is not a security control. It is a parameter contract definition. OAuth scopes control authentication and authorization, not parameter validation. Adding OAuth scopes would not resolve missing parameter errors.
Exam tip: Know the structure of an MCP tool schema: { name, description, inputSchema: { type: 'object', properties: { paramName: { type, description } }, required: ['paramName'] } }. The 'required' array is a signal to the LLM about what must be collected before tool invocation—not just a documentation convention.