Prompts
Das Model Context Protocol (MCP) bietet einen standardisierten Weg für Server, Prompt- Vorlagen für Clients bereitzustellen. Prompts ermöglichen es Servern, strukturierte Nachrichten und Anweisungen für die Interaktion mit Sprachmodellen bereitzustellen. Clients können verfügbare Prompts entdecken, deren Inhalte abrufen und Argumente bereitstellen, um sie anzupassen.
Benutzerinteraktionsmodell
Prompts sind darauf ausgelegt, benutzergesteuert zu sein, was bedeutet, dass sie von Servern für Clients bereitgestellt werden mit der Absicht, dass der Benutzer sie explizit zur Verwendung auswählen kann.
Typischerweise würden Prompts durch benutzerinitiierte Befehle in der Benutzeroberfläche ausgelöst, was es Benutzern ermöglicht, verfügbare Prompts natürlich zu entdecken und aufzurufen.
Zum Beispiel als Slash-Befehle:
Implementierer sind jedoch frei, Prompts über jedes Schnittstellenmuster bereitzustellen, das ihren Bedürfnissen entspricht—das Protokoll selbst schreibt kein spezifisches Benutzerinteraktionsmodell vor.
Fähigkeiten
Server, die Prompts unterstützen, MÜSSEN die prompts
-Fähigkeit während der
Initialisierung deklarieren:
{
"capabilities": {
"prompts": {
"listChanged": true
}
}
}
listChanged
indicates whether the server will emit notifications when the list of
available prompts changes.
Protocol Messages
Listing Prompts
To retrieve available prompts, clients send a prompts/list
request. This operation
supports
pagination.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "prompts/list",
"params": {
"cursor": "optional-cursor-value"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"prompts": [
{
"name": "code_review",
"description": "Asks the LLM to analyze code quality and suggest improvements",
"arguments": [
{
"name": "code",
"description": "The code to review",
"required": true
}
]
}
],
"nextCursor": "next-page-cursor"
}
}
Getting a Prompt
To retrieve a specific prompt, clients send a prompts/get
request. Arguments may be
auto-completed through the completion
API.
Request:
{
"jsonrpc": "2.0",
"id": 2,
"method": "prompts/get",
"params": {
"name": "code_review",
"arguments": {
"code": "def hello():\n print('world')"
}
}
}
Response:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"description": "Code review prompt",
"messages": [
{
"role": "user",
"content": {
"type": "text",
"text": "Please review this Python code:\ndef hello():\n print('world')"
}
}
]
}
}
List Changed Notification
When the list of available prompts changes, servers that declared the listChanged
capability SHOULD send a notification:
{
"jsonrpc": "2.0",
"method": "notifications/prompts/list_changed"
}
Message Flow
sequenceDiagram participant Client participant Server Note over Client,Server: Discovery Client->>Server: prompts/list Server-->>Client: List of prompts Note over Client,Server: Usage Client->>Server: prompts/get Server-->>Client: Prompt content opt listChanged Note over Client,Server: Changes Server--)Client: prompts/list_changed Client->>Server: prompts/list Server-->>Client: Updated prompts end
Data Types
Prompt
A prompt definition includes:
name
: Unique identifier for the promptdescription
: Optional human-readable descriptionarguments
: Optional list of arguments for customization
PromptMessage
Messages in a prompt can contain:
role
: Either “user” or “assistant” to indicate the speakercontent
: One of the following content types:
Text Content
Text content represents plain text messages:
{
"type": "text",
"text": "The text content of the message"
}
This is the most common content type used for natural language interactions.
Image Content
Image content allows including visual information in messages:
{
"type": "image",
"data": "base64-encoded-image-data",
"mimeType": "image/png"
}
The image data MUST be base64-encoded and include a valid MIME type. This enables multi-modal interactions where visual context is important.
Embedded Resources
Embedded resources allow referencing server-side resources directly in messages:
{
"type": "resource",
"resource": {
"uri": "resource://example",
"mimeType": "text/plain",
"text": "Resource content"
}
}
Resources can contain either text or binary (blob) data and MUST include:
- A valid resource URI
- The appropriate MIME type
- Either text content or base64-encoded blob data
Embedded resources enable prompts to seamlessly incorporate server-managed content like documentation, code samples, or other reference materials directly into the conversation flow.
Error Handling
Servers SHOULD return standard JSON-RPC errors for common failure cases:
- Invalid prompt name:
-32602
(Invalid params) - Missing required arguments:
-32602
(Invalid params) - Internal errors:
-32603
(Internal error)
Implementation Considerations
- Servers SHOULD validate prompt arguments before processing
- Clients SHOULD handle pagination for large prompt lists
- Both parties SHOULD respect capability negotiation
Security
Implementations MUST carefully validate all prompt inputs and outputs to prevent injection attacks or unauthorized access to resources.