Skills 与 MCP 的关系
核心观点:Skills 和 MCP 是相辅相成的,不是替代关系
最重要的一句话
Skills 是"怎么用工具",MCP 是"提供什么工具"
重新认识 MCP
MCP 是什么?
MCP(Model Context Protocol) 是一个开放协议,用于连接 AI 和外部工具。
类比:
- MCP = USB 接口
- 各种工具(数据库、API、文件系统)= USB 设备
- AI Agent = 电脑
有了 MCP:
- AI 可以用统一的方式访问各种工具
- 不需要为每个工具写专门的代码
MCP 提供什么?
MCP 提供三种能力:
工具(Tools)
- AI 可以调用的函数
- 例如:read_file、search_database
资源(Resources)
- AI 可以读取的数据
- 例如:配置文件、数据库记录
提示(Prompts)
- 预定义的提示模板
- 例如:代码审查提示
Skills 和 MCP 的关系
核心关系图
┌─────────────────────────────────────────────────────────┐
│ AI Agent │
│ (Claude/GPT 等) │
└───────────────────────┬─────────────────────────────────┘
│
│ 使用
▼
┌─────────────────────────────────────────────────────────┐
│ Skills │
│ (技能层) │
│ │
│ Skills 告诉 AI: │
│ - 什么时候用什么工具 │
│ - 如何组合使用多个工具 │
│ - 完成任务的步骤是什么 │
│ │
│ 例如:code_search Skill │
│ "当用户要搜索代码时,使用 grep 工具搜索文件内容" │
└───────────────────────┬─────────────────────────────────┘
│
│ 调用
▼
┌─────────────────────────────────────────────────────────┐
│ MCP 工具 │
│ (工具层) │
│ │
│ MCP 提供具体的执行能力: │
│ - 文件系统操作(read_file, write_file) │
│ - 代码搜索(grep) │
│ - 数据库查询(execute_sql) │
│ - API 调用(http_request) │
│ │
│ 这些工具通过 MCP 协议统一暴露给 AI │
└─────────────────────────────────────────────────────────┘关系总结
| 层次 | 角色 | 职责 | 类比 |
|---|---|---|---|
| AI Agent | 大脑 | 思考、决策 | 指挥官 |
| Skills | 战术 | 知道怎么完成任务 | 作战手册 |
| MCP 工具 | 武器 | 具体的执行能力 | 枪支、弹药 |
详细对比
MCP:工具提供者
职责:
- 提供底层的执行能力
- 统一的接口标准
- 不关心任务逻辑
例子:
yaml
# MCP 服务器提供的工具
tools:
- name: grep
description: "在文件中搜索文本"
parameters:
- pattern: 搜索模式
- path: 搜索路径特点:
- ✅ 通用性强
- ✅ 可复用
- ❌ 没有任务逻辑
Skills:任务编排者
职责:
- 知道什么时候用什么工具
- 知道如何组合工具
- 知道完成任务的步骤
例子:
yaml
# code_search Skill
instructions: |
你是一个代码搜索专家。
工作流程:
1. 理解用户搜索意图
2. 选择工具(优先用 grep)
3. 构建搜索查询
4. 执行并返回结果
工具依赖:
- grep(来自 MCP)
- find(来自 MCP)特点:
- ✅ 有任务逻辑
- ✅ 可以组合工具
- ❌ 依赖 MCP 工具
实际例子对比
场景:搜索代码
只用 MCP(没有 Skills)
你:搜索所有使用 useState 的地方
AI:(需要自己判断用什么工具)
我该用哪个工具?
- read_file?不对,这个只能读单个文件
- grep?对,这个可以搜索
[调用 MCP 的 grep 工具]
grep -r "useState" --include="*.js"
找到结果...问题:
- AI 每次都要重新判断
- 不知道最佳实践
- 可能选错工具
用 Skills + MCP
你:搜索所有使用 useState 的地方
AI:(code_search Skill 自动知道怎么做)
我是代码搜索专家,我用 grep 工具来搜索。
[自动调用 MCP 的 grep 工具]
grep -r "useState" --include="*.js" --include="*.jsx"
找到结果...优势:
- Skill 已经封装了最佳实践
- AI 直接执行,不需要判断
- 结果更可靠
更复杂的例子:代码审查
场景:审查一段代码
只用 MCP
你:审查这段代码
AI:(需要自己想步骤)
1. 先读取文件(用 read_file)
2. 搜索类似的代码(用 grep)
3. 检查错误(用什么工具?不知道...)
结果:审查不全面,因为 AI 不知道完整的流程用 Skills + MCP
code_review Skill:
yaml
instructions: |
你是一个代码审查专家。
审查流程:
1. 读取目标代码(read_file)
2. 搜索类似代码做对比(grep)
3. 运行测试(test_runner)
4. 检查代码规范(linter)
5. 生成审查报告
工具依赖:
- read_file(MCP)
- grep(MCP)
- test_runner(MCP)
- linter(MCP)你:审查这段代码
AI:(code_review Skill 知道完整流程)
我是代码审查专家,我来系统地审查这段代码。
1. [读取代码](read_file)
2. [搜索类似代码](grep)
3. [运行测试](test_runner)
4. [检查规范](linter)
5. [生成报告]
审查完成!发现以下问题:
...优势:
- 流程完整,不会遗漏
- 逻辑清晰,可复现
- 结果专业
它们是互补的,不是竞争的
错误理解
❌ 误解 1:"Skills 会替代 MCP"
- 错!Skills 依赖 MCP 提供工具
❌ 误解 2:"有了 MCP 就不需要 Skills"
- 错!没有 Skills,AI 不知道如何用好 MCP 工具
❌ 误解 3:"Skills 和 MCP 是竞争关系"
- 错!它们是合作关系
正确理解
✅ MCP 提供工具能力
- 提供底层工具
- 统一接口
- 标准化协议
✅ Skills 提供任务逻辑
- 知道什么时候用什么工具
- 知道如何组合工具
- 封装最佳实践
✅ 两者配合,效率最高
- MCP = 执行层
- Skills = 逻辑层
- AI = 决策层
决策树:什么时候用哪个?
你需要让 AI 完成一个任务
│
├─ 需要访问外部数据/工具?
│ └─ 是 → 需要 MCP 提供这些工具
│
├─ 任务有固定流程?
│ └─ 是 → 用 Skills 封装流程
│
└─ 需要组合多个工具?
└─ 是 → 用 Skills 编排工具例子 1:简单文件读取
需求:读取一个文件的内容
方案:只需要 MCP
- 直接用 MCP 的
read_file工具 - 不需要 Skills
例子 2:代码搜索
需求:在代码库中搜索代码
方案:Skills + MCP
- Skills(code_search):知道如何搜索
- MCP(grep):提供搜索能力
例子 3:复杂代码重构
需求:重构一个模块,包括:
- 搜索代码
- 分析依赖
- 重构代码
- 运行测试
- 更新文档
方案:Skills + MCP
- Skills(refactor):编排整个流程
- MCP:提供各种工具(grep、read_file、write_file、test_runner)
实际应用建议
作为使用者
优先使用官方 Skills
- 稳定可靠
- 持续更新
理解常用 Skills
- code_search
- refactor
- file_operations
不需要深入 MCP
- 知道概念即可
- Skills 已经封装好了
作为开发者
需要同时了解两者
- MCP:如何提供工具
- Skills:如何封装逻辑
先学 MCP
- 理解工具层
- 再学 Skills 封装
开发自定义 Skills
- 封装团队的最佳实践
- 提升开发效率
总结
核心要点
- MCP 提供工具:文件操作、代码搜索、数据库访问
- Skills 封装逻辑:什么时候用什么工具、如何组合
- 两者配合:MCP = 执行层,Skills = 逻辑层
- 不是竞争关系:它们是相辅相成的
一句话记住
MCP 是"武器库",Skills 是"武功秘籍",AI 是"侠客"
- 侠客需要武器(MCP 提供工具)
- 侠客需要武功(Skills 告诉怎么用)
- 两者配合,侠客才能行侠仗义
下一步
现在你已经理解了 Skills 和 MCP 的关系。
接下来,我们将通过实战案例来看看如何在实际项目中使用 Skills。