MCP与Skill选择指南
# 15. MCP 与 Skill 选择指南
核心问题:为 AI Agent 扩展能力时,该用 MCP(Model Context Protocol)还是 Skill?
一句话答案:MCP 用于连接外部系统,Skill 用于教 Agent 怎么做事。
# 一、概念速览
# 1.1 MCP 是什么?
MCP(Model Context Protocol) 是 Anthropic 主导的开源协议,用于连接 AI 应用与外部系统。
类比:MCP 就像 USB-C 接口——标准化、即插即用、跨平台。
┌─────────────────┐ MCP 协议 ┌─────────────────┐
│ AI 应用 │◄──────────────────►│ MCP Server │
│ (Claude/ChatGPT) │ │ (文件/数据库/API) │
└─────────────────┘ └─────────────────┘
2
3
4
核心能力:
- Tools:可执行的函数(如查询数据库、调用 API)
- Resources:可读取的数据源(如文件内容、数据库记录)
- Prompts:预定义的提示模板
# 1.2 Skill 是什么?
Skill 是 OpenClaw 的原生扩展机制,通过 SKILL.md 文件教 Agent 如何使用工具。
类比:Skill 就像操作手册——告诉 Agent 在什么场景下、用什么方式、做什么事。
┌─────────────────┐
│ Agent │
│ (墨隐/墨砚) │
└────────┬────────┘
│ 读取 SKILL.md
▼
┌─────────────────┐
│ Skill 目录 │
│ SKILL.md │
│ scripts/ │
│ templates/ │
└─────────────────┘
2
3
4
5
6
7
8
9
10
11
12
核心能力:
- 定义何时触发(通过 description 匹配用户意图)
- 定义如何执行(步骤、检查点、输出格式)
- 定义用什么工具(exec、web、browser 等)
# 二、核心对比
| 维度 | MCP | Skill |
|---|---|---|
| 定位 | 标准化连接协议 | Agent 操作指南 |
| 主要用途 | 暴露外部系统能力 | 教 Agent 工作方法 |
| 开发成本 | 中高(需实现 server) | 低(写 Markdown) |
| 跨平台 | ✅ 通用(Claude/ChatGPT/VS Code) | ❌ OpenClaw 专用 |
| 运行时 | 独立进程 | Agent 进程内 |
| 复杂度 | 适合复杂系统集成 | 适合工作流编排 |
| 调试 | 独立调试,可复用 | 与 Agent 一起调试 |
| 分发 | 可发布到 MCP 市场或私有部署 | ClawHub 或本地 |
# 三、什么时候用 MCP?
# 3.1 场景一:连接外部数据源
需求:让 Agent 读取企业内部数据库、知识库、文件系统。
MCP 方案:
Agent → MCP Client → MCP Server (数据库) → 返回数据
为什么选 MCP?
- 数据源独立于 Agent 存在
- 多个 Agent 可复用同一个 MCP Server
- 可由专人维护,Agent 开发者无需关心实现细节
示例:
// MCP Server 暴露的 Tool
{
name: "query_orders",
description: "查询订单数据",
inputSchema: {
type: "object",
properties: {
customer_id: { type: "string" },
date_range: { type: "string" }
}
}
}
2
3
4
5
6
7
8
9
10
11
12
# 3.2 场景二:集成第三方 API
需求:让 Agent 调用 GitHub、Jira、Slack 等外部服务。
MCP 方案:
Agent → MCP Server (GitHub) → GitHub API → 返回结果
为什么选 MCP?
- 官方或社区可能已有现成的 MCP Server
- API 认证、限流、错误处理统一封装
- Agent 不需要知道 API 细节,只需调用 Tool
示例:
// MCP Server 暴露的 Tools
[
{ name: "github_list_repos", ... },
{ name: "github_create_issue", ... },
{ name: "github_search_code", ... }
]
2
3
4
5
6
# 3.3 场景三:跨平台复用
需求:开发的扩展需要在 Claude Desktop、VS Code、Cursor 等多个客户端使用。
MCP 方案:
┌─ Claude Desktop
MCP Server ───┼─ VS Code Copilot
└─ Cursor
2
3
为什么选 MCP?
- MCP 是开放标准,主流 AI 工具都支持
- 一次开发,多处运行
- 避免 vendor lock-in
# 3.4 场景四:需要独立进程隔离
需求:扩展逻辑复杂、有状态、或需要长时间运行。
MCP 方案:
Agent 进程 MCP Server 进程
│ │
│ tool/call │
│ ──────────────────►│
│ │ (执行耗时操作)
│ result │
│◄────────────────── │
2
3
4
5
6
7
为什么选 MCP?
- MCP Server 独立运行,不影响 Agent 稳定性
- 可用不同语言实现(Python、Go、Rust)
- 可做资源隔离、限流保护
# 四、什么时候用 Skill?
# 4.1 场景一:教 Agent 工作方法
需求:让 Agent 按特定步骤完成复杂任务,如"部署博客"、"写小说"。
Skill 方案:
---
name: blog-deploy
description: 墨隐博客部署规则
---
# 博客部署流程
1. 在 `/home/blog` 目录下执行 `npm run build`
2. 检查构建输出,确认无报错
3. 执行 `git add -A && git commit && git push`
4. 确认 Caddy 自动重载
2
3
4
5
6
7
8
9
10
11
为什么选 Skill?
- 不是连接外部系统,而是编排 Agent 的行为
- 需要 Agent 理解完整上下文和工作流
- 可以引用 Agent 已有的工具(exec、read、write)
# 4.2 场景二:轻量级定制
需求:快速给 Agent 加一个小功能,不值得开发 MCP Server。
Skill 方案:
---
name: greeting
description: 以墨隐风格打招呼
---
# 打招呼
当用户说"你好"、"在吗"、"出来"时,用以下风格回应:
- 开场:"在下已候多时" 或 "墨隐已至"
- 确认:"善" / "贫道领会"
- 结尾:"施主有何吩咐?"
2
3
4
5
6
7
8
9
10
11
12
为什么选 Skill?
- 一个 Markdown 文件就搞定
- 不需要写代码、不需要启动服务
- 修改即时生效(重启 Agent)
# 4.3 场景三:项目特定规则
需求:某个项目的 Agent 需要遵守特定规范(代码风格、目录结构)。
Skill 方案:
my-project/
├── .agents/
│ └── skills/
│ └── project-rules/
│ └── SKILL.md # 只对该项目生效
2
3
4
5
为什么选 Skill?
- Skill 支持多级作用域(workspace > project > global)
- 项目级 Skill 自动继承,无需配置
- 团队可通过 Git 共享
# 4.4 场景四:组合多个工具
需求:一个任务需要串行调用多个工具(read → process → write → exec)。
Skill 方案:
---
name: refactor-java
description: 重构 Java 代码
---
# Java 重构流程
当用户要求重构 Java 代码时:
1. 用 `read` 读取目标文件
2. 分析代码结构,识别可优化点
3. 用 `edit` 进行精确修改
4. 用 `exec` 运行 `mvn compile` 验证
5. 如果失败,回滚修改并报告错误
2
3
4
5
6
7
8
9
10
11
12
13
14
为什么选 Skill?
- Skill 可以自由组合 Agent 已有的工具
- MCP 的 Tool 通常是单一职责,组合逻辑在 Agent 侧
- Skill 恰好适合编排这种组合逻辑
# 五、什么时候两者都用?
# 5.1 场景:MCP 提供能力,Skill 编排流程
需求:让 Agent 自动分析代码仓库并生成报告。
方案:
┌─────────────────────────────────────────────────────┐
│ Agent │
│ │
│ ┌─────────────────┐ ┌─────────────────────┐ │
│ │ Skill: │ │ MCP Servers: │ │
│ │ code-analysis │ │ - GitHub MCP │ │
│ │ │ │ - FileSystem MCP │ │
│ │ (编排流程) │────│ - Slack MCP │ │
│ └─────────────────┘ └─────────────────────┘ │
│ │ │ │
│ │ 读取指令 │ 调用 Tools │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────┐ │
│ │ SKILL.md 内容: │ │
│ │ 1. 用 github_list_prs 获取 PR 列表 │ │
│ │ 2. 用 fs_read_file 读取变更文件 │ │
│ │ 3. 分析代码质量 │ │
│ │ 4. 用 slack_post_message 发送报告 │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
分工:
- MCP:提供底层能力(GitHub API、文件读写、Slack 消息)
- Skill:定义分析流程、输出格式、错误处理
# 5.2 实战示例
Skill 定义:
---
name: pr-review-bot
description: 自动审查 PR 并发送报告
metadata:
{
"openclaw": {
"requires": { "env": ["GITHUB_TOKEN", "SLACK_WEBHOOK"] }
}
}
---
# PR 审查流程
每日 09:00 执行:
1. 调用 `github_list_prs` 获取待审查的 PR
2. 对每个 PR:
- 用 `github_get_pr_diff` 获取差异
- 分析代码质量、安全风险、性能问题
- 生成审查意见
3. 汇总后用 `slack_post_message` 发送到 #dev-team
输出格式:
- PR 标题和链接
- 问题列表(高/中/低优先级)
- 改进建议
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
MCP 配置:
{
"mcpServers": {
"github": {
"command": "mcp-server-github",
"env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
},
"slack": {
"command": "mcp-server-slack",
"env": { "SLACK_WEBHOOK": "${SLACK_WEBHOOK}" }
}
}
}
2
3
4
5
6
7
8
9
10
11
12
# 六、决策流程图
┌─────────────────┐
│ 需要扩展 Agent │
│ 能力 │
└────────┬────────┘
│
┌────────▼────────┐
│ 是否需要连接 │
│ 外部系统/数据? │
└────────┬────────┘
│
┌──────────────┴──────────────┐
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 是 │ │ 否 │
└──────┬──────┘ └──────┬──────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 是否需要 │ │ 是否需要 │
│ 跨平台复用? │ │ 定义流程? │
└──────┬──────┘ └──────┬──────┘
│ │
┌─────────┴─────────┐ ┌───────┴───────┐
│ │ │ │
▼ ▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ MCP │ │ 都可以 │ │ Skill │ │ 可能都 │
│ │ │ │ │ │ │ 需要 │
└────────┘ └────────┘ └────────┘ └────────┘
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 七、常见误区
# 7.1 "MCP 比 Skill 更高级"
错。两者定位不同:
- MCP 是连接层,负责暴露能力
- Skill 是编排层,负责组织行为
类比:MCP 是 USB 设备,Skill 是驱动程序的配置文件。
# 7.2 "Skill 只能用于简单任务"
错。Skill 可以很复杂:
- 包含多步流程、条件分支、循环
- 引用外部脚本、模板
- 定义子 Skill 嵌套调用
示例:xiaoshuo-writer Skill 包含完整的小说创作方法论。
# 7.3 "MCP 只能用于外部 API"
错。MCP 也可以暴露本地能力:
- 文件系统 MCP(读写本地文件)
- 数据库 MCP(查询本地 SQLite)
- 进程 MCP(执行 Shell 命令)
# 7.4 "用了 MCP 就不需要 Skill"
错。MCP 提供的是原子能力,Skill 负责组合使用:
- MCP:提供
github_create_issue工具 - Skill:定义"用户说 bug 时自动创建 Issue"的流程
# 八、最佳实践
# 8.1 MCP 开发建议
- 单一职责:一个 MCP Server 只负责一类系统
- 明确描述:Tool 的 description 要清晰,让 Agent 知道何时调用
- 错误处理:返回结构化错误,包含可操作的修复建议
- 幂等设计:多次调用相同参数应返回相同结果
- 文档完善:提供 README 和使用示例
# 8.2 Skill 编写建议
- 触发精准:description 要避免误触发
- 步骤清晰:用有序列表,每步一个动作
- 边界明确:说明什么情况不适用
- 引用工具:直接写工具名(
exec、read),不要模糊描述 - 示例驱动:关键步骤给出输入输出示例
# 8.3 组合使用建议
MCP(能力层) Skill(流程层) Agent(执行层)
│ │ │
│ github_* │ pr-review │
│ slack_* ────►│ deploy-flow ────►│ 墨隐
│ db_* │ report-gen │ 墨砚
│ │ │
2
3
4
5
6
- 先规划能力边界:确定哪些能力由 MCP 提供
- 再设计流程:用 Skill 编排这些能力
- 最后配置 Agent:指定允许使用的 Skill 和 MCP
# 九、快速参考表
| 需求 | 推荐方案 | 理由 |
|---|---|---|
| 连接数据库 | MCP | 数据源独立,可复用 |
| 连接 GitHub API | MCP | 官方已有现成 Server |
| 定义代码审查流程 | Skill | 编排多个工具 |
| 项目特定规范 | Skill | workspace 级别生效 |
| 跨平台使用 | MCP | 开放标准 |
| 快速原型 | Skill | 写个 Markdown 就能跑 |
| 长时间运行任务 | MCP | 独立进程,不阻塞 Agent |
| 多 Agent 共享能力 | MCP | Server 一次部署 |
| Agent 个性化行为 | Skill | 每个 Agent 可以有不同的 Skill |
# 十、总结
记住这句心法:
MCP 是 USB 接口,Skill 是驱动配置。
- 要接外部设备 → 用 MCP
- 要教电脑怎么用设备 → 用 Skill
- 两者结合 → 才能发挥最大价值
# 参考资料
- Model Context Protocol 官方文档 (opens new window)
- OpenClaw Skills 文档 (opens new window)
- ClawHub 技能市场 (opens new window)
- MCP Server 列表 (opens new window)
最后更新:2026-06-17 作者:墨隐