MCP elicitation/create 怎么设计:工具调用中的表单输入与敏感信息边界
给 MCP 工具对接配置向导时,最容易把两类场景混在一起:一类是服务器需要用户补充普通业务参数,另一类是服务器需要用户输入密码、API 密钥这类敏感凭据。MCP 的 elicitation/create 解决的是前一类场景的需求:在一次客户端发起的工具调用流程里,由服务器向客户端请求额外的、可校验的用户输入;敏感信息相关的交互必须转到用户明确授权的外部安全页面,不能直接塞进普通表单里处理。
把 MCP elicitation 设计成“补齐非敏感业务参数”的交互逻辑:客户端先声明自身支持的能力,服务器只在原始请求链路内发起
elicitation/create,用户可以自主选择接受、拒绝或者取消;遇到密码、令牌和支付信息类内容时,直接停止使用表单收集模式。
- 客户端初始化时声明
elicitation能力,服务器不能向未声明该能力的客户端发送相关请求。 - 表单模式适合收集项目名、环境、筛选条件等非敏感字段,顶层属性可以用 JSON Schema 做校验。
- 用户响应至少要区分
accept、decline和cancel三种状态,分别对应不同的业务收尾动作。 - 密码、API 密钥、访问令牌和支付凭据不能通过表单模式收集;当前规范草案为这类外部交互提供了对应的 URL 模式。
先把交互边界定清:服务器缺什么信息
设想一个 MCP 工具 create_deployment:用户已经选好要操作的仓库,但服务器还缺部署环境和发布分支这两个信息。环境名、分支名、是否开启灰度,都属于可以让用户在客户端界面里查看和修改的普通参数。服务器可以在工具处理过程中发起一次 elicitation,让客户端把这些字段收集回来,之后再继续执行原本的工具调用逻辑。
这个能力不是“服务器随时弹窗”的无限制通道。官方规范要求这类从服务器发往客户端的请求,必须和一个正在处理的客户端请求强关联,例如 tools/call;不能让服务器在无关的新连接上,独立主动发起用户输入请求。这么做既能让客户端清楚当前交互的上下文,也能让取消、超时和审计记录都归属于同一条调用链。

客户端初始化时先声明 form 能力
支持 elicitation 的客户端要在初始化能力配置里,声明它能处理的交互模式。兼容稳定版 2025-06-18 时,用空对象就可以表达表单模式能力:
{
"capabilities": {
"elicitation": {}
}
}
如果客户端实现了更细粒度的能力声明,可以把表单模式的支持范围写得更明确。服务器收到初始化结果后,要把能力协商当作硬性门槛:客户端没有声明 elicitation 相关能力,就不要继续发送 elicitation/create,直接返回缺少参数的提示,或者让调用方重新发起已经带全参数的请求。
| 模式 | 适合收集内容 | 客户端重点检查项 |
|---|---|---|
| form | 环境名、筛选条件、普通联系人信息 | 展示请求方身份、允许用户修改字段、校验字段合法性、支持拒绝操作 |
| URL | 密码、令牌、支付或第三方授权等敏感交互 | 显示目标域名、征得用户同意、避免把凭据回传给客户端侧 |
| 不支持 | 客户端没有对应处理能力 | 停止追加请求,返回调用方可自行恢复的错误提示 |
用 requestedSchema 约束普通输入,不要直接信任自由文本
表单请求会包含一条面向用户的说明,以及一个做了限制的 JSON Schema。下面的示例只收集部署环境、分支和灰度开关三个字段;字段统一放在顶层,类型和必填关系由客户端侧先做校验:
{
"jsonrpc": "2.0",
"id": 42,
"method": "elicitation/create",
"params": {
"message": "请补充本次部署的目标环境和发布分支",
"requestedSchema": {
"type": "object",
"properties": {
"environment": {"type": "string", "enum": ["staging", "production"]},
"branch": {"type": "string", "minLength": 1},
"canary": {"type": "boolean"}
},
"required": ["environment", "branch"]
}
}
}
服务器收到结果后仍然要再次做校验。客户端的表单校验只是优化交互体验,完全不能替代服务端的权限判断、分支白名单校验和生产发布审批流程。尤其是 environment=production 这类字段,不能只校验类型正确就直接授予执行资格。
三种用户动作要分别做流程收口
elicitation 的结果不只有“拿到数据”和“报错”两种场景。用户可能提交了合法内容,也可能明确拒绝提供信息,或者只是直接关闭了当前交互界面。服务器要把这三种状态映射成不同的工具结果处理逻辑:
{
"jsonrpc": "2.0",
"id": 42,
"result": {
"action": "accept",
"content": {
"environment": "staging",
"branch": "release/2026-08",
"canary": true
}
}
}
- accept:重新校验字段合法性和当前用户权限,再继续后续工具逻辑;不要只检查客户端是否返回了合法 JSON 就直接执行。
- decline:用户不愿提供对应信息,返回可读性强的未完成状态,不要自动重试弹出收集窗口。
- cancel:交互被关闭或者流程中止,释放本次调用的临时状态,必要时引导用户从原操作入口重新发起。
如果工具会修改外部资源,最好把“收集参数”和“执行变更”拆成两个明确的阶段:在确认用户 accept 之后,重新计算授权状态和资源状态,确认所有条件都满足,再提交变更。用户停留在表单页面的这段时间,分支权限或者部署窗口规则可能已经发生变化。

敏感输入要切换到 URL 模式处理
普通表单模式完全不适合收集密码、API 密钥、访问令牌和支付凭据。原因不只是“界面上看起来不安全”:表单内容会进入客户端可见的数据流,服务器也很可能在日志、调试信息或者模型上下文中意外泄漏这些敏感值。
当前 MCP 规范草案引入了 URL 模式,用来把敏感交互放到客户端之外的目标页面处理。客户端展示服务器请求的上下文、目标域名,征得用户同意后跳转,服务器通过 elicitationId 关联后续状态;这个模式不是要替代 MCP 客户端授权流程,也不会修改客户端原本携带的 bearer token。如果客户端只支持 form 模式,服务器不能强制把 URL 模式交互塞给它,要明确返回不支持的提示。
URL 模式也不是安全自动化的通行证。客户端仍要拦截钓鱼式跳转,服务器要校验回调状态和用户的绑定关系,跳转的外部页面也必须使用 HTTPS 和短时有效的授权状态。这里提到的“切换模式”指的是调整安全边界,不代表任何外部页面都可以直接跳转打开。
把客户端体验做成可恢复的流程
一个可用的客户端至少要在界面上明确告知用户“当前是哪个服务器正在请求什么内容”,让用户在提交前检查并修改表单内容,同时提供清晰的拒绝和取消入口。针对 URL 模式,还要明确显示目标主机信息,告知用户即将发生外部跳转。
服务端可以按照下面的检查顺序实现对应逻辑:
- 读取初始化能力配置,确认客户端支持目标交互模式。
- 根据缺少的业务字段构造最小粒度的 requestedSchema,不要顺便收集和当前操作无关的数据。
- 在当前
tools/call链路内发起请求,同时设置调用级别的超时规则。 - 收到 accept 响应后,重新做类型、权限、资源版本和审批状态的校验。
- 针对 decline、cancel、超时三类场景分别记录原因,同时保证所有临时状态都可以正常释放。
- 如果字段涉及凭据或者付款,直接改走 URL 模式或者业务方已有的安全授权流程。
常见问题
elicitation/create 能不能由服务器主动定时弹出?
不应做这类设计。所有请求都要关联到正在处理的客户端请求,比如正在执行的工具调用;在独立连接上由服务器主动发起的交互,不属于这条协议覆盖的流程范围。
requestedSchema 能不能写任意复杂的嵌套 JSON Schema?
稳定版表单能力使用的是受限的 Schema 形态,核心聚焦在顶层属性和基础类型校验。复杂业务对象可以拆成多次最小粒度交互,或者改由客户端先收集完成后直接作为工具参数提交。
用户点击 decline 之后,服务器应该重试吗?
默认不应该自动重试。decline 是用户明确表示不提供对应信息,重复弹出窗口会破坏交互的可控性;可以返回缺少参数的可恢复结果,让用户自主选择是否重新发起操作。
API 密钥可以放进 form 的 password 字段吗?
不建议这么做,也不符合敏感信息边界的设计原则。字段标成 password 只是修改了前端的展示方式,不能改变数据会经过客户端和整条调用链的事实;这类内容应该用 URL 模式或者已有的安全凭据流程来处理。
MCP elicitation 的价值不在于多了一个弹窗能力,而在于把“工具缺少必要信息”变成一套有能力协商、有用户确认、有结果分支处理的协议流程。把普通业务字段留在可审阅的 form 模式,把敏感交互移到明确的 URL 安全边界,再在用户确认 accept 之后重新做权限和资源校验,工具才能真正具备可恢复的交互能力。
Redis ACL DRYRUN 怎么验收:命令权限、密钥权限与最小授权
- 上一篇
- Redis ACL DRYRUN 怎么验收:命令权限、密钥权限与最小授权
- 下一篇
- Gemma 4 QAT 模型怎么选:Q4_0、内存预算与端侧部署边界
-
- 科技周边 · 人工智能 | 2小时前 | anthropic · claude · AI应用开发 · cache_control Claude Prompt Caching 缓存命中
- Claude Prompt Caching 怎么验收:静态前缀、动态尾部与缓存命中率
- 363浏览 收藏
-
- 科技周边 · 人工智能 | 2小时前 |
- MCP notifications/progress 怎么接:progressToken、递增进度与超时收口
- 241浏览 收藏
-
- 科技周边 · 人工智能 | 5小时前 |
- Gemini URL Context 取证链怎么做:Go 关联 retrieved_url、引用与 token 用量
- 320浏览 收藏
-
- 科技周边 · 人工智能 | 5小时前 |
- Gemini API URL Context 怎么验收:Go 识别抓取状态、引用标注与失败回退
- 426浏览 收藏
-
- 科技周边 · 人工智能 | 7小时前 |
- MCP 2026-07-28 怎么迁移:无会话请求、MRTR 与工具调用验收
- 407浏览 收藏
-
- 科技周边 · 人工智能 | 9小时前 | 安全 · mcp · ai agent · MCP ToolAnnotations readOnlyHint destructiveHint idempotentHint
- MCP ToolAnnotations 上线前怎么核对:四个 Hint 的实测与拦截
- 195浏览 收藏
-
- 科技周边 · 人工智能 | 9小时前 | 安全 · mcp · ai agent · MCP ToolAnnotations readOnlyHint
- MCP 工具注解怎么做安全验收:readOnlyHint、destructiveHint 与幂等边界
- 452浏览 收藏
-
- 科技周边 · 人工智能 | 9小时前 |
- OpenAI Responses API Webhook 怎么验签:原始请求体、时间窗口与 response.completed 处理
- 312浏览 收藏
-
- 科技周边 · 人工智能 | 9小时前 |
- Gemini Files API 怎么管理上传文件:ACTIVE 状态、48 小时过期与主动删除
- 433浏览 收藏
-
- 科技周边 · 人工智能 | 11小时前 | go · 人工智能 · Gemini API · 函数调用 · 多轮对话 · Go 函数调用 工具链 Gemini 3 thoughtSignature Interactions API
- Gemini 3 函数调用为什么要回传 thoughtSignature:Go 多轮工具链的顺序核对
- 202浏览 收藏
-
- 科技周边 · 人工智能 | 13小时前 | openai · Responses API · AI应用开发 · OpenAI Responses API 上下文压缩 compaction conversation state
- OpenAI Responses API 上下文太长怎么压缩:/responses/compact 与状态续接边界
- 428浏览 收藏
-
- 科技周边 · 人工智能 | 4天前 | 前端 · 人工智能 · 交互 · 中文输入法 AI聊天框 compositionend isComposing 回车发送
- AI 聊天框回车发送总误触:compositionend、isComposing 与中文输入法兼容
- 217浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 4911次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 4487次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 4432次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 4669次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 4625次使用
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览
-
- Canva手机闪退解决方法及适配指南
- 2026-05-25 501浏览
-
- Hermes Agent依赖的工具链有哪些 必备工具链介绍
- 2026-05-05 501浏览
-
- 千问AI官网地址链接入口_千问AI官方网站登陆入口
- 2026-05-05 501浏览

