MCP 给的是手,技能给的是做法。有手没菜谱会乱做,有菜谱没手做不出来。 演示里五个任务:只有工具能做三个、只有技能能做两个、两个都有的五个全都能做。 缺的那一半,恰好是最难补的那一半。
前面两节把 MCP 讲完了,这一节把它和第 3 章的技能放在一起看。 这两个东西经常被混着说,其实分工很清楚:一个管够不够得着,一个管做得对不对。
一、两者的分工
MCP 服务器提供工具:能读文件、能查数据库、能调接口。它拓宽的是「能碰到什么」。 技能提供做法:先做什么、按什么规范、做到什么算完。它约束的是「怎么碰」。 用厨房打比方:工具是锅和刀,技能是菜谱。有手没菜谱会乱做,有菜谱没手做不出来。
这个比方有点土,但它精确:手和菜谱不能互相替代,缺哪个都只能干半件事。
二、五个任务,三种配置
演示里五个任务,三种配置各跑一遍:只有工具、只有技能、两个都有。 结果是:只有工具能做三个,只有技能能做两个,两个都有的能做完五个。 注意这两个数不是「一半一半」。 工具那三个是「能出结果但顺序靠猜」,技能那两个是「知道怎么做但动不了手」。
而两个都缺的那类任务,其实是最常见的:既要查数据、又要按规范整理成一份东西。
三、只有工具会怎样
工具是「能做什么」,不是「该怎么做」。 模型手里有读写文件、查数据库的工具,但你让它「按项目规范补测试」,它不知道规范是什么。 结果就是「能跑,但不合规矩」:测试文件放错目录、没用项目的断言库、漏了异常分支。
这和 4.5 节那个「只用子智能体」的现象是同一个:能力到位了,判据没到位。
四、只有技能会怎样
技能里写着「读 src 下的文件、按规范补测试、跑一遍确认通过」——但它没有读文件的工具,第一步就卡住。 技能是描述,不是能力。它能把「怎么做」说清楚,但它自己动不了手。 这一条容易被忽略,因为技能读起来很像「能做事的说明书」。说明书不能代替手。
所以写技能的时候要顺手确认一件事:它正文里提到的每个动作,当前有没有工具能做。
五、组合之后谁管什么
工具负责「够得着」:文件、数据库、工单系统。技能负责「做得对」:顺序、判据、边界。 分工的判据很简单:这件事是「能不能做」还是「该怎么做」?前者配工具,后者写技能。 还有一个顺序:先配工具再写技能。 因为技能正文里要写「用哪个工具、传什么参数」,工具没有的时候写不出来。
所以一句话收口:MCP 拓宽了能碰到的边界,技能保证了碰的方式。两个缺一个,都只能干半件事。
六、动手 Demo:五个任务,只用工具、只用技能、两个都有
MCP 给的是「手」,技能给的是「做法」。手和菜谱的关系:有手没菜谱会乱做,有菜谱没手做不出来。 五个任务,三种配置各跑一遍,看哪种配置能做完几个。
TASKS = [(u"给这个模块补三个测试", True, False, True),
(u"按项目的测试规范补测试", False, True, True)]
n_tool = sum(1 for _a, _ot, _os, _b in TASKS if _ot)
n_skill = sum(1 for _a, _ot, _os, _b in TASKS if _os)
实跑输出:
--------------------------------------------------------------------
五个任务,只用工具、只用技能、两个都有
--------------------------------------------------------------------
MCP 给的是「手」,技能给的是「做法」。手和菜谱的关系:有手没菜谱会乱做,有菜谱没手做不出来。
① 两者的分工
--------------------------------------------------------------------
| 东西 | 提供什么 | 比喻 |
|---|---|---|
| MCP 服务器 | 提供工具:能读、能查、能写 | 厨房里的锅和刀 |
| 技能 | 提供做法:先做什么、做到什么算完 | 菜谱 |
② 五个任务,三种配置
--------------------------------------------------------------------
| 任务 | 只有工具 | 只有技能 | 两者都有 |
|---|---|---|---|
| 给这个模块补三个测试 | 能 | 不能 | 能 |
| 查一下库里有几条订单 | 能 | 不能 | 能 |
| 按项目的测试规范补测试 | 不能 | 能 | 能 |
| 把订单表导成一份周报 | 不能 | 能 | 能 |
| 随便看看这个仓库有什么 | 能 | 不能 | 能 |
五个任务里,只有工具能做的 3 个(有手没菜谱,能出结果但顺序靠猜);
只有技能能做的 2 个(有菜谱没手,写不出代码也查不了库);两个都有的五个都能做。
③ 只有工具会怎样
--------------------------------------------------------------------
工具是「能做什么」,不是「该怎么做」。
模型手里有读写文件、查数据库的工具,但你让它「按项目规范补测试」,它不知道规范是什么。
结果就是「能跑,但不合规矩」:测试文件放错目录、没用项目的断言库、漏了异常分支。
这和 4.5 节那个「只用子智能体」的现象是同一个。
④ 只有技能会怎样
--------------------------------------------------------------------
技能里写着「读 src 下的文件、按规范补测试、跑一遍确认通过」——但它没有读文件的工具,
第一步就卡住。
技能是描述,不是能力。它能把「怎么做」说清楚,但它自己动不了手。
⑤ 组合之后谁管什么
--------------------------------------------------------------------
工具负责「够得着」:文件、数据库、工单系统。技能负责「做得对」:顺序、判据、边界。
分工的判据很简单:这件事是「能不能做」还是「该怎么做」?前者配工具,后者写技能。
还有一个顺序:先配工具再写技能。
因为技能正文里要写「用哪个工具、传什么参数」,工具没有的时候写不出来。
! 一句话:MCP 拓宽了能碰到的边界,技能保证了碰的方式。两个缺一个,都只能干半件事。
①分工:MCP 服务器提供工具(能读、能查、能写),技能提供做法(先做什么、做到什么算完)。 锅和刀对菜谱。 ②五个任务:只有工具能做三个(能出结果但顺序靠猜),只有技能能做两个(知道怎么做但动不了手), 两个都有的五个全都能做。 ③只有工具的问题:能跑,但不合规矩——测试文件放错目录、没用项目的断言库、漏了异常分支。 这和 4.5 节那个「只用子智能体」是同一个现象:能力到位了,判据没到位。 ④只有技能的问题:技能里写着「读 src 下的文件」,但它没有读文件的工具,第一步就卡住。 技能是描述,不是能力。 ⑤顺序:先配工具再写技能。技能正文里要写「用哪个工具、传什么参数」,工具没有的时候写不出来。
30 秒实验
- 再加一个任务「把这个模块的日志格式统一成项目规范」,三条判据走一遍。 它属于「只有工具」「只有技能」还是「两者都要」?
- 把「按项目的测试规范补测试」的技能正文删掉判据、只留步骤,重跑一遍。 它还能算「只有技能能做」吗?
- 先写技能再配工具,会卡在哪一步?把这件事实际做一遍,记下卡住的位置。
常见误区
- 以为装了 MCP 就等于会干活。工具只解决「够得着」,不解决「做得对」。
- 以为写了技能就等于能干活。技能是描述,没有工具它一步都动不了。
- 先写技能再配工具。技能正文里要写用哪个工具、传什么参数,写的时候工具还没有。
- 把两者混着说。一个管能不能碰到,一个管碰得对不对,混着说就分不清该补哪个。
- 用技能去补「没有工具」的缺。再怎么描述,动不了手还是动不了手。
自测三问(点开对答案)
1. MCP 和技能分别提供什么? —— MCP 提供工具(能读、能查、能写),技能提供做法(顺序、判据、边界)。 一个管够不够得着,一个管做得对不对。 2. 只有工具会缺什么? —— 缺判据。能出结果,但顺序靠猜、产出不合项目规范。 3. 为什么说该先配工具再写技能? —— 因为技能正文里要写「用哪个工具、传什么参数」。工具没有的时候,这段写不出来,写出来也是空的。单个开发者的事讲完了,下一节上规模:五十人的团队,这些服务器怎么部署。
- ☐ (本篇完,下一篇 6.10 企业级部署)
相关笔记
- SKILL.md 正文:技能管的是「怎么做」
- 企业级部署:企业里怎么部署
- Claude Code 橙皮书 · 索引
- 🐎 Claude Code 实战 · 索引