以下是关于插件、Skills、MCP、Hooks四个概念的关系与具体使用的总结,直接用于博客:
插件、Skills、MCP、Hooks 的关系与具体使用
一、它们是什么?
| 概念 | 一句话定义 | 类比 |
|---|---|---|
| 插件(Plugin) | 一个完整的工具包,包含多个组件 | 一个工具箱 |
| Skills(技能) | 插件的核心,定义"怎么做"的指令模板 | 工具箱里的具体工具 |
| MCP | 连接外部系统的标准化协议 | 工具箱上的USB接口 |
| Hooks(钩子) | 事件驱动的自动执行脚本 | 工具箱上的自动感应器 |
二、它们的关系
插件(Plugin)
├── Skills ← 核心能力(做什么、怎么做)
├── Hooks ← 自动反应(什么事件触发)
└── MCP ← 对外连接(怎么连外部)
关键理解:
- 插件 ≠ Skills ,插件包含 Skills
- Skills 决定"做什么",MCP 决定"怎么连外部"
- Hooks 是"自动触发",不需要手动调用
三、具体怎么用?
1. Skills 的使用
定义方式: 在 skills/ 目录下创建 SKILL.md 文件
markdown
# 代码审查 Skill
## 描述
对代码变更进行审查,检查代码质量和安全性。
## 触发条件
- 自动触发:用户要求审查代码时
- 手动触发:输入 /review
## 执行步骤
1. 读取变更文件
2. 检查代码风格、安全漏洞、性能问题
3. 生成审查报告
调用方式: Claude 自动触发,或用户输入 /skill-name 手动调用。
2. MCP 的使用
定义方式: 在项目根目录创建 .mcp.json 文件
json
{
"mcpServers": {
"销售数据库": {
"command": "node",
"args": ["sales-server.js"],
"description": "查询销售额、订单量、客户信息"
},
"人事数据库": {
"command": "node",
"args": ["hr-server.js"],
"description": "查询员工、职位、部门信息"
}
}
}
调用方式: Claude 根据 description 自动判断用哪个,或用户在对话中直接指定"去销售数据库查这个"。
关键机制:
- MCP 不是把所有数据读进上下文
- 启动时只记住"有哪些工具可用"
- 使用时按需调用,只拿查询结果
3. Hooks 的使用
定义方式: 在 .claude/hooks/ 目录下创建固定名称的脚本文件
.claude/hooks/
├── pre-tool-use.sh ← 工具使用前触发
├── post-tool-use.sh ← 工具使用后触发
├── session-start.sh ← 会话开始时触发
└── session-end.sh ← 会话结束时触发
示例脚本:
bash
#!/bin/bash
# post-tool-use.sh:每次写完代码自动格式化
npx prettier --write "$CLAUDE_FILE_PATH"
关键机制:
- 文件名必须是22个约定名称之一,不能随便起名
- 放对位置、取对名字,Claude 自动识别并执行
- 一次配置,永久自动执行
4. 插件的完整结构
plugin-name/
├── .claude-plugin/plugin.json ← 插件元数据(必需)
├── skills/ ← 技能定义(必需)
│ └── code-review/SKILL.md
├── hooks/ ← 自动脚本(可选)
│ └── post-tool-use.sh
├── .mcp.json ← 外部连接(可选)
└── README.md
最简插件 = plugin.json + 一个 Skill
四、一句话总结
插件是工具箱,Skills 是工具,MCP 是接口,Hooks 是自动感应器。
- Skills 告诉 Claude 做什么
- Hooks 让 Claude 自动做
- MCP 让 Claude 连外部做
四者配合,让大模型从"只会说话"变成"能动手干活的全能员工"。