Safeguard
Developer Tools•

MCP tools, resources and prompts: which one should you use?

Tools let the model act, resources give the app read-only context, prompts give the user a template. Here is how to pick the right MCP primitive.

Safeguard Security Team
4 min read

Use a tool when the model should be able to do something, a resource when the application should load read-only context, and a prompt when the user should trigger a reusable workflow. The three primitives differ mainly in who controls them: the model, the application, or the person at the keyboard.

The three building blocks

The Model Context Protocol (MCP) documentation describes three things a server can offer. Tools are functions the model can call, and the model decides when. Resources are passive data sources such as file contents, database schemas or documentation. Prompts are pre-built instruction templates.

The official server concepts page lists a controller for each: tools are model controlled, resources are application controlled, and prompts are user controlled. That one column answers most design questions.

When a tool is the right choice

Pick a tool when the work has side effects or needs live computation. Sending a message, creating a ticket, running a query and calling an API are all tool shaped. Each tool has a name, a description and a JSON Schema for its inputs, so the model knows what arguments to supply.

Because the model chooses when to call a tool, tools carry the most risk. The specification says there should always be a human in the loop with the ability to deny tool invocations. If your use case is "read this reference page", a tool is more power than you need.

When a resource is the right choice

Pick a resource when you have data that gives context and the application, not the model, should decide how to use it. A resource has a URI and a MIME type. The application can show a picker, filter by search, or pull a slice in with embeddings before anything reaches the model.

Resources also support templates with parameters, such as a city and a date in the URI. That suits lookups where the shape is fixed but the values change.

When a prompt is the right choice

Pick a prompt when you want a repeatable workflow that a person starts on purpose. In many clients these show up as slash commands or a command palette entry. A prompt can take arguments, for example a destination and a budget, and can refer to the tools and resources the server also offers.

If you find yourself writing a long instruction block and hoping the model calls the right tools in the right order, a prompt may be cleaner.

A quick decision table

  • The model needs to change something or call a live service. Primitive: Tool.
  • The app should attach a document or schema as context. Primitive: Resource.
  • A user runs the same multi step task often. Primitive: Prompt.
  • You are not sure. Primitive: Start with a resource, which is read only.

A note on client support

Not every client implements all three primitives. Many agent clients focus on tools. Check what your target client supports before you design around resources or prompts, and test with the same client your team will use.

For how these pieces fit with other agent features, see MCP vs skills vs hooks vs rules. For the basics, see what is the Model Context Protocol.

Quick check

Who decides when a tool is called?

The model decides based on the conversation, which is why the specification recommends a human approval step for tool calls.

Can a resource change data?

Resources are described as read-only, passive sources of information. Actions belong in tools.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.