导航菜单

  • 1.什么是MCP
  • 2.架构概览
  • 3.理解MCP服务器
  • 4.理解MCP客户端
  • 5.版本控制
  • 6.连接本地MCP服务器
  • 7.连接远程MCP服务器
  • 8.构建MCP服务器
  • 9.构建MCP客户端
  • 10.SDKs
  • 11.理解MCP中的授权
  • 12.安全最佳实践
  • 13.MCP Inspector
  • 14.规范
  • 15.关键变更
  • 16.架构
  • 17.基础协议概述
  • 18.生命周期
  • 19.传输
  • 20.授权
  • 21.取消
  • 22.Ping
  • 23.进度
  • 24.任务
  • 25.根
  • 26.采样
  • 27.引导
  • 29.提示
  • 30.资源
  • 31.工具
  • 32.补全
  • 33.日志
  • 34.分页
  • 35.模式参考
  • Keycloak
  • 28.服务器功能
  • 1. 什么是引导?
  • 2. 本章你将学到
  • 3. 模式对比
  • 4. 能力
  • 5. 协议消息
    • 5.1 引导请求(elicitation/create)
    • 5.2 表单模式示例
    • 5.3 表单模式 Schema 类型
    • 5.4 URL 模式示例
    • 5.5 完成通知(URL 模式)
  • 6. 响应动作
  • 7. 流程示意
  • 8. 错误处理
  • 9. 安全要点
  • 10. 延伸阅读

1. 什么是引导? #

引导(Elicitation)是 MCP 服务器通过客户端向用户请求额外信息的标准化方式。服务器在执行工具或完成任务时,可能需要用户提供配置、选择或敏感凭据,引导即用于此。

协议版本:2025-11-25

通俗理解 说明
表单模式 服务器请求结构化数据(如用户名、选项),客户端展示表单,数据对客户端可见
URL 模式 服务器将用户导向外部 URL(如登录页、支付页),敏感数据不经客户端

2. 本章你将学到 #

  • 表单模式与 URL 模式的区别
  • 能力声明与协议消息
  • 表单模式下的 JSON Schema(字符串、数字、枚举等)
  • 响应动作、错误处理与安全要点

3. 模式对比 #

模式 适用场景 数据可见性
form 非敏感结构化数据(用户名、选项、配置) 客户端可见
url 敏感信息(凭据、支付、OAuth 授权) 客户端不可见,交互在外部完成

安全:敏感信息必须用 URL 模式;表单模式不得请求密码、API 密钥等。

4. 能力 #

客户端必须在初始化时声明 elicitation 能力:

{
  "capabilities": {
    "elicitation": {
      "form": {},
      "url": {}
    }
  }
}
子能力 说明
form 支持表单模式
url 支持 URL 模式(2025-11-25 新增)

空对象 elicitation: {} 等价于仅支持 form。客户端必须至少支持一种模式。

5. 协议消息 #

5.1 引导请求(elicitation/create) #

参数 要求 说明
mode 必须(URL)或可选(表单默认 form) form 或 url
message 必须 人类可读的请求说明
requestedSchema 表单模式必须 定义预期响应的 JSON Schema
url URL 模式必须 用户应打开的 URL
elicitationId URL 模式必须 引导的唯一标识

5.2 表单模式示例 #

请求:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "elicitation/create",
  "params": {
    "mode": "form",
    "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.3 表单模式 Schema 类型 #

支持扁平对象的原始类型:

类型 示例
string title、description、minLength、maxLength、pattern、format(email/uri/date)、default
number/integer minimum、maximum、default
boolean default
enum(单选) enum 或 oneOf(带 title)
enum(多选) type: "array" + items 含 enum 或 anyOf

5.4 URL 模式示例 #

请求:

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "elicitation/create",
  "params": {
    "mode": "url",
    "elicitationId": "550e8400-e29b-41d4-a716-446655440000",
    "url": "https://mcp.example.com/ui/set_api_key",
    "message": "Please provide your API key to continue."
  }
}

响应: action: "accept" 表示用户同意打开 URL;实际交互在外部完成,客户端不获知结果。

5.5 完成通知(URL 模式) #

当外部交互完成时,服务器可以发送:

{
  "jsonrpc": "2.0",
  "method": "notifications/elicitation/complete",
  "params": {
    "elicitationId": "550e8400-e29b-41d4-a716-446655440000"
  }
}

客户端可据此重试先前失败的请求。

6. 响应动作 #

动作 说明
accept 用户批准并提交;表单模式含 content,URL 模式通常省略
decline 用户明确拒绝;通常省略 content
cancel 用户未做选择即关闭(如关对话框、按 Escape);通常省略 content

7. 流程示意 #

表单模式:

sequenceDiagram participant S as 服务器 participant C as 客户端 participant U as 用户 S->>C: elicitation/create (mode: form) C->>U: 展示表单 U-->>C: 填写并提交 C-->>S: 返回 content

URL 模式:

sequenceDiagram participant S as 服务器 participant C as 客户端 participant U as 用户 S->>C: elicitation/create (mode: url) C->>U: 请求打开 URL 的授权 U-->>C: 批准 C->>U: 打开浏览器 Note over U: 用户在外部完成交互 S-->>C: notifications/elicitation/complete (可选)

8. 错误处理 #

情况 错误码
请求需 URL 引导才能处理 -32042(URLElicitationRequiredError),data.elicitations 含待完成的引导列表
客户端不支持该模式 -32602(无效参数)

9. 安全要点 #

要点 说明
表单不请求敏感信息 密码、API 密钥等必须用 URL 模式
URL 模式 客户端不得自动打开 URL;必须展示完整 URL 供用户检查;必须经用户同意后打开
用户识别 服务器不得依赖客户端提供的用户识别;应从授权凭据派生
状态绑定 引导状态必须与用户身份绑定,不得仅与会话 ID 关联

10. 延伸阅读 #

主题 文档
授权 授权、理解 MCP 中的授权
安全 安全最佳实践
任务(引导可嵌套在任务中) 任务
← 上一节 26.采样 下一节 28.服务器功能 →

访问验证

请输入访问令牌

Token不正确,请重新输入