Claude Skills vs MCP:区别与实战指南

一、开篇:两个工具,完全不同的定位

2025年10月和11月,Anthropic接连发布了Claude SkillsModel Context Protocol (MCP) 。这两个工具都能扩展Claude的能力,但很多人把它们当成"一回事",这导致在选择和配置时走了弯路。

核心区别一句话概括:Skills是"工作流说明书",MCP是"工具接口标准"。

如果你想让Claude按照固定流程做事(比如"按什么格式写代码审查报告"),用Skills

如果你想让Claude访问外部服务(比如GitHub、数据库、浏览器),用MCP

如果你需要同时做这两件事?Skills + MCP协同才是终极方案。

本文从技术原理、实战配置、使用场景三个维度,帮你彻底搞懂两者的区别,并能根据任务类型做出正确选择。


二、核心概念:Skill vs MCP的本质差异

❧Claude Skills:打包的工作流

Claude Skill本质上是一个文件夹,包含指令、脚本和资源。当Claude认为某个Skill与当前任务相关时,会自动加载该Skill的内容到上下文。

文件夹结构

bash 复制代码
skill-name/
├── SKILL.md          # 必需:技能说明文件
├── scripts/          # 可选:辅助脚本
├── templates/        # 可选:文档模板
└── resources/        # 可选:参考资料

Progressive Disclosure:渐进式加载

这是Skills最聪明的设计。Claude不会在启动时加载所有Skills的完整内容,而是按需加载

  1. 启动时 :只读取每个Skill的namedescription(几十个tokens)
  2. 识别时:根据你的请求判断需要哪个Skill
  3. 加载时 :调用Skill工具,读取该Skill的完整SKILL.md
  4. 执行时 :如果有需要,再读取scripts/resources/下的文件

这意味着你可以有100个Skills,但每次对话只会加载相关的1-2个,上下文窗口不会被爆掉

❧MCP Server:标准化的工具接口

MCP(Model Context Protocol)是一个开放标准协议,定义了AI模型如何与外部工具交互。MCP Server是一个运行在本地或远程的程序,通过stdio、HTTP或SSE协议向AI暴露工具。

三层架构

层级 能力 示例
Tool层 可执行的操作 add计数器get_alerts天气预警
Resource层 可读取的数据 counter状态forecast天气预报
Prompt层 可用的模板 analysis数据分析format格式化

传输方式对比

传输方式 适用场景 配置示例
stdio 本地脚本 "command": "python", "args": ["server.py"]
HTTP Web服务 "url": "http://localhost:3001/mcp"
SSE 实时推送 "url": "http://localhost:3001/mcp", "transport": "sse"

三、技术对比:能力边界与适用场景

维度 Claude Skills MCP Server
核心能力 固化工作方法论 暴露工具接口
输入输出 自然语言 → 自然语言 结构化调用 → 结构化返回
开发门槛 低(写markdown) 中(需写Server代码)
上下文消耗 高(加载完整指令) 低(每次只返回调用结果)
适用场景 固定流程任务 动态数据访问
典型用例 代码审查、文档生成 GitHub操作、数据库查询

❧什么时候用Skills?

判断标准:任务是"如何做"还是"做什么"?

  • Skills :当你有固定的工作流程,需要AI按步骤执行时

    • 示例:"按什么格式写技术教程"、"代码审查的5个步骤"
  • MCP :当你需要AI访问外部数据或服务

    • 示例:"查询GitHub的Issue"、"读取SQLite数据库"

❧什么时候用MCP?

判断标准:是否需要结构化输入输出?

  • MCP擅长:工具化操作

    • 输入:JSON结构化参数({"value": 10}
    • 输出:结构化结果({"total": 15}
    • 优势:可组合、可测试、可缓存
  • Skills擅长:文本化流程

    • 输入:自然语言描述
    • 输出:自然语言结果
    • 优势:灵活、易读、易维护

四、实战1:创建你的第一个Claude Skill

❧场景:代码审查Skill

Step 1:创建文件夹结构

css 复制代码
mkdir -p ~/.config/claude-code/skills/code-reviewer
cd ~/.config/claude-code/skills/code-reviewer

Step 2:编写SKILL.md

yaml 复制代码
---
name: code-reviewer
description: 专注于代码质量和架构的审查工具
---

# Code Reviewer

## 何时使用
- 提交代码前进行自审
- 审查同事的PR
- 重构时的架构评估

## 审查清单
- [ ] 安全性:是否有注入风险
- [ ] 性能:是否有低效查询
- [ ] 可读性:命名是否清晰
- [ ] 测试覆盖:关键路径是否有测试

## 指令
1. **快速扫描**:标记明显问题(空catch块、硬编码密钥)
2. **架构分析**:评估设计模式、依赖关系
3. **性能检查**:查找N+1查询、未优化循环
4. **具体建议**:给出可执行的修改方案

Step 3:测试Skill

css 复制代码
# 在Claude Code中测试
"使用code-reviewer审查这段代码:[你的代码]"

❧常见踩坑指南

问题 原因 解决方法
Skill触发不稳定 description不够明确 在请求中显式指定"使用xxx Skill"
上下文消耗大 SKILL.md内容太多 引用外部文件:参考 resources/checklist.md
版本混乱 Skill修改后没有生效 删除旧版本或重命名Skill文件夹

五、实战2:开发你的第一个MCP Server

❧场景:简单计数器MCP

Step 1:初始化项目

bash 复制代码
mkdir mcp-counter && cd mcp-counter
npm init -y
npm install @modelcontextprotocol/sdk zod

Step 2:编写Server代码

javascript 复制代码
// index.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({
  name: "Counter",
  version: "1.0.0"
});

let counter = 0;

// 注册Tool:add
server.tool(
  "add",
  "Add a value to the counter",
  {
    value: z.number().describe("Value to add")
  },
  async ({ value }) => {
    counter += value;
    return {
      content: [{
        type: "text",
        text: `Added ${value}, total is now ${counter}`
      }]
    };
  }
);

// 注册Tool:reset
server.tool(
  "reset",
  "Reset the counter to 0",
  {},
  async () => {
    counter = 0;
    return {
      content: [{
        type: "text",
        text: "Counter reset to 0"
      }]
    };
  }
);

// 注册Resource:counter状态
server.resource(
  "counter",
  "Current counter value",
  { uri: "mcp://resource/counter" },
  (uri) => {
    return {
      contents: [{ text: String(counter), uri: uri.href }]
    };
  }
);

// 启动Server
const transport = new StdioServerTransport();
await server.connect(transport);

Step 3:配置到Claude Code

~/.config/claude-code/mcp.json中:

json 复制代码
{
  "mcpServers": {
    "counter": {
      "command": "node",
      "args": ["index.ts"],
      "cwd": "/path/to/mcp-counter"
    }
  }
}

Step 4:测试MCP Server

bash 复制代码
# 使用MCP Inspector测试
npx @modelcontextprotocol/inspector node index.ts

❧MCP Server类型对比

类型 配置 适用场景
stdio "command": "python", "args": ["server.py"] 本地脚本、简单工具
HTTP "url": "http://localhost:3001/mcp" Web服务、远程调用
SSE "url": "http://localhost:3001/mcp", "transport": "sse" 实时推送、长连接

六、协同模式:Skills + MCP = 超能力

Skills和MCP不是互斥的,而是互补的

❧案例:自动化PR代码审查

需求:每当创建PR时,自动调用代码审查流程。

配置方案

perl 复制代码
// oh-my-opencode.json
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your_token"
      }
    }
  }
}

Skill工作流

markdown 复制代码
1. 使用github MCP获取PR信息
   ↓
2. code-reviewer Skill审查代码(遵循固定流程)
   ↓
3. 生成审查报告
   ↓
4. 使用github MCP发布评论

实际调用示例

less 复制代码
用户:审查GitHub PR #123
Sisyphus:
  1. 调用github MCP获取PR代码
  2. 使用code-reviewer Skill审查(按固定流程)
  3. 生成审查报告
  4. 调用github MCP发布评论

七、使用场景判断树

❧判断流程

  1. 你的任务有固定流程吗?

    • 是 → 使用Skills
    • 否 → 进入下一步
  2. 你需要访问外部数据或服务吗?

    • 是 → 使用MCP
    • 否 → 可能都不需要,直接用Claude对话即可
  3. 你的任务是否既需要固定流程,又需要外部数据?

    • 是 → Skills + MCP协同

八、最佳实践与成本优化

❧Skills优化建议

优化项 具体方法 效果
保持精简 SKILL.md控制在1-2KB以内 减少上下文消耗
外部引用 引用resources/和scripts/ 按需加载,避免一次性加载全部
版本控制 用git管理Skills 追踪变更、回滚

❧MCP优化建议

优化项 具体方法 效果
批量操作 支持一次处理多个请求 减少调用次数,降低延迟
缓存常用数据 使用Resource机制 避免重复计算
错误处理 返回清晰的错误信息 方便调试和重试

❧成本对比案例

假设任务:审查1000行代码,生成审查报告。

方案1:单Agent(Claude Code)

markdown 复制代码
全程用Claude 3.5 Sonnet:
- 代码扫描:50K tokens → $0.15
- 审查分析:30K tokens → $0.09
- 报告生成:20K tokens → $0.06
- 总计:100K tokens,**$0.30**

方案2:Skills + MCP协同

markdown 复制代码
- github MCP获取代码:5K tokens → $0.00
- code-reviewer Skill(加载指令):2K tokens → $0.00
- Claude Sonnet审查:20K tokens → $0.06
- github MCP发布评论:1K tokens → $0.00
- 总计:28K tokens,**$0.06**

节省80% ,且结果更精准(Skill定义的流程更规范)。


九、常见问题与解决方案

❧Q1:Skill和MCP能不能一起用?

A:可以,而且这是推荐的模式。

Skill可以调用MCP提供的工具。例如:

  • code-reviewer Skill调用github MCP获取PR信息
  • data-analyst Skill调用sqlite MCP读取数据库

❧Q2:Skill会被遗忘吗?

A:会,这是当前的一个限制。

Claude有时会"忘记"加载Skill,或者加载错Skill。

解决方法

  1. 在请求中显式指定:"使用code-reviewer Skill审查这段代码"
  2. 简化Skill的description,让触发更准确
  3. 复用高频Skill,降低遗忘概率

❧Q3:MCP需要写代码,有更简单的方式吗?

A:官方提供了预置MCP服务器。

预置MCP 功能 安装
server-memory 短期记忆 npx @modelcontextprotocol/server-memory
server-filesystem 文件系统访问 npx @modelcontextprotocol/server-filesystem /path/to/files
server-github GitHub操作 npx @modelcontextprotocol/server-github
server-sqlite SQLite数据库 npx @modelcontextprotocol/server-sqlite /path/to/db.db

❧Q4:Skill和MCP的性能对比如何?

A:MCP通常更快,但Skill更灵活。

  • MCP:每次只返回结构化结果,上下文消耗小,响应快
  • Skill:需要加载完整指令,上下文消耗大,但可以处理复杂逻辑

建议

  • 简单工具操作 → MCP
  • 复杂流程推理 → Skills
  • 混合任务 → Skills + MCP

❧Q5:如何调试Skills和MCP?

A:使用日志和调试工具。

工具 用法
Claude Code日志 查看Skill加载、MCP调用过程
MCP Inspector 测试MCP Server的工具和资源
--verbose 在配置中启用详细输出

十、总结与扩展

❧核心要点回顾

概念 本质 适用场景
Claude Skills 工作流说明书 固定流程任务(代码审查、文档生成)
MCP Server 工具接口标准 动态数据访问(GitHub、数据库)
Skills + MCP 超能力组合 复杂多阶段任务(自动化PR流程)

❧进阶学习路径

深入Skills

  • 学习Progressive Disclosure最佳实践
  • 掌握Skill的版本控制策略
  • 探索Skill之间的协同调用

深入MCP

  • 开发自定义MCP Server
  • 学习HTTP和SSE传输方式
  • 理解Tool、Resource、Prompt的完整能力

深入学习资源

❧互动引导

你目前遇到的开发任务,更适合用Skill还是MCP?

  • 固定流程(如代码审查、文档生成)→ 尝试创建你的第一个Skill
  • 外部服务(如GitHub、数据库)→ 尝试配置你的第一个MCP Server
  • 复杂任务(两者都需要)→ 思考如何让Skill调用MCP工具

欢迎在评论区分享你的实践经验,或者提问遇到的问题!


记住:Skills和MCP不是二选一的关系,而是可以协同的工具。理解它们的本质差异,你就能根据任务类型做出最优选择。

相关推荐
Miku1612 小时前
使用 Claude Code 的 pptx-skills 技能生成精美 EVA 主题 PPT 完整指南
aigc·agent·claude
甲维斯13 小时前
Claude Code 第三篇:SKILL技能入门和实战!
claude
IT 行者19 小时前
Claude之父AI编程技巧一:并行终端 + 系统通知——将Claude Code变成你的超级开发团队
ai编程·claude
yaocheng的ai分身1 天前
【anthropic官方文章】揭秘 AI Agents 的评估方法
claude
draking3 天前
Claude Code 2.1.2 升级报错?别折腾了,一行命令搞定
claude
小白点point3 天前
决战紫禁之巅:Opencode vs Claude Code,谁才是你的真·赛博义父?
ai编程·claude
草帽lufei4 天前
Claude Code最强开源对手OpenCode实测:免费使用GLM-4.7/MiniMax等高级模型
ai编程·claude·trae
chao_6666664 天前
【MCP】Claude Code for VS Code 配置阿里云 MCP 工具教程
阿里云·云计算·claude·mcp