☰
Claude Code 之父 Boris Cherny 说编程已被解决,那 TypeScript 项目里 Agent 的 MCP 配置该怎么写?
2026/9/27 22:24:33 网站建设 项目流程

1. Boris 说「编程已被解决」,那 TypeScript 项目里 Agent 的 MCP 配置到底该怎么写

Boris Cherny 在访谈里说了一句让很多人睡不着觉的话:整个 2026 年他没亲手写过一行代码,每天提交几十个 PR,最疯狂的一天提了 150 个。Claude Code 的代码库本身就是 TypeScript 加 React,没什么秘密。他的结论很直接——编程已经被解决了,至少对他来说是。

但如果你真的在 TypeScript 项目里跑过 Claude Code Agent,就会发现一个尴尬的现实:模型能力确实够了,可你的 Agent 连你项目里的数据库 schema 都读不到,连你团队的 API 规范都查不了。问题不在模型,在配置层。Boris 反复强调 MCP 是连接一切的答案,但「MCP 该怎么写」这件事,官方文档给的是通用示例,落到 TypeScript 项目里,settings.json 和 config.toml 的骨架长什么样、权限怎么收、Key 怎么统一管,这些才是真正卡住人的地方。

这篇就聚焦一件事:在 Boris 说的「Agent 时代」,TypeScript 项目里 Claude Code Agent 与 MCP 的落地配置怎么写。我会给出可复制的 settings.json 与 config.toml 骨架,并说明用 TaoToken 统一 Key 和 API 通道接入后,怎么验证配置真的生效了。适合已经在用 Claude Code、但 MCP 配置还停留在「复制粘贴官方示例」阶段的 TypeScript 开发者。

2. 前置:TaoToken 统一 Key 与 API 通道,为什么 Agent 时代更需要它

Boris 提到 Anthropic 内部所有流程都围绕 AI 重新设计,Agent 之间通过 Slack 互相沟通。这种玩法对个人开发者和小团队来说,第一个撞上的墙不是模型能力,是 Key 管理。你可能有 Claude Code 的 Key、有 MCP server 调外部 API 的 Key、有 CI 里跑 Agent 的 Key,散落在各个 .env 和 settings 文件里,改一个地方要翻五个仓库。

TaoToken 在这里的角色是统一入口。它提供兼容的 API 通道,你可以把 Claude Code Agent 的模型调用、MCP server 里需要的外部请求,都收敛到同一个 Key 和同一个 base URL 上。这样 settings.json 里不用再写一堆不同厂商的 endpoint,config.toml 里 MCP server 的环境变量也能统一从一处注入。

具体来说,你需要先拿到一个 TaoToken 的 API Key。访问 https://taotoken.net/api-keys 创建,然后在项目里把它作为唯一的环境变量来源。模型对话调试可以用 https://taotoken.net/models 先确认通道通不通,长期跑编码 Agent 的话,Coding Plan 页面 https://taotoken.net/coding-plan 有更细的配额说明。接入文档在 https://taotoken.net/doc ,遇到配置报错先翻这里。

注意:TaoToken 的 API 地址是 https://taotoken.net/api ,不要加 UTM 参数,settings.json 里写错这个 base URL 是最常见的 401 来源。

3. 可复制配置:TypeScript 项目的 settings.json 与 config.toml 骨架

Claude Code 的配置分两层:项目级的 settings.json 管 Agent 行为和权限,MCP 的 config.toml 管外部工具连接。TypeScript 项目里,我建议把两者都放在项目根目录的 .claude/ 下,跟着仓库走,这样团队每个人拉下来就是一致的 Agent 环境。

先看 settings.json 的骨架。这个文件控制 Claude Code 用哪个模型通道、允许哪些工具、MCP server 怎么启动:

{ "model": "claude-sonnet-4-20250514", "apiBaseUrl": "https://taotoken.net/api", "apiKeyEnvVar": "TAOTOKEN_API_KEY", "permissions": { "allow": [ "Read", "Glob", "Grep", "Bash(npm run typecheck:*)", "Bash(npm run test:*)", "Bash(npx tsc --noEmit)" ], "deny": [ "Bash(rm -rf:*)", "Bash(git push --force:*)", "Read(./.env)", "Read(./secrets/**)" ] }, "mcpServers": { "typescript-lsp": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-typescript"], "env": { "TAOTOKEN_API_KEY": "${TAOTOKEN_API_KEY}" } }, "postgres-readonly": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-postgres"], "env": { "DATABASE_URL": "${DATABASE_URL_READONLY}", "TAOTOKEN_API_KEY": "${TAOTOKEN_API_KEY}" } } } }

几个关键点。apiBaseUrl 指向 TaoToken 的 API 地址,apiKeyEnvVar 声明从环境变量读 Key,这样 Key 不进仓库。permissions.allow 里我特意放了 typecheck 和 test 命令,因为 TypeScript 项目里 Agent 改完代码最该跑的就是这两个,放行它们能让 Agent 自己验证改动。deny 里挡住 .env 和 secrets 目录,这是底线。

再看 config.toml,这个文件管 MCP server 的细粒度行为,比如超时、重试、工具白名单:

[server.typescript-lsp] transport = "stdio" timeout_ms = 30000 max_retries = 2 tools = ["get_diagnostics", "get_completions", "find_references"] [server.postgres-readonly] transport = "stdio" timeout_ms = 15000 max_retries = 1 tools = ["query"] read_only = true [agent] default_model = "claude-sonnet-4-20250514" api_base = "https://taotoken.net/api" max_tokens_per_turn = 8192 auto_approve_reads = true

config.toml 里 postgres-readonly 的 read_only = true 很重要。Boris 说 Agent 会自己判断该做什么,但在生产库面前,配置层的硬约束比模型判断更可靠。tools 白名单只放 query,不放 execute,这样即使 Agent 想写库也写不了。

环境变量在 .env.local 里统一注入,这个文件进 .gitignore:

TAOTOKEN_API_KEY=sk-你的taotoken密钥 DATABASE_URL_READONLY=postgresql://readonly_user:pass@localhost:5432/mydb

TypeScript 项目里如果用了 dotenv,记得在 Agent 启动脚本里先加载。我习惯在 package.json 里加一个 agent 脚本:

{ "scripts": { "agent": "dotenv -e .env.local -- claude" } }

这样 npm run agent 启动时,环境变量已经就位,settings.json 里的 ${TAOTOKEN_API_KEY} 能正确展开。

4. 验证请求:确认 MCP 配置真的生效了

配置写完不代表生效。Boris 说他们内部 Agent 之间会互相沟通,前提是每个 Agent 的工具连接都是通的。验证分三步。

第一步,确认模型通道通。在项目里跑一个最小请求,看 TaoToken 的 API 地址是否可达:

curl -s https://taotoken.net/api/v1/messages \ -H "x-api-key: $TAOTOKEN_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "max_tokens": 64, "messages": [{"role": "user", "content": "reply with ok"}] }'

返回里如果有 content 字段且文本是 ok,说明 Key 和 base URL 都对。如果返回 401,先检查 TAOTOKEN_API_KEY 有没有正确加载;如果返回 404,检查 base URL 是不是写成了带路径的变体。

第二步,确认 MCP server 被 Claude Code 识别。启动 Agent 后,在对话里输入 /mcp 命令,应该能看到 typescript-lsp 和 postgres-readonly 两个 server 的状态是 connected。如果显示 failed,看 config.toml 里的 command 和 args 能不能在终端里手动跑通。

第三步,实际调用一次 MCP 工具。让 Agent 做一件必须用 MCP 才能完成的事,比如「查一下 users 表里最近注册的 5 个用户」。如果 Agent 能通过 postgres-readonly 的 query 工具拿到结果,说明整条链路通了。这一步成功的结果长这样:Agent 返回查询结果,并在工具调用记录里显示 postgres-readonly.query 被调用。

TypeScript 项目里还有一个专属验证:让 Agent 读一个 .ts 文件并报告类型错误。如果 typescript-lsp 的 get_diagnostics 工具正常工作,Agent 能准确说出哪一行有类型问题。这比单纯看 server 状态更能说明 MCP 真的在干活。

5. 本篇常见错排查

配置 MCP 时踩的坑,大多集中在几个地方。

报错MCP server "xxx" failed to start: spawn npx ENOENT。这是环境变量 PATH 的问题,Claude Code 启动时没继承你 shell 的 PATH。解决办法是在 settings.json 的 mcpServers 里把 command 写成 npx 的绝对路径,用which npx查出来填进去。

报错401 Unauthorized且确认 Key 没问题。八成是 apiBaseUrl 写错了。TaoToken 的 API 地址是 https://taotoken.net/api ,不要写成 https://taotoken.net/api/v1 或者带尾斜杠。settings.json 里改完记得重启 Agent,配置不会热加载。

MCP 工具调用返回permission denied。检查 settings.json 的 permissions.deny 里有没有误伤。比如你 deny 了Read(./**),那 Agent 连项目文件都读不了,MCP 工具自然也用不了。deny 要精确到敏感路径,不要用通配符一刀切。

config.toml 改了不生效。Claude Code 读的是项目根目录 .claude/config.toml,如果你放在别的地方它不认。另外 TOML 语法对缩进不敏感但对引号敏感,字符串必须用双引号,单引号在某些版本会解析失败。

Agent 能连上 MCP 但查不到数据。postgres-readonly 的 DATABASE_URL 如果指向了错误的库,query 会返回空结果而不是报错。先在终端用 psql 手动连一下这个 URL,确认库和表都在。

提示:每次改完 settings.json 或 config.toml,用claude --debug启动,能看到 MCP server 的启动日志和配置加载详情,比猜快得多。

6. 下一步:把配置层当成 Agent 时代的基本功

Boris 说 Claude Code 本身一年后可能只剩 100 行代码,因为模型足够聪明时不需要那么多脚手架。但那是模型层的事。配置层反而会变得更关键,因为 Agent 越自主,你越需要在配置里划清边界:哪些工具能碰、哪些数据能读、Key 从哪来、请求走哪条通道。

TypeScript 项目里这套 settings.json 加 config.toml 的骨架,你可以直接复制到仓库里跑起来。跑通之后,下一步是把 MCP server 按团队需求扩展,比如接上你们的内部 API 文档、接上 CI 状态查询。每加一个 server,都在 config.toml 里用 tools 白名单收窄权限,这是 Boris 说的「为下一个模型构建产品」在配置层的具体做法。

如果你还没配 TaoToken 的 Key,先去 https://taotoken.net/api-keys 创建一个,然后照着第 3 节的骨架把 apiBaseUrl 和 apiKeyEnvVar 填上。模型对话想先试试通道,用 https://taotoken.net/models ;长期跑编码 Agent 看 https://taotoken.net/coding-plan ;配置报错翻 https://taotoken.net/doc 。Claude Code 的 Anthropic 接入细节在 https://taotoken.net/claude-code-anthropic ,控制台在 https://taotoken.net/console 。

配置写完、验证跑通的那一刻,你会理解 Boris 那句话的另一层意思:编程被解决的前提,是你先把 Agent 的配置层解决掉。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询