前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库MCP 客户端 roots sampling elicitation 能力区别
AIAI AgentMCP 协议

MCP 客户端的 roots、sampling、elicitation 分别允许服务端请求什么?

这些字段描述客户端能接住哪些来自服务端的请求,并不是服务端自动获得宿主全部资源。

前端进阶之旅 · 一题精讲更新于 2026.09.06
AI Agent#MCP 协议#MCP#表单
先看核心答案读代码示例
理解线索

三个不同的反向请求入口

  1. roots/list服务端询问客户端当前提供的根范围
  2. sampling/createMessage服务端请求客户端协调一次模型生成
  3. elicitation/create服务端经客户端收集用户需要提供的信息

示例只声明基本采样和表单询问,没有声明带工具采样或 URL 询问模式。

核心回答

先记住这个答案

roots 表示客户端能回应服务端的根列表请求;sampling 表示可以经客户端请求模型生成;elicitation 表示可以通过客户端向用户询问信息。三者分别面向工作区范围、模型调用与用户交互,不能互相替代。按 2025-11-25,sampling.tools 额外声明采样中的工具使用支持,elicitation 可以分别声明 form 和 url 模式。宿主仍控制模型选择、数据共享和用户交互,声明能力只是说明协议处理路径存在,不是给予服务端无限文件访问、任意模型预算或用户同意。

  • roots 提供范围信息,实际文件隔离另行落实
  • sampling 由客户端管理模型访问
  • elicitation 需要尊重支持模式与用户选择

根目录列表不是操作系统权限设置

代码分析服务可以先询问当前工作区根目录,再在该范围内解析文件。根对象给出了位置与可选名称,但一份列表不会自动改变服务端进程的系统权限;路径归一化、符号链接处理和实际访问控制仍需由执行环境落实。

当宿主切换项目时,支持 listChanged 的客户端可以发出根列表变化通知,服务端随后获取新列表并更新缓存。不要让旧项目路径继续留在后台扫描任务里,也不能把“列表改变”理解为所有旧任务都已经自动取消。

初始化参数中的客户端能力对象JSON
{
  "roots": { "listChanged": true },
  "sampling": {},
  "elicitation": { "form": {} }
}

这是 capabilities 字段的值,不是完整 JSON-RPC 报文。它不包含 sampling.tools 和 elicitation.url,因此服务端不能据此假定两种扩展调用已经可用。

采样请求需要由宿主执行预算和模型策略

例如静态分析服务希望把若干诊断整理成说明,可以请求客户端进行采样。服务端提出消息、输出长度和模型偏好,宿主负责决定实际模型以及请求能否执行;模型偏好不是强制指定某个供应商的凭证或型号。

对嵌套采样需要记录它属于哪个用户任务,避免一次工具调用衍生出不可控的模型请求链。宿主可以落实已授权预算、上下文范围和超时策略。支持基本 sampling 也不能被解释为支持采样内部的工具调用循环。

询问用户与调用模型有不同的信息来源

报告工具缺少统计月份时,可以通过 form 请求用户提供,而不应让 sampling 猜出一个月份当成用户选择。客户端需要明确谁在询问并保留拒绝与取消路径;没有用户输入时,服务端应处理这个结果,不能默默补成同意。

这一版本中,elicitation 空对象兼容表示仅支持 form。敏感凭证不能通过普通表单收集,应使用支持的 URL 模式在带外完成相应交互;用户接受打开交互也不等于流程已经结束,更不等于给 MCP 客户端本身新增了服务端访问授权。

回答前,多想一步

容易答错的地方

客户端声明 roots 后服务端只能读取这些路径
协议声明不会自动建立进程沙箱,服务端实现与宿主执行环境还要落实边界;不能用一份 JSON 列表代替真实文件权限。
支持 elicitation 就代表用户已经同意提供数据
支持功能只说明客户端能够呈现询问,用户仍可拒绝或取消;服务端必须处理这些结果,不能把能力存在当成每次交互的授权。
试着用自己的话回答

面试官还会怎么问?

服务端没有这些客户端能力还能提供工具吗?

可以,只要工具不依赖缺失的反向请求,普通工具服务仍能工作。业务确实依赖时应明确提示缺少哪项能力,并提供可用的替代路径。

可以让 sampling 读取宿主所有聊天上下文吗?

不能从基本能力直接推出这种权限。上下文共享有单独规则与宿主策略,服务端应只请求任务所需信息,不能默认获得其他会话内容。

用户关闭了询问弹窗还能继续提交操作吗?

应按照取消或拒绝的实际结果处理,不能推定用户同意。需要该输入才能完成的动作应停止依赖步骤,并保留可恢复的任务状态。

从一道题,走向一组知识

把知识连起来

MCP 协议

MCP initialize 怎样协商协议版本与能力,不兼容时怎么办?

这些能力通过客户端初始化请求传给服务端

MCP 协议

MCP 服务端 capabilities 中 listChanged 和 subscribe 有什么区别?

与服务端向客户端提供的能力方向进行对照

参考资料

  • MCP 2025-11-25:Roots
  • MCP 2025-11-25:Sampling
  • MCP 2025-11-25:Elicitation

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 根目录列表不是操作系统权限设置
  3. 采样请求需要由宿主执行预算和模型策略
  4. 询问用户与调用模型有不同的信息来源
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑