MCP 与 Skill 入门:给 AI 接上手脚,再给它一本操作手册
AI 什么都懂,但什么都做不了——直到有人给它接上手
AI 的三堵墙
上一篇讲了 Prompt 和 Context Engineering:怎么跟 AI 说话,怎么布置它走进的房间。但看到信息是一回事,能做事是另一回事。
我最近碰到一个很能说明问题的场景。我对 AI 说:"帮我查一下下周的日程,看看有没有冲突,然后把结果发给同事。"三件事,每件单独拿出来都不复杂。但 AI 做不了任何一件。
不是它不够聪明。是它有三个先天的硬限制:
AI 的三个先天限制
1. 知识有截止日期。 AI 的知识来自训练数据,而训练数据有一个截止时间。2026 年 4 月训练完的模型,不知道 2026 年 5 月发生了什么。你问它"昨天的新闻",它答不上来。
2. 不能执行动作。 AI 只能生成文字。它可以"写出"一段发邮件的代码,但它不能真的发那封邮件。它可以"建议"你删除某个文件,但它不能真的去删。生成文字和执行动作之间,有一条不可跨越的线。
3. 不能访问私有数据。 你的日历、邮箱、公司内部文档、代码仓库——这些都在 AI 的训练数据之外。你不给它,它就看不到。
你可以把 Prompt 写得再完美、Context 布置得再周全,这三堵墙就在那里。要打破它们,需要一种全新的机制。
Function Calling:AI 学会了"调用工具"
在讲 MCP 之前,先理解一个前置概念:Function Calling(函数调用),也叫 Tool Use(工具使用)。
传统的 AI 对话是这样的:你说一句话,AI 回一段文字。输入是文字,输出也是文字。但从 2023 年开始,主流 AI 模型多了一种能力:它可以在回复中声明自己想要调用一个外部函数。
举个例子。你问 AI "今天北京天气怎么样?",AI 不直接编造一个答案,而是返回类似这样的结构:
{
"function_call": {
"name": "get_weather",
"arguments": {"city": "Beijing"}
}
}注意,AI 没有真的去查天气。它做的事情是:看了你的问题,判断需要查天气,然后"说出"了它想调用哪个函数、传什么参数。 真正去调用天气 API、拿到结果的,是包裹在 AI 外面的应用程序。应用拿到结果后,再把结果传回给 AI,AI 基于真实数据生成最终回答。
Function Calling 是什么?
一句话: AI 不只能生成文字,还能"说出"它想要调用哪个外部工具。
工作原理: 你预先告诉 AI "你有这些工具可以用"(一个函数列表及其参数说明),AI 在回答问题时会自主判断是否需要调用某个工具,并输出结构化的调用请求。实际执行由外部程序完成,结果再反馈给 AI。
关键点: AI 并不"执行"任何东西。它只是做出"我需要调用这个工具"的判断,然后用结构化格式表达出来。它从一个只能说话的嘴,变成了一个能指挥别人动手的大脑。
Function Calling 打破了 AI 的第二堵墙(不能执行动作)和第三堵墙(不能访问私有数据)。但它引出了一个新问题。
新问题:N x M 的爆炸
有了 Function Calling,AI 理论上可以调用任何外部服务。但实践中,每接入一个新服务都需要写一套对接代码:认证怎么做、API 怎么调、返回数据怎么解析、错误怎么处理。
如果你想让 AI 能查 Google 日历,写一套。想让它再能查 GitHub,写一套。想加上 Gmail,又一套。想加上 Slack、Notion、Jira……
N 个 AI 应用想要对接 M 个外部服务,就需要 N x M 套对接代码。做过企业系统集成的人对这个问题太熟悉了——这是一个经典的组合爆炸。
MCP:一套标准协议
MCP(Model Context Protocol,模型上下文协议)就是为了解决这个问题而设计的。
MCP 是什么?
一句话: 一套标准协议,让 AI 应用能以统一的方式连接各种外部服务。
跟 RESTful API 的对比: 如果你理解 RESTful API,你已经理解了 MCP 的大部分。RESTful API 定义了客户端和服务器之间通过 HTTP 通信的规范——用 GET 读、POST 写、统一的 URL 路径、JSON 格式的数据。MCP 做的事情类似:定义了 AI 应用和外部服务之间通信的规范。区别在于,RESTful API 是给程序员写的代码调用的,而 MCP 是给 AI 模型"理解和使用"的。
解决了什么问题: 有了 MCP,Gmail 只需要提供一个 MCP Server,任何支持 MCP 的 AI 客户端都能直接连上。N x M 的组合爆炸变成了 N + M——每个 AI 应用只需要实现 MCP Client,每个服务只需要实现 MCP Server。
用一个更生活化的类比:2000 年前后的电脑,键盘用 PS/2 口,打印机用并口,鼠标用串口,每种设备一种接口。USB 出来之后,一个口通吃。MCP 做的是同样的事,只不过连接的不是硬件设备,而是软件服务。
MCP 的三个组成部分
MCP 协议里有三个角色,理解它们就理解了整个通信链路:
1. MCP Client(客户端)
就是 AI 应用这边的接口层。比如 Claude Code、Cursor、ChatGPT——它们作为 AI 应用,内部实现了 MCP Client,能够跟任何 MCP Server 对话。你作为用户通常不直接接触 Client,它是应用内置的。
2. MCP Server(服务器)
外部服务提供的标准化接口。每个想被 AI 访问的服务(Gmail、GitHub、你的内部数据库)都可以包装成一个 MCP Server。它负责:告诉 AI "我能提供哪些工具"、接收 AI 的调用请求、执行实际操作、返回结果。
3. Protocol(协议本身)
Client 和 Server 之间通信的规则。MCP 用的是 JSON-RPC 格式——如果你做过 Web 开发,这就是一个非常标准的请求/响应协议,没有额外的学习成本。
协议里定义了三种东西可以被 AI 使用:
- Tools(工具): AI 可以执行的操作,比如"发送邮件"、"创建 GitHub Issue"
- Resources(资源): AI 可以读取的数据源,比如"最近的会议记录"、"项目文档"
- Prompts(提示模板): 预定义的交互模板,比如"用这个格式做代码审查"
MCP 的现实:标准能不能统一
技术设计是一回事,生态是另一回事。
USB 之所以成功,不只是因为技术好,更因为 Intel、微软、苹果这些巨头都站到了同一边。如果当年每家推各自的接口标准,今天你桌上可能还是一堆不同的线。
MCP 目前的势头不错——由 Anthropic 发起,多家 AI 厂商在跟进。但生态博弈远没有结束。这里没有确定的结论,只是提醒:一个协议的成功,技术只占一半,另一半是政治。
还有一个更实际的问题是安全。MCP 让 AI 能执行真实操作了——发邮件、改文件、操作数据库。一旦出了差错,后果不只是"回答了一个错误答案",而是可能真的做了一件不该做的事。能力越大,风险越大。这个问题后面讲 Harness 的时候会进一步展开。
从"能做"到"做对":为什么还需要 Skill
现在 AI 有手有脚了。但有手有脚不等于会干活。
让我用一个具体场景来说明。假设你让 AI 帮你把一篇 Markdown 文章发布到微信公众号。AI 有了 MCP,理论上能调用公众号的 API。但这个任务里有一堆细节:
- 公众号的 HTML 渲染器不支持某些 CSS 属性(比如
flexbox) - 图片链接必须是 HTTPS,而且域名必须在公众号后台白名单里
- 正文里的代码块需要特殊处理,否则在手机上显示会错乱
- 封面图有特定的尺寸和格式要求
这些规则 AI "大概知道"一些,但不全、不准。如果你每次都在 Prompt 里把这些细节写一遍,不仅低效,而且容易遗漏——上次记得的细节这次可能忘了。
Skill 是什么?
一句话: 写给 AI 的标准操作手册,把"怎么把某件事做对"固定下来。
跟 Runbook/SOP 的对比: 运维领域有一种东西叫 Runbook(操作手册)或 SOP(标准操作流程)。服务挂了?第一步检查什么,第二步重启什么,第三步通知谁,每一步的前置条件和检查点都写得清清楚楚。Runbook 不是教你运维知识——它假设你已经会了,只是把"这件特定的事怎么做"钉死。Skill 做的是同样的事,只不过读手册的人从运维工程师变成了 AI。
关键洞察: Skill 不是在教 AI 新能力。AI 已经"大概会做"大部分事情。Skill 解决的是把"大概能做"变成"确定能做对"。差别在细节。
一个 Skill 的基本结构长这样:
---
name: publish-to-wechat
trigger: 当用户要求发布公众号文章时
---
## 步骤
1. 将 Markdown 转换为公众号兼容的 HTML
2. 检查所有图片链接,确保是 HTTPS 且在白名单域名
3. 如果有代码块,用 <pre><code> 包裹并添加行内样式
4. 调用公众号 API 创建草稿
5. 返回草稿预览链接供用户确认
## 约束
- 不使用 flexbox 或 grid 布局
- 封面图尺寸:900x383px
- 正文宽度不超过 600px看起来很简单。但这种"简单"正是它的价值——它把散落在你脑子里的经验沉淀成了一个可重复执行的流程。你修了一个 bug,在 Skill 里加一条规则,以后所有使用这个 Skill 的场景都受益。
Prompt、Skill、代码:三者的区别
到这里你可能会问:Skill 跟直接写代码有什么区别?跟写一个好的 Prompt 又有什么区别?
| Prompt | Skill | 代码 | |
|---|---|---|---|
| 生命周期 | 一次性,说完就没了 | 持久化,版本管理,可分享 | 持久化,版本管理,可分享 |
| 执行者 | AI 解读并执行 | AI 解读并执行 | 机器精确执行 |
| 灵活性 | 高,每次可以不同 | 中,框架固定但 AI 可在框架内灵活应对 | 低,严格按代码逻辑执行 |
| 适用场景 | 一次性任务、探索性对话 | 反复执行的标准流程 | 需要精确控制的逻辑 |
用一个公式概括:Skill = 通用能力 x 特定约束 x 可重复执行。
Prompt 是一次性指令。代码是精确到每一步的确定性程序。Skill 在两者之间——它用自然语言定义流程和约束,但把具体执行的灵活性留给 AI。当某个步骤的细节变了(比如公众号 API 更新了),你改 Skill 里的一行描述就行,不需要重写代码。
MCP + Skill:一个解决能不能,一个解决对不对
把两个概念放在一起看:
MCP 解决的是"能不能做"。 AI 能不能访问你的日历?能不能读取 GitHub 上的代码?能不能发送邮件?这是能力边界的问题。没有 MCP(或类似机制),AI 再聪明也只能纸上谈兵。
Skill 解决的是"怎么做对"。 AI 能发邮件了,但邮件格式对不对?流程对不对?该检查的检查了没有?这是执行质量的问题。没有 Skill,AI 能做但不一定做得对。
两者叠加之后,一个新的问题浮出水面:AI 既能获取信息,又有标准流程可以遵循,它是不是已经具备了独立完成任务的条件?
当它真的开始独立行动,谁来控制它的行动边界?它删了一个不该删的文件怎么办?它做了一个"看起来合理但实际上错误"的判断怎么办?
这就是下一篇要讲的内容:Harness 和 Agentic Engineering——怎么控制一个会自己做决定的系统。
这是 AI 工程入门系列的第二篇。如果你已经理解了 MCP 和 Skill 的区别,推荐继续阅读进阶篇《MCP 与 Skill:给 AI 接上手脚,再给它一本操作手册》,那篇从实践角度讨论了 Skill 粒度的取舍和 MCP 生态的深层博弈。