Prompts 的设计是用户控制的,这意味着它们从 servers 暴露给 clients,目的是让用户能够明确地选择使用它们。
概述
MCP 中的 Prompts 是预定义的模板,可以:- 接受动态参数
- 包含来自 resources 的上下文
- 链接多个交互
- 引导特定的工作流程
- 呈现为 UI 元素(如斜杠命令)
Prompt 结构
每个 prompt 都定义如下:发现 prompts
Clients 可以通过prompts/list
端点发现可用的 prompts:
使用 prompts
要使用 prompt,clients 发出prompts/get
请求:
动态 prompts
Prompts 可以是动态的,并且包括:嵌入的 resource 上下文
prompts/get
请求时:
多步骤工作流程
实现示例
以下是在 MCP server 中实现 prompts 的完整示例:最佳实践
在实现 prompts 时:- 使用清晰、描述性的 prompt 名称
- 为 prompts 和参数提供详细的描述
- 验证所有必需的参数
- 优雅地处理缺失的参数
- 考虑 prompt 模板的版本控制
- 在适当的时候缓存动态内容
- 实现错误处理
- 记录预期的参数格式
- 考虑 prompt 的可组合性
- 使用各种输入测试 prompts
UI 集成
Prompts 可以在 client UI 中呈现为:- 斜杠命令
- 快速操作
- 上下文菜单项
- 命令面板条目
- 引导式工作流程
- 交互式表单
更新和更改
Servers 可以通知 clients 关于 prompt 的更改:- Server 功能:
prompts.listChanged
- 通知:
notifications/prompts/list_changed
- Client 重新获取 prompt 列表
安全考虑
在实现 prompts 时:- 验证所有参数
- 清理用户输入
- 考虑速率限制
- 实现访问控制
- 审计 prompt 使用情况
- 适当地处理敏感数据
- 验证生成的内容
- 实现超时
- 考虑 prompt 注入风险
- 记录安全要求