Tools, Resources & Prompts
The three primitives an MCP server can expose.
Three Primitives, One Server
The Model Context Protocol (MCP) lets an external server expose capabilities to Claude through a standard interface. A single server can offer exactly three kinds of primitives:
- Tools — actions the model can invoke (do something, often with side effects)
- Resources — read-only data and context the model can pull in (schemas, catalogs, docs)
- Prompts — reusable templates that shape how a task is asked
Knowing which primitive fits a capability is a core architect skill: misclassifying an action as a resource (or vice-versa) leads to brittle, confusing integrations.
Tools — Actions With Effects
Tools are actions. They are the primitive the model calls to make something happen: query a live database, create a ticket, send a message, process a refund. Tools are the MCP analog of the Agent SDK tools you already define in an API request's tools field.
Because tools drive behavior, their descriptions are the primary selection mechanism — not their names. A good tool description states purpose, return values, input formats with examples, and applicability boundaries so the model routes to the right tool.
# An MCP server exposing a Tool (action) — Python style
@mcp.tool()
def lookup_order(order_id: str) -> dict:
"""Fetch a single order by its ID from the orders DB.
Input: order_id as 'ORD-12345' (string, required).
Returns: {status, total_cents, items[]}.
Use only when you already have an exact order ID;
for fuzzy search use search_orders instead.
"""
return db.fetch_order(order_id)All lessons in this course
- Tools, Resources & Prompts
- Project vs User Scope
- Secrets with Environment Variables
- Community vs Custom Servers