ELI5 · 说人话
一个把 AI 接到外面的东西上,
一个告诉 AI 这活该怎么干。
先分清
MCP 是一套插口标准。插上,AI 才够得着你的 GitHub、数据库、公司内网。没插上,它连门都摸不到。
Skill 是一个文件夹加一份 Markdown。AI 本来就会写代码,手册告诉它:在你这儿,这类活得按这个规矩来。
拆开看 · 其一
中间多了一个跑着的程序。AI 不直接碰 GitHub,它跟这个程序说话,程序替它去碰。
实线 = 请求 虚线 = 返回
代价也在这儿:要装、要配、要登录。而且它一上来就把自己那一整份工具清单塞进 AI 的脑子,用不用得上都占地方。
但「程序」不等于「你得部署一个服务」。本地这种(stdio)是客户端自己 spawn 的子进程,没有端口、没有守护进程,你退出客户端它就跟着死。只有远端那种(HTTP)才是真有 URL、要一直在线的服务。
拆开看 · 其二
没有进程,没有端口,没有登录。
就是几个文件,丢进去就生效。
聪明的地方是它分三次才全读完:
用不上就一直停在第一层
所以你可以塞一百个 Skill 进去,平时也就占几百字。MCP 做不到这个——它的工具清单是全量常驻的。
最少要什么
同样是「能用起来」,一个要凑齐六件事,
一个只要两个字段。
initialize,你回自己的名字、版本,以及「我有 tools」。tools/list:每个工具的名字、干什么用、参数长什么样(JSON Schema)。tools/call:收到名字和参数,干完把结果塞进 content 数组还回去。name 对上。references/、scripts/ 全是可选。name 和 description,就这两个。references/。description 是唯一一直占着上下文的东西。它得同时说清「这是干嘛的」和「什么时候该想起我」——写虚了,这个 Skill 一辈子不会被触发。
落差就在这儿:MCP 的「最小」是一个要握手、要报 schema 的进程;Skill 的「最小」是两行 YAML 加一段大白话文件。
走一遍
订单躺在公司的 MySQL 里。
没有现成的命令行,密码也不能给模型。
你 客户端 模型 server
只开一个口子:query_orders。SQL 是你写死的,模型只能往问号里填参数——它没法自己造一句 SQL。
密码走 env,只进这个子进程,不进模型的上下文。写完就完事了——你不用去启动它。
你打开 Claude Code 的那一刻,它 spawn 出这个子进程,发 initialize,再要一份 tools/list,拿到:query_orders,两个参数。这一步你什么都没做。
上周有多少笔订单卡在待发货?
「待发货」对上 pending_shipment,「上周」算成日期。这一步是模型在猜——猜错了你得看得见,所以参数要回显给你。
子进程拿参数去查,结果塞进 content 数组还回去。
上周有 1274 笔订单卡在待发货。
全程模型没见过数据库密码,也没法自己写 SQL——它只能在你划好的两个格子里填空。这就是这类活非 MCP 不可的原因:要连接、要凭证,而这两样都不能交给一份手册。
你关掉 Claude Code,这个子进程跟着结束。没有残留的服务要你管。
摆一起
| 比什么 | MCP | Skill |
|---|---|---|
| 是个啥 | 一套协议,外加一个真在跑的程序 | 一个文件夹,里面一份 Markdown |
| 给的是 | 能力 —— 让它够得着 | 知识 —— 让它做得对 |
| 谁动手 | 那个程序替 AI 去动 | AI 自己动,用它手上已有的工具 |
| 怎么装 | 写配置、走认证,让客户端能把它拉起来 | 把文件夹丢进去,完事 |
| 占多少脑子 | 整份工具清单一直占着 | 平时一句话,用到才展开 |
| 能登录吗 | 能。OAuth、换令牌、长连接都扛得住 | 不能。它只是一段文字,没法自己去握手 |
| 改一改 | 改代码、重启进程 | 改 Markdown,存盘就生效 |
| 谁能用 | 任何支持 MCP 的客户端 | 任何能读文件、能跑命令的 agent |
正面回答
能吃掉一半,
另一半吃不掉。
gh。AI 本来就会跑 gh,那层壳纯属多余。一句话:Skill 正在替掉那些本来就不该做成 MCP 的 MCP。真正干连接的那部分,一个都没少。
真实用法
MCP ── 把 GitHub 接上。登录、拉数据、提 PR,都归它。
Skill ── 定规矩。先查有没有重复 issue,标题怎么写,绝不直接推 main。
拔了线,规矩没处使;只有线没规矩,它就自由发挥了。不是二选一——是看它缺的是手,还是缺的是规矩。
MCP 让它够得着,
Skill 让它做得对。