ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Dive into Claude Code:从 TypeScript 到 MCP,拆解 AI Agent 系统的设计空间

2026/10/3 16:38:14 拓冰建站 浏览量
Dive into Claude Code:从 TypeScript 到 MCP,拆解 AI Agent 系统的设计空间 1. 从 TypeScript 源码看 Claude Code 的 Agent 设计空间Claude Code 是什么一句话说它是一个能代表你执行 shell 命令、读写文件、调用外部服务的编程智能体。它和普通代码补全工具最大的区别在于补全工具给你建议Claude Code 直接动手。适合谁适合想把重复性编码任务交给 Agent 跑、又需要保留人类决策权的开发者。我最近花了不少时间研究 Claude Code 公开的 TypeScript 源码v2.1.88也对照了 OpenClaw 这类开源 Agent 的架构。最让我意外的发现是整个系统里真正属于「AI 决策」的逻辑只占约 1.6%剩下 98.4% 全是工程化支撑——权限系统、上下文压缩、扩展机制、子代理编排、会话存储。这个比例说明一件事Agent 能不能落地核心竞争力不在模型本身而在运行支撑层。这个结论对做 AI Agent 的开发者来说非常关键。很多人一上来就纠结用哪个模型、prompt 怎么写但 Claude Code 的设计告诉我们真正决定 Agent 可靠性的是模型外围那一圈「确定性系统」。本文会从 TypeScript 实现切入拆解 MCP 协议接入的完整配置给出可复制的 settings.json 片段并对比 OpenClaw 的架构取舍最后落到实际可跑的验证步骤。如果你正在设计自己的 Agent 系统或者想把 Claude Code 接入现有工具链这篇文章的设计空间分析应该能帮你少走弯路。接下来我会先讲清楚 Claude Code 的核心循环和外围系统再进入 MCP 配置和验证环节。1.1 核心 while 循环与 98.4% 的外围系统Claude Code 的核心逻辑简单到可以用伪代码写出来while (!taskComplete) { const response await model.invoke(messages, tools); if (response.hasToolCall) { const result await executeTool(response.toolCall); messages.push(result); } else { taskComplete true; } }就是「调用模型 → 执行工具 → 循环迭代」。但围绕这个循环Claude Code 构建了极其庞大的外围系统外围系统规模作用权限系统7 种模式 ML 分类器逐动作安全评估上下文压缩5 层管道窗口溢出时渐进压缩扩展机制MCP / 插件 / 技能 / 钩子4 类能力注入子代理编排委托 编排复杂任务拆分会话存储追加式崩溃恢复与审计这个结构揭示了一个设计原则模型负责「想做什么」外围系统负责「能不能做、怎么做才安全」。权限系统用 7 种模式覆盖从完全信任到逐步确认的梯度ML 分类器则对高风险动作做额外判断。上下文压缩的 5 层管道从简单的截断到语义摘要逐级升级保证长会话不崩。1.2 5 大价值与 13 项设计原则的落地链路Claude Code 的架构不是拍脑袋定的它背后有一条清晰的推导链5 大人类价值 → 13 项设计原则 → 具体代码实现。5 大价值是人类决策权、安全隐私、可靠执行、能力放大、上下文适配。比如「人类决策权」这条价值落地为「权限系统必须默认保守」这个原则再落地为代码里 7 种权限模式的默认配置。「上下文适配」落地为「压缩必须渐进且可逆」原则再落地为 5 层压缩管道。这条链路的价值在于可复用。你设计自己的 Agent 时可以先问自己我的核心价值是什么由此推导出哪些原则再决定具体实现。而不是直接抄某个开源项目的代码结构。1.3 与 OpenClaw 的架构对比场景决定取舍OpenClaw 是一个开源 AI Agent 系统和 Claude Code 面对相同的设计问题但给出了完全不同的答案设计问题Claude CodeOpenClaw安全评估逐动作 ML 分类边界级访问控制运行时单 CLI 循环网关嵌入式上下文窗口内渐进压缩网关全域能力注册记忆追加式会话结构化长期记忆差异的根源是部署场景Claude Code 是单机 CLI 工具用户就在终端前可以逐动作确认OpenClaw 是多通道个人助理网关用户可能通过不同渠道接入必须在边界做统一控制。两者甚至可以组合——OpenClaw 可以通过 ACP 协议托管 Claude Code。这个对比告诉我们没有「最好的 Agent 架构」只有「最适合你部署场景的架构」。选型前先想清楚你的用户在哪、信任边界在哪。2. TaoToken 前置为 Claude Code 准备 API 接入环境在深入 MCP 配置之前需要先解决一个前置问题Claude Code 本身需要模型 API 才能跑起来。如果你用的是官方渠道配置相对直接但如果你需要更灵活的接入方式TaoToken 提供了一个兼容 Anthropic 接口的 API 网关可以作为 Claude Code 的模型后端。TaoToken 是什么它是一个 API 接入服务提供与 Anthropic 兼容的接口让你可以用统一的 Base URL 和 Key 来调用模型。适合谁适合需要灵活切换模型、或者想把 Claude Code 接入自己工具链的开发者。2.1 获取 API Key 与确认 Base URL第一步是拿到 API Key。访问 TaoToken 控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content在 API Keys 页面创建一个新的 Key。创建时注意给 Key 起一个能识别用途的名字比如claude-code-dev记录创建时间方便后续轮换复制 Key 后立即保存页面刷新后不再显示完整 KeyBase URL 统一使用https://taotoken.net/api这个地址不加任何 UTM 参数直接用于配置。2.2 环境变量与配置文件的位置Claude Code 读取配置的方式有两种环境变量和 settings.json。环境变量适合临时测试settings.json 适合长期使用。环境变量方式export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY你的Keysettings.json 方式推荐Claude Code 的配置文件通常位于~/.claude/settings.json你需要在这个文件里写入 Base URL、Key 和 Model ID 三件套。具体片段在下一节给出。注意不要把 Key 硬编码到会提交到 Git 的文件里。settings.json 应该在.gitignore中或者用环境变量引用。2.3 模型 ID 的选择与确认Claude Code 需要知道用哪个模型。Model ID 的格式通常是claude-sonnet-4-20250514这类。你可以在 TaoToken 的模型对话页面https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content先测试模型是否可用确认返回正常后再写入配置。测试方法很简单在模型对话页面发一条消息看是否正常返回。如果返回 401说明 Key 有问题如果返回模型不存在说明 Model ID 写错了。3. 可复制配置settings.json 与 MCP 接入片段这一节给出可以直接复制的配置片段。Claude Code 的配置分两部分基础模型接入和 MCP 服务器接入。两部分都写在 settings.json 里。3.1 基础模型接入的 settings.json 片段{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的实际Key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 }, permissions: { allow: [ Read, Glob, Grep ], deny: [ Bash(rm -rf *), Bash(curl * | sh) ] } }这个片段做了三件事设置 Base URL 指向 TaoToken、设置 API Key、指定默认模型。permissions 部分演示了权限系统的配置方式——allow 列表里的工具可以直接执行deny 列表里的模式会被拦截。路径说明这个文件应该放在~/.claude/settings.json。如果你在项目目录下也有.claude/settings.json项目级配置会覆盖全局配置。3.2 MCP 服务器接入配置MCPModel Context Protocol是 Claude Code 的扩展机制之一让你把外部工具接入 Agent。配置 MCP 服务器需要指定命令、参数和环境变量。{ mcpServers: { filesystem: { command: npx, args: [ -y, modelcontextprotocol/server-filesystem, /Users/yourname/projects ] }, github: { command: npx, args: [ -y, modelcontextprotocol/server-github ], env: { GITHUB_PERSONAL_ACCESS_TOKEN: ghp_你的token } } } }这个片段配置了两个 MCP 服务器filesystem 让 Agent 能读写指定目录github 让 Agent 能操作 GitHub。注意 filesystem 的最后一个参数是允许访问的目录路径必须是你实际的项目路径。3.3 三件套的完整对照无论你接入哪种模型或 MCP核心都是三件套Base URL、Key、Model ID。对照表如下配置项值位置Base URLhttps://taotoken.net/apienv.ANTHROPIC_BASE_URLAPI Keysk-...env.ANTHROPIC_API_KEYModel IDclaude-sonnet-4-20250514env.ANTHROPIC_MODELMCP 服务器额外需要 command、args、env 三个字段。command 是可执行文件args 是参数数组env 是环境变量对象。提示配置完成后可以用claude --debug启动查看配置是否被正确加载。如果 MCP 服务器启动失败debug 输出会显示具体错误。4. 验证请求确认 Agent 工具链正常工作配置写完后必须验证。这一节给出从简单到复杂的验证步骤确保模型接入和 MCP 工具链都能正常工作。4.1 基础模型连通性验证最简单的验证是发一条消息看模型是否返回。在终端执行claude -p 用一句话说明什么是 MCP如果返回正常文本说明 Base URL、Key、Model ID 三件套配置正确。如果报 401检查 Key 是否复制完整如果报模型不存在检查 Model ID 拼写。4.2 MCP 工具调用验证验证 MCP 是否接入成功可以让 Agent 调用一个 MCP 工具。比如配置了 filesystem 后执行claude -p 列出 /Users/yourname/projects 目录下的文件如果 Agent 返回了文件列表说明 filesystem MCP 服务器正常工作。如果报「工具不存在」检查 mcpServers 配置的 command 和 args 是否正确。4.3 权限系统验证验证权限系统是否生效可以尝试一个被 deny 的命令claude -p 执行 rm -rf /tmp/test如果权限配置正确Agent 应该拒绝执行并提示该命令被禁止。如果直接执行了说明 deny 列表没生效检查 settings.json 的 permissions 部分。4.4 上下文压缩验证上下文压缩的验证比较间接。你可以开一个长会话持续输入内容观察 Agent 是否在某个点开始「遗忘」早期内容。Claude Code 的 5 层压缩管道会在窗口接近满时触发表现为早期对话被摘要替代。实测下来压缩触发后 Agent 仍能保持任务连贯性但细节记忆会丢失。这是设计取舍用细节换窗口空间。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配置过程中最容易踩的坑集中在几个报错上。这一节逐个拆解。5.1 401 Unauthorized报错原文401 Unauthorized: invalid api key原因通常是 Key 错误或未生效。排查步骤检查ANTHROPIC_API_KEY是否复制完整注意不要有多余空格确认 Key 没有过期或被撤销如果用的是环境变量确认当前 shell 会话已 source 配置文件如果用的是 settings.json确认文件路径正确且 JSON 格式合法5.2 local proxy failed报错原文local proxy failed: connection refused这个报错通常出现在 Base URL 配置错误时。排查确认ANTHROPIC_BASE_URL是https://taotoken.net/api不要有多余路径确认网络能访问该地址可以用curl https://taotoken.net/api测试如果用了本地代理工具确认代理没有拦截该地址5.3 reading choices 相关报错报错原文error reading choices: unexpected end of JSON input这个报错说明 API 返回了非预期格式。常见原因Model ID 写错导致 API 返回错误信息而非正常响应Base URL 指向了错误的端点请求被中间层拦截返回了 HTML 而非 JSON排查方法用curl直接请求 API看返回内容curl -X POST https://taotoken.net/api/v1/messages \ -H x-api-key: 你的Key \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d {model:claude-sonnet-4-20250514,max_tokens:100,messages:[{role:user,content:hi}]}如果返回正常 JSON说明 API 侧没问题问题在 Claude Code 配置如果返回错误根据错误信息调整。5.4 OAuth 相关报错报错原文OAuth token expired或OAuth flow failedClaude Code 某些功能需要 OAuth 认证。如果报 OAuth 错误确认你用的是 API Key 模式而非 OAuth 模式如果必须用 OAuth重新执行认证流程检查系统时间是否准确OAuth token 对时间敏感注意如果你同时配置了 API Key 和 OAuthClaude Code 可能优先使用 OAuth。确认配置优先级避免冲突。5.5 MCP 服务器启动失败报错原文MCP server failed to start: spawn npx ENOENT这个报错说明找不到 npx 命令。排查确认 Node.js 和 npm 已安装node -v npm -v确认 npx 在 PATH 中which npx如果用的是 nvm确认 Claude Code 启动时加载了正确的 Node 版本6. 语义一致 CTA继续深入 Agent 设计空间到这里你已经完成了从模型接入到 MCP 工具链的完整配置也验证了权限系统和上下文压缩的行为。接下来可以根据你的实际需求选择深入方向。如果你在排障或接入过程中遇到问题建议先查阅接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里面有完整的配置说明和常见问题。需要管理或创建新的 API Key可以访问 API Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。如果你想先验证模型是否可用或者测试不同 Model ID 的效果模型对话页面https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content是最快的入口。如果你打算长期用 Claude Code 做编码或构建 AgentCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content提供了更适合持续使用的方案。另外如果你需要更细粒度的控制台管理控制台入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。回到设计空间本身Claude Code 和 OpenClaw 的对比给我们的最大启发是Agent 架构没有标准答案只有场景适配。你的人类决策权边界在哪、信任模型是什么、上下文窗口怎么管理这些问题的答案决定了你的架构选择。源码级分析的价值不在于抄代码而在于理解每个设计决策背后的权衡。