1.MCP启发功能 #
协议修订: 2025-06-18
注意: 在本版MCP规范中,Elicitation是新引入的功能,其设计可能在未来的协议版本中进一步演进。
2.📖 概述 #
Model Context Protocol (MCP) 的启发功能为服务器提供了一种标准化方式,使其能在交互过程中通过客户端向用户请求额外信息。这一流程让客户端在保持对用户交互和数据共享控制权的同时,使服务器能动态获取必要信息。
2.1 🎯 核心特性 #
- 结构化数据请求: 服务器通过JSON模式向用户请求结构化数据
- 用户控制: 客户端保持对用户交互和数据共享的完全控制权
- 动态获取: 服务器能够根据实际需要动态获取信息
- 数据验证: 根据预定义的schema验证响应内容
3.🔄 用户交互模型 #
在MCP中,通过启用用户输入请求,启发功能允许服务器实现交互式工作流。该功能嵌套在其他MCP服务器功能内部。
3.1 设计原则 #
实现方可以自由选择适合其需求的任何界面模式来公开启发功能——协议本身并未强制规定任何特定的用户交互模型。
3.2 ⚠️ 重要安全提醒 #
为了信任、安全和保障:
服务器必须遵守的规则:
- 服务器绝对不得利用启发式提问来获取敏感信息
应用程序应该实现的功能:
- 提供清晰显示哪台服务器正在请求信息的用户界面
- 允许用户在发送前查看并修改他们的回复
- 尊重用户隐私并提供明确的拒绝与取消选项
4.🛠️ 功能配置 #
支持启发式交互的客户端必须声明elicitation能力期间初始化:
{
"capabilities": {
"elicitation": {}
}
}5. 协议消息 #
5.1 创建启发请求 #
为了向用户请求信息,服务器会发送一个elicitation/create请求。
5.1.1 简单文本请求示例 #
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "elicitation/create",
"params": {
"message": "Please provide your GitHub username",
"requestedSchema": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": ["name"]
}
}
}响应:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"action": "accept",
"content": {
"name": "octocat"
}
}
}5.1.2 结构化数据请求示例 #
请求:
{
"jsonrpc": "2.0",
"id": 2,
"method": "elicitation/create",
"params": {
"message": "Please provide your contact information",
"requestedSchema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Your full name"
},
"email": {
"type": "string",
"format": "email",
"description": "Your email address"
},
"age": {
"type": "number",
"minimum": 18,
"description": "Your age"
}
},
"required": ["name", "email"]
}
}
}响应:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"action": "accept",
"content": {
"name": "Monalisa Octocat",
"email": "octocat@github.com",
"age": 30
}
}
}5.1.3 拒绝响应示例: #
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"action": "decline"
}
}5.1.4 取消响应示例: #
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"action": "cancel"
}
}6.🔄 消息流程 #

7. 请求模式 #
requestedSchema字段允许服务器使用JSON Schema的一个受限子集来定义预期响应的结构。为了简化客户端的实现,启发模式仅限于包含原始属性的扁平对象:
"requestedSchema": {
"type": "object",
"properties": {
"propertyName": {
"type": "string",
"title": "Display Name",
"description": "Description of the property"
},
"anotherProperty": {
"type": "number",
"minimum": 0,
"maximum": 100
}
},
"required": ["propertyName"]
}7.1 支持的Schema类型 #
该模式仅限于以下基本类型:
7.1.1 字符串模式 #
{
"type": "string",
"title": "Display Name",
"description": "Description text",
"minLength": 3,
"maxLength": 50,
"format": "email" // Supported: "email", "uri", "date", "date-time"
}支持的格式:email, uri, date, date-time
7.1.2 数字模式 #
{
"type": "number", // or "integer"
"title": "Display Name",
"description": "Description text",
"minimum": 0,
"maximum": 100
}7.1.3 布尔模式 #
{
"type": "boolean",
"title": "Display Name",
"description": "Description text",
"default": false
}7.1.4 枚举模式 #
{
"type": "string",
"title": "Display Name",
"description": "Description text",
"enum": ["option1", "option2", "option3"],
"enumNames": ["Option 1", "Option 2", "Option 3"]
}7.2 客户端使用方式 #
客户端可以使用此架构来:
- 生成适当的输入表单
- 在发送前验证用户输入
- 为用户提供更好的指导
注意: 为了简化客户端实现,我们有意不支持复杂的嵌套结构、对象数组及其他高级JSON Schema特性。
8.🎯 响应措施 #
启发式反馈采用三动作模型来明确区分不同的用户行为。
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"action": "accept", // or "decline" or "cancel"
"content": {
"propertyName": "value",
"anotherProperty": 42
}
}
}8.1 三种响应行动 #
8.1.1 接受 (action: "accept") #
用户明确批准并提交了数据
content字段包含与请求模式匹配的提交数据- 示例: 用户点击了"提交"、"确定"、"确认"等按钮
8.1.2 拒绝 (action: "decline") #
用户明确拒绝了该请求
content字段通常被省略- 示例: 用户点击了"拒绝"、"拒绝"、"否"等按钮
8.1.3 取消 (action: "cancel") #
用户未做出明确选择即退出
content字段通常被省略- 示例: 用户关闭了对话框、点击了外部区域、按了Escape键等
8.2 服务器处理建议 #
服务器应妥善处理每个状态:
- 接受: 处理已提交的数据
- 拒绝: 处理明确拒绝(例如:提供替代方案)
- 取消: 处理驳回情况(例如稍后重新提示)
9. 🔒 安全注意事项 #
- 服务器必须不通过诱导手段获取敏感信息
- 客户端应该实施用户审批控制
- 双方应该根据提供的schema验证启发内容
- 客户端应该明确指示哪台服务器正在请求信息
- 客户端应该允许用户随时拒绝信息收集请求
- 客户端应该实施速率限制
- 客户端应该以清晰明确的方式提出启发式请求,说明需要获取哪些信息及其原因
10.📚 总结 #
MCP的启发功能为AI应用提供了强大的交互能力,让服务器能够在需要时动态获取用户信息,同时保持用户对数据的完全控制权。通过标准化的JSON Schema和清晰的三动作响应模型,这一功能既保证了安全性,又提供了良好的用户体验。