提示词
模型上下文协议(MCP)为服务器提供了一种标准化的方式来向客户端暴露提示词模板。提示词允许服务器提供结构化的消息和指令,用于与语言模型进行交互。客户端可以发现可用的提示词、获取其内容,并提供参数来自定义它们。
用户交互模型
提示词被设计为用户可控的,这意味着它们从服务器暴露给客户端时,目的是让用户能够明确地选择使用它们。
通常,提示词会通过用户界面中的用户发起命令来触发,这使用户能够自然地发现和调用可用的提示词。
例如,作为斜杠命令:
然而,实现者可以根据其需求通过任何界面模式来暴露提示词—协议本身并不强制要求任何特定的用户交互模型。
功能特性
支持提示词的服务器必须在初始化期间声明prompts
功能:
listChanged
表示服务器是否会在可用提示词列表发生变化时发出通知。
协议消息
列出提示词
要获取可用的提示词,客户端发送prompts/list
请求。此操作支持分页。
请求:
响应:
获取提示词
要获取特定的提示词,客户端发送prompts/get
请求。参数可以通过补全API自动完成。
请求:
响应:
列表变更通知
当可用提示词列表发生变化时,声明了listChanged
功能的服务器应该发送通知:
消息流程
数据类型
提示词
提示词定义包括:
name
:提示词的唯一标识符description
:可选的人类可读描述arguments
:可选的自定义参数列表
提示词消息
提示词中的消息可以包含:
role
:"user"或"assistant",表示发言者content
:以下内容类型之一:
文本内容
文本内容表示纯文本消息:
这是用于自然语言交互最常见的内容类型。
图像内容
图像内容允许在消息中包含视觉信息:
图像数据必须是base64编码的,并包含有效的MIME类型。这使得在视觉上下文重要的场景中可以进行多模态交互。
嵌入资源
嵌入资源允许在消息中直接引用服务器端资源:
资源可以包含文本或二进制(blob)数据,并且必须包括:
- 有效的资源URI
- 适当的MIME类型
- 文本内容或base64编码的blob数据
嵌入资源使提示词能够无缝地将服务器管理的内容(如文档、代码示例或其他参考材料)直接整合到对话流程中。
错误处理
服务器应该为常见的失败情况返回标准的JSON-RPC错误:
- 无效的提示词名称:
-32602
(无效参数) - 缺少必需参数:
-32602
(无效参数) - 内部错误:
-32603
(内部错误)
实现注意事项
- 服务器应该在处理前验证提示词参数
- 客户端应该处理大型提示词列表的分页
- 双方应该遵守功能协商
安全性
实现必须仔细验证所有提示词输入和输出,以防止注入攻击或未经授权访问资源。