Fundamentals

MCP Tools, Resources, and Prompts Explained (Official Model)

Tools, resources, and prompts as defined in official MCP server concepts and the 2025-11-25 specification — who controls each primitive and which protocol methods apply.

10 min read Published July 14, 2026 Updated July 14, 2026

MCP servers expose capabilities through three core server primitives. This page follows the official Understanding MCP servers guide and the 2025-11-25 specification pages for each primitive.

Official control model

From the server-concepts comparison table:

FeatureWhat it isWho controls it (official docs)
ToolsFunctions the LLM can call to take actionsModel
ResourcesPassive data sources for context (often read-only)Application
PromptsPre-built instruction templatesUser

Source: Understanding MCP servers.

The high-level architecture overview describes the same three primitives servers can expose, plus separate client primitives (sampling, elicitation, logging) that servers may request from the client.

Tools

Definition

The Tools specification (2025-11-25) states that servers expose tools language models can invoke to interact with external systems (databases, APIs, computations). Each tool has a unique name and metadata including an input schema.

Tools are designed to be model-controlled (the model can discover and invoke them from context). The protocol does not mandate a single UI pattern.

For trust and safety, the tools spec says there SHOULD always be a human in the loop who can deny tool invocations, and applications SHOULD make tool exposure and invocations visible (UI indicators, confirmation prompts).

Protocol operations

MethodPurpose
tools/listDiscover tools (supports pagination)
tools/callExecute a tool
notifications/tools/list_changedServer notifies that the tool list changed (if listChanged capability was declared)

Servers that support tools MUST declare the tools capability during initialization.

Tool definition highlights (spec)

  • name, optional title, description
  • inputSchema — JSON Schema object (MUST be valid; not null)
  • optional outputSchema, annotations, icons, execution
  • Tool names SHOULD be 1–128 chars; case-sensitive; limited character set (letters, digits, _, -, .)

Results use a content array (text, image, audio, resource links, embedded resources) and may include structuredContent / isError.

Security (tools spec): servers MUST validate inputs, implement access controls, rate-limit invocations, and sanitize outputs. Clients SHOULD confirm sensitive operations, show inputs before calls, validate results, timeout calls, and log usage.

Full detail: Tools — 2025-11-25.

Resources

From server concepts:

  • Resources expose data (files, APIs, databases, etc.) as context
  • Each resource has a URI and MIME type
  • Direct resources — fixed URIs
  • Resource templates — parameterized URI templates
MethodPurpose
resources/listList direct resources
resources/templates/listDiscover templates
resources/readRead contents
resources/subscribeMonitor changes (when supported)

Resources are application-driven: the host decides how to fetch, filter, and present them (browse UI, search, auto-include, etc.). The protocol does not mandate a specific UI.

Spec: Resources — 2025-11-25.

Prompts

From server concepts:

  • Prompts are structured templates (often parameterized)
  • They are user-controlled — explicit invocation, not automatic model firing
  • They can reference tools/resources to encode domain workflows
MethodPurpose
prompts/listDiscover prompts
prompts/getRetrieve full prompt + arguments

Typical host UX (from the docs’ guidance, not mandated): slash commands, command palettes, buttons, context menus.

Spec: Prompts — 2025-11-25.

Design rules of thumb (grounded in the specs)

  1. Prefer clear tool names and descriptions — discovery is via tools/list metadata the model sees
  2. Keep destructive actions obvious; honor human-in-the-loop guidance from the tools spec
  3. Put large reference material in resources, not giant tool return blobs
  4. Use prompts for repeatable, user-selected workflows
  5. Treat tool annotations as untrusted unless the server is trusted (tools spec warning)

Product note (MCPLambda)

When you deploy on MCPLambda, tool-usage analytics focus on tools (call volume, errors, latency) because that is where production agent failures usually surface first. That is product telemetry, not part of the MCP specification.

Worked scenario: Everything was a tool (until it was not)

An early server exposes “get schema,” “get runbook,” and “get policy” as tools. The model calls them constantly, blowing context with huge JSON. Latency tanks.

You move static/read-heavy material to resources, keep side-effecting actions as tools, and add a prompt template for “triage with policy + schema” that users invoke explicitly. Tool count drops; clarity rises; the model stops “searching” documents via tool calls.

You also split destructive tools and ensure descriptions state when not to use them.

Checklist for this topic

  • Tools for model-invoked actions with side effects
  • Resources for application-provided context data
  • Prompts for user-selected templates/workflows
  • Tight inputSchema; clear names/descriptions
  • Prefer isError with actionable text on failures
  • Do not put multi-MB blobs in tool results

Topic-specific failure modes

FailureLikely causeFix
Context bloatDocs as toolsUse resources
Accidental deletesUnscoped destructive toolsSeparate + human approval
Model never picks toolBad descriptionRewrite description; simplify catalog
Untrusted annotationsTreating annotations as gospelTrust only trusted servers

First server · Observability · Server concepts

Sources

Next steps

Build your first MCP server using the official SDK quickstart patterns, then package for production.

FAQs

Frequently Asked Questions

  • What is an MCP tool?

    Per official server concepts, tools are functions the LLM can actively call; the model decides when to use them. Protocol methods include tools/list and tools/call. The tools specification describes tools as model-controlled, with a SHOULD for human-in-the-loop denial of invocations.

  • What is an MCP resource?

    Resources are passive, typically read-oriented data sources (files, schemas, API docs) controlled by the application. Protocol methods include resources/list, resources/templates/list, resources/read, and optional subscribe.

  • What is an MCP prompt?

    Prompts are pre-built instruction templates, user-controlled (explicit invocation rather than automatic model firing). Protocol methods include prompts/list and prompts/get.