本文由 简悦 SimpRead 转码, 原文地址 jishuzhan.net
2025 年 10 月和 11 月,Anthropic 接连发布了 Claude Skills 和 Model Context Protocol (MCP) 。
AI 首席情报员_阿布 2026-01-11 18:31
一、开篇:两个工具,完全不同的定位
2025 年 10 月和 11 月,Anthropic 接连发布了 Claude Skills 和 Model 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 的完整内容,而是按需加载:
- 启动时 :只读取每个 Skill 的
name和description(几十个 tokens) - 识别时:根据你的请求判断需要哪个 Skill
- 加载时 :调用
Skill工具,读取该 Skill 的完整SKILL.md - 执行时 :如果有需要,再读取
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}) - 优势:可组合、可测试、可缓存
- 输入:JSON 结构化参数(
-
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发布评论
七、使用场景判断树

❧判断流程
-
你的任务有固定流程吗?
- 是 → 使用 Skills
- 否 → 进入下一步
-
你需要访问外部数据或服务吗?
- 是 → 使用 MCP
- 否 → 可能都不需要,直接用 Claude 对话即可
-
你的任务是否既需要固定流程,又需要外部数据?
- 是 → 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-reviewerSkill 调用githubMCP 获取 PR 信息data-analystSkill 调用sqliteMCP 读取数据库
❧Q2:Skill 会被遗忘吗?
A:会,这是当前的一个限制。
Claude 有时会 “忘记” 加载 Skill,或者加载错 Skill。
解决方法:
- 在请求中显式指定:“使用 code-reviewer Skill 审查这段代码”
- 简化 Skill 的 description,让触发更准确
- 复用高频 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 的完整能力
深入学习资源:
- Claude Skills 官方文档:docs.claude.com/en/docs/age…
- MCP 协议规范:modelcontextprotocol.io/docs[2]
- awesome-claude-skills:github.com/anthropics/…
❧互动引导
你目前遇到的开发任务,更适合用 Skill 还是 MCP?
- 固定流程(如代码审查、文档生成)→ 尝试创建你的第一个 Skill
- 外部服务(如 GitHub、数据库)→ 尝试配置你的第一个 MCP Server
- 复杂任务(两者都需要)→ 思考如何让 Skill 调用 MCP 工具
欢迎在评论区分享你的实践经验,或者提问遇到的问题!
记住:Skills 和 MCP 不是二选一的关系,而是可以协同的工具。理解它们的本质差异,你就能根据任务类型做出最优选择。