ai
  • index
  • 1.首页
  • 2.介绍
  • 3.架构概览
  • 4.服务器概念
  • 5.客户端概念
  • 6.版本控制
  • 7.连接到远程MCP服务器
  • 8.连接到本地MCP服务器
  • json_rpc
  • 9.构建一个MCP服务器
  • 10.检查员
  • 11.构建一个MCP客户端
  • 14.架构
  • 15.基础协议概述
  • 16.生命周期
  • 17.传输
  • 18.授权
  • 19.安全最佳实践
  • 20.取消
  • 21.Ping
  • 22.进展
  • 23.Roots
  • 24.采样
  • 25.启发
  • 26.服务器特性
  • 27.提示词
  • 28.资源
  • 29.工具
  • 30.完成
  • 31.日志记录
  • 32.分页
  • 33.架构参考
  • URI模板
  • 12.实现
  • http.server
  • 动态客户端注册协议
  • 受保护资源元数据
  • 授权服务器元数据
  • JWKS
  • PKCE
  • PyJWT
  • secrets
  • watchfiles
  • 实现authorization
  • 实现cancel
  • 实现completion
  • 实现logging
  • 实现pagination
  • 实现process
  • 实现transport
  • psutil
  • pytz
  • zoneinfo
  • contextlib
  • Starlette
  • mcp.1.starter
  • mcp.2.Resource
  • mcp.3.structured_output
  • mcp.4.prompts
  • mcp.5.context
  • mcp.6.streamable
  • mcp.7.lowlevel
  • mcp.8.Completion
  • mcp.9.Elicitation
  • mcp.10.oauth
  • mcp.11.integration
  • mcp.12.best
  • mysql-mcp
  • databases
  • uvicorn
  • asynccontextmanager
  • AsyncExitStack
  • streamable
  • aiohttp
  • publish
  • email
  • schedule
  • twine
  • 1.教学文档总览
  • 2.教师使用指南
  • 3.教学系统快速参考
  • 4.新生入门指南
  • 5.学生使用指南
  • 1.MCP启发功能
  • 2.📖 概述
    • 2.1 🎯 核心特性
  • 3.🔄 用户交互模型
    • 3.1 设计原则
    • 3.2 ⚠️ 重要安全提醒
  • 4.🛠️ 功能配置
  • 5. 协议消息
    • 5.1 创建启发请求
      • 5.1.1 简单文本请求示例
      • 5.1.2 结构化数据请求示例
      • 5.1.3 拒绝响应示例:
      • 5.1.4 取消响应示例:
  • 6.🔄 消息流程
  • 7. 请求模式
    • 7.1 支持的Schema类型
      • 7.1.1 字符串模式
      • 7.1.2 数字模式
      • 7.1.3 布尔模式
      • 7.1.4 枚举模式
    • 7.2 客户端使用方式
  • 8.🎯 响应措施
    • 8.1 三种响应行动
      • 8.1.1 接受 (action: "accept")
      • 8.1.2 拒绝 (action: "decline")
      • 8.1.3 取消 (action: "cancel")
    • 8.2 服务器处理建议
  • 9. 🔒 安全注意事项
  • 10.📚 总结

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.🔄 消息流程 #

sequenceDiagram participant Server as 服务器 participant Client as 客户端 participant User as 用户 Note over Server: 服务器发起询问 Server->>Client: 启发/创建 Note over Client: 人际互动 Client->>User: 呈现启发式用户界面 User->>Client: 提供所需信息 Note over Client: 完成请求 Client->>Server: 返回用户响应 Note over Server: 继续处理新信息

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 客户端使用方式 #

客户端可以使用此架构来:

  1. 生成适当的输入表单
  2. 在发送前验证用户输入
  3. 为用户提供更好的指导

注意: 为了简化客户端实现,我们有意不支持复杂的嵌套结构、对象数组及其他高级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. 🔒 安全注意事项 #

  1. 服务器必须不通过诱导手段获取敏感信息
  2. 客户端应该实施用户审批控制
  3. 双方应该根据提供的schema验证启发内容
  4. 客户端应该明确指示哪台服务器正在请求信息
  5. 客户端应该允许用户随时拒绝信息收集请求
  6. 客户端应该实施速率限制
  7. 客户端应该以清晰明确的方式提出启发式请求,说明需要获取哪些信息及其原因

10.📚 总结 #

MCP的启发功能为AI应用提供了强大的交互能力,让服务器能够在需要时动态获取用户信息,同时保持用户对数据的完全控制权。通过标准化的JSON Schema和清晰的三动作响应模型,这一功能既保证了安全性,又提供了良好的用户体验。

访问验证

请输入访问令牌

Token不正确,请重新输入