提示
協議版本: 2024-11-05
模型上下文協議(MCP)為服務器向客戶端公開提示模板提供了標準化方式。提示允許服務器提供與語言模型交互的結構化消息和指令。客戶端可以發現可用的提示,檢索其內容,並提供參數以自定義它們。
用戶交互模型
提示被設計為用戶控制,這意味著它們從服務器公開給客戶端,目的是讓用戶能夠明確地選擇它們使用。
通常,提示會通過用戶界面中的用戶發起命令觸發,這使用戶能夠自然地發現和調用可用的提示。
例如,作為斜槓命令:

然而,實現者可以通過任何適合其需求的接口模式公開提示—協議本身不強制任何特定的用戶交互模型。
能力
支持提示的服務器必須在初始化期間聲明 prompts 能力:
{
"capabilities": {
"prompts": {
"listChanged": true
}
}
}listChanged 表示服務器是否會在可用提示列表更改時發出通知。
協議消息
列出提示
要檢索可用的提示,客戶端發送 prompts/list 請求。此操作支持分頁。
請求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "prompts/list",
"params": {
"cursor": "可選的遊標值"
}
}響應:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"prompts": [
{
"name": "code_review",
"description": "要求 LLM 分析代碼質量並提出改進建議",
"arguments": [
{
"name": "code",
"description": "要審查的代碼",
"required": true
}
]
}
],
"nextCursor": "下一頁遊標"
}
}獲取提示
要檢索特定提示,客戶端發送 prompts/get 請求。參數可以通過補全 API自動補全。
請求:
{
"jsonrpc": "2.0",
"id": 2,
"method": "prompts/get",
"params": {
"name": "code_review",
"arguments": {
"code": "def hello():\n print('world')"
}
}
}響應:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"description": "代碼審查提示",
"messages": [
{
"role": "user",
"content": {
"type": "text",
"text": "請審查這段 Python 代碼:\ndef hello():\n print('world')"
}
}
]
}
}列表更改通知
當可用提示列表更改時,聲明瞭 listChanged 能力的服務器應該發送通知:
{
"jsonrpc": "2.0",
"method": "notifications/prompts/list_changed"
}消息流程
sequenceDiagram
participant Client
participant Server
Note over Client,Server: 發現
Client->>Server: prompts/list
Server-->>Client: 提示列表
Note over Client,Server: 使用
Client->>Server: prompts/get
Server-->>Client: 提示內容
opt listChanged
Note over Client,Server: 更改
Server--)Client: prompts/list_changed
Client->>Server: prompts/list
Server-->>Client: 更新的提示
end
數據類型
提示
提示定義包括:
name:提示的唯一標識符description:可選的人類可讀描述arguments:用於自定義的可選參數列表
提示消息
提示中的消息可以包含:
role:表示發言者的"user"或"assistant"content:以下內容類型之一:
文本內容
文本內容表示純文本消息:
{
"type": "text",
"text": "消息的文本內容"
}這是自然語言交互中最常用的內容類型。
圖像內容
圖像內容允許在消息中包含視覺信息:
{
"type": "image",
"data": "base64編碼的圖像數據",
"mimeType": "image/png"
}圖像數據必須是 base64 編碼的,幷包含有效的 MIME 類型。這使得視覺上下文重要的多模態交互成為可能。
嵌入資源
嵌入資源允許在消息中直接引用服務器端資源:
{
"type": "resource",
"resource": {
"uri": "resource://example",
"mimeType": "text/plain",
"text": "資源內容"
}
}資源可以包含文本或二進制(blob)數據,並且必須包括:
- 有效的資源 URI
- 適當的 MIME 類型
- 文本內容或 base64 編碼的 blob 數據
嵌入資源使提示能夠將服務器管理的內容(如文檔、代碼示例或其他參考材料)無縫合併到對話流中。
錯誤處理
服務器應該為常見的失敗情況返回標準 JSON-RPC 錯誤:
- 無效的提示名稱:
-32602(無效參數) - 缺少必需參數:
-32602(無效參數) - 內部錯誤:
-32603(內部錯誤)
實現考慮
- 服務器應該在處理前驗證提示參數
- 客戶端應該處理大型提示列表的分頁
- 雙方應該尊重能力協商
安全
實現必須仔細驗證所有提示輸入和輸出,以防止注入攻擊或未授權訪問資源。