Question 1
A team is building an MCP server to sit in front of an internal expense system. They want an AI assistant connected to that server to be able to **submit a new expense report** on the user's behalf — an operation that changes state in the backing system and returns a result the model can reason about. Which MCP server primitive is intended for exposing that capability?
A. A resource, because the server controls all interaction with the expense system through resources
Confuses resources with actions. Resources are context/data the client or model can read — file contents, records, documents — and are not the primitive through which the model effects change in an external system.
B. A prompt, because prompts are how an MCP server executes a workflow on the user's behalf
Misconception that prompts execute work. Prompts are reusable templates/workflows the server offers to shape a request; selecting one does not itself perform an action against a backend system.
C. A sampling request, because the server must ask the host to generate the submission before it can act
Confuses a client-side capability with a server primitive. Sampling lets a server request a model completion from the client; it is not the primitive for exposing an invocable action, and no such request is needed to define one.
D. A tool, because tools are the executable actions an MCP server exposes for the model to invokeCorrect answer
Correct. In MCP, tools are the primitive representing actions/functions the server makes invocable, which the model can call to perform operations and receive results (MCP core architecture — server primitives).
Explanation
MCP servers expose three primitives — tools, resources, and prompts. Tools are the executable actions the server makes available for the model to invoke, so a state-changing operation such as submitting an expense report is modelled as a tool. Resources are read-only context the model can consume rather than a way to act on a system; prompts are reusable templates that structure an interaction but perform no backend work themselves; and sampling is a client-side capability that lets a server request a completion, not a way to publish an invocable capability.