Lesson 7 / 31

Server Primitives: Tools, Resources, Prompts

Know which primitive fits which need and who controls it.

Model-controlled, app-controlled, user-controlled

Tools are actions the model can decide to call (tools/list, tools/call): query a database, create a ticket. Each has a name, description and a JSON Schema for its input, and the result is a list of content items (text, images, structured data) with an isError flag. Resources are readable data identified by URIs (resources/list, resources/read): files, records, documents, usually selected by the application or user, and they can have templates and change notifications. Prompts are reusable templates that users invoke (prompts/list, prompts/get), such as a slash command that produces a well-written starting message. Choose the primitive by who should be in control: model, app or user.

Which primitive for what

A comparison table.

Primitive   Controlled by   Methods                        Example
Tool        model          tools/list, tools/call         get_order_status(order_id)
Resource    app / user     resources/list, resources/read policy://refunds (a document)
Prompt      user           prompts/list, prompts/get      /triage <ticket> template

Tool results carry content + isError. Resource and prompt names are discovered at runtime.

Do not make everything a tool

Read-only reference data (policies, schemas) often fits better as a resource the app attaches, and common workflows as prompts. Fewer tools means fewer tokens and fewer wrong calls.

Quick check: Which primitive is meant to be invoked by the user?

  • Prompts
  • Tools
  • Roots
  • Notifications
Answer

Prompts — Prompts are user-controlled templates, like slash commands.