90%开发者踩坑:MCP Resource注册≠模型能读取资源
文章目录前言一、先分清两个容易搞混的东西Tool 和 Resource1.1 两者底层逻辑完全反过来二、只注册Resource模型绝对看不见的根本原因2.1 registerResource只是“贴告示”不是“送货上门”2.2 为什么设计成不自动全量灌入四个现实痛点三、完整四步流程资源才能真正进到模型眼里3.1 第一步MCP Server完成资源注册3.2 第二步Client调用listResources发现全部资源3.3 第三步readResource读取资源真实文本3.4 第四步塞入SystemMessage模型终于能看见四、Resource不用ToolMessage底层逻辑区分清楚五、Resource和RAG别搞混适用场景完全不同六、收尾必做关闭MCP Client释放进程七、全文核心总结一次记牢不踩坑P.S. 无意间发现了一个巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看传送门https://blog.csdn.net/HHX_01前言做AI Agent集成MCP的时候我前几天熬到半夜三点差点把键盘砸了。我吭哧吭哧写完registerResource代码控制台打印注册成功日志干干净净一点报错没有。转头问模型文档内容模型两眼一抹黑啥都不知道。当时我内心OS我都把资料挂服务器上了模型是瞎了还是装失忆合着我写的代码全是空气后面翻透协议、搭最小Demo跑通全链路才搞懂核心误区注册资源 ≠ 模型能读到资源。今天掰开揉碎讲清楚看完再也不用通宵debug。一、先分清两个容易搞混的东西Tool 和 Resource1.1 两者底层逻辑完全反过来很多人刚上手直接把他俩当成一套东西踩坑第一步就在这。Tool是模型主动伸手要东西Resource是应用硬塞给模型看一个主动一个被动跟外卖和快递似的。Tool像外卖模型饿了主动下单Runtime接单做完把餐送回去Resource像快递App提前把包裹塞模型手里模型不用开口就能直接看。能力类型谁掌控使用时机怎么进模型上下文Tool工具大模型自己判断需不需要调用执行完成后包装成ToolMessage传给模型Resource资源上层Host应用全权说了算应用读取内容后手动塞进SystemMessage举个最简单的例子同一个MCP服务同时挂了query_user查询工具、docs://guide文档资源。用户说“查001号用户”模型自己发起Tool调用用户问“使用指南写了啥”模型能回答全靠应用提前把文档塞进去。二、只注册Resource模型绝对看不见的根本原因2.1 registerResource只是“贴告示”不是“送货上门”你在Server调用注册方法本质就是在服务器门口贴一张告示我这有一份docs://guide文档谁想读随时来拿。贴告示不代表把文档打印好塞模型手里啊总不能小区门口贴个商品广告快递自动把货送每家每户吧那不得把小区住户全淹了。这里有个关键逻辑模型能读取的内容只来自当前对话messages、绑定Tools。服务器注册资源不会自动追加进对话消息。2.2 为什么设计成不自动全量灌入四个现实痛点别吐槽协议设计反人类自动全量塞资源才是灾难。Token直接爆炸上百份文档一次性丢进去上下文直接拉满计费翻倍还降推理速度无关内容干扰判断用户只问用户查询你把全套部署文档全塞进去模型容易跑偏答非所问权限管控失效不同用户能访问的资源不一样自动加载会泄露私密文档场景匹配混乱部分资源只在特定任务生效全部常驻上下文完全没必要所以资源加载权限必须交给上层应用Host自己把控。三、完整四步流程资源才能真正进到模型眼里从Server注册到模型读取完整链路一步都不能少缺一步直接失效。3.1 第一步MCP Server完成资源注册用registerResource注册四个核心参数缺一不可资源名称、唯一URI、文件类型、返回内容的回调函数。很多人把URI当成网页链接还跑去浏览器输入打不开然后疯狂怀疑代码出错。这里的URI就是内部专属身份证docs://guide、file://xxx这种格式只给MCP客户端识别用跟互联网网址半毛钱关系没有。执行完这段代码仅完成“对外声明存在这份资源”模型这边毫无感知。3.2 第二步Client调用listResources发现全部资源Host启动MultiServerMCPClient连接本地MCP子进程调用listResources拉取所有服务的资源清单。这一步相当于你扫小区公告栏把所有告示全部看一遍知道现在有哪些资源可以读取。光看清单没用清单只有名字和地址没有正文模型还是啥都看不到。代码里需要循环遍历所有服务、服务下全部资源记录对应的serverName和uri这是后面读取的两个必填参数。3.3 第三步readResource读取资源真实文本拿着服务名资源URI调用读取接口才能拿到文档正文。有人疑惑为啥不能只传URI一台客户端能同时连三五台MCP服务不同服务完全可能出现一模一样的URI只传URI系统分不清去哪取文件直接迷路报错。读取返回的内容可能有多段文本需要循环拼接整合完整资源内容。到这一步应用才真正拿到文档文字。3.4 第四步塞入SystemMessage模型终于能看见把拼接好的资源文本封装成系统提示词和用户提问HumanMessage一起组成对话数组传给大模型。这一步就是临门一脚前面三步全是铺垫。前面忙活半天最后忘了塞SystemMessage等于快递到楼下没上楼模型照样收不到。完整链路简化版registerResource → listResources发现 → readResource读正文 → 整理文本 → SystemMessage注入 → LLM读取内容四、Resource不用ToolMessage底层逻辑区分清楚之前有同事问我读取资源为啥不用ToolMessage包装调工具却必须用我给他打了个比方一下就懂了。ToolMessage是模型主动下单后的回执必须带tool_call_id证明对应哪一次工具调用Resource是提前备好的说明书对话一开始就放在系统提示里模型没发起任何调用自然不需要回执。两种链路可以同时存在于同一个MCP服务Resource链路Host主动读取 → SystemMessage → 模型直接读取作答Tool链路模型发起调用 → Runtime执行逻辑 → ToolMessage回传结果给模型五、Resource和RAG别搞混适用场景完全不同现在做Agent的朋友一想到给模型加外部知识不是RAG就是MCP Resource经常纠结二选一其实他俩根本不冲突是互补关系。好比你随身带一本薄薄的操作手册Resource同时家里有一整柜藏书RAG向量库薄手册随时揣兜里厚藏书需要的时候再翻找。使用场景优先选择方案简短、固定、每次对话都需要的说明文档MCP Resource直接读取注入上下文海量文档需要根据用户问题检索匹配片段RAG向量检索需要执行查询、读写文件、调用外部接口MCP Tool工具调用Resource不是RAG替代品两者解决不同规模、不同加载时机的上下文需求项目里经常搭配使用。六、收尾必做关闭MCP Client释放进程之前写Demo忘记关客户端脚本跑完控制台一直挂着进程后台疯狂占内存我找了半小时才发现是MCP子进程没销毁。Node子进程启动后会持续占用stdio通信通道不手动关闭脚本永远不会正常退出后台堆一堆僵尸进程。标准稳妥写法把关闭逻辑放进finally代码块不管执行成功还是报错都会自动断开连接、销毁子进程。七、全文核心总结一次记牢不踩坑registerResource仅完成资源声明不会自动注入模型上下文资源可见完整四步listResources发现 → readResource读取 → 整理文本 → 写入SystemMessage三层权责划分清晰Server负责提供资源、Client负责读取资源、Host负责控制上下文注入、LLM负责解析内容别再幻想服务器注册完资源模型自动全知全能。AI应用的上下文控制权永远握在开发自己手里偷懒省略步骤就要通宵改bug。P.S. 无意间发现了一个巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看传送门https://blog.csdn.net/HHX_01

相关新闻

Clarity源码深度解析:BitStream与字段读取器的实现原理

Clarity源码深度解析:BitStream与字段读取器的实现原理

Clarity源码深度解析:BitStream与字段读取器的实现原理 【免费下载链接】clarity Comically fast Dota 2, CSGO, CS2 and Deadlock replay parser written in Java. 项目地址: https://gitcode.com/gh_mirrors/clari/clarity Clarity是一款用Java编写的高性能…

2026/8/28 5:24:44 阅读更多 →
【大白话说Java面试题 第184题】【07_Redis篇】第20题:Redis 底层使用的什么协议?

【大白话说Java面试题 第184题】【07_Redis篇】第20题:Redis 底层使用的什么协议?

📌 PDF:大白话说Java面试题 — 07_Redis篇 第20题:Redis 底层使用的什么协议? 📚 回答: 核心考点: Redis 底层通信协议 RESP(Redis Serialization Protocol)是面试中看…

2026/8/28 13:08:26 阅读更多 →
frab 会议系统 API 完全指南:扩展与集成第三方服务

frab 会议系统 API 完全指南:扩展与集成第三方服务

frab 会议系统 API 完全指南:扩展与集成第三方服务 【免费下载链接】frab conference management system 项目地址: https://gitcode.com/gh_mirrors/fr/frab frab 是一款功能强大的会议管理系统(conference management system)&#…

2026/8/25 20:24:30 阅读更多 →

最新新闻

服务升级前先做哪些确认

服务升级前先做哪些确认

服务升级前先做哪些确认跨 JDK 升级不是换掉基础镜像、看到服务能启动就结束。JDK、GC、框架、字节码工具和容器限制会一起变化,遗漏任何一项都可能在真实流量下才露出问题。升级前应能回答:新进程实际使用了多少资源,依赖是否支持目标版本&a…

2026/8/29 13:10:08 阅读更多 →
Oracle Developer Tools for VS Code:一站式数据库开发与AI集成指南

Oracle Developer Tools for VS Code:一站式数据库开发与AI集成指南

1. Oracle Developer Tools for VS Code 初探 第一次听说Oracle Developer Tools for VS Code这个插件时,我正在为一个紧急的数据库项目焦头烂额。当时我需要频繁地在Oracle数据库和开发环境之间切换,效率低得令人抓狂。直到发现了这个神器,我…

2026/8/29 13:10:08 阅读更多 →
Vue3使用触摸滑动插件(Swiper)

Vue3使用触摸滑动插件(Swiper)

Vue2使用触摸滑动插件(Swiper) 参考文档: Swiper官方 Swiper API Swiper Vue Swiper Demos 本文使用版本:Swiper12.0.3 安装插件:pnpm add swiper 本文基于Swiper插件进行封装,主要实现两种形式的轮播…

2026/8/29 13:10:08 阅读更多 →
Vue3评分(Rate)

Vue3评分(Rate)

可自定义设置以下属性: 是否允许再次点击后清除(allowClear),类型:boolean,默认 true 是否允许半选(allowHalf),类型:boolean,默认 false star…

2026/8/29 13:10:08 阅读更多 →
Vue3二维码(QRCode)

Vue3二维码(QRCode)

可自定义设置以下属性: 扫描后的文本或地址(value),类型:string,默认 undefined 二维码的渲染类型(type),类型:svg | canvas | image,默认 svg …

2026/8/29 13:10:08 阅读更多 →
Spring Boot宠物领养系统毕业设计全攻略:从数据库到答辩一网打尽

Spring Boot宠物领养系统毕业设计全攻略:从数据库到答辩一网打尽

简介:宠物领养作为公益热点,涉及完整业务闭环。从通用软件工程视角,任何管理类系统都离不开用户角色、数据建模与状态流转设计。以Spring Boot为核心的Web开发,通过分层架构与ORM框架,能快速实现业务基础。基于MyBatis…

2026/8/29 13:09:07 阅读更多 →

日新闻

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

2026/8/29 0:00:24 阅读更多 →
【JavaScript】内存管理-垃圾回收机制-内存泄露

【JavaScript】内存管理-垃圾回收机制-内存泄露

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

2026/8/29 0:00:24 阅读更多 →
Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

2026/8/29 0:00:24 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 11:23:26 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 23:05:07 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/28 19:47:53 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/29 4:34:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/28 17:43:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/29 2:05:18 阅读更多 →