业州愚公撰写的文章《AI 工具实操与提示词》工具篇中提到,当AI连上MCP服务器后,虽然可以执行任务,但仍像新员工一样,缺乏对公司数据和处理流程的了解。为了让AI从新手变成老手,需要提供它「该看的数据」和「现成的问法」,让它了解公司的规矩和流程。这意味着需要补齐资源和提示词,让AI可以更好地执行任务和了解公司的需求。这篇文章是菜鸟之友系列的一部分,旨在帮助读者了解如何实操AI工具和提示词。
菜鸟之友系列:《AI 工具实操与提示词》・工具篇作者:业州愚公
上一篇我们花四十分钟写了一个最小的 MCP 服务器,让 AI 能自己伸手去算那张每周一早上的出货表。接上之后你大概会发现一件有点泄气的事:AI 是会动手了,但它每次都像个第一天上班的新人——它不知道你们公司的报表存在哪、长什么样,更不知道处理这张表「正确的姿势」是什么。于是你每次都得把背景、格式、注意事项从头交代一遍,交代得比叫新人还仔细。
这不怪 AI,也不怪上次写的服务器。我们上次只发了门卡——tools,让它能推门进去做事。但办公室里的数据夹(它该看的数据)和墙上贴的操作手册(老手们总结出来的问法),一样都还没给它。
MCP 的设计里,除了 tools,其实还有两样经常被新手忽略的家当:resources 和 prompts。今天这篇就把这两样补齐。补完之后你会发现,前面几篇折腾下来的那个小服务器,才算真正长成一个「懂自家规矩」的同事。
先上一张对照表,把三样东西的分工说清楚:
| 能力 | 谁来发起 | 大概像什么 | 举例 |
|---|---|---|---|
| tools | AI 看完描述后自己决定呼叫 | 一双能动的手 | 查汇率、写数据库、跑一段计算 |
| resources | 应用程序或 AI 按需读取 | 一个带索引的唯读文件架 | 本机 CSV、设置档、查询结果 |
| prompts | 用户主动选用 | 一本现成问法手册 | 「部门周报健检」这类可填参数的模板 |
一句话总结分工:tools 负责「做事」,resources 负责「把该看的数据备好」,prompts 负责「把老手的问法标准化」。三者的发起方向也不一样,这一点最容易被搞混——tools 是 AI 主动伸手,resources 是被动等人来拿,prompts 则完全由你点选。方向搞反了,配置怎么调都会觉得「它怎么不按我想的来」。
resources 的核心概念简单到不像技术设计:你的服务器把一些数据暴露出去,每一份数据用一个 URI(统一资源识别码)标识,比如 file:///reports/sales.csv 指向一个文件,db://customers/vip 指向一类查询结果。AI 或客户端可以先列出服务器上有哪些资源,再按需要读取某一份。
它有三个关键特性,新手务必记牢:
第一,唯读。 resources 只提供数据,不负责修改任何东西。要让 AI 改数据、写文件,那是 tools 的活。把「看」和「动」分开,是 MCP 刻意的设计——权限边界清晰,你才敢放心把服务器接上。
第二,带说明。 每份资源都有名称和描述栏位,AI 就靠这两行字判断「这份数据跟我手上的活有没有关系」。描述写得含糊,它要么不去拿,要么拿错。
第三,可以有变动通知。 数据更新时,服务器可以通知客户端「清单变了」,支持订阅某份资源的更新(这部分机制较新,细节以官方最新版本为准)。新手先不用管订阅,知道「数据可以常驻、随取随用」就够了。
如果你跟着上一篇把最小服务器跑通了,那加资源只要再写一个函式、换一个装饰器的事。下面这段 Python 直接可以接在上次的代码后面:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("weekly-tools")
@mcp.resource("reports://sales-weekly")
def get_sales_weekly() -> str:
with open(REPORTS_PATH, "r", encoding="utf-8") as f:
return f.read()
@mcp.prompt()
def weekly_review(dept: str) -> str:
return (
f"请根据 reports://sales-weekly 里的出货数据,"
f"帮我检查 {dept} 部门本周的异常订单,"
f"先列清单再给结论,金额保留两位小数。"
)
就这么几行。第一个函式把本机的出货 CSV 暴露成一个名为 reports://sales-weekly 的资源;第二个函式定义了一个叫「部门周报健检」的提示词模板,里面有一个可以填的参数 dept。装饰器一换,同一个服务器就多了两种能力。这也是 MCP 对新手最友善的地方:tools、resources、prompts 的写法是同构的,会一个就会三个。
有一个习惯建议:函式里别写死太多路径,像范例那样集中放在文件开头,以后搬机器、换目录只改一处。
如果说 tools 和 resources 是给 AI 准备的,prompts 更像是给「人」准备的。它把一段你调好的提示词,连同可填的参数,做成一个能从选单里点出来的模板。在很多客户端里,它会以斜线命令或快捷选单的形式出现——输入一个斜线,就能看到这台服务器提供了哪些现成问法(具体入口样式以官方最新版本为准)。
它跟 tools 的最大不同在发起方:tools 是 AI 看了描述后自己决定用不用;prompts 是你主动点选,AI 收到的是一段已经写好的、带着完整上下文的指令。这个区别在实际使用里非常有价值,因为它解决的是一个更普遍的痛点——同一个团队里,十个人问 AI 同一件事,能问出十种品质。
把老手的问法做成 prompts,好处有三层:新人不用背问法,点选填空就行;老手的经验被固化在模板里,不会随人流失;你还可以在模板里预埋要求,比如「先列清单再下结论」「金额保留两位小数」,把团队的规矩写进 AI 的工作流程。
把 tools、resources、prompts 放回上一篇那个出货表的场景,整条流程就变成了这样:
| 步骤 | 谁在做 | 用到什么 | 发生什么 |
|---|---|---|---|
| 1 | 你 | prompts | 点选「部门周报健检」,填入「华东区」 |
| 2 | 客户端 | — | 把模板展开成完整指令,连同参数发给 AI |
| 3 | AI | resources | 按指令去读 reports://sales-weekly 的本周出货数据 |
| 4 | AI | tools | 遇到要按折扣率重算的金额,呼叫上篇写的计算工具 |
| 5 | AI | — | 汇整出一份带清单、带结论的部门周报 |
对比一下:上一篇的流程是「你交代一半,AI 摸索一半」;现在是「你点一下菜单,剩下的路它都认得」。同样的服务器,体验完全不同——差别不在 AI 变聪明了,而是你把该准备的东西备齐了。
别把整个硬盘当文件架。 每读一份资源都会占用 AI 的上下文窗口(context window),把几十万字的数据一股脑挂上去,模型反而会变糊涂,重点还被冲淡。资源要精选,一次活只该看的那几份。
prompts 不是魔法。 模板本身写得含糊,选出来照样白搭。我的习惯是先把问法在对话框里手打几轮、调到满意,再沉淀成模板——顺序别反。
名称和描述要认真写。 AI 选 tools、判断 resources 相不相关,都靠这两行字;用户在选单里挑 prompts,看到的同样是它们。写「数据1」「模板A」这种名字,等于什么都没写。
资源路径写成配置。 硬盘路径、档名散落在函式各处,换台电脑就是一场排查。集中管理,改一处生效。
回头串一下这条线:MCP 入门篇把外挂装上,流水线篇把几个服务器串起来,自写服务器篇让 AI 会做事,今天补上 resources 和 prompts,让它有数据可看、有规矩可循。到这里,一个为自家工作量身打造的 MCP 服务器,骨架就全了。
不过,骨架齐了还差最后一步:把这把钥匙真正交出去之前,你得知道哪些权限能开、哪些要审批、出了问题怎么查。下一篇就聊这个——权限、审批与除错入门,顺带介绍官方的排查工具怎么用。
工具推荐随身机器人(新用户免费试用 7 天)
照着做遇到卡壳的地方——环境变数不生效、装饰器报错、资源读不到——不用自己闷头查半天。随身机器人可以直接帮你看报错、给排查步骤,新用户免费试用 7 天,等于先请一位随叫随到的技术同事。
下一篇预告: 钥匙不能乱发——MCP 的权限、审批与除错入门,包括用官方的 MCP Inspector 排查服务器问题的实操步骤。
业州愚公 | SY 视野(sylogs.com)原创内容,转载请注明出处。
编辑评论 / Editor's Note
这种情况下,AI系统需要额外的资源和指导才能发挥其全部潜能。通过提供相关数据和适当的问法,AI可以从新手变成老手,更加有效地完成任务。这样的补充可以帮助AI系统更好地理解和应对复杂的问题和任务。