模型上下文协议(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": "要求大语言模型分析代码质量并提出改进建议",
"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"
}
消息交互流程
数据类型
Prompt
Prompt 包含以下字段:
- name: 提示词模板的唯一标识符
- description: 面向开发者的可读说明(可选)
- arguments: 可定制参数列表(可选)
PromptMessage
提示词模板中的消息可包含以下元素:
- role:取值为"user"或"assistant",用于标识发言者身份
- content:支持下列任意一种内容类型:
文本内容
用于表示纯文本消息:
{
"type": "text",
"text": "The text content of the message"
}
这是自然语言交互中最常用的内容类型。
图片内容
支持在消息中嵌入视觉信息:
{
"type": "image",
"data": "Base64编码的图片数据",
"mimeType": "image/png"
}
图片数据必须采用Base64编码并包含有效的MIME类型,这对于需要视觉上下文的多模态交互至关重要。
音频内容
支持在消息中嵌入音频信息:
{
"type": "audio",
"data": "Base64编码的音频数据",
"mimeType": "audio/wav"
}
音频数据必须采用Base64编码并包含有效的MIME类型,这对于需要听觉上下文的多模态交互至关重要。
嵌入式资源 (Embedded Resources)
支持直接引用服务器端资源:
{
"type": "resource",
"resource": {
"uri": "resource://example",
"mimeType": "text/plain",
"text": "资源内容"
}
}
资源必须包含以下要素:
- 有效的资源URI
- 正确的MIME类型
- 文本内容或Base64编码的二进制数据
该特性允许提示词模板无缝集成服务器托管的内容(如文档、代码示例等参考材料),直接融入对话流程。
错误处理
服务器对于常见错误情况应返回标准JSON-RPC错误码:
- 无效提示名称:-32602(参数无效)
- 缺少必要参数:-32602(参数无效)
- 内部错误:-32603(内部错误)
实现注意事项
- 服务器应在处理前验证提示参数
- 客户端应对大型提示列表实现分页处理
- 双方应遵守能力协商约定
安全规范
实现方必须严格验证所有提示输入输出,防止注入攻击或未授权资源访问。