MCP、Skills、Plugins、Hooks 是什么?Claude Code 四大扩展机制完整解析
发布日期:2026-06-26 | 话题:AI 编程工具 | 适用人群:Claude Code 用户、开发者、AI 工具探索者
Claude Code 的四大扩展机制经常被混为一谈,但它们解决的是完全不同的问题:MCP(Model Context Protocol)是让 Claude 连接外部系统的标准化协议,解决的是"Claude 能调用哪些工具"的问题;Skills 是 Markdown 格式的工作流指令文件,解决的是"Claude 在特定场景下遵循什么流程"的问题;Plugins 是把 Skills、Commands、Hooks、MCP 配置打包在一起的分发容器,解决的是"如何把一套配置分享给他人或跨项目复用"的问题;Hooks 是 Agent 执行生命周期中的拦截点,解决的是"特定操作发生时自动触发什么逻辑"的问题。四者层次不同、触发方式不同、适用场景不同——本文逐一解析每种机制的定义、配置方式、典型用法,以及它们之间的协作关系。

四者关系一览
在深入每个概念之前,先建立整体认知:
一句话总结它们的关系:MCP 给 Claude 装上手脚(工具),Skills 教 Claude 做事的方法论,Hooks 在每个动作前后加规则,Plugins 把这三样东西打包交付。
MCP:给 Claude 连接外部世界的标准协议
是什么
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 制定的开放标准,让 Claude Code 以统一方式与任意外部服务通信,调用外部工具、读取资源、执行操作。类比 HTTP 之于浏览器:HTTP 是浏览器访问网站的标准,MCP 是 Claude 调用外部工具的标准。
没有 MCP 之前:每个 AI 工具要集成 GitHub 就写一套 GitHub 适配,要集成 Slack 再写一套,N 个工具 × M 个服务 = N×M 套集成代码。
有了 MCP:服务商写一个 MCP Server,所有支持 MCP 的 AI 工具(Claude Code、Cursor、Copilot、Windsurf)都能直接连接。2026 年 MCP 已成为主流 AI 编程工具的通用标准。
MCP Server 的三类能力
配置方式
在 ~/.claude/settings.json 的 mcpServers 字段中添加:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"
}
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
},
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
}
配置后重启 Claude Code,在对话中可以直接说:
"查看 GitHub 仓库 owner/repo 最近 10 个 PR"
"读取 /docs/api-spec.md 文件内容"
Claude 会自动识别并调用对应 MCP Server 的工具。
常用 MCP Server
Skills:持久化工作流程的 Markdown 指令
是什么
Skill 是一个 Markdown 格式的工作流程文件,告诉 Claude 在特定场景下应该遵循什么步骤、参考什么规范、输出什么格式。
与 Prompt 的区别:Prompt 是每次对话手写的一次性指令;Skill 是持久化的、可复用的工作流——装上之后 Claude 自动读取并执行,不需要每次重复说明流程。
与 CLAUDE.md 的区别:CLAUDE.md 是项目级的背景知识(“这个项目是什么、不要改哪些文件”);Skill 是动作级的执行流程(“做代码审查时走这 5 步”)。
Skill 文件结构
---
description: 对 PR 进行安全性和规范性代码审查
---
# 代码审查 Skill
## 执行步骤
1. 读取改动的所有文件,列出修改了什么
2. 检查以下安全风险:
- SQL 注入(用户输入是否直接拼接进查询)
- XSS(输出到 HTML 的内容是否转义)
- 路径遍历(文件路径是否经过验证)
3. 检查代码规范:
- 函数命名是否符合驼峰命名
- 是否有未处理的 error
- 注释是否充分
4. 输出格式:
- 🔴 高风险:必须修复才能合并
- 🟡 中风险:建议修复
- 🟢 通过:无需修改
当前改动内容:$ARGUMENTS
Skill 的存放位置
全局 Skills(所有项目可用):
~/.claude/skills/skill名/skill.md
或
~/.claude/commands/skill名.md
项目级 Skills(只当前项目可用):
.claude/skills/skill名/skill.md
或
.claude/commands/skill名.md
触发方式
# 斜杠命令触发(文件名即命令名)
/code-review src/auth/login.ts
# 在对话中自然描述(Claude 自动匹配相关 Skill)
"帮我审查这个文件的安全性"
高价值 Skill 场景
● 代码审查(安全 + 规范 + 性能三维度)
● 提交前检查(lint + test + 提交信息格式)
● 技术文档生成(读代码 → 输出 API 文档)
● 数据库迁移安全审核
● 单测生成(按项目约定生成测试文件)
Hooks:Agent 生命周期的自动化切面
是什么
Hooks 是在 Claude Code 执行特定操作前后自动运行的脚本。类比 Git Hooks(pre-commit、post-merge)或 Spring AOP(切面编程):在 Agent 动作的特定节点插入你的逻辑,无需每次手动触发。
核心事件
来源:Claude Code 官方文档(code.claude.com/docs/en/hooks)。官网共定义 29 个事件,按使用频率列出高频事件:
注意:不存在 PreBash/PostBash/PreWrite/PostWrite 等具体工具事件——官网只有 PreToolUse/PostToolUse,通过 matcher 字段过滤具体工具(Bash、Write、Edit 等)。
配置方式
在 ~/.claude/settings.json 中配置:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/format-on-save.sh"
}
]
}
],
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/safety-check.sh"
}
]
}
]
}
}
脚本必须有执行权限:
chmod +x ~/.claude/hooks/format-on-save.sh
实用 Hook 脚本示例
格式化保存(PostToolUse,matcher: Write|Edit):
#!/bin/bash
# ~/.claude/hooks/format-on-save.sh
# 文件写入后自动运行 prettier
# Hook 输入通过 stdin 以 JSON 传入,用 jq 解析文件路径
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
if [[ "$FILE" =~ \.(ts|tsx|js|jsx)$ ]]; then
npx prettier --write "$FILE" 2>/dev/null
fi
危险命令拦截(PreToolUse,matcher: Bash):
#!/bin/bash
# ~/.claude/hooks/safety-check.sh
# 拦截高风险 Bash 命令
# Hook 输入通过 stdin 以 JSON 传入
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // empty')
DANGEROUS_PATTERNS=("rm -rf /" "git push --force" "DROP TABLE")
for pattern in "${DANGEROUS_PATTERNS[@]}"; do
if echo "$CMD" | grep -qi "$pattern"; then
echo "危险命令已被拦截: $pattern" >&2
exit 2 # exit 2 = 阻止该工具调用,stderr 内容反馈给 Claude
fi
done
退出码说明(来源:官方文档):exit 0 = 允许继续;exit 2 = 阻止当前工具调用,stderr 内容反馈给 Claude;exit 1(其他非零)= 非阻塞报错,执行继续——只有 exit 2 才能真正拦截操作。Hook 输入通过 stdin 以 JSON 传入,不是环境变量。

Plugins:把配置打包分发的容器
是什么
Plugin 不是一种新功能,而是把 Skills、Commands、Hooks、MCP 配置打包在一起的分发单元。类比:Skills/Hooks/MCP 是商品,Plugin 是快递包裹——包裹本身不是商品,但它让商品能被送达。
一个 Plugin 可以同时包含:
my-plugin/
├── skill.md # Skill 文件(工作流指令)
├── commands/
│ └── review.md # 自定义命令
├── hooks/
│ └── format.sh # Hooks 脚本
└── plugin.json # Plugin 元数据
plugin.json 示例:
{
"name": "code-quality",
"version": "1.2.0",
"description": "代码质量全流程套件:审查 + 自动格式化 + 提交检查",
"skills": ["skill.md"],
"commands": ["commands/review.md"],
"hooks": {
"PostWrite": "hooks/format.sh"
}
}
安装 Plugin
# 从本地目录安装
claude plugin install ./my-plugin/
# 从 GitHub 安装
claude plugin install github:用户名/仓库名
# 列出已安装的 Plugins
claude plugin list
Plugin vs 直接放文件
四者协作:一个完整场景的组合用法
以"提交代码前的质量检查流程"为例,四种机制如何协同:
用户运行 /pre-commit 命令(触发 Skill)
│
├── Skill 执行步骤:
│ 1. 读取 git diff(调用 Bash 工具)
│ 2. 调用 GitHub MCP Server 查看 PR 模板(MCP)
│ 3. 分析改动,按模板生成提交信息
│ 4. 运行测试命令
│
├── Hooks 并行触发:
│ PreBash:检查即将运行的测试命令是否安全
│ PostWrite:每次 Claude 修改文件后自动格式化
│ PostBash:测试跑完后记录结果到日志
│
└── Plugin 保证:
上述 Skill + Hooks + MCP 配置统一打包,
新成员一条命令安装,无需手动配置
选哪个:按需求快速决策
常见问题 FAQ
Q1:MCP 和 Claude Code 的内置工具(Bash、Read、Write)有什么区别?
内置工具(Bash、Read、Write、Edit 等)是 Claude Code 自带的基础能力,覆盖本地文件系统和命令执行,不需要任何配置。MCP 扩展的是这套内置能力之外的外部系统访问——GitHub、数据库、第三方 API 等。内置工具解决本地操作,MCP 解决外部集成,两者互补。
Q2:Skill 和 CLAUDE.md 里写的规则,哪个优先级更高?
两者不冲突,作用层次不同。CLAUDE.md 是项目背景和持久规则(“不要修改 migrations/ 目录”),在整个会话中始终生效;Skill 是特定任务的执行流程(“做代码审查时走这 5 步”),在触发时叠加到 CLAUDE.md 上。如果两者有矛盾指令,CLAUDE.md 的规则通常更基础,Skill 里的步骤在此约束下执行。
Q3:Hooks 脚本里能访问哪些上下文信息?
Hook 输入通过 stdin 以 JSON 格式传入脚本,不是环境变量。JSON 包含公共字段(session_id、cwd、hook_event_name、permission_mode)和事件特定字段(PreToolUse/PostToolUse 包含 tool_name、tool_input;PostToolUse 额外包含 tool_response)。脚本里用 INPUT=$(cat) 读取后用 jq 解析。此外有几个环境变量可直接用:CLAUDE_PROJECT_DIR(项目根目录)、CLAUDE_EFFORT(当前推理强度)、CLAUDE_PLUGIN_ROOT(插件目录)。来源:code.claude.com/docs/en/hooks。
Q4:Plugin 和 npm 包有什么关系?
部分 Plugin 发布为 npm 包,通过 npx 运行;也有直接是 Git 仓库或本地目录的 Plugin。Plugin 格式本身不绑定任何包管理器,核心是 plugin.json 元数据和目录结构约定。MCP Server 通常是 npm 包(通过 npx -y 按需下载运行),这是 MCP 生态的惯例,但 Plugin 不一定是 npm 包。
Q5:四种机制对性能(token 消耗)有影响吗?
Skill 文件会在触发时被加载进上下文,文件越长消耗越多 token——建议控制在 500 字以内。CLAUDE.md 每次会话全量加载,影响类似。MCP 工具调用本身不消耗大量 token,但工具返回的数据(如 GitHub API 返回的完整 PR 内容)会进入上下文,间接影响消耗。Hooks 脚本在 Claude Code 进程外运行,几乎不占用 token,是最"轻"的扩展方式。
小结
四大扩展机制各司其职:MCP 连接外部世界(GitHub/数据库/Slack),Skills 固化执行流程(代码审查/文档生成),Hooks 自动化生命周期(格式化/拦截危险命令),Plugins 打包分发配置(跨项目/团队共享)。实践上,个人用户先配置 1-2 个常用 Skill(减少重复提示词),再加关键 Hooks(格式化 + 危险命令拦截),再按需接 MCP Server;团队场景用 Plugin 把这套配置打包,新成员一键安装。
参考来源:
● Claude Code 官方文档:Hooks 完整参考(29 个事件、退出码、配置字段)
● Claude Code 官方文档:MCP 集成指南
● Fenno 官网:AI 编程