第 9 章:扩展能力 — MCP、Plugin 与 Skill
(申请发送: agentupdate)
9.1 为什么需要扩展
Claude Code 的核心功能是代码分析和编辑,但实际开发中经常需要连接外部服务、自动化重复工作流、或集成第三方工具。Claude Code 通过三种扩展机制满足这些需求:
- Claude Code 核心:代码理解、编辑、搜索、git 操作等基础能力
- MCP (Model Context Protocol):连接外部服务(数据库、API、工具、文件系统等)
- Plugin:打包的扩展集合,可包含 skills、MCP servers、hooks 等
- Skill:自定义命令和工作流,封装常用的操作模式
扩展让 Claude Code 从代码编辑工具升级为完整的开发工作流平台。
9.2 MCP 概念
MCP (Model Context Protocol) 是 AI 工具连接外部服务的标准协议。它定义了一套统一的接口,让 Claude Code 可以访问各种外部资源。
关键概念
- MCP Server:提供工具和数据的服务端程序
- MCP Tool:Server 暴露的具体工具,可通过 Claude Code 调用
- MCP Prompt:Server 提供的提示词,用于引导 AI 行为
常见 MCP Server
- filesystem:文件操作(读取、写入、搜索、监控等)
- github:GitHub 操作(issues、PR、仓库管理等)
- memory:持久记忆(跨会话存储和检索信息)
- web-reader:网页读取(抓取和解析网页内容)
MCP 工具命名规范
所有 MCP 工具在 Claude Code 中以 mcp__<server>__<tool> 格式命名,例如:
mcp__filesystem__read_filemcp__github__list_pull_requestsmcp__memory__store_observationmcp__web_reader__webReader
9.3 /mcp — 管理 MCP Server
语法
/mcp [subcommand]
功能说明
管理 MCP Server 的连接、配置和 OAuth 认证。
实际使用示例
/mcp
显示所有 MCP Server 的连接状态和配置信息。
添加新的 MCP Server 需要编辑配置文件:
// .claude/settings.json
{
"mcpServers": {
"my-database": {
"command": "node",
"args": ["/path/to/server.js"],
"env": {
"DATABASE_URL": "postgresql://..."
}
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "ghp_xxx"
}
}
}
}
查看特定 server 的详细信息:
/mcp github
刷新 MCP Server 连接:
/mcp --refresh
注意事项/技巧
- OAuth 认证:某些 MCP Server(如 GitHub)需要 OAuth 认证,按提示完成授权流程
- 本地 Server:可以开发自己的 MCP Server,通过
command字段指定启动命令 - 环境变量:敏感信息(如 API Token)通过
env字段配置,不要硬编码在参数中 - MCP Prompts:Server 提供的提示词会以
/mcp__<server>__<prompt>格式出现在命令列表中
9.4 /plugin — 管理插件
语法
/plugin [command] [plugin-name]
功能说明
安装、卸载、启用、禁用插件。插件是打包的扩展集合,可以包含以下组件:
- Skills:自定义命令
- MCP Servers:外部服务连接
- Hooks:自动触发的工作流
- Agents:专门的 AI 助手
实际使用示例
列出所有已安装的插件:
/plugin list
安装官方插件:
/plugin install @claude-code/plugin-github
启用插件:
/plugin enable github
禁用插件:
/plugin disable github
卸载插件:
/plugin uninstall github
搜索插件市场:
/plugin search testing
查看插件详情:
/plugin info @claude-code/plugin-github
注意事项/技巧
- 插件命名空间:官方插件以
@claude-code/plugin-前缀开头 - 依赖管理:插件可能依赖其他插件或 MCP Server,安装时注意提示
- 权限控制:插件可能请求额外的 Bash 或文件权限,安装前确认安全
- 插件市场:探索
https://github.com/topics/claude-code-plugin发现社区插件
9.5 /skills — 列出可用技能
语法
/skills
功能说明
交互式浏览和管理所有可用的 skills,包括内置 skills、自定义 skills 和插件提供的 skills。
实际使用示例
启动技能管理器:
/skills
在交互界面中:
- 按
↑/↓选择 skill - 按
t按指令令计数排序 - 按
Space隐藏/显示 skill(不会删除,只是在列表中隐藏) - 按
Enter保存设置并退出 - 按
q退出不保存
显示特定技能的详细信息:
/skills --detail brainstorming
按名称过滤技能:
/skills --filter git
注意事项/技巧
- 技能来源:skills 来自三个地方:
- 内置技能(如
/brainstorming、/review) - 项目级自定义技能(
.claude/skills/) - 个人级自定义技能(
~/.claude/skills/) - 插件提供的技能
- 内置技能(如
- 指令令计数:
t排序有助于识别哪些技能可能消耗较多指令令 - 隐藏功能:隐藏的 skill 仍然可以被直接调用(如
/hidden-skill),只是在/skills列表中不显示 - 热更新:修改 SKILL.md 后,不需要重启 Claude Code,下次调用时会自动重新加载
9.6 创建自定义 Skill
基本结构
自定义 Skill 是一个包含 SKILL.md 文件的目录,可以放在:
- 项目级:
.claude/skills/<skill-name>/SKILL.md(仅当前项目可用) - 个人级:
~/.claude/skills/<skill-name>/SKILL.md(所有项目可用)
SKILL.md 格式
SKILL.md 由两部分组成:
- YAML Frontmatter(
---之间的元数据) - Markdown 说明内容(Claude 阅读的指令)
示例 SKILL.md
---
name: stats
description: 显示项目统计信息
disable-model-invocation: true
allowed-tools: ["Bash", "Read"]
context: fork
arguments:
- name: format
description: 输出格式(table/json)
default: table
---
请显示以下项目统计信息:
当前文件数:`!find src -type f | wc -l`
总代码行数:`!find src -name "*.js" -o -name "*.ts" | xargs wc -l | tail -1`
测试覆盖率:`!npm test -- --coverage --json | grep total | head -1`
输出格式:$ARGUMENTS[0]
关键 Frontmatter 字段
name:Skill 的显示名称(如stats,对应调用方式/stats)description:Claude 用于决定何时自动调用的描述disable-model-invocation: true:禁止 Claude 自动调用此 skill,必须显式调用allowed-tools:预批准的工具列表,调用时不会询问权限(谨慎使用)context: fork:在隔离的 subagent 中运行,不影响当前会话状态arguments:定义可接受的参数,包括名称、描述、默认值
动态注入
使用 !command`` 语法在发送给 Claude 前执行 shell 命令,将输出注入到 prompt 中:
当前分支:`!git branch --show-current`
最新提交:`!git log -1 --oneline`
辅助文件
SKILL.md 所在目录可以包含其他辅助文件:
scripts/:可执行脚本templates/:代码模板examples/:示例文件
这些文件的路径可通过 ${CLAUDE_SKILL_DIR} 引用。
字符串替换
支持以下占位符:
$ARGUMENTS:所有参数(空格分隔)$ARGUMENTS[N]:第 N 个参数(从 0 开始)$N:同$ARGUMENTS[N]${CLAUDE_SESSION_ID}:当前会话 ID${CLAUDE_SKILL_DIR}:Skill 所在目录路径
示例:
参数 0:$0
所有参数:$ARGUMENTS
Skill 目录:${CLAUDE_SKILL_DIR}
实际使用示例
- 创建项目级 skill:
mkdir -p .claude/skills/project-info
cat > .claude/skills/project-info/SKILL.md << 'EOF'
---
name: project-info
description: 显示项目基本信息
---
项目名称:my-pomodoro
当前分支:`!git branch --show-current`
最后更新:`!git log -1 --format="%ai"`
EOF
- 调用 skill:
/project-info
- 创建带参数的 skill:
---
name: grep
description: 在项目中搜索模式
arguments:
- name: pattern
description: 搜索模式
required: true
- name: file-type
description: 文件类型(如 ts、js)
---
在所有 .$ARGUMENTS[1] 文件中搜索 "$0":
`!find src -name "*.$1" -exec grep -l "$0" {} \;`
调用方式:
/grep "useState" ts
注意事项/技巧
- 安全性:动态注入的 shell 命令会以当前用户权限执行,避免传入用户输入
- 性能:每个
!command`` 都会产生一次 shell 调用,大量使用会影响性能 - 调试:创建 skill 后,可以通过
cat .claude/skills/<name>/SKILL.md查看内容 - 版本控制:项目级 skills 应提交到 git,个人级 skills 可同步到 dotfiles
- 描述准确性:
description字段影响 Claude 的自动调用决策,应简洁准确
9.7 /reload-plugins — 热重载
语法
/reload-plugins
功能说明
重新加载所有活跃的插件,无需重启 Claude Code。
实际使用示例
/reload-plugins
输出示例:
Reloading plugins...
- @claude-code/plugin-github: OK (5 skills, 2 MCP servers)
- @claude-code/plugin-memory: OK (3 skills, 1 MCP server)
- my-custom-plugin: OK (1 skill)
Total: 9 skills, 3 MCP servers
注意事项/技巧
- 开发调试:开发插件时频繁使用此命令测试更改
- 错误报告:如果插件加载失败,会显示具体错误信息
- 不影响会话:重载不会中断当前的对话或已打开的文件
- MCP 重连:MCP servers 也会重新连接,可能需要重新认证
9.8 /claude-api — API 参考
语法
/claude-api [command] [language]
功能说明
为当前项目的编程语言加载 Claude API 的参考文档,包括最新 API 使用方法、最佳实践和代码示例。
实际使用示例
为 Python 项目加载 API 参考:
/claude-api python
为 TypeScript 项目加载:
/claude-api typescript
升级旧版 API 代码:
/claude-api migrate
自动检测项目语言并加载:
/claude-api
支持的语言
- Python (
anthropic包) - TypeScript/JavaScript (
@anthropic-ai/sdk包) - Java (
anthropic-java包) - Go (
github.com/anthropics/anthropic-sdk-go包) - 其他语言
注意事项/技巧
- 自动检测:如果不指定语言,会根据
package.json、requirements.txt等文件自动检测 - 迁移功能:
migrate命令可以自动更新旧版 API 代码到最新版本 - 缓存优化:文档会被缓存,第二次加载会更快
- 离线使用:首次加载后可以离线使用(依赖本地缓存)
9.9 动手做:扩展番茄钟
通过实践学习如何使用 MCP 和自定义 Skill 扩展番茄钟项目。
步骤 1:添加 web-reader MCP Server
首先添加 web-reader MCP Server,让 Claude Code 可以读取网页内容。
编辑 .claude/settings.json:
{
"mcpServers": {
"web-reader": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-web-reader"]
}
}
}
验证 MCP Server 是否加载成功:
/mcp
步骤 2:获取 UI 设计灵感
现在让 Claude 通过 MCP 读取网页,获取番茄钟应用的 UI 设计灵感:
使用 web-reader MCP 工具读取番茄计时器设计的最佳实践网页,为我的项目提供 UI 优化建议。
Claude 会调用 mcp__web_reader__webReader 工具获取网页内容,然后提供建议。
步骤 3:创建自定义 Skill /pomodoro-stats
创建一个 skill 来统计今日完成的番茄数。
首先创建目录和文件:
mkdir -p .claude/skills/pomodoro-stats
编写 SKILL.md:
---
name: pomodoro-stats
description: 显示今日番茄钟统计
disable-model-invocation: true
---
今日番茄钟统计
当前数据:
`!cat src/data/stats.json`
基于以上数据,请显示:
1. 今日完成的番茄数
2. 本周完成的番茄数
3. 平均专注时长
4. 休息时间占比
创建示例数据文件:
{
"today": 8,
"thisWeek": 42,
"averageFocusMinutes": 25,
"breakPercentage": 15
}
步骤 4:确认新 Skill
使用 /skills 命令查看新 skill 是否出现在列表中:
/skills
在列表中找到 pomodoro-stats,确认它的 disable-model-invocation 状态正确。
步骤 5:测试 Skill
调用新创建的 skill:
/pomodoro-stats
预期输出:
今日番茄钟统计
当前数据:
{
"today": 8,
"thisWeek": 42,
"averageFocusMinutes": 25,
"breakPercentage": 15
}
基于以上数据,请显示:
1. 今日完成的番茄数:8
2. 本周完成的番茄数:42
3. 平均专注时长:25 分钟
4. 休息时间占比:15%
进阶练习
尝试创建更复杂的 skill:
/pomodoro-report:生成周报,发送到指定邮件/pomodoro-reset:重置今日统计数据/pomodoro-analyze:分析效率趋势,生成图表建议
提示
- 使用
!command`` 动态注入时,确保命令输出格式稳定 - skill 中使用
${CLAUDE_SKILL_DIR}可以引用辅助脚本 - 测试 skill 时,可以先手动执行 shell 命令确认输出正确
本章小结
Claude Code 的扩展能力是其强大之处:
- MCP 通过标准化协议连接外部服务,让 Claude Code 访问数据库、API、文件系统等资源
- Plugin 是打包的扩展集合,方便分享和安装,包含 skills、MCP servers、hooks 等组件
- Skill 是自定义命令和工作流,封装常用操作,提高开发效率
- 创建自定义 skill 时,合理使用 frontmatter 字段控制行为,用动态注入获取实时数据
/reload-plugins和/skills命令帮助管理和调试扩展
通过扩展,Claude Code 可以适应各种开发场景,从简单的代码编辑到复杂的自动化工作流。下一章将学习高级主题,如性能优化、故障排查等。