什么是 MCP 信息征集(MCP Elicitation)?
MCP 信息征集(MCP Elicitation)是一项 Client Capability,使 MCP Server 能在受支持操作中请求用户补充输入,同时由 Client 控制展示、同意与数据共享。
快速了解
| 创建时间 | Form Mode 于 2025 年引入,URL Mode 于 MCP 2025-11-25 加入 |
|---|---|
| 规范文档 | 官方规范 |
工作原理
当前 MRTR 流程
Elicitation 使用 Multi Round-Trip Request,不再发送未经请求的 Server-to-Client JSON-RPC Request。Client 在逐请求 Capability 中声明 elicitation 支持;Server 的受支持 Operation 返回 resultType: "input_required" 与具名 elicitation/create。用户交互后,Client 以新的 JSON-RPC ID、对应 inputResponses 和原样复制的 requestState 重试原 Method。
Form Mode
Form Mode 在 Client 内收集非 Secret 的结构化输入。requestedSchema 被有意限制为带受支持 Primitive Field、Constraint 与 Enum 的 Flat Object,使 Host 能渲染可预测 UI。Client 应显示请求来自哪个 Server,允许用户检查并修改 Value、校验 Response,并提供 Decline 与 Cancel。Password、API Key、Access Token 与 Payment Credential 绝不能通过 Form Mode 请求。
URL Mode
URL Mode 把敏感交互移到带 HTTPS 的 Out-of-band Page,由合适一方控制。Client 展示 Destination Host 与 Purpose,在跳转前取得 Consent,并且不接收 Credential 或 Payment Data。accept 只表示用户同意打开 URL,不代表外部流程成功。重试后,Server 根据自己绑定的 State 判断是完成、再次请求输入还是失败。
授权边界
面向第三方账号的 URL Elicitation 与 MCP Client 到 MCP Server 的 MCP Authorization 相互独立。Server 对第三方可以扮演 OAuth Client,同时对 MCP Client 仍是 OAuth Resource Server;它不能要求 Client 转发第三方 Token,也不能把 MCP Token 直接用于下游。Form Value 与历史 Consent 也都不能授权 Tool、Object、Tenant 或 Side Effect。
State、Phishing 与故障
Client 将 requestState 视为 Opaque,不解析、修改或复用;Server 把返回 State 当成攻击者可控输入,若影响 Identity、Parameter、Policy 或 Effect,需要保护完整性并绑定 Principal 与短 Expiry。Client 应校验 URL Scheme 与 Destination、防御 Lookalike-domain Phishing、隔离并行请求,并分别呈现 Unsupported Capability、Decline、Cancel、Timeout、Malformed Schema、Replay 与 Unknown Outcome。
主要特点
- Client Capability:Host 控制展示,用户可 Accept、Decline 或 Cancel
- 当前嵌套流程:`elicitation/create` 位于 MRTR `input_required` Result 中
- 两条数据路径:Form 在带内收集非 Secret,URL 在带外处理敏感交互
- 受限 Form Schema:Flat Primitive Field 与 Enum 支持跨 Client 的可预测渲染
- 不透明 Continuation State:Client 原样回传,Server 保护完整性与作用域
- 独立授权:Elicitation 只收集输入,不授予 Tool、Object、Tenant 或下游权限
常见用途
- 在 Tool Call 中收集非敏感 Project Name、Preference 或受限 Selection
- 在 Workflow 准备高影响操作前请求显式确认
- 打开可信的外部 OAuth Flow,而不向 MCP Client 暴露第三方 Credential
- 把用户引导到模型 Context 之外的合规 Payment 或 Secret-entry Page
- 让 MCP Task 暂停等待必要输入,再通过 `tasks/update` 恢复
示例
Loading code...常见问题
MCP Elicitation 在 2026-07-28 中如何工作?
Server 返回带具名 `elicitation/create` 的 `input_required` Result;Client 展示交互,取得 Action 与可选 Form Data,再用新 Request ID、匹配的 `inputResponses` 和未修改的 `requestState` 重试原 Method。整个过程不需要 Protocol Session 或主动 Server Request。
Form Elicitation 与 URL Elicitation 有什么区别?
Form Mode 在 Client 内收集非 Secret Primitive Value,Client 能看到数据;URL Mode 为 Secret、Payment 或第三方授权打开外部 HTTPS Destination,敏感数据不会经过 Client 或模型 Context。两种模式都必须显示请求来源,并允许用户拒绝。
Form Elicitation 能请求 API Key 或 Password 吗?
不能。Specification 禁止 Form Mode 请求 Password、API Key、Access Token、Payment Credential 等 Secret。应使用 URL Mode,让用户在可信外部页面直接输入敏感数据,并避免它进入 MCP Message、Client Log 与模型 Context。
URL Elicitation 等同于 MCP Authorization 吗?
不等同。MCP Authorization 控制 Client 对 MCP Server 的访问;URL Elicitation 支持另一段带外交互,常用于让 MCP Server 获得第三方服务权限。Server 不得 Token Passthrough,也不能要求 Client 提供第三方 Credential。
接受 Elicitation 是否授权 Tool Action?
不授权。Accept 只表示用户提交请求的 Form,或同意打开 URL。Host 与 Server 仍要授权具体 Tool、Principal、Tenant、Object、Argument、Purpose 与 Side Effect;关键内容变化会使历史 Consent 失效,URL Accept 也不能证明外部流程已经完成。