Skip to content

MCP、Skills、Hooks 怎么选

同一件「让 Claude 自动做点什么」,可以接 MCP、写 Skill,也可以挂 Hook。选错的表现很固定:该连的外部系统还在人肉复制,或者「提交前必须跑测试」被模型为了赶进度跳过去。

三者不在一层上。

  • MCP 解决「够不着」。没有它,Claude 只能动本地文件和命令。接上之后,才能直接读 issue、查库、看监控。
  • Skills 解决「怎么做才像样」。把你反复粘贴的流程和规范收成一个包,相关任务才加载。
  • Hooks 解决「必须发生」。到了生命周期节点就跑脚本,不问模型这次想不想做,也不占上下文。

先问一句:这件事漏一次会不会出事。会,就用 Hooks。只是做了更专业、偶尔跳过也能补,用 Skill。需要到对话框外面的系统里取数据或动手,再接 MCP。

CLAUDE.md 仍管每次都要知道的短事实,不管流程,也不负责拦截。分界见 CLAUDE.md 管倾向,Hooks 才是铁律

字段和包名会变。下面以当前公开的添加方式和配置结构为准。对不上就以 claude mcp --help 和官方文档为准,不要抄教程里的旧包名。

MCP:你还在来回贴,就该接

判断标准很土:你是不是经常从别处复制一段,再贴进对话。issue 描述、报错、查询结果、设计稿,都算。

添加用命令,不要写进 .claude/settings.jsonmcpServers。那个文件管权限和钩子。本地和用户作用域落在 ~/.claude.json,项目作用域是仓库根的 .mcp.json,可以提交给团队。

bash
claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
claude mcp list
claude mcp remove playwright

浏览器自动化的包是微软维护的 @playwright/mcp。教程里的 @anthropic-ai/mcp-playwright 这类名字装不上,先核对再跑。

2026 年起会话默认有 Tool Search:启动时先看到服务器名和说明,工具定义用到才进上下文。所以多接几个不再像以前那样一上来就把窗口占满。服务器仍然不要堆。权限面、调试和提示注入都会跟着涨。先留 2 到 4 个真的每周都在用的,比见一个接一个稳。

Skills:同一段话贴了三次,就该沉下来

Skill 就是一个 SKILL.md,项目级放 .claude/skills/,个人跨项目则放用户目录。平时模型只看到名字和一句描述,判断对上了才加载正文。这和 CLAUDE.md@ 引用不同,后者启动时就会进上下文。

description 决定会不会被叫起来。写「处理文案」会误触发,也容易该用时认不出。写成「需要按某品牌语气改产品描述时使用」更稳。正文用步骤、清单和反例,少写原则。

两种用法:

  • 知识型:接口约定、品牌语气。碰到相关任务再取。
  • 任务型:发布检查、迁移步骤。可以靠描述命中,也可以你点名用。

斜杠命令是更轻的入口。.claude/commands/ 里一份 Markdown,就是一条你手动敲的 /命令名。内容少、每次都由你触发,用命令就够。要附脚本、示例和按需加载的说明,再升级成 Skill。

子代理是另一件事。它隔离上下文、可以并行,内部照样能用 MCP、Skill 和 Hooks。已经写过的 子代理用法 不用在这里再展开。

Hooks:能不能被跳过,决定用不用它

「写完自动格式化」三种做法差很多。

  • MCP:接一个格式化服务,指望写完文件后想起来去调。赶任务时经常直接跳过。
  • Skill:在描述里写「写完要格式化」。仍取决于这次有没有加载、有没有照做。
  • Hook:PostToolUse 匹配 Edit|Write,每次落盘都跑。这才是格式化该待的地方。

配置仍是两层嵌套。扁平写法不生效。PreToolUse 的脚本读标准输入,用退出码拒绝这次调用。exit 2 会把 stderr 回给模型。

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/block-dangerous.sh"
          }
        ]
      }
    ]
  }
}

事件不止早年常写的那几个。日常先用 PreToolUsePostToolUse。更细的挂点以当前版本的事件表为准。

一条线上各管一段

不必三选一。部署可以拆成这样:

  1. Hook 在前面拦危险命令,也拦「没跑测试就继续」这类必须项。
  2. Skill 只排步骤:构建、灰度、回滚说明。不要把必须项写进 Skill 的描述里指望它自觉。
  3. MCP 做外部动作:建 Release、发通知、读监控。
  4. 需要留痕时,再在会话结束的事件上挂一个写日志的钩子。具体事件名以当前 /hooks 为准。

新手不要三样一起上。先用一个零上下文的 Hook 把最烦的事钉死,再把贴了三次的说明做成 Skill,最后才为真实的复制粘贴去接 MCP。

最小配置够用就停:几个核心 MCP,几条常用 Skill,两三个关键 Hook。上下文和确定性不要同时透支。

Claude-cn.org,专注于 Claude Code 中文教程