1. 从 SKILL.md 到 MCP:Agent Skills 到底解决什么问题
Agent Skills 是 Claude Code 里一套可复用的能力封装机制,本质是把「你反复交代的工作流程」写成标准操作程序,让 Claude 在识别到相关任务时自动加载并执行。它适合三类人:一是每天重复同样提示词的开发者,二是需要团队统一输出规范的工程组,三是想把内部工具、脚本、MCP 服务串成一条自动化链路的进阶玩家。
我最初接触 Skills 时的困惑很典型:这不就是系统提示词加几个脚本吗?真正用起来才发现差别在于「渐进式披露」。普通提示词是每次对话都全量塞进上下文,而 Skill 只在被触发时才加载 SKILL.md 的正文,脚本和参考文档更是按需读取。这意味着你可以维护一个几十个技能的库,日常对话的 token 消耗几乎不受影响。
另一个常见误解是把 Skill 和 MCP 混为一谈。MCP 是协议层,解决的是「AI 用什么统一方式调用外部工具和数据」;Skill 是任务层,解决的是「这类工作应该按什么步骤、用什么工具、参考什么材料来完成」。一个 Skill 内部完全可以调用多个 MCP 工具,也可以只靠纯文档指令工作。理解这个分层,后面配置才不会乱。
这篇操作指南的路径是:先讲清 SKILL.md 的结构和目录组织,再给出可直接复制的配置片段,然后演示如何通过统一 Key/API 通道完成调用链路配置与结果校验,最后把常见报错逐个拆开。全程以 Claude Code 为运行环境,涉及 MCP 自定义扩展时会给出完整的 Base URL、Key、Model ID 三件套写法。
需要提前说明的是,Claude Code 本身对国内网络环境的直连支持有限,实际落地时通常需要配置一个稳定的 API 通道。下面第二节会讲怎么用 TaoToken 把这条链路接起来,第三节给出可复制的配置文件,第四节做请求验证,第五节排错,第六节做 CTA 分流。你可以按顺序跟做,也可以直接跳到需要的章节。
2. TaoToken 前置配置:统一 Key 与 API 通道接入 Claude Code
在动手写 SKILL.md 之前,先把运行环境准备好。Claude Code 的模型调用依赖一个可访问的 API 端点,国内开发者常见的做法是配置一个兼容 Anthropic 接口的通道。TaoToken 提供的就是这样一条统一 Key/API 通道,官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api 。
配置的核心是三个值:Base URL、API Key、Model ID。Claude Code 读取的是用户目录下的 settings.json,Windows 路径是C:\Users\你的用户名\.claude\settings.json,macOS/Linux 是~/.claude/settings.json。如果这个文件不存在就新建,存在就先备份再改。
先到控制台创建 API Key。打开 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,登录后进入 API Keys 页面,点创建,名称随便填比如 claude-code-local,创建后复制那串以 sk- 开头的 Key。这个 Key 只显示一次,建议先粘到临时文本里。
然后确认你要用的 Model ID。在模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 可以看到当前可用的模型列表,Claude Code 场景一般选 claude-sonnet 系列或 claude-opus 系列,具体以控制台展示为准。把 Model ID 记下来,下一步要写进配置。
这里有个容易踩的坑:settings.json 是严格的 JSON 格式,不能有注释,不能有多余逗号,字符串必须用双引号。很多人从网页复制配置时带进了中文引号或者尾随逗号,导致 Claude Code 启动时报解析错误。建议改完后用python -m json.tool settings.json校验一遍。
配置完成后,Claude Code 的所有模型请求都会走这条通道。Skill 的加载和 MCP 工具的调用本身不消耗额外配置,它们复用同一个 Key。也就是说你只需要维护一份凭证,技能库和工具链共享。这对后面做多技能管理很关键,不用为每个 Skill 单独配 Key。
如果你打算长期跑编码任务或者搭 Agent 工作流,可以了解下 Coding Plan,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,它针对高频调用场景做了额度优化。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有各客户端的详细配置说明,遇到字段不确定时以文档为准。
3. 可复制配置:SKILL.md 模板、目录结构与 settings.json 片段
这一节给的都是可以直接复制粘贴的内容。先看目录组织。Claude Code 的 Skill 有三个部署路径,对应不同适用范围:
| 部署类型 | 存储路径 | 适用范围 | 典型场景 |
|---|---|---|---|
| 个人 Skills | ~/.claude/skills/ | 所有项目 | PDF 处理、代码格式化 |
| 项目 Skills | .claude/skills/ | 当前项目 | 团队规范、项目流程 |
| 插件 Skills | 插件目录 | 全局 | 社区或官方技能包 |
一个标准 Skill 是一个文件夹,必须包含 SKILL.md,推荐同时有 scripts、references、assets 三个可选目录。结构如下:
my-skill/ ├── SKILL.md # 必需:主配置和指令 ├── scripts/ # 可选:可执行脚本 ├── references/ # 可选:参考文档 └── assets/ # 可选:静态资源SKILL.md 的头部是 YAML frontmatter,必须包含 name 和 description 两个字段。description 写得好不好直接决定 Skill 会不会被正确触发,要把触发场景和关键词写进去。下面是一个可直接用的模板:
--- name: code-explainer description: 当用户要求解释代码逻辑、分析函数作用、或需要可视化说明某段代码时使用。适用于 Python、JavaScript、Go 等语言。 --- # Code Explainer ## 何时使用 当用户粘贴代码并询问「这段代码做什么」「解释一下这个函数」「有没有性能问题」时激活。 ## 执行步骤 1. 先通读代码,识别语言和主要结构 2. 用一句话概括整体意图 3. 按执行顺序拆解关键逻辑,每步配一个类比 4. 指出潜在问题:边界条件、性能、可读性 5. 如果代码超过 50 行,先给流程图式的文字大纲 ## 输出格式 - 概述:不超过 3 行 - 逐段解析:每段一个小标题 - 问题清单:用表格列出位置、问题、建议 ## 参考材料 详细的语言特定规范见 references/style-guide.md创建目录的命令,Windows PowerShell 和 macOS/Linux 略有不同:
# Windows PowerShell mkdir -p $HOME\.claude\skills\code-explainer# macOS / Linux mkdir -p ~/.claude/skills/code-explainer然后是 settings.json 的完整片段。这个文件同时承载模型通道配置和 Claude Code 的行为设置,路径和字段名必须完全一致:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key粘贴在这里", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" }, "permissions": { "allow": [ "Read", "Write", "Bash(git:*)" ] } }注意 ANTHROPIC_MODEL 的值要换成你在控制台看到的实际 Model ID,上面只是示例格式。ANTHROPIC_BASE_URL 填 https://taotoken.net/api ,不要带末尾斜杠,也不要加 UTM 参数,那些只用于网页跳转。
如果你用的是 Codex 或 Cline 这类客户端,配置位置不同但三件套一致。Codex 读的是~/.codex/auth.json,Cline 在 VS Code 设置里填 Base URL 和 Key。无论哪个客户端,只要涉及自定义模型接入,Base URL、Key、Model ID 这三个值必须同时正确,缺一个就会报 401 或 model not found。
MCP 工具的接入在 Skill 里通过文档描述来引导。比如你的 Skill 需要调用一个数据库查询 MCP,就在 SKILL.md 里写清楚「当需要查询表结构时,调用 mcp__db__describe_table 工具,参数为表名」。Claude Code 会自动把已注册的 MCP 工具暴露给 Skill 使用,不需要在 SKILL.md 里重复声明工具定义。
4. 验证请求与成功结果:从 claude --version 到 Skill 触发
配置写完后不要急着写复杂 Skill,先做最小验证。第一步确认 Claude Code 能启动:
claude --version看到版本号输出说明安装没问题。然后直接运行claude进入交互界面,输入一句简单的话比如「你好,用一句话介绍你自己」。如果模型正常返回,说明 API 通道配置成功。这一步失败的话先看第五节排错。
第二步验证 Skill 是否被识别。在 Claude Code 交互界面里直接问:
你现在有哪些 skill?正常情况下 Claude 会列出~/.claude/skills/和当前项目.claude/skills/下所有 Skill 的 name 和 description。如果列表为空,检查目录名是否拼错、SKILL.md 的 frontmatter 是否有语法错误。
第三步做触发测试。用刚才的 code-explainer 举例,粘贴一段代码并问「解释一下这段代码」。观察 Claude 的响应里是否出现了 Skill 的执行步骤特征,比如「概述」「逐段解析」「问题清单」这些你在 SKILL.md 里定义的结构。如果它只是泛泛回答,说明 description 写得不够精准,或者触发词没覆盖到。
第四步验证 MCP 工具链路。如果你的 Skill 依赖 MCP,先在 Claude Code 里单独测试 MCP 工具是否可用。比如输入「列出当前目录的文件」,看它是否调用了文件系统相关的工具。MCP 不通的话 Skill 里的工具调用也会失败,报错通常是 tool not found 或 connection refused。
一个完整的成功结果长这样:你输入「解释这段 Python 代码」,Claude 先输出三行概述,然后按函数逐个拆解,每个函数配一个生活化类比,最后用表格列出两个潜在问题。整个过程没有让你重复交代格式,因为它读的是 SKILL.md 里的输出规范。
验证通过后,你可以把这个 Skill 复制到项目目录.claude/skills/下,让团队成员共享。项目级 Skill 会覆盖同名的个人 Skill,这个优先级在设计团队规范时很有用:个人放通用工具,项目放特定流程。
如果要在 CI 或脚本里做自动化验证,可以用非交互模式:
claude -p "解释这段代码:$(cat test.py)" --output-format json返回的 JSON 里包含模型输出和 token 使用量,方便你确认请求确实走了配置的通道。token 计数异常偏高时,检查是不是 Skill 的 description 太长导致每次都被加载。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
这一节按报错原文对照排查。第一个高频错误是 401 Unauthorized,通常伴随invalid api key或authentication_error。原因有三个:Key 复制时带了空格或换行、Key 已过期或被禁用、settings.json 里的字段名写错。排查方法是打开 settings.json 确认 ANTHROPIC_API_KEY 的值首尾没有空白,然后到控制台 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 确认这个 Key 状态是启用。字段名必须是 ANTHROPIC_API_KEY,写成 API_KEY 或 ANTHROPIC_KEY 都不认。
第二个错误是local proxy failed或ECONNREFUSED。这通常出现在你本地跑了代理工具但端口没对上,或者 Base URL 填成了 localhost。检查 ANTHROPIC_BASE_URL 是否严格等于 https://taotoken.net/api ,不要填 127.0.0.1 或带端口号。如果你本地有其他服务占用端口,先关掉再试。
第三个错误是reading 'choices'或cannot read property 'choices' of undefined。这个报错说明客户端期望的是 OpenAI 格式的响应,但实际拿到的是 Anthropic 格式,或者反过来。Claude Code 走的是 Anthropic 接口,Base URL 必须是 /api 而不是 /v1/chat/completions。如果你在 Cline 里配置,注意 Cline 的 Anthropic 模式和 OpenAI 兼容模式是两个不同选项,选错了就会报这个错。解决办法是在 Cline 设置里选 Anthropic,然后 Base URL 填 https://taotoken.net/api 。
第四个错误是 OAuth 相关的oauth token expired或failed to refresh token。Claude Code 某些版本会尝试走官方 OAuth 流程,如果你已经用 API Key 配置了通道,需要在 settings.json 里显式禁用 OAuth。加一个字段:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514", "CLAUDE_CODE_DISABLE_OAUTH": "1" } }如果报错信息里出现model not found或invalid model,说明 Model ID 写错了。到模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 复制准确的 ID,不要自己拼。不同客户端对 Model ID 的格式要求可能不同,有的要带日期后缀,有的不要,以控制台展示为准。
还有一个隐蔽的坑:Skill 不触发但不报错。这通常是 SKILL.md 的 frontmatter 格式问题。YAML 要求---独占一行,name 和 description 的冒号后面要有空格。用python -c "import yaml; yaml.safe_load(open('SKILL.md').read().split('---')[1])"可以快速校验。
最后提醒一点,所有配置改完后要完全退出 Claude Code 再重新启动,它只在启动时读一次 settings.json。热改文件不会生效,这是很多人改完没反应的原因。
6. 按场景选择入口:模型对话、Coding Plan 与接入文档
走到这里你已经完成了从 SKILL.md 结构解析到 MCP 工具接入的完整链路。接下来按你的实际场景选入口,不用都点一遍。
如果你只是想快速验证某个模型在 Skill 场景下的表现,直接用模型对话页面最省事:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。在里面粘贴你的 SKILL.md 内容,模拟触发,看输出是否符合预期,确认后再落到本地文件。
如果你要长期跑编码任务、维护多个 Skill 和 MCP 工具链,建议看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。高频调用场景下额度策略比按量更划算,具体以页面说明为准。
配置过程中遇到字段不确定、客户端差异、报错对照,先查接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。文档里有各客户端的完整配置示例,比在社区里翻帖子快。
需要新建或管理 Key 的时候去 API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。建议给不同用途建不同的 Key,比如 claude-code-local、cline-vscode、ci-test,方便排查问题时定位是哪个客户端出的错。
最后说一个我自己的经验:Skill 库不要一次建太多。先挑一个你每天重复三次以上的工作流,写成 SKILL.md,跑一周,确认触发准确、输出稳定,再写第二个。我见过有人一口气建了二十个技能,结果 description 互相重叠,Claude 经常触发错的,反而比不用还乱。技能库的质量取决于每个技能的边界是否清晰,而不是数量。