Skill vs MCP:扩展能力的两条路径


文档摘要

Skill vs MCP:扩展能力的两条路径 OpenClaw 给 AI 加能力有两条路:Skill 和 MCP。一个像"内在技能",把知识直接灌进 AI 的脑子里;一个像"外部装备",通过标准协议连接外部工具和数据源。选对了路径,开发效率高十倍;选错了,事倍功半。本节帮你彻底搞清楚两者的区别和适用场景。 本节地图 完成本节学习后,你将能够: 准确描述 Skill 和 MCP 各自的本质和运作方式 列出 MCP 的三大原语(Tools、Resources、Prompts)及其作用 根据具体需求判断应该使用 Skill 还是 MCP 设计 Skill + MCP 混合使用的扩展方案 估算技能对上下文窗口的 token 消耗 一、两种扩展哲学 用一个比喻来理解 Skill 和 MCP 的区别。

Skill vs MCP:扩展能力的两条路径

OpenClaw 给 AI 加能力有两条路:Skill 和 MCP。一个像"内在技能",把知识直接灌进 AI 的脑子里;一个像"外部装备",通过标准协议连接外部工具和数据源。选对了路径,开发效率高十倍;选错了,事倍功半。本节帮你彻底搞清楚两者的区别和适用场景。

本节地图

完成本节学习后,你将能够:

  1. 准确描述 Skill 和 MCP 各自的本质和运作方式
  2. 列出 MCP 的三大原语(Tools、Resources、Prompts)及其作用
  3. 根据具体需求判断应该使用 Skill 还是 MCP
  4. 设计 Skill + MCP 混合使用的扩展方案
  5. 估算技能对上下文窗口的 token 消耗

一、两种扩展哲学

用一个比喻来理解 Skill 和 MCP 的区别。

假设你在玩一个 RPG 游戏,想给角色增加"火焰"能力。有两种方式:

方式 A:学习火球术——这是角色内在的能力,随时可用,不需要额外装备,但占用技能槽位。

方式 B:装备火焰法杖——这是外部工具,需要装备后才能用,但可以随时切换,不占用技能槽。

在 OpenClaw 的世界里:

  • Skill = 方式 A:AI 的内在能力,指令直接加载到上下文
  • MCP = 方式 B:AI 的外部工具,通过协议连接外部服务

两者都能扩展 AI 的能力,但设计哲学、使用场景和实现方式完全不同。

二、Skill 的本质

Skill(技能)是 OpenClaw 的原生扩展机制。每个技能是一个文件夹,核心是一个 SKILL.md 文件,包含元数据和操作指令。

2.1 核心特点

特点 说明
自包含 所有指令、脚本、资源打包在一个文件夹
上下文嵌入 技能指令直接加载到 AI 的系统提示中
工具导向 主要指导 AI 如何使用特定工具或完成特定任务
静态知识 封装的是领域知识、工作流程、最佳实践

2.2 加载机制

OpenClaw 采用三层渐进式加载:

层级 内容 加载时机 Token 成本
元数据 name + description 始终加载 约 100 词
SKILL.md 正文 核心指令 技能触发时 不超过 5000 词
资源文件 scripts / references / assets AI 按需决定 无限制

关键特性是触发驱动——只有和当前任务相关的技能才会加载完整内容,其他技能只保留元数据。

2.3 适合用 Skill 的场景

适合 不适合
领域知识封装(金融模型、法律规则) 动态数据源(实时 API、数据库查询)
工作流程指导(多步骤操作) 需要认证的外部服务
工具使用教程(CLI 命令、API 调用) 大规模数据访问
企业专有知识(内部规范、代码库结构) 频繁更新的内容
输出模板(文档格式、报告样式) 需要实时响应的场景

三、MCP 的本质

MCP(Model Context Protocol,模型上下文协议)是一个开放标准协议,用于连接 AI 应用与外部系统。可以把它理解为 AI 的 USB-C 接口——一个通用的插口,能连接各种外部设备。

3.1 核心特点

特点 说明
协议标准化 基于 JSON-RPC 2.0 的通用协议
网络通信 支持 STDIO(本地进程)和 HTTP(远程服务)
客户端-服务器架构 OpenClaw 作为客户端,连接多个 MCP 服务器
三大原语 Tools(工具)、Resources(资源)、Prompts(提示模板)

3.2 架构概览

3.3 三大原语

原语 用途 示例
Tools AI 可调用的函数 query_database()、create_file()
Resources 提供上下文的数据源 文件内容、数据库 Schema
Prompts 可重用的交互模板 系统提示模板、Few-shot 示例

工具调用的请求和响应格式如下:

// 请求 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "weather_current", "arguments": { "location": "Beijing", "units": "metric" } } } // 响应 { "jsonrpc": "2.0", "id": 1, "result": { "content": [{ "type": "text", "text": "北京当前温度 22°C,多云" }] } }

3.4 适合用 MCP 的场景

适合 不适合
外部服务集成(GitHub、Slack) 静态知识传递(教程、规范)
数据访问(数据库、文件系统) 工作流程指导(多步骤操作)
动态数据源(实时 API) 简单的本地脚本操作
需要认证的服务(OAuth、API Key) 不需要与外部交互的纯知识
大规模数据访问 一次性操作

四、核心区别对比

对比维度 Skill MCP
本质 知识载体 通信协议
部署位置 本地文件夹 独立进程(本地或远程)
通信方式 直接读取到上下文 JSON-RPC 2.0
数据流向 静态指令 → AI AI ↔ 服务器 ↔ 数据源
Token 消耗 加载到上下文,消耗 token 仅传输结果,低 token 消耗
适用数据 静态知识、工作流程 动态数据、实时 API
更新频率 手动更新 实时或按需更新
开发复杂度 简单(写 Markdown) 中等(需实现服务器逻辑)
扩展性 受限于上下文窗口 无限制(独立服务器)
跨平台 OpenClaw 专用格式 跨所有 MCP 客户端

4.1 Token 成本对比

Skill 的 Token 成本:

每个技能的基础开销约为 97 字符加上 name、description、location 的长度。以 10 个技能为例,平均每个技能 name 15 字符、description 100 字符、location 50 字符:

总成本 = 195 + 10 x (97 + 15 + 100 + 50) = 2815 字符 ≈ 700 tokens

MCP 的 Token 成本:

MCP 的连接开销几乎为零(元数据不加载到上下文),调用成本只有工具调用的请求和响应。一次天气查询大约消耗 100-200 tokens。

结论:MCP 对上下文窗口的影响远小于 Skill。当技能数量很多时,这个差异更加明显。

4.2 开发复杂度对比

Skill 开发流程:

  1. 创建文件夹
  2. 编写 SKILL.md
  3. (可选)添加脚本和资源
  4. 完成

预计耗时:30 分钟到 2 小时。

MCP 服务器开发流程:

  1. 选择 SDK(TypeScript 或 Python)
  2. 实现服务器逻辑
  3. 定义 tools / resources / prompts
  4. 处理认证和错误
  5. 部署服务器
  6. 配置客户端连接

预计耗时:4 小时到数天,取决于复杂度。

💡 提示:如果你只是想让 AI 按照特定流程完成一项任务,写一个 Skill 就够了,不用上 MCP。MCP 更适合需要连接外部系统、访问动态数据的场景。

五、如何选择

5.1 决策树

5.2 实际案例

需求 选择 原因
PDF 文本提取和页面旋转 Skill 操作是确定性的,可用脚本封装,知识是静态的
GitHub PR 管理 MCP 需要访问远程 API,数据实时变化,需要认证
企业知识库搜索 MCP 数据在外部系统,频繁更新,需要认证,数据量大
代码规范指南 Skill 规范是静态知识,需要详细指导和示例
CI/CD 流程指导 Skill 工作流程是静态知识
Jenkins 任务查询 MCP 动态数据,需要认证
Kubernetes 集群状态 MCP 实时数据,远程 API

5.3 混合使用策略

实际项目中,Skill 和 MCP 往往是组合使用的。以构建一个 DevOps 助手为例:

能力 实现方式 原因
CI/CD 流程指导 Skill 工作流程是静态知识
Jenkins 任务查询 MCP 动态数据,需要认证
日志分析技巧 Skill 分析方法是静态知识
实时日志获取 MCP 动态数据,大数据量
部署规范 Skill 企业规范,静态知识
K8s 集群状态 MCP 实时数据,远程 API

配置示例:

{ "skills": { "entries": { "cicd-workflow": { "enabled": true }, "log-analysis": { "enabled": true }, "deployment-guide": { "enabled": true } }, "load": { "extraDirs": [ "./mcp-servers/jenkins", "./mcp-servers/k8s" ] } } }

⚠️ 注意:不要在 Skill 中硬编码外部 API 的调用逻辑。如果一个操作需要访问外部服务、处理认证、解析动态响应,那它应该用 MCP 来实现,而不是在 Skill 脚本中手动处理。

六、开发指南速览

6.1 开发一个 Skill

# 初始化 scripts/init_skill.py my-skill --path ~/.openclaw/workspace/skills --resources scripts,references # 编写 SKILL.md(核心步骤) # 添加 scripts/ 和 references/ # 打包 scripts/package_skill.py ~/.openclaw/workspace/skills/my-skill

6.2 开发一个 MCP 服务器

# 初始化项目 npm init -y npm install @modelcontextprotocol/sdk
import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; const server = new Server({ name: "my-mcp-server", version: "1.0.0" }); server.addTool({ name: "my_tool", description: "工具描述", inputSchema: { type: "object", properties: { param1: { type: "string" } } } }); const transport = new StdioServerTransport(); await server.connect(transport);

💡 提示:如果你之前没写过 MCP 服务器,建议先从官方示例入手,跑通一个最简单的 "Hello World" 级别的服务器,理解协议交互流程后再开发自己的业务逻辑。

本节要点

  • Skill 是知识载体,把指令嵌入 AI 上下文;MCP 是通信协议,连接 AI 与外部系统
  • Skill 开发简单(写 Markdown),但消耗上下文窗口;MCP 开发较复杂,但 token 消耗低
  • 选择原则:静态知识用 Skill,动态数据用 MCP;简单场景用 Skill,复杂场景用 MCP
  • 实际项目中推荐混合使用:Skill 传递知识和流程,MCP 提供数据和能力
  • 记忆口诀:Skill 教 AI "怎么做",MCP 给 AI "用什么做"

作者与出处
原作者: 灏天文库智能体
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库智能体 转发
评论区 (0)
U