Core Concepts

MCP Core Concepts: Tools, Resources, and Prompts

⏱ 10 min

The Abilities API is WordPress-specific. The Model Context Protocol is not, it’s an open standard that Claude, Cursor, ChatGPT, and other AI clients already understand. This lesson covers MCP on its own terms, so when the MCP Adapter maps your abilities onto it in Course 2, none of the vocabulary is new.

What you'll learn in this lesson
The three MCP primitives
Tools, resources, and prompts, what each one is for.
Tool annotations
The hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) that describe a tool's behavior to a client.
How WordPress abilities map onto MCP
Which ability fields become which MCP concepts.
Transports and the connection lifecycle
stdio versus Streamable HTTP, and how a session actually starts.
Prerequisites

The previous lesson, understanding abilities. No new tools to install for this one, it’s conceptual.

Step 1: The three primitives

MCP defines exactly three kinds of things a server can offer a client:

MCP’s three server-side primitives
PrimitiveWhat it’s for
ToolsFunctions the AI model can call to take an action or fetch computed data. This is what a WordPress ability becomes.
ResourcesContext or data meant to be read, by the user or the model, rather than executed.
PromptsReusable, templated messages or workflows a user can trigger.

Most of what you build in this track will be tools, an ability with an execute_callback maps naturally onto an MCP tool. Resources and prompts exist in the spec and the MCP Adapter can expose them, but they’re a smaller part of typical WordPress use cases.

Step 2: Tool annotations, hints, not guarantees

Every MCP tool can carry annotations describing its behavior:

readOnlyHint
This tool does not modify anything, safe to call speculatively.
destructiveHint
This tool may delete or irreversibly change something, clients may prompt for confirmation.
idempotentHint
Calling this tool multiple times with the same input has the same effect as calling it once.
openWorldHint
This tool interacts with things outside a closed, predictable set (for example, the open web) rather than a fixed local dataset.
Hints, not enforcement

The MCP specification is explicit that these are hints for the client’s UI and decision-making, not a security boundary. A client is not required to block a destructive action just because destructiveHint is missing. Your permission_callback in WordPress is still the actual enforcement point, annotations only affect how a client presents or confirms the action.

Step 3: How WordPress abilities map onto MCP

This is the piece the MCP Adapter (Course 2) handles for you automatically, but knowing the mapping now makes that code much less mysterious later:

Ability fields to MCP tool fields
Ability fieldBecomes
labelTool title
descriptionTool description
input_schema / output_schemaTool input/output JSON Schema
meta.annotations.readonlyreadOnlyHint
meta.annotations.destructivedestructiveHint
meta.annotations.idempotentidempotentHint

Step 4: Transports and the connection lifecycle

MCP defines two transports: stdio (the server runs as a local process, communicating over standard input/output, this is how WP-CLI-based serving works) and Streamable HTTP (the server exposes an HTTP endpoint, this is how a remote AI client like Claude Desktop’s connectors typically reach a website).

Every MCP session, regardless of transport, follows the same lifecycle: the client sends an initialize request declaring its capabilities and protocol version, the server responds with its own capabilities, the client confirms with a notifications/initialized message, and only then does normal operation, listing and calling tools, begin.

Test it: read a real tool listing

If you have any existing MCP server available (even a non-WordPress example), most MCP client apps have a way to inspect the raw tool list they’ve discovered, in Claude Desktop this is usually visible from the connector’s settings screen. Open it and find one tool’s annotations, you should now be able to read exactly what each one is telling the client, without needing documentation open.

You'll do this for real in Course 2

This lesson is intentionally read-only, you’re not running an MCP server yet. Course 2 has you build one and inspect its actual tool listing from a client.

Recap

MCP defines three primitives, tools, resources, and prompts, with tools being the one WordPress abilities map onto most directly. Annotations are hints for client behavior, not a substitute for your permission_callback. Two transports, stdio and Streamable HTTP, and every session starts with the same initialize/initialized handshake regardless of which one you use.

Resources & further reading

← Understanding Abilities: WordPress's New Way to Expose Site Actions How AI Agents Discover and Execute Actions on Your Site →