1. 为什么 Claude Code 的架构值得单独拆开看
很多人第一次接触 Claude Code,会把它当成一个“终端里的聊天机器人”:能读文件、能跑命令、能改代码,看起来就是个加强版 CLI 助手。但真正用久了会发现,它的能力边界并不来自模型本身,而来自一套分层设计——MCP 负责连接外部世界,Skills 负责承载业务流程,Agent 负责定义角色与决策方式。这三层各司其职,才让 Claude Code 从“工具”变成了有“灵魂”的协作体。
我试过把一套部署流程直接写进 MCP 工具里,结果发现一旦中间某步失败,模型只能拿到一个最终报错,完全插不上手;后来改成 Skill 描述流程、MCP 提供原子能力,模型就能在每一步之间做判断和调整。这个对比让我意识到:架构分层不是为了好看,而是为了把“确定性”和“灵活性”放在正确的位置。
这篇文章面向希望理解 Claude Code 扩展机制并落地工程化的开发者。你会看到三层架构的设计哲学、可复制的settings.json与config.toml配置骨架,以及通过 TaoToken 统一 Key/API 通道接入 Claude Code 的完整验证动作。目标很明确:读完能自己跑起来一套可用的配置。
2. 三层架构的设计哲学:MCP、Skills、Agent 各管什么
2.1 MCP 是“手”:提供原子能力与外部连接
MCP(Model Context Protocol)解决的是“模型如何安全地调用外部能力”。一个 MCP Server 本质上是一组工具的集合,每个工具暴露一个明确的输入输出契约。比如read_file、bash_execute、http_request,模型看到的是工具名和参数 schema,调用后拿到结构化结果。
关键点在于:MCP 的代码是图灵完备的,你完全可以在一个工具内部硬编码一整条流水线。但这会带来一个问题——逻辑被锁死在代码里,决策者是写代码的人,而不是运行时做判断的模型。这就是“硬编排”的代价:确定性强,但不可见、不可干预。
2.2 Skills 是“脑”:用自然语言承载业务流程
Skills 的设计初衷,是把业务逻辑从底层工具中剥离出来,交还给模型去实时编排。一个 Skill 本质上是一份结构化的 Markdown,包含三部分:
- Metadata:
name、description,告诉系统“我是谁、我能干什么” - Instruction:核心业务逻辑,比如“重构前先读 CONTRIBUTING.md”“遇到 404 先去掉 URL 后缀重试”
- Tool Definitions:声明依赖哪些底层 MCP 工具
因为 Skill 是 Prompt 的一部分,全部塞进上下文会撑爆窗口,所以 Claude Code 采用按需加载:用户说“帮我修个 Bug”,系统扫描所有 Skill 描述,匹配到 Debug Workflow 后临时注入,任务结束再释放。这就是“软编排”——白盒、可干预、模型能在每一步之间做推理。
2.3 Agent 是“灵魂”:System Prompt 加运行时回路
有了工具和手册,那个“使用工具、阅读手册”的主体是什么?在 Claude Code 里,Agent 就是一段精心设计的 System Prompt 加上一个运行时死循环。System Prompt 定义角色:你是谁、你的职责、你的边界(只读操作可直接执行,删除操作必须询问)。Runtime Loop 负责监听模型输出、调用 MCP、把结果喂回模型触发下一轮思考。
用一句话概括:Agent = Model + System Prompt + Runtime Loop。模型本身没变,变的是被 System Prompt“催眠”后的角色定位。
2.4 Multi-Agent:角色隔离与上下文纯净
单一 Agent 的天花板由 System Prompt 决定。如果主 Agent 是“编程专家”,让它去测试,它会下意识想修代码而不是找茬。Multi-Agent 的本质是 System Prompt 的动态切换与特化:主 Agent 统筹分发,Sub-agent 拥有独立上下文窗口,专注特定任务。这样既做到角色隔离,又保持上下文纯净,还能通过定义不同 Prompt 无限泛化能力。
3. TaoToken 前置:统一 Key 与 API 通道
在动手配置之前,需要先解决接入通道问题。Claude Code 默认走 Anthropic 官方通道,但很多开发者的实际环境需要统一管理 Key、统一计费、统一出口。TaoToken 提供的就是这样一个统一通道:一个 Key 覆盖多种模型调用,API 地址固定,配置方式与官方兼容。
你需要先拿到两样东西:
- 一个可用的 API Key(在控制台创建)
- 确认 API Base URL 为
https://taotoken.net/api
创建 Key 的入口在控制台的 API Keys 页面,模型对话能力可以在模型对话页验证,长期编码或 Agent 场景建议看 Coding Plan。这几个入口后面 CTA 会再给一次,这里先记住:Key 是身份,Base URL 是通道,两者缺一不可。
注意:不要把 Key 硬编码进会提交到 Git 的文件里。下面配置里我会用环境变量占位,你替换成自己的值即可。
4. 可复制配置:settings.json 与 config.toml 骨架
4.1 settings.json:Claude Code 主配置
Claude Code 读取的settings.json通常放在用户配置目录下。下面是一份可直接复制的骨架,重点是把 API 通道指向 TaoToken:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-your-taotoken-key", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" }, "permissions": { "allow": [ "Read", "Glob", "Grep" ], "ask": [ "Bash", "Write", "Edit" ] }, "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "./workspace"] } } }几个参数说明:ANTHROPIC_BASE_URL决定请求发往哪里,改成 TaoToken 的 API 地址即可;ANTHROPIC_API_KEY填你在控制台创建的 Key;permissions里把只读操作设为 allow、写操作设为 ask,是安全底线。mcpServers段注册了一个文件系统 MCP,你可以按需增删。
4.2 config.toml:MCP 与 Skill 的补充配置
部分工具链或自建 Runtime 会用config.toml管理 MCP Server 与 Skill 路径。下面是一份骨架:
[api] base_url = "https://taotoken.net/api" api_key = "sk-your-taotoken-key" timeout_seconds = 60 [agent] system_prompt_file = "./prompts/coding-expert.md" max_turns = 30 [[mcp_servers]] name = "filesystem" command = "npx" args = ["-y", "@modelcontextprotocol/server-filesystem", "./workspace"] [[mcp_servers]] name = "shell" command = "npx" args = ["-y", "@modelcontextprotocol/server-shell"] [skills] search_paths = ["./skills"] auto_mount = true[api]段统一了通道与超时;[agent]段指定 System Prompt 文件和最大轮次;[[mcp_servers]]注册多个 MCP;[skills]段告诉 Runtime 去哪里扫描 Skill 并自动挂载。这份配置和上面的settings.json可以共存,取决于你的运行环境读哪一份。
4.3 一个最小 Skill 示例
在./skills下新建debug-workflow.md:
--- name: debug-workflow description: 用于定位和修复代码缺陷的标准流程 tools: - read_file - grep_search - bash_execute --- ## 指令 1. 先阅读报错信息,提取关键堆栈。 2. 用 grep_search 定位相关代码位置。 3. 阅读上下文,判断是逻辑错误还是环境问题。 4. 如果是环境问题,尝试重试一次;如果是逻辑错误,给出修复方案并等待确认。 5. 修复后运行相关测试验证。这份 Skill 不包含任何二进制代码,只包含“教导”。模型在匹配到 debug 意图时会临时挂载它,按步骤调用底层 MCP 工具。
5. 验证请求:确认通道与配置生效
配置写完后,不要急着跑复杂任务,先用最小请求验证通道。最直接的方式是发一条模型对话请求,确认 Base URL 和 Key 都能正常工作。如果你用的是 Claude Code CLI,可以直接在终端里发起一次简单对话:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-your-taotoken-key" claude -p "用一句话说明 MCP 和 Skill 的区别"如果返回了合理回答,说明通道打通。接着验证 MCP 是否被正确加载:在交互模式里输入/mcp(不同版本命令可能略有差异),查看已注册的 Server 列表。再验证 Skill 挂载:输入一个带“修 Bug”意图的请求,观察是否触发了 debug-workflow。
成功的结果应该满足三点:模型有正常回复、MCP 工具可被调用、Skill 按意图挂载。任何一点不满足,就进入下一节的排查。
6. 本篇常见错排查
6.1 报错 401 或 invalid api key
最常见的原因是 Key 没替换、复制时带了空格,或者环境变量没生效。检查echo $ANTHROPIC_API_KEY是否与控制台一致。如果用的是settings.json,确认 JSON 语法正确、没有多余逗号。
6.2 请求超时或连接失败
先确认ANTHROPIC_BASE_URL写的是https://taotoken.net/api,不要多加路径或斜杠。然后检查本机网络是否能正常访问该地址。如果公司网络有出口限制,需要联系网络管理员放行,不要尝试任何非正规通道。
6.3 MCP Server 启动失败
npx拉取包失败通常是因为本地 npm 源不可达或包名写错。先手动执行npx -y @modelcontextprotocol/server-filesystem ./workspace看报错。如果是权限问题,检查./workspace目录是否存在且可读写。
6.4 Skill 没有被挂载
检查search_paths是否指向正确目录,Skill 文件的 frontmatter 是否以---开头和结尾,description是否足够明确。描述太模糊会导致意图匹配失败。可以临时把auto_mount设为 false,手动指定 Skill 测试。
6.5 模型回复被截断或轮次耗尽
max_turns设得太小会导致复杂任务中途停止。把它调到 30 或更高,同时确认timeout_seconds足够覆盖长任务。如果还是截断,检查是不是单次请求上下文过长,考虑拆分任务或减少挂载的 Skill 数量。
7. 从配置到落地:下一步怎么走
到这里,你已经完成了从概念到可运行配置的闭环:理解了 MCP、Skills、Agent 三层各自的位置,写出了settings.json和config.toml骨架,并通过 TaoToken 通道验证了请求。接下来可以根据自己的场景做取舍——如果只是日常编码辅助,把 Key 和 Base URL 配好就够了;如果要构建长期运行的 Agent,重点打磨 System Prompt 和 Skill 的指令质量;如果要接入多个外部系统,就逐个注册 MCP Server 并控制权限边界。
需要创建 Key 或管理通道,去 API Keys 页面;想先验证模型对话是否正常,用模型对话页;准备长期跑编码或 Agent 任务,看 Coding Plan 会更合适。接入细节和参数说明都在接入文档里,遇到配置问题优先查文档再排查。
架构分层的价值,最终体现在你能否把“确定性逻辑”和“灵活性决策”放在正确的位置。配置只是起点,真正的工程化落地,是从你第一次调整 System Prompt、第一次为一个失败步骤加上重试指令开始的。