首页 / 资讯中心 / 文章详情

Claude Code 完全指南:MCP、Skills 与 Hooks 的配置实践

Claude Code 完全指南:MCP、Skills 与 Hooks 的配置实践 ★ FEATURED ARTICLE
1. 为什么你的 Claude Code 越用越乱从零散技巧到工程化扩展Claude Code 是 Anthropic 推出的系统级 AI Agent它和普通代码补全工具最大的区别在于它能读写文件、执行命令、管理进程还能通过 MCP、Skills、Hooks 三类扩展机制接入外部能力。如果你已经用它跑通过几个小任务大概率会遇到一个瓶颈——每次都要重复交代同样的规则换个项目就得重新解释一遍技术栈危险命令拦不住代码格式还得手动跑一遍。这不是模型能力的问题而是扩展层没有配置好。MCP 负责让 Claude Code 够得着外部工具和数据源Skills 负责把重复的工作流封装成可复用的技能包Hooks 负责在关键节点自动执行脚本做拦截和格式化。三者配合起来才能把「每次都要说一遍」变成「配置一次长期生效」。这篇文章面向已经上手 Claude Code 的开发者不讲安装和环境变量配置直接进入 MCP 服务接入、Skills 复用、Hooks 自动化三类扩展能力的落地配置。我会给出可复制的 settings 与 MCP 配置片段演示一次从触发到验证的完整流程并对照真实报错给出排查路径。适合谁已经能用 Claude Code 完成日常编码但想让它在团队协作和长期项目里更稳定、更省心的开发者。2. TaoToken 前置给 Claude Code 一个稳定的模型接入层Claude Code 本身是一个客户端它需要一个兼容 Anthropic API 的模型服务来驱动。你可以把它理解成Claude Code 是方向盘和仪表盘模型服务是发动机。发动机不稳定再好的扩展配置也跑不起来。TaoToken 在这里扮演的角色是模型接入层。它提供兼容 Anthropic API 的接口你只需要把 Base URL 指向https://taotoken.net/api配上 API Key 和 Model IDClaude Code 就能正常发起请求。对于需要长期跑 Agent 任务的场景接入层的稳定性直接决定了 Hooks 和 MCP 能不能可靠触发。配置方式有两种。第一种是环境变量适合快速验证export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKEN你的APIKey export ANTHROPIC_MODEL你的ModelID第二种是写进 Claude Code 的 settings 文件适合长期使用。路径是~/.claude/settings.json用户级或项目根目录的.claude/settings.json项目级。项目级配置会覆盖用户级团队协作时把项目级配置提交到仓库所有人共享同一套接入参数。这里有个容易踩的坑环境变量和 settings 文件同时存在时环境变量的优先级更高。如果你在 settings 里改了 Base URL 但没生效先检查终端里有没有残留的ANTHROPIC_BASE_URL。用echo $ANTHROPIC_BASE_URL确认一下有的话unset掉再重启 Claude Code。API Key 的获取入口在 TaoToken 控制台的 API Keys 页面建议给 Claude Code 单独创建一个 Key方便后续按项目追踪用量。模型对话功能可以用来快速验证 Key 是否有效不用每次都启动完整的 Claude Code 会话。3. 可复制配置MCP、Skills、Hooks 三件套的 settings 片段这一节给出可以直接复制粘贴的配置片段。路径和原文保持一致你只需要替换 Key 和 Model ID。3.1 settings.json 基础配置先看~/.claude/settings.json的完整结构。这个文件同时承载模型接入、Hooks 和权限配置{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: 你的APIKey, ANTHROPIC_MODEL: 你的ModelID }, hooks: { PostToolUse: [ { matcher: Write|Edit, hooks: [ { type: command, command: bun run format || true } ] } ], PreToolUse: [ { matcher: Bash, hooks: [ { type: command, command: ~/.claude/hooks/check-dangerous.sh } ] } ] }, permissions: { allow: [Read, Write, Edit, Bash(git:*)], deny: [Bash(rm -rf:*)] } }注意env块里的三个变量Base URL 指向 TaoToken 的 API 地址Auth Token 是你的 KeyModel 是你要用的模型 ID。这三个是 Claude Code 能跑起来的前提。3.2 MCP 配置片段MCP 配置写在~/.claude/mcp.json或项目级.claude/mcp.json。下面是一个包含文件系统和 GitHub 两个 MCP Server 的配置{ mcpServers: { filesystem: { command: npx, args: [-y, modelcontextprotocol/server-filesystem, /Users/yourname/projects], disabled: false }, github: { command: npx, args: [-y, modelcontextprotocol/server-github], env: { GITHUB_TOKEN: your_github_token_here }, disabled: false } } }filesystem这个 Server 让 Claude Code 能访问指定目录之外的文件github让它能直接读 Issue、PR 和仓库内容。配置完成后用claude mcp list验证是否加载成功。3.3 Skills 目录结构Skills 放在~/.claude/skills/下每个 Skill 一个目录。最小结构只需要两个文件~/.claude/skills/my-skill/ ├── skill.json └── skill.mdskill.json定义元数据{ name: api-doc-generator, description: 从路由文件自动生成 API 文档, version: 1.0.0, skill: { file: skill.md, description: 扫描 Express 路由并输出 Markdown 格式的 API 文档 } }skill.md写具体的工作流指令。Claude Code 在匹配到相关任务时会自动加载这个 Skill 的内容作为上下文。3.4 Hooks 脚本示例危险命令拦截脚本~/.claude/hooks/check-dangerous.sh#!/bin/bash TOOL_INPUT$(cat) COMMAND$(echo $TOOL_INPUT | jq -r .tool_input.command // empty) DANGEROUS_PATTERNS(rm -rf / mkfs dd if /dev/sda) for pattern in ${DANGEROUS_PATTERNS[]}; do if [[ $COMMAND *$pattern* ]]; then echo 拦截检测到危险命令 $pattern 2 exit 2 fi done exit 0exit 2表示阻止这次工具调用Claude Code 会收到拦截信号并停止执行。exit 0表示放行。这个脚本挂在PreToolUse的Bashmatcher 上每次执行 Bash 命令前都会先跑一遍。4. 验证请求从触发到成功的完整流程配置写完了得验证它真的在工作。这一节演示一次完整流程写一个文件触发 PostToolUse Hook 自动格式化然后通过 MCP 读取外部目录最后确认 Skills 被正确加载。4.1 验证模型接入先确认 Claude Code 能正常连上模型服务。启动 Claude Code 后输入一个简单请求帮我列出当前目录下的文件如果返回了文件列表说明 Base URL、Key、Model 三个参数都正确。如果报 401跳到第 5 节排查。4.2 验证 Hooks 触发让 Claude Code 写一个故意格式混乱的 JS 文件创建一个 test.js内容是一段没有缩进的 JavaScript 函数写入完成后PostToolUse Hook 会自动执行bun run format。检查test.js的内容如果缩进被自动修正了说明 Hook 生效。你可以在 Hook 命令里加一行日志来确认{ type: command, command: echo \[$(date)] Hook triggered\ ~/.claude/hooks.log bun run format || true }然后tail -f ~/.claude/hooks.log实时观察触发记录。4.3 验证 MCP 连接在 Claude Code 里输入用 filesystem mcp 列出 /Users/yourname/projects 下的所有目录如果返回了目录列表说明 MCP Server 加载成功。如果提示找不到工具用claude mcp list检查 Server 状态确认disabled字段是false。4.4 验证 Skills 加载输入/skills查看已加载的 Skill 列表。找到你配置的api-doc-generator然后触发它使用 api-doc-generator skill 为 src/routes 下的路由生成文档Claude Code 会读取skill.md里的指令扫描路由文件输出 Markdown 文档。如果 Skill 没出现在列表里检查skill.json的 JSON 格式是否合法以及目录是否放在~/.claude/skills/下。4.5 完整链路验证把上面几步串起来跑一次让 Claude Code 写一个新路由文件PostToolUse Hook 自动格式化然后调用 Skill 生成文档最后通过 MCP 把文档推到 GitHub。这一套跑通说明三类扩展能力都在正常工作。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配置过程中最容易撞上四类报错。这一节对照真实错误信息给出排查路径。5.1 401 Unauthorized报错长这样API Error: 401 {error:{message:Invalid API key}}原因通常是 Key 不对或没传进去。排查顺序先echo $ANTHROPIC_AUTH_TOKEN确认环境变量存在再检查~/.claude/settings.json里env.ANTHROPIC_AUTH_TOKEN的值有没有多余空格最后确认 Key 没有过期或被禁用。如果用的是项目级 settings确认文件路径是.claude/settings.json而不是.claude/settings.local.json。5.2 local proxy failed报错信息Error: local proxy failed to start: listen tcp 127.0.0.1:xxxx: bind: address already in use这是端口被占用。Claude Code 启动时会起一个本地代理端口如果上一个会话没正常退出端口还占着。解决办法lsof -i :端口号找到进程kill -9 PID干掉然后重启 Claude Code。或者直接重启终端。5.3 reading choices 相关报错报错信息Error reading choices: unexpected end of JSON input这通常出现在 MCP Server 返回了非 JSON 格式的输出。MCP 协议要求 Server 通过 stdout 输出 JSON-RPC 消息如果你的 Server 脚本里混入了console.log调试语句就会污染输出流。检查 MCP Server 的代码把所有调试输出改成console.error保证 stdout 只有协议消息。5.4 OAuth 相关报错报错信息OAuth error: invalid_grant如果你用的是需要 OAuth 的 MCP Server比如某些云服务集成token 过期后会报这个。重新走一遍授权流程或者检查 refresh token 是否还在有效期内。对于 GitHub MCP直接用 Personal Access Token 走env.GITHUB_TOKEN更省事不用折腾 OAuth。5.5 配置三件套检查清单任何接入问题先对照这三项检查项正确值常见错误Base URLhttps://taotoken.net/api多了尾部斜杠或路径API Key控制台生成的 Key复制时带了空格Model ID控制台显示的模型名大小写不一致这三项在settings.json的env块里或者在环境变量里。两处都有时环境变量优先排查时先看环境变量。6. 把扩展配置沉淀为团队资产配置跑通之后下一步是让它变成团队可复用的资产。项目级的.claude/settings.json、.claude/mcp.json、.claude/skills/都可以提交到 Git 仓库新成员 clone 下来就能用同一套扩展配置。Hooks 脚本放在.claude/hooks/下记得加执行权限chmod x。一个实用的技巧把 Hooks 的日志输出到项目内的.claude/hooks.log并在.gitignore里排除掉。这样每个人都能看到自己的 Hook 触发记录又不会污染仓库。如果你需要长期跑 Agent 任务Coding Plan 提供了更稳定的调用配额适合把 Claude Code 作为日常开发主力工具的团队。模型对话入口可以用来快速验证配置改动不用每次都启动完整会话。接入文档里有完整的参数说明和示例遇到配置问题时可以先对照一遍。最后留一个我踩过的坑Skills 的skill.md里不要写太泛的指令比如「帮我优化代码」这种。Claude Code 会在很多不相关的任务里误加载这个 Skill反而干扰正常流程。指令写得越具体触发越精准。
阅读完成 · 觉得有帮助?
咨询建站