前言
在前几篇文章中,我们分别介绍了OpenClaw的整体架构、多Agent功能,以及Anthropic的MCP协议。今天我们来深入探讨OpenClaw的Skill系统,并将其与MCP进行详细对比。
这两个系统都试图解决同一个问题:如何扩展AI Agent的能力。但它们的设计理念和实现方式有着根本性的差异。
什么是Skill?
在OpenClaw中,Skill(技能) 是一种轻量级的扩展机制,用于教会Agent如何使用工具完成任务。每个Skill本质上是一个包含SKILL.md文件的目录:
1 | skills/ |
Skill的核心结构
1 | --- |
Skill的加载位置
OpenClaw从三个位置加载Skill,优先级从高到低:
| 位置 | 说明 | 优先级 |
|---|---|---|
<workspace>/skills |
工作区Skill | 最高 |
~/.openclaw/skills |
托管/本地Skill | 中 |
| Bundled Skills | 内置Skill | 最低 |
Skill的核心机制
1. Gating(门控过滤)
Skill可以在加载时进行条件过滤,决定是否启用:
1 | --- |
支持的过滤条件:
bins: 必须存在于PATHanyBins: 至少一个存在env: 环境变量必须存在config: 配置项必须为真os: 限定操作系统(darwin/linux/win32)
2. 环境注入
Skill可以注入环境变量和API Key:
1 | // ~/.openclaw/openclaw.json |
3. 热重载
OpenClaw支持Skill的热重载:
1 | { |
修改SKILL.md后,无需重启Gateway即可生效。
4. 安装器集成
Skill可以声明安装方式:
1 | --- |
支持的安装方式:
- brew: Homebrew
- node: npm/pnpm/yarn/bun
- go: Go install
- download: 直接下载
Skill vs MCP:设计理念对比
| 维度 | OpenClaw Skill | MCP |
|---|---|---|
| 定位 | Agent能力扩展包 | 通用协议标准 |
| 协议 | 无协议,直接加载 | JSON-RPC 2.0 |
| 传输 | 无(本地文件) | Stdio / HTTP |
| 粒度 | 细粒度(单个能力) | 粗粒度(完整服务器) |
| 发现 | 自动扫描目录 | 手动连接 + */list |
| 状态 | 无状态 | 有状态(生命周期) |
| 扩展性 | 修改Markdown | 实现完整服务器 |
设计哲学差异
Skill的设计哲学:
“简单至上,一个Markdown文件就是一个能力”
- 轻量级:不需要写服务器代码
- 零协议:直接在Agent进程中加载
- 即插即用:放个目录就能用
- 人类可读:直接编辑Markdown
MCP的设计哲学:
“标准化优先,通用协议连接一切”
- 完整协议:JSON-RPC + 生命周期管理
- 进程隔离:独立服务器进程
- 跨应用:任何MCP客户端都能用
- 企业级:支持认证、会话、流式
技术实现对比
Skill的执行流程
1 | 用户消息 |
特点:
- 无进程间通信
- 无序列化开销
- 共享Agent上下文
MCP的执行流程
1 | 用户消息 |
特点:
- 进程隔离
- JSON-RPC序列化
- 需要生命周期管理
Token开销对比
Skill的Token开销:
1 | 基础开销(有Skill时): 195 chars |
MCP的Token开销:
1 | 每个Tool需要完整描述: |
Skill略轻量,但差异不大。关键是MCP的inputSchema通常更详细。
使用场景对比
什么时候用Skill?
✅ 适合Skill的场景:
- 快速添加新能力(5分钟搞定)
- 个人或小团队使用
- 不需要跨应用共享
- 能力相对简单
- 不需要独立进程隔离
1 | # 创建一个Skill只需要 |
什么时候用MCP?
✅ 适合MCP的场景:
- 需要跨多个AI应用使用(Claude Desktop、VS Code、Zed)
- 企业级部署
- 需要独立的认证和权限管理
- 能力复杂,需要完整的服务器逻辑
- 需要支持Sampling/Elicitation等高级特性
1 | // 创建一个MCP Server需要 |
深度对比:核心能力
1. 工具定义
Skill方式:
1 | When user asks to search: |
特点:自然语言描述,灵活但不够严格
MCP方式:
1 | { |
特点:结构化定义,类型安全,自动验证
2. 状态管理
Skill:无状态,每次调用独立
MCP:有状态,支持:
- 会话管理(
Mcp-Session-Id) - 能力协商(
initialize) - 动态通知(
notifications/tools/list_changed)
3. 双向通信
Skill:单向(Agent → Skill指令)
MCP:双向
- Sampling:Server可请求LLM补全
- Elicitation:Server可请求用户输入
4. 安全模型
Skill:
- 直接在Agent进程内执行
- 共享Agent权限
- 依赖沙箱隔离
MCP:
- 进程隔离
- 独立认证
- 用户显式授权
实战:创建一个Skill
场景:翻译助手
1 | mkdir -p ~/.openclaw/workspace/skills/translator |
SKILL.md:
1 | --- |
就这么简单!无需编写任何服务器代码。
实战:创建一个MCP Server
同样的翻译功能,用MCP实现:
1 | // server.ts |
明显更复杂,但换来的是:
- 类型安全
- 跨应用兼容
- 独立部署
ClawHub:Skill生态
OpenClaw提供了 ClawHub 作为公开的Skill注册中心:
- 网址:clawhub.com
- 浏览、安装、更新Skill
- 一键安装:
clawhub install <skill-slug> - 批量更新:
clawhub update --all
这类似于:
- MCP的 github.com/modelcontextprotocol/servers
- npm的包注册中心
融合:OpenClaw对MCP的支持
OpenClaw并不排斥MCP,事实上它可以作为MCP Host连接MCP Server:
1 | { |
这意味着你可以在OpenClaw中:
- 使用Skill进行轻量级扩展
- 同时连接MCP Server获取复杂能力
- 两者并存,各取所长
决策指南
1 | ┌─────────────────────┐ |
总结
| 特性 | Skill | MCP |
|---|---|---|
| 上手难度 | ⭐ 极低 | ⭐⭐⭐ 中等 |
| 灵活性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 跨应用 | ❌ | ✅ |
| 类型安全 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 进程隔离 | ❌ | ✅ |
| 双向通信 | ❌ | ✅ |
| 企业级 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 个人使用 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
我的建议:
- 个人开发者:优先用Skill,快速迭代
- 团队/企业:核心能力用MCP,确保标准化
- 混合场景:Skill处理小需求,MCP处理大能力
OpenClaw的Skill系统代表了极简主义的扩展哲学,而MCP代表了标准化的企业级方案。两者并非对立,而是为不同场景提供了合适的工具。
相关链接:
- OpenClaw Skills文档:docs.openclaw.ai/tools/skills
- ClawHub技能市场:clawhub.com
- MCP规范:modelcontextprotocol.io
- 上一篇:OpenClaw多Agent实战教程