MCP Sampling 完整深度详解
一、核心定义与本质1. 什么是 MCP Sampling采样Sampling 是 MCP 独有的反向 LLM 调用能力 MCP Server 在执行逻辑Tool/Resource/Prompt中途主动向 MCP ClientVSCode Copilot / Claude Desktop / Cursor发起sampling/createMessage请求借用客户端自带的大模型生成文本、图片、音频服务端无需持有任何 LLM API Key、不用对接 OpenAI/Gemini 接口Model Cont...。2. 核心设计价值解决传统开发痛点密钥统一托管在客户端用户在 VSCode/Claude 配置好 Gemini/Claude API所有接入的 MCP Server 共用这套模型权限服务端不用管理密钥、支付费用。人类在环安全机制Human-in-the-loop每次服务端发起采样请求客户端弹窗让用户预览 / 编辑提示词、允许 / 拒绝生成杜绝恶意服务端私自调用模型消耗额度、泄露上下文modelconte...。嵌套智能 Agent 能力Server 执行 Tool比如你的createUser创建用户中途可中途调用 LLM 做分类、摘要、翻译、推理实现工具内嵌套 AI 思考构建复杂自主智能体。统一多模态标准支持文本、图片、音频输入输出协议标准化跨客户端通用。3. 关键数据流方向反向区别于 ToolTool客户端 AI 主动调用服务端函数Client → ServerSampling服务端主动请求客户端 AI 生成内容Server → Client二、完整标准执行时序5 步完整链路握手声明能力Client 启动连接时在capabilities声明是否支持采样Server 仅当客户端开启sampling能力时才能发送生成请求。json// Client 握手能力声明 { capabilities: { sampling: { tools: true // 支持采样内嵌套工具调用 } } }服务端发起采样请求Server 在 Tool/Resource 回调内部发送 JSON-RPCsampling/createMessage携带对话历史、模型偏好、最大 token 等参数。客户端人机校验VSCode/Claude 弹出弹窗展示完整提示词用户可拒绝本次采样直接返回报错给服务端修改 messages 文本再提交给模型客户端执行 LLM 生成客户端使用自身配置的模型Gemini/Claude执行推理支持工具调用、多轮循环。结果回传给 MCP 服务端客户端将模型输出的完整assistant消息、停止原因、使用的模型名称原路返回给服务端服务端继续完成原有业务逻辑。三、采样请求完整字段规范1. 请求参数sampling/createMessage paramstypescript运行interface SamplingCreateRequest { // 必传多轮对话上下文user/assistant 消息数组支持文本/图片/音频 messages: Array{ role: user | assistant; content: TextContent | ImageContent; }; // 模型偏好给客户端参考选模型 modelPreferences?: { hints?: [{ name: string }]; // 推荐模型名称如 [gemini-1.5-flash] costPriority: number; // 0~1成本最低权重 speedPriority: number; // 0~1速度优先权重 intelligencePriority: number; // 0~1推理能力权重 }; systemPrompt?: string; // 全局系统角色提示词 maxTokens?: number; // 最大生成token上限 temperature?: number; // 随机性 0~1 stopSequences?: string[]; // 停止符 // 进阶采样过程允许LLM调用MCP工具 tools?: ToolDefinition[]; toolChoice?: auto | required | none; }2. 客户端返回结果结构typescript运行interface SamplingCreateResult { model: string; // 实际使用的模型名称 stopReason: endTurn | toolUse | maxToken | stopSequence; content: TextContent | ImageContent; role: assistant; // 固定assistant角色 }3. stopReason 停止原因枚举endTurn模型正常生成结束maxToken到达 maxTokens 截断stopSequence命中停止符toolUse模型需要调用工具服务端需处理工具结果后再次发起采样四、TS MCP 可运行实战代码适配你的用户管理服务场景创建用户时服务端调用客户端 LLM 自动生成用户简介1. 服务端能力声明初始化 Server 时开启采样支持检测typescript运行import { Server } from modelcontextprotocol/sdk/server/index.js; import { StdioServerTransport } from modelcontextprotocol/sdk/server/stdio.js; const server new Server( { name: user-mcp-server, version: 1.0.0 }, { capabilities: {} } // 客户端能力在握手后动态读取 ); // 存储客户端是否支持采样 let clientSupportSampling false; server.oninitialized(() { const clientCap server.getClientCapabilities(); clientSupportSampling !!clientCap.sampling; });2. 在 Tool createUser 内部调用 Sampling核心示例typescript运行// 注册创建用户工具 server.tool( createUser, { name: createUser, description: 新建用户并AI自动生成个人简介, inputSchema: { type: object, required: [name, email, address, phone], properties: { name: { type: string }, email: { type: string }, address: { type: string }, phone: { type: string } } } }, async ({ name, email, address, phone }) { // 1. 先判断客户端是否支持采样不支持则跳过AI生成 let bio 暂无个人简介; if (clientSupportSampling) { try { // 发起采样请求借用客户端LLM生成简介 const samplingResult await server.createMessage({ maxTokens: 128, temperature: 0.6, systemPrompt: 你是用户资料编辑助手根据姓名、地址、联系方式生成简短友好个人简介控制在80字以内, messages: [ { role: user, content: { type: text, text: 姓名${name}联系邮箱${email}居住地址${address}联系电话${phone} } } ], modelPreferences: { intelligencePriority: 0.8, speedPriority: 0.3, costPriority: 0.2 } }); // 提取AI生成文本 bio samplingResult.content.type text ? samplingResult.content.text : bio; } catch (err) { // 用户拒绝采样/客户端报错降级默认简介 bio 简介生成失败暂无资料; } } // 2. 写入users.json你已适配Node20.9 assert语法 const jsonModule await import(./data/users.json, { assert: { type: json } }); const users jsonModule.default; const id users.length 1; users.push({ id, name, email, address, phone, bio }); await fs.writeFile(./src/data/users.json, JSON.stringify(users, null, 2), utf-8); return { content: [{ type: text, text: 创建成功用户ID${id}AI简介${bio} }] }; } );3. 高级采样嵌套 Tool 调用Sampling with Tools如果希望模型生成过程中反过来调用服务端工具在createMessage参数追加tools数组typescript运行await server.createMessage({ messages: [...], tools: [ { name: getAllUsers, description: 读取全部用户数据, inputSchema: { type: object } } ], toolChoice: auto // 模型自主判断是否调用工具 });当返回stopReason: toolUse时服务端解析工具调用、执行函数、拿到结果后再次调用 createMessage把工具结果传给模型继续生成形成完整 Agent 循环。五、四大 MCP 核心原语横向对比Sampling / Tool / Resource / Prompt表格维度Sampling采样Tool工具Resource资源Prompt提示模板数据流方向Server → Client服务端请求客户端 AIClient → ServerAI 主动调用服务端Server → Client服务端只读数据Server → Client服务端下发提示模板触发方服务端代码自动触发嵌套在 Tool/Resource 内客户端 LLM 自主触发AI / 用户手动读取用户手动斜杠命令触发模型归属使用客户端自带 LLM服务端无密钥不消耗模型仅执行本地逻辑纯只读数据无模型调用使用客户端 LLM但由用户手动启动核心用途服务端中途需要 AI 推理、摘要、生成、分类构建嵌套智能体增删改查、外部操作、有副作用业务逻辑静态 / 动态上下文数据源users.json、文档封装标准化工作流提示词代码审查、数据分析人机校验强制弹窗预览用户可拒绝生成仅首次授权后台静默执行无校验直接读取用户主动点击启用无拦截弹窗典型场景创建用户自动生成简介、数据自动分类、文本翻译、内容总结createUser、文件写入、数据库查询、API 请求users://all 用户列表、配置文件、产品文档/code-review一键代码审查模板关键边界区分想让AI 主动操作你的本地文件 / 数据库→ Tool想给 AI 提供只读参考数据→ Resource想给用户提供一键复用的提问模板→ Prompt想在服务端业务执行中途临时调用 AI 做生成 / 推理→ Sampling六、安全与最佳实践1. 安全强制规范必须捕获采样异常用户拒绝、客户端不支持、模型超限都会抛出错误必须 try/catch 做降级处理避免 MCP 进程抛出-32603崩溃敏感上下文过滤采样请求不要携带隐私密钥、手机号明文等高危数据客户端强制人机校验合规客户端VSCode Copilot、Cursor都会弹窗展示完整 prompt无弹窗的客户端存在安全风险。2. 开发最佳实践先检测clientCapabilities.sampling再发起请求兼容不支持采样的旧客户端配置合理maxTokens与temperature控制生成成本与随机性长业务逻辑拆分复杂 Agent 循环工具调用 多次采样分步处理避免单次超大请求降级兜底采样失败时提供静态默认值保证 Tool 业务流程不中断区分modelPreferences权重批量摘要优先 speed深度推理优先 intelligence。3. 常见限制与坑Claude Desktop 早期版本不支持 SamplingVSCode GitHub Copilot、Cursor 完整支持采样无法脱离客户端模型离线无网络时采样请求会直接报错采样内嵌套工具会增加多轮往返复杂循环会提升延迟不要把大量 Resource 超大文本塞进采样 messages会快速耗尽客户端上下文窗口。七、通俗类比理解把 MCP 整套体系比作装修Resource建材仓库只读原材料用户 / AI 随时查看Tool水电工 / 木工AI 主动叫来干活修改房屋状态Prompt标准化装修方案模板业主一键选用整套设计思路Sampling施工队中途需要设计师出效果图 → 施工队Server向业主的设计软件Client LLM请求画图不用施工队自己买设计软件账号业主审批效果图后再继续施工。

相关新闻

Xournal++ 专业手写笔记软件:5大核心功能深度解析与实战配置指南

Xournal++ 专业手写笔记软件:5大核心功能深度解析与实战配置指南

Xournal 专业手写笔记软件:5大核心功能深度解析与实战配置指南 【免费下载链接】xournalpp Xournal is a handwriting notetaking software with PDF annotation support. Written in C with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and …

2026/7/21 10:58:02阅读更多 →
企业特权访问管理(PAM)的核心优势与实施策略

企业特权访问管理(PAM)的核心优势与实施策略

1. 企业特权访问管理的核心痛点 最近三年间,我参与了47家企业级堡垒机的选型评估工作,发现传统跳板机方案已无法满足现代企业的安全需求。某次为金融客户做渗透测试时,我们仅用2小时就通过一个被遗忘的运维账号横向突破了整个内网——这个账号…

2026/7/21 10:58:02阅读更多 →
深入解析eHRPWM动作限定器:从事件驱动到PWM波形精准生成

深入解析eHRPWM动作限定器:从事件驱动到PWM波形精准生成

1. 从事件到波形:eHRPWM动作限定器(AQ)模块的核心逻辑 在电力电子和电机驱动的世界里,PWM(脉冲宽度调制)信号就像是给功率开关下达的精确指令。我们通常知道,改变PWM的占空比就能调节输出电压或…

2026/7/21 10:58:02阅读更多 →
腾讯通与勤哲Excel服务器集成实践

腾讯通与勤哲Excel服务器集成实践

1. 项目背景与需求解析腾讯通作为企业级即时通讯平台,与勤哲Excel服务器的集成需求主要来自两类典型场景:一是需要将审批流中的业务数据实时推送至通讯平台,二是需要将通讯平台中的指令转化为Excel服务器的自动化操作。这种集成打破了传统办公…

2026/7/22 2:16:09阅读更多 →
3步解锁小爱音箱无限音乐:打造你的私人智能音乐中心

3步解锁小爱音箱无限音乐:打造你的私人智能音乐中心

3步解锁小爱音箱无限音乐:打造你的私人智能音乐中心 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 还在为小爱音箱的音乐版权限制而烦恼吗?…

2026/7/22 2:16:09阅读更多 →
城通网盘下载速度慢?3分钟学会免费直连解析技巧

城通网盘下载速度慢?3分钟学会免费直连解析技巧

城通网盘下载速度慢?3分钟学会免费直连解析技巧 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘几十KB的龟速下载而烦恼吗?每次下载文件都要忍受广告弹窗和漫长的…

2026/7/22 2:16:09阅读更多 →
AI项目测试实战详解:以开源项目ChatGLM3为例

AI项目测试实战详解:以开源项目ChatGLM3为例

1. 引言:AI项目测试的挑战与机遇 随着大语言模型(LLM)和生成式AI技术的爆发式增长,AI项目正从实验室走向规模化应用。与传统的软件项目相比,AI项目在开发、测试和运维层面都带来了全新的挑战。传统的软件测试方法论,如功能测试、性能测试,在面对一个“非确定性”的AI系…

2026/7/22 2:16:09阅读更多 →
Kafka 0.8.2.2 Java客户端开发指南与实战

Kafka 0.8.2.2 Java客户端开发指南与实战

1. Kafka 0.8.2.2版本Java客户端环境搭建在开始编写Kafka Java客户端代码之前,我们需要先搭建好开发环境。对于kafka_2.11-0.8.2.2这个特定版本,环境配置有些特殊注意事项。1.1 Maven依赖配置首先创建一个Maven项目,在pom.xml中添加以下依赖&…

2026/7/22 2:16:09阅读更多 →
20个提升效率与学习的优质网站资源推荐

20个提升效率与学习的优质网站资源推荐

1. 优质网站资源推荐指南作为一个长期混迹互联网的老网民,我收藏夹里积攒了不少实用又有趣的网站。这些网站要么能提升工作效率,要么能开拓视野,甚至有些纯粹就是为了好玩。今天就把这些压箱底的宝贝分享给大家,希望能帮助到正在寻…

2026/7/22 2:14:09阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →