MCP capability negotiation 怎么确认客户端支持 elicitation:form 与 url 的分支判断
接入 MCP 的服务端最容易在第一次交互时踩坑:客户端声明了 elicitation,并不代表它同时支持 form 和 url。正确做法是先读取初始化阶段的能力,再根据已声明的模式选择请求;遇到敏感信息时还要把交互放到 URL 模式,不能把密钥塞进客户端表单。
把 capability negotiation 当成发送 elicitation 前的门禁:只发客户端明确支持的模式,普通资料走 form,敏感交互走 url;能力缺失或用户拒绝时,原请求必须停在可恢复状态。
要点速览
- 客户端在初始化阶段声明 elicitation 能力,服务端据此判断可用模式。
- 空的 elicitation 能力对象按兼容规则只表示支持 form,不等于支持 url。
- 密码、API key、access token 和支付凭据不能通过 form 收集。
- accept 只表示用户同意开始交互,不一定表示 URL 页面上的流程已经完成。
先看初始化能力,再决定请求模式
MCP 的 elicitation 是服务端在处理其他请求时向用户补充信息的一种协议交互。客户端需要在初始化阶段声明 capabilities.elicitation,服务端随后才能知道自己能否发送对应模式。
判断顺序可以压缩成一条很短的路径:读取 capabilities,确认存在 elicitation,再分别检查 form 或 url。没有能力声明时,服务端不应猜测客户端会弹出什么界面。

form 与 url 不是同一个输入框的两种外观
form 是带结构约束的站内收集:服务端可以提供 requestedSchema,客户端负责展示字段、校验输入并让用户在提交前复核。它适合姓名、邮箱、筛选条件等一般资料。
url 是站外交互:客户端把目标域名展示给用户,经明确同意后打开页面,敏感数据不会经过 MCP 客户端。服务端仍要提供清楚的 message、有效的 URL 和唯一的 elicitationId,并让用户知道为什么要跳转。
因此,不能把“客户端支持 elicitation”直接写成“客户端支持所有 elicitation 模式”。兼容场景下,空的 elicitation 对象只按支持 form 处理;服务端发送 url 前必须看到明确的 url 能力。

服务端的分支判断怎么落地
可以把一次请求拆成四个检查点。第一,保存初始化响应中的能力快照,并按客户端连接和用户身份关联。第二,普通输入只在存在 form 能力时发送表单请求。第三,遇到密码、API key、access token 或支付凭据时,只选择已声明的 url 模式。第四,两个模式都不支持时返回可解释的失败结果,不要悄悄降级成明文输入。
这条边界也适用于外部 OAuth。URL 模式用于让 MCP 服务端代表用户完成第三方授权,不是用来替代 MCP 客户端与 MCP 服务端之间的授权。两条授权关系要分别记录,不能把客户端凭据透传给第三方。
用户动作要按 accept、decline、cancel 分开处理
elicitation 的结果有三种动作。accept 表示用户明确批准;form 模式通常会带回 content,url 模式的 accept 只表示同意开始站外交互。decline 表示用户明确拒绝,服务端应给出替代路径或结束当前操作。cancel 则更像关闭弹窗、返回上一页或页面加载失败,适合保留原任务并允许之后继续。
尤其不要把 url 模式的 accept 当作“授权已经完成”。官方规范明确把站外流程和 MCP 客户端隔开;服务端需要等待自己的状态变化或完成通知,再决定是否重试原请求。
上线前的安全复查清单
- 服务端是否拒绝了客户端未声明的模式。
- form 是否只收集一般资料,是否屏蔽了敏感凭据。
- url 是否使用 HTTPS、展示完整域名,并要求用户明确同意。
- URL 中是否混入了用户凭据、个人信息或预授权参数。
- 服务端是否把 elicitation 状态绑定到真实用户,而不是只绑定一个容易复用的会话标识。
- 用户拒绝、取消、页面未完成和完成通知缺失时,是否都有可恢复路径。
常见问题
客户端只声明了空的 elicitation 对象,能发送 url 吗?
不能。兼容规则把空对象视为仅支持 form;要发送 url,必须看到明确的 url 能力。
收集邮箱也必须使用 url 吗?
不必。邮箱等一般资料可以使用 form,但仍应让用户知道请求来自哪个服务端,并允许修改或拒绝。
url 模式返回 accept 后就能继续原请求吗?
不能直接假定完成。accept 只代表同意开始站外交互,服务端应根据自身状态或完成通知确认流程结果。
没有 url 能力但业务必须输入 API key 怎么办?
应暂停这次操作并提示客户端升级或改用支持 url 的客户端,不要把 API key 改成 form 字段。
把能力协商变成发布门禁
实际实现中,最稳妥的做法是把能力快照、模式选择、用户动作和站外完成状态写进同一条可追踪记录。每次发送 elicitation 前重新核对模式,每次恢复原请求前核对用户身份和交互状态。这样既能兼容只支持 form 的旧客户端,也能把敏感数据留在正确的安全边界内。
DBeaver 怎么把查询结果导出为 Excel:结果集导出向导与字段确认
- 上一篇
- DBeaver 怎么把查询结果导出为 Excel:结果集导出向导与字段确认
- 下一篇
- 米坛官网入口是什么?米坛社区适合哪些智能穿戴用户
-
- 科技周边 · 人工智能 | 4小时前 | python · 人工智能 · Transformers apply_chat_template 聊天模板 chat_template 角色标签
- Transformers聊天模板与手写角色标签有什么兼容性差异
- 492浏览 收藏
-
- 科技周边 · 人工智能 | 4小时前 | PyTorch checkpoint Accelerate 随机数状态 恢复训练
- Accelerate恢复训练时如何保存随机数状态
- 326浏览 收藏
-
- 科技周边 · 人工智能 | 4小时前 |
- Diffusers怎样使用Generator复现同一张生成图
- 118浏览 收藏
-
- 科技周边 · 人工智能 | 4小时前 | 模型 混合精度 优化器 分布式训练 Accelerate Accelerator.prepare
- Accelerate prepare为什么要同时接收模型与优化器
- 386浏览 收藏
-
- 科技周边 · 人工智能 | 4小时前 | 人工智能 · Hugging Face Datasets streaming IterableDataset Dataset.shuffle shuffle buffer
- Datasets流式读取与内存数据集的shuffle有什么区别
- 130浏览 收藏
-
- 科技周边 · 人工智能 | 4小时前 |
- Hugging Face Datasets map怎样同时删除旧字段
- 421浏览 收藏
-
- 科技周边 · 人工智能 | 5小时前 |
- PEFT适配器检查点为什么不包含完整基础模型
- 301浏览 收藏
-
- 科技周边 · 人工智能 | 5小时前 | python · Hugging Face 提示词 Transformers generate input_ids
- Transformers生成结果为什么包含输入提示词
- 111浏览 收藏
-
- 科技周边 · 人工智能 | 5小时前 | 解码 token Transformers generate 新生成内容
- Transformers怎样只解码新生成的token
- 461浏览 收藏
-
- 科技周边 · 人工智能 | 5小时前 | python · 人工智能 · Transformers offset_mapping 原始文本 Fast tokenizer 文本偏移
- Transformers分词偏移怎样映射回原始文本片段
- 330浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 463次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 526次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 545次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 493次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 313次使用
-
- Go HTTP 出站请求如何防 SSRF:URL 解析、内网地址拦截与重定向复核
- 2026-08-10 275浏览
-
- Go http.MaxBytesReader 如何限制上传体积:超限响应、读取顺序与连接复用
- 2026-08-26 327浏览
-
- Go io/fs 如何用 Sub 实现受限文件树:路径规范化与 Open 失败处理
- 2026-08-29 284浏览
-
- Go io限制上传读取长度的安全写法
- 2026-09-15 123浏览
-
- Go net/http Client重定向时降级敏感请求头的处理方案
- 2026-09-15 110浏览

