MCP 三原语怎么划边界终裁:Tools做事、Resources 供上下文、Prompts 定工作流的能用/限场景/不能用验收

第一次写 MCP server 的人,十有八九会把所有能力都注册成 Tool。读文档是 Tool,查配置是 Tool,连「帮我按公司格式写周报」也做成一个 Tool。跑起来没问题,过两个月回头看,权限审计时谁也说不清哪个 Tool 会改数据、哪个只是读。

Trustscrin CloudLab 有一期不到四分钟的视频专讲这件事,标题是 MCP Tools vs Resources vs Prompts。视频给的分界只有一句,Tools 做事,Resources 供上下文,Prompts 定工作流。Tools 面向真实动作,例子是查库、开单、重启服务、发消息,应该窄、可审、意图清楚。Resources 在模型回答之前提供只读上下文。Prompts 封装可以反复使用的流程。视频还提醒,初学者常把三者混在一起,做成一个「admin everything」式的巨型能力球,爆炸半径大,也难以信任。下文对视频的转述以它的字幕为准,没有引用任何测评分数。

这篇只讨论一个对象,就是 MCP 协议里这三种原语各自该装什么。判断依据是意图,最后落到能用、限场景、不能用三档。

图注 左侧为三原语按意图的能用档,右侧为限场景与不能用的错放样本。

四个判断维度

有没有真实副作用。 调用之后外部世界会不会变,比如写库、发消息、开工单、重启进程。有副作用的能力只能是 Tool,并且要能单独审批、单独记录。

是不是只需要只读上下文。 模型回答前需要看一份产品文档、一段配置、一张表的当前快照,这类内容不改变任何东西,应该做成 Resource,由客户端决定何时加载进上下文。

是不是可复用的工作流模板。 事故复盘、代码评审、周报整理这类流程,每次步骤相同、输入不同,适合做成 Prompt,由用户主动挑选触发。

错放的代价有多大。 同一个能力放错原语,后果差别很大。只读文档做成 Tool,代价是权限面变宽、审计噪声变多。写库做成 Resource,代价是客户端在加载上下文时就可能触发写入,这几乎没法审计。巨型能力球的代价最大,一个授权就放开了所有动作。

三档终裁

能用。 能力的意图和原语一致,并且粒度够窄。带参数的实时查询,比如按订单号查状态,视频把查库归在 Tools 里,我也按能用处理,前提是它只读、参数受限、调用有记录。开工单做成 Tool,产品文档做成 Resource,事故复盘流程做成 Prompt,都在这一档。Resource 也有粒度问题,把整个知识库做成一个 Resource,客户端一次加载几十万字,上下文立刻被挤满。按文档或按主题切成多个 Resource,让客户端按需挑选,才算真正的能用。Tool 的粒度标准是一次调用只做一种动作,参数只描述对象,不描述动作类型。

限场景。 意图没错,原语却放偏了,修改声明就能回到能用档。典型例子是把只读的员工手册做成一个声明会修改状态的 Tool,权限过大,审批系统会把它当成高危动作拦下,徒增人工。另一个例子是把某次会话里的一段闲聊模板注册成全局 Prompt,所有用户都能在列表里看到它,既无复用价值,也干扰了真正的工作流。

不能用。 错放之后无法靠改声明补救,必须拆分或重做。写数据库的能力做成 Resource 属于这一档,客户端读取上下文就会触发写入。巨型 admin 工具同样不能用,它把查询、修改、删除、重启塞进一个入口,参数里一个字段决定做什么,审批只能整体放行或整体拒绝。

实验,给一份能力划分表打分

我准备了一份模拟的 MCP server 能力划分表,共八项能力,每项先标声明的原语和权限宽窄,再用三个零一字段记录副作用、只读与流程复用的情况。脚本先按四个维度推出期望原语,再和声明对比,输出三档终裁。文件在 _w/mcp-primitives-verdict/,结果写进 verdict.csv。

text 复制代码
query_orders      tool      能用    带参实时查询属动作,窄且可审
create_ticket     tool      能用    意图与原语一致
product_docs      resource  能用    意图与原语一致
incident_review   prompt    能用    意图与原语一致
write_db_row      resource  不能用  Resource 带副作用,读即写
read_handbook     tool      限场景  只读需求却声明副作用,权限过大
chitchat_once     prompt    限场景  原语错放,需改声明
admin_everything  tool      不能用  巨型能力球,爆炸半径大须拆分

八项里四项能用,两项限场景,两项不能用。种进去的四个错放全部被拦住,没有一项被误判成能用。这张表本身是我编的模拟数据,用来演示判定逻辑,不代表任何真实 server 的统计。

巨型能力球怎么拆

admin_everything 是视频重点警告的形状,单独说说拆法。先按副作用把动作分开,只读的查询拆出来,能做成 Resource 的做成 Resource,需要参数的做成窄 Tool。有副作用的动作按影响范围再拆,改单条记录、批量修改、删除、重启各成一个 Tool,每个都有自己的审批档位。原先藏在参数里的「模式」字段一律取消,一个 Tool 只做一件事。

拆完以后 Tool 数量会变多,这是正常代价。数量多带来的选择困难,可以靠清楚的命名和描述缓解,比让模型面对一个万能入口安全得多。

Prompts 最容易被低估

三种原语里,Prompts 用得最少。很多团队把流程直接写进 Tool 的描述,或者让用户自己在对话里贴一大段指令。这样做的问题是流程散落在各处,改一次要找好几个地方。视频把 Prompts 定位成可复用流程,我理解它的价值在于把步骤和输入分开,流程由 server 维护,用户只需要填本次的事故编号或代码分支。

Prompt 和 Tool 的边界也要守。Prompt 只负责组织模型该怎么做,真正的动作仍然交给 Tool。如果一个 Prompt 的内容里写着「直接删除过期记录」,而对应的删除 Tool 没有单独审批,等于借流程模板绕开了权限。验收时要检查每个 Prompt 会引导模型调用哪些 Tool,那些 Tool 的审批档位是否和流程的风险匹配。

评审会上怎么用这套终裁

新 server 上线前的设计评审,可以把能力划分表直接投在屏幕上,逐行过三档。限场景的条目当场改声明,不能用的条目记下负责人和拆分期限。已经上线的 server,每个季度拿实际调用日志回填一次表格,看有没有 Tool 长期只被用来读,有没有 Resource 的读取频率异常高。前者可以降级成 Resource,后者要查是否有客户端在反复拉取大块内容,拖慢了响应。

验收清单

  1. 每个 Tool 写明副作用,没有副作用的能力逐个确认是否应改成 Resource。
  2. 每个 Resource 确认读取不会触发任何写入或外部调用。
  3. 每个 Prompt 确认至少会被复用两次以上,一次性内容不进全局列表。
  4. 不存在用参数切换动作类型的 Tool。
  5. 有副作用的 Tool 各自对应一个审批档位,审批表和 Tool 名一一对应。

五条全过记为能用,有一条限场景就修改声明后复验,出现写库 Resource 或巨型能力球直接打回重做。

这份终裁的边界

视频只有不到四分钟,讲的是意图层面的分界,没有涉及具体客户端如何加载 Resource、Prompt 在不同客户端里如何呈现。这些行为由客户端实现决定,上线前要在你实际使用的客户端里各验一次。本文的三档判定也只覆盖原语选择,鉴权、限流、日志保留这些安全措施不能因为原语选对了就省掉。

带参数的只读查询放 Tool 还是放 Resource,视频的例子倾向 Tool,社区做法也不统一。我的判断是参数由模型临时决定的放 Tool,内容相对固定、由客户端预先加载的放 Resource。团队里定一条规则写进设计文档,比每次争论更省事。

小结

MCP 三原语的分界按意图来。会改变外部世界的做 Tool,回答前要看的只读材料做 Resource,反复使用的流程做 Prompt。错放分两种程度,改声明能修好的算限场景,读即写和巨型能力球直接不能用。拿一份能力划分表跑一遍判定,把结果写进评审记录,server 的权限面就能看得清楚。

相关推荐
情 九3 小时前
MCP 开发环境搭建:Mac 与 Windows 跑通 Python 服务和 stdio 客户端
windows·python·macos·mcp
跨境Jacky13 小时前
亚马逊选品排名监控改造记:从手抄表格到MCP自动监控
跨境电商·mcp·sorftime
keren219 小时前
SceneDock:Windows 场景化工作台——一键启动工作链,还能被 AI Agent 调用(CLI / MCP)
windows·开发工具·效率工具·mcp
光依旧1 天前
多实例治理一致性深潜:Redis与本地缓存降级(MCP实战手记·篇12 延伸)
redis·caffeine·高可用·缓存一致性·mcp·多实例
古法老登瞎折腾2 天前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
用户8813034824072 天前
给 MCP Server 加调用链日志和大输出落盘:一个装饰器搞定,附 3 个实测踩坑(Python SDK v2)
mcp
TickDB2 天前
美股历史数据下载:用 Codex 取数,Python 导出 CSV
python·websocket·mcp·行情数据 api
光依旧2 天前
工具权限与评分实战:scope拦截+健康度指标(MCP实战手记·篇12 延伸)
零信任·可观测性·权限控制·scope·sre·mcp
南归北隐3 天前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp