Beyond Tools: MCP Resources, Prompts, and Elicitation
Use the rest of the Model Context Protocol: resources for context, prompts for reusable workflows, and asking the user for input mid-task.
Most MCP servers are just a bag of tools, and most people never look further. That leaves a lot on the table. Some context shouldn't wait for the model to decide to fetch it: you already know which document matters, so why make the agent search for it? Some workflows deserve a one-click starting point instead of a carefully retyped prompt. And some actions shouldn't happen until a human, not the model, says yes.
MCP has a primitive for each of those: resources for context, prompts for reusable workflows, and elicitation for asking the user for input in the middle of a task. In this lesson you'll add all three, properly, to the notes server from Building Your First MCP Server, using the current spec revision (2026-07-28) and v2 of the TypeScript SDK.
Choosing the right primitive
You met the three server primitives in What Is MCP and Why It Matters, defined by who decides when each is used. Here's the practical version, as a decision you'll make for every capability you add:
| If you want... | Use | Decided by | Notes server example |
|---|---|---|---|
| The model to take an action or look something up when it judges it useful | Tool | The model | search_notes, add_note |
| The user or app to put known content into the conversation | Resource | The application, usually via the user | One resource per note |
| The user to start a well-tested workflow with a few arguments | Prompt | The user | "Discuss this note" |
| A human to supply a missing detail or approve a step mid-call | Elicitation | The user, when the server asks | Confirm before deleting |
The common mistake is forcing everything into tools. If a "tool" has no side effects and the user always knows which item they want, it's probably a resource. If you keep pasting the same instructions before using a server, that's a prompt waiting to be written.
One caveat: every MCP host supports tools, but resources and prompts are surfaced differently in each app, and elicitation support is still uneven. Test in the MCP Inspector, then check your host's documentation.