prompts
Also written prompt templates
MCP prompts are reusable message templates a server offers to a client. They are user-controlled: the user picks one, often as a slash command, and the client fetches its messages with prompts/get. A server that offers them declares the prompts capability.
What are MCP prompts?
A prompt is a template the server wrote and the user chooses to run. A code_review prompt with a code argument is the specification's own example [1]. Clients usually show them as slash commands, though the protocol leaves the interface open.
Prompts or tools?
The difference is who decides to use it.
| Prompts | Tools | |
|---|---|---|
| Who triggers it | The user picks it | The model calls it |
| What comes back | Messages to send to the model | The result of doing something |
| Listed with | prompts/list |
tools/list |
| Run with | prompts/get |
tools/call |
The specification calls prompts "user-controlled" [1] and tools "model-controlled" [2]. Build a tool when the model should decide to act. Build a prompt when a person keeps typing the same instructions and you can write them better once.
How does a client use them?
A server offering prompts declares the prompts capability. The client then lists them, with any arguments each one takes:
{
"prompts": [
{
"name": "code_review",
"title": "Request Code Review",
"description": "Asks the LLM to analyze code quality and suggest improvements",
"arguments": [
{ "name": "code", "description": "The code to review", "required": true }
]
}
]
}
When the user picks one, prompts/get sends the name and arguments, and the server returns finished messages:
{
"description": "Code review prompt",
"messages": [
{
"role": "user",
"content": {
"type": "text",
"text": "Please review this Python code:\ndef hello():\n print('world')"
}
}
]
}
A message can hold text, an image, audio or a resource. A wrong prompt name or a missing required argument should come back as -32602 [1].
What changed in the 2026-07-28 revision?
Prompts stay user-controlled, and four things around them moved [3][4]:
- The capability arrives in the answer to
server/discover, because the initialize handshake is gone. prompts/listanswers carryttlMsandcacheScope, so a client knows how long to cache them. Every result also carriesresultType.- The list can differ by the authorization on a request. It can no longer differ per connection.
prompts/getmay ask for more input first, using the same retry as elicitation.
Example
Our MCP connection test and every listing's dated record read tools. A server offering only prompts has no tools for us to show, which describes what we read and says nothing about the server's quality. If prompts are what you built, say so in your listing's description so people know what they are getting.