核心客户端功能
除了使用服务器提供的上下文外,客户端还可以向服务器提供几种功能。这些客户端功能允许服务器作者构建更丰富的交互体验。例如,客户端可以通过“引出”(elicitations)允许 MCP 服务器向用户请求额外信息。客户端可以提供以下能力:采样(Sampling)
采样允许服务器通过客户端请求语言模型补全,从而在保持安全性和用户控制的前提下实现代理行为。概述
采样使服务器能够在不直接集成或支付 AI 模型费用的情况下执行依赖 AI 的任务。相反,服务器可以请求已经具有 AI 模型访问权限的客户端代表它们处理这些任务。这种方法将用户权限和安全措施的控制权完全交给了客户端。由于采样请求发生在其他操作(例如分析数据的工具)的上下文中,并作为独立的模型调用进行处理,因此它们在不同上下文之间保持了清晰的边界,从而更高效地利用上下文窗口。 采样流程: 该流程通过多个人工审核点确保安全性。用户可以在请求返回服务器之前审核并修改初始请求和生成的响应。 请求参数示例:示例:航班分析工具
考虑一个旅行预订服务器,它有一个名为findBestFlight 的工具,该工具使用采样来分析可用航班并推荐最佳选择。当用户询问“帮我预订下个月飞往巴塞罗那的最佳航班”时,该工具需要 AI 协助来评估复杂的权衡。
该工具查询航空公司 API 并收集 47 个航班选项。然后它请求 AI 协助来分析这些选项:“分析这些航班选项并推荐最佳选择:[47 个航班包含价格、时间、航空公司和经停] 用户偏好:上午出发,最多 1 个经停。”
客户端会向用户询问:“允许采样请求?”获得批准后,AI 会评估权衡——比如便宜的夜间航班与方便的上午出发。该工具使用此分析来展示前三名推荐。
用户交互模型
采样设计以人工参与控制为核心原则。用户通过以下机制保持监督: 审批控制:每个采样请求都需要用户的明确同意。客户端显示服务器想要分析的内容及原因。用户可以批准、拒绝或修改请求。 透明功能:客户端显示确切的提示词、模型选择和 token 限制。用户在响应返回服务器之前可以审查 AI 的回复。 配置选项:用户可以设置模型偏好,为受信任的操作配置自动批准,或要求对所有内容进行审批。客户端可能提供选项以屏蔽敏感信息。用户通过includeContext 参数决定在采样请求中可以包含多少对话上下文。
隔离性:默认情况下,采样请求与主对话上下文隔离。服务器无法访问用户对话。
安全考虑:客户端和服务器都必须在采样过程中妥善处理敏感数据。客户端应实施速率限制并验证所有消息内容。人工参与的设计确保了服务器发起的 AI 交互不会在未经用户明确同意的情况下危及安全或访问敏感数据。
根目录(Roots)
根目录定义了服务器操作的文件系统边界,允许客户端指定服务器应关注的目录。概述
根目录是客户端向服务器传达文件系统访问边界的机制。它们由指示服务器可以操作的目录的文件 URI 组成,帮助服务器理解可用文件和文件夹的范围。与给予服务器无限制的文件系统访问权限不同,根目录引导它们到相关的工作目录,同时保持安全边界。 根目录结构:file:// URI 方案。它们帮助服务器理解项目边界、工作区组织和可访问目录。随着用户处理不同项目或文件夹,根目录列表可以动态更新,服务器通过 roots/list_changed 接收边界变化的通知。
需要注意的是,虽然根目录为服务器提供了操作指导,但客户端始终完全控制文件访问。根目录只是传达预期的边界——实际的文件访问始终由客户端的安全策略控制。
示例:旅行规划工作区
旅行代理在处理多个客户行程时,可以从根目录中受益,以组织文件系统访问。考虑一个包含不同目录来管理旅行规划各个方面的工作区。 客户端为旅行规划服务器提供文件系统根目录:file:///Users/agent/travel-planning- 包含所有旅行文件的主工作区file:///Users/agent/travel-templates- 可重用的行程模板和资源file:///Users/agent/client-documents- 客户护照和旅行文件
file:///Users/agent/archive/2023-trips,客户端将通过 roots/list_changed 更新根目录列表。
用户交互模型
根目录通常由宿主应用程序根据用户操作自动管理,尽管有些应用程序可能提供手动根目录管理: 自动根目录检测:当用户打开文件夹时,客户端会自动将其作为根目录暴露。打开一个旅行工作区后,服务器即可访问该目录内的行程和文档。 手动根目录配置:高级用户可以通过配置手动指定根目录。例如,添加/travel-templates 以访问可重用资源,同时排除包含财务记录的目录。