本文由 简悦 SimpRead 转码, 原文地址 jishuzhan.net

2025 年 10 月和 11 月,Anthropic 接连发布了 Claude Skills 和 Model Context Protocol (MCP) 。

AI 首席情报员_阿布 2026-01-11 18:31

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

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 的内容到上下文。

文件夹结构

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"]
HTTPWeb 服务"url": "http://localhost:3001/mcp"
SSE实时推送"url": "http://localhost:3001/mcp", "transport": "sse"

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

维度Claude SkillsMCP 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:创建文件夹结构

mkdir -p ~/.config/claude-code/skills/code-reviewer
cd ~/.config/claude-code/skills/code-reviewer

Step 2:编写 SKILL.md

---
name: code-reviewer
description: 专注于代码质量和架构的审查工具
---
 
# Code Reviewer
 
## 何时使用
- 提交代码前进行自审
- 审查同事的PR
- 重构时的架构评估
 
## 审查清单
- [ ] 安全性:是否有注入风险
- [ ] 性能:是否有低效查询
- [ ] 可读性:命名是否清晰
- [ ] 测试覆盖:关键路径是否有测试
 
## 指令
1. **快速扫描**:标记明显问题(空catch块、硬编码密钥)
2. **架构分析**:评估设计模式、依赖关系
3. **性能检查**:查找N+1查询、未优化循环
4. **具体建议**:给出可执行的修改方案
 

Step 3:测试 Skill

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

❧常见踩坑指南

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

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

❧场景:简单计数器 MCP

Step 1:初始化项目

mkdir mcp-counter && cd mcp-counter
npm init -y
npm install @modelcontextprotocol/sdk zod
 

Step 2:编写 Server 代码

// 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中:

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

Step 4:测试 MCP Server

# 使用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 时,自动调用代码审查流程。

配置方案

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

Skill 工作流

1. 使用github MCP获取PR信息

2. code-reviewer Skill审查代码(遵循固定流程)

3. 生成审查报告

4. 使用github MCP发布评论
 

实际调用示例

用户:审查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)

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

方案 2:Skills + MCP 协同

- 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-githubGitHub 操作npx @modelcontextprotocol/server-github
server-sqliteSQLite 数据库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 不是二选一的关系,而是可以协同的工具。理解它们的本质差异,你就能根据任务类型做出最优选择。