Claude Code :Skills、MCP、Plugin 安装目录、权限问题
最近在用 Claude Code 做项目,踩了不少坑,特别是扩展系统的权限管理这块。把经验整理一下,希望对大家有帮助。
前言
Claude Code 的扩展系统有三种类型:Skills、MCP Servers、Plugins。刚开始用的时候,我经常搞混它们的安装位置和权限控制,导致插件在某个项目里不生效,或者配置改了半天没反应。
这篇文章把这三种扩展的安装目录、配置方式、权限层级整理清楚,方便大家查阅。
一、三种扩展类型概览
先上一张对比表,心里有个数:
| 特性 | Skills | MCP Servers | Plugins |
|---|---|---|---|
| 安装位置 | ~/.claude/skills/ 或 .claude/skills/ |
配置在 settings.json | ~/.claude/plugins/ |
| 文件格式 | Markdown (.md) | JSON 配置 | 目录 + 配置 |
| 调用方式 | /skill-name |
自动加载工具 | 自动加载功能 |
| 禁用方式 | 删除文件 | "disabled": true |
"enabledPlugins": false |
| 典型用途 | 自定义工作流、模板 | 外部工具集成 | 功能扩展包 |
二、Skills:技能文件
Skills 是最简单的扩展形式,本质上就是 Markdown 文件。
安装目录
bash
# 用户级(所有项目生效)
~/.claude/skills/
# 项目级(仅当前项目生效)
.claude/skills/
使用方式
在目录下放一个 .md 文件,然后通过 /skill-name 调用。比如你放了一个 code-review.md,就可以用 /code-review 来使用它。
权限规则
- 项目级 Skills 优先级高于用户级
- 同名文件会被项目级覆盖
- 删除文件就等于禁用,没有其他开关
三、MCP Servers:模型上下文协议服务
MCP 是用来集成外部工具的,比如文件系统操作、数据库访问等。配置相对复杂一些。
配置位置
MCP 的配置写在 settings.json 里,有三个层级:
bash
# 用户全局配置
~/.claude/settings.json
# 项目级配置(可提交 Git)
.claude/settings.json
# 项目本地配置(不提交 Git)
.claude/settings.local.json
配置示例
json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["@anthropic/mcp-filesystem"]
},
"project-db": {
"command": "node",
"args": ["./mcp-server.js"],
"env": {
"DB_URL": "postgresql://localhost/mydb"
}
}
}
}
禁用单个 MCP Server
在配置里加 "disabled": true:
json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["@anthropic/mcp-filesystem"],
"disabled": true
}
}
}
常用命令
bash
# 添加 MCP Server
claude mcp add <name> <command>
# 列出所有 MCP Server
claude mcp list
# 移除 MCP Server
claude mcp remove <name>
四、Plugins:插件扩展
Plugins 是功能最完整的扩展,但权限控制也最让人困惑。
安装目录
javascript
~/.claude/plugins/
插件安装到用户级目录后,理论上所有项目都能用。但这里有个坑:还需要在 settings 里显式启用。
启用配置
在 ~/.claude/settings.json 里配置:
json
{
"enabledPlugins": {
"my-plugin": true,
"code-formatter": true
}
}
项目级禁用
如果某个项目不想用某个插件,可以在项目级 settings 里覆盖:
json
// .claude/settings.json
{
"enabledPlugins": {
"my-plugin": false
}
}
这个设置会覆盖全局配置,但只对当前项目生效。
五、配置优先级
这是最容易踩坑的地方。Claude Code 的配置采用三层覆盖机制:
bash
项目本地配置 (.claude/settings.local.json)
↓ 覆盖
项目级配置 (.claude/settings.json)
↓ 覆盖
用户全局配置 (~/.claude/settings.json)
优先级从高到低:项目本地 > 项目级 > 用户全局
举个例子:
- 全局配置里启用了
my-plugin: true - 项目级配置里设置了
my-plugin: false - 最终结果:该项目里
my-plugin是禁用的
settings.local.json 的作用
.claude/settings.local.json 不会被提交到 Git,适合放一些个人偏好或者敏感配置。比如:
json
{
"mcpServers": {
"personal-db": {
"command": "node",
"args": ["./my-personal-server.js"],
"env": {
"DB_PASSWORD": "xxx"
}
}
}
}
六、实际使用建议
1. Skills 适合什么场景?
- 代码审查模板
- 提交信息规范
- 常用的代码片段
- 团队共享的工作流
2. MCP Servers 适合什么场景?
- 文件系统操作
- 数据库查询
- API 调用
- 外部工具集成
3. Plugins 适合什么场景?
- 代码格式化
- AI 辅助功能
- 复杂的工作流扩展
4. 权限管理最佳实践
bash
# 全局配置放通用的、大家都需要的
~/.claude/settings.json
# 项目配置放项目特定的、需要版本控制的
.claude/settings.json
# 本地配置放个人的、敏感的
.claude/settings.local.json
七、常见问题
Q: 插件安装了但不生效?
检查两件事:
enabledPlugins里是否设置为true- 项目级配置是否覆盖了全局设置
Q: MCP Server 配置了但没反应?
bash
# 先检查配置是否正确
claude mcp list
# 如果配置有问题,重新添加
claude mcp remove <name>
claude mcp add <name> <command>
Q: 想在某个项目里禁用全局插件?
在项目根目录创建 .claude/settings.json:
json
{
"enabledPlugins": {
"plugin-name": false
}
}
Q: 配置改了需要重启吗?
运行 /reload-plugins 重新加载,不需要重启 Claude Code。
总结
三种扩展类型各有用途:
- Skills:最简单,就是 Markdown 文件,适合模板和工作流
- MCP Servers:配置驱动,适合外部工具集成
- Plugins:功能最完整,但权限控制最复杂
权限控制的关键是理解三层配置的优先级:项目本地 > 项目级 > 用户全局。遇到插件不生效的问题,先检查配置层级是否冲突。