Agent 调用 MCP 服务:anthropic_agent.js 的模型通道改走 TaoToken
把 anthropic_agent.js 的模型通道改走 TaoToken需要先在官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建 Key再把 CONFIG.api 里的 apiKey 与 baseURL 统一到这份配置。原文的结构没有变anthropic_agent.js 与 openai_agent.js 仍然通过 StdioClientTransport 拉起 mcp_server.jsMCP 工具仍然由 node mcp_server.js 提供改动只发生在 Agent 侧的模型请求通道。这样换模型或换供应商时不必在 LongCat、GLM 等写死配置之间来回改代码而是把 Key、Base URL、模型 ID 收敛到一处。TaoToken 在这里只提供 Key 和 Base URL它不替代“加法”“设置转速”这类 MCP 工具也不会替 mcp_server.js 执行 callTool。1. anthropic_agent.js / openai_agent.js 通过 StdioClientTransport 调 MCP 的配置痛点原文的链路很清晰Agent 进程启动后先创建 Anthropic 或 OpenAI 客户端再用 StdioClientTransport 拉起 mcp_server.js接着 listTools 拿到“加法”“设置转速”等工具最后把用户消息交给模型。模型返回 tool_use 或 tool_calls 时Agent 调用 mcpClient.callTool把工具结果回填到消息历史直到模型输出 end_turn 或 stop。问题在 CONFIG.api 这一层const CONFIG { api: { apiKey: YOUR_API_KEY, baseURL: https://api.longcat.chat/anthropic, model: LongCat-Flash-Chat, }, server: { command: node, args: [mcp_server.js], }, };anthropic_agent.js 里可能写 LongCat 的 baseURL 和模型openai_agent.js 里可能写 GLM 的 baseURL 和模型。每新增一个 Agent就复制一份 Key、改一次 baseURL、换一次模型 ID多个文件之间的 apiKey 还可能不一致。真正要统一的是 Agent 侧模型通道不管用 Anthropic SDK 还是 OpenAI SDK都指向同一套 TaoToken Key、Base URL 和模型 ID。MCP server 的文件名、工具定义、StdioClientTransport 启动方式保持原样。2. 在官网创建 Keyanthropic_agent.js 的 apiKey 填什么原文里“申请模型 Key、填 baseURL”这一步现在改去官网完成。打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 在控制台创建 Key得到一串 YOUR_API_KEY 形式的凭证。然后在模型广场选择要用于 Agent 的模型复制它对应的模型 ID。这个模型 ID 不要凭记忆写也不要照搬旧配置里的 LongCat-Flash-Chat 或 GLM-4.7要以模型广场实际展示为准。拿到两样东西后填入规则是anthropic_agent.js 的 CONFIG.api.apiKey填 YOUR_API_KEY。openai_agent.js 的 CONFIG.api.apiKey同样填这把 YOUR_API_KEY不必为两个 Agent 分别建两套逻辑。两个 Agent 的 CONFIG.api.baseURL填 https://taotoken.net/api不带 /v1不加 UTM 查询参数。两个 Agent 的 CONFIG.api.model填模型广场里复制的模型 ID本文代码里用 MODEL_ID 占位。TaoToken 只提供 Key 和 Base URL。mcp_server.js 里的“加法”仍然执行 ab1“设置转速”仍然把 speed 写入日志并返回字符串。模型通道换掉之后工具本身没有被替换只是调用工具的模型从原来的 LongCat、GLM 等供应商统一到了 TaoToken。3. anthropic_agent.js 与 openai_agent.js 的可复制 CONFIG.api先改 anthropic_agent.js。把 CONFIG.api 三段改成下面这样server 段保持拉起 mcp_server.js 不变const CONFIG { api: { apiKey: YOUR_API_KEY, baseURL: https://taotoken.net/api, model: MODEL_ID, maxTokens: 1024, system: 你是一个智能助手请用中文回答。, temperature: 1.0, }, server: { command: node, args: [mcp_server.js], }, };Anthropic 客户端创建函数可以保留原来的 defaultHeaders 写法function createAnthropicClient() { return new Anthropic({ apiKey: CONFIG.api.apiKey, baseURL: CONFIG.api.baseURL, defaultHeaders: { Authorization: Bearer ${CONFIG.api.apiKey}, x-api-key: CONFIG.api.apiKey, }, }); }再改 openai_agent.js。OpenAI SDK 的 baseURL 也填同一个地址不要因为 SDK 名字不同就换成另一个域名const CONFIG { api: { apiKey: YOUR_API_KEY, baseURL: https://taotoken.net/api, model: MODEL_ID, maxTokens: 1024, system: 你是一个智能助手请用中文回答。, temperature: 1.0, }, server: { command: node, args: [mcp_server.js], }, };对应客户端function createOpenAIClient() { return new OpenAI({ apiKey: CONFIG.api.apiKey, baseURL: CONFIG.api.baseURL, }); }两边的工具转换函数不要混anthropic_agent.js 用 toClaudeTool把 MCP 工具的 inputSchema 映射为 input_schemaopenai_agent.js 用 toOpenAITool把 inputSchema 放到 function.parameters。模型通道统一之后这两个转换函数仍然各司其职否则会出现“工具列表能列出但 callTool 不被触发”的情况。4. mcp_server.js 与 StdioClientTransport 保持不变只换模型通道MCP server 仍按原文用 node mcp_server.js 启动不需要因为 TaoToken 改端口或改协议。下面这段是 mcp_server.js 的关键部分工具名和参数结构保持原样import { z } from zod; import M from ming_node; import MyMcpServer from ./lib/StdioMcpServer.js; const app new MyMcpServer(my_mcp_server); app.listen(3000); app.begin((req, res) { M.log(开始执行, req.mcpName, JSON.stringify(req.params)); }); app.end((req, res) { M.log(执行完成, req.mcpName, res.result); }); app.get(加法, { a: z.number(), b: z.number(), }, async (req, res) { const { a, b } req.params; const c a b 1; res.send(c); }); app.get(设置转速, { speed: z.number() }, async (req, res) { const { speed } req.params; M.log(转速设置为 ${speed}); res.send(转速设置完成); });Agent 侧仍然这样创建 MCP 客户端async function createMcpClient() { const transport new StdioClientTransport(CONFIG.server); const client new Client( { name: agent, version: 1.0.0 }, { capabilities: {} } ); await client.connect(transport); return client; }需要安装的依赖也与原文一致npm install modelcontextprotocol/sdk zod ming_node anthropic-ai/sdk openai也就是说TaoToken 改的是 Anthropic、OpenAI SDK 发出的模型请求不是 StdioClientTransport也不是 mcp_server.js 暴露的工具。把这一点分清后面排查时就不会误改 MCP 层。5. 验证node anthropic_agent.js 列出工具并跑通 1234 与转速 300先单独确认 mcp_server.js 能启动node mcp_server.js它能正常运行后再跑 Agentnode anthropic_agent.js期望先看到工具列表再看到两轮 callTool。输出形式可以简化为下面这样已连接可用工具加法, 设置转速 -------------------------------- 用户帮我算一下 12 34然后把转速设置为 300 -------------------------------- 工具加法({a:12,b:34}) - 47 工具设置转速({speed:300}) - 转速设置完成 模型工具返回 47转速已设置为 300这里要特别注意一个原文里的细节mcp_server.js 的“加法”实现是 a b 1所以 12 34 返回 47不是 46。模型最后用自然语言总结时如果写成“计算结果为 46”并不代表 callTool 失败。判断链路是否跑通看三处listTools 是否列出“加法”和“设置转速”是否出现 加法({a:12,b:34}) 且返回 47是否出现 设置转速({speed:300}) 且返回“转速设置完成”。只要这三处出现TaoToken 的模型通道和 MCP 工具调用就已经接通。OpenAI 版本可以用同样方式验证node openai_agent.js它可能输出 finish_reason 为 tool_calls然后执行同名工具。两边的工具名都由 mcp_server.js 决定不因 Anthropic 或 OpenAI SDK 改变。6. 常见错误与排查工具列表、callTool、模型 ID、Base URL第一类工具列表为空或者显示“可用工具”后面没有内容。先手动执行 node mcp_server.js确认它没有因为缺少依赖、路径不对、端口占用而退出。StdioClientTransport 的 CONFIG.server.args 写的是 [mcp_server.js]所以 Agent 的工作目录要和 mcp_server.js 所在目录一致如果在别的目录执行 node anthropic_agent.js就会拉不起正确的文件。第二类模型能回答但从不出现 callTool。检查 CONFIG.api.model 是否真的来自模型广场且该模型支持工具调用。再看 anthropic_agent.js 里 tools 的 input_schema 是否由 toClaudeTool 正确生成openai_agent.js 里 function.parameters 是否由 toOpenAITool 正确生成。如果模型不知道有工具它会直接 end_turn 或 stop自然不会有“加法”“设置转速”的执行日志。第三类Base URL 被写错。TaoToken 在 Agent 侧填 https://taotoken.net/api不带 /v1也不要把官网链接里的 UTM 查询参数拼进 baseURL。baseURL 一旦多出 /v1 或查询字符串SDK 再拼接 messages、chat/completions 时路径就可能异常表现为请求发不出去或返回非预期结果。Key 则从官网创建后直接填入 CONFIG.api.apiKey不要与旧 LongCat、GLM 的 Key 混用。第四类工具执行了但模型总结与工具结果不一致。除了上面说的 ab1 返回 47 之外还要看 executeTools 是否把 result.content[0].text 原样放回 tool_result 或 role: tool 消息。Anthropic 分支要回填 type: tool_result 和 tool_use_idOpenAI 分支要回填 role: tool 和 tool_call_id。字段对不上模型就看不到工具返回值只能凭上下文猜。第五类新增 Agent 时又复制了一份旧配置。验证通过后后续新增的 Agent 不要重新写 LongCat、GLM 的 baseURL而是复用同一套apiKey 用官网创建的 YOUR_API_KEYbaseURL 用 https://taotoken.net/api模型 ID 从模型广场复制。这样新增 Agent 只需要关注自己的提示词和 MCP server 启动参数不再反复改模型供应商。7. 验证通过后新增 Agent 复用这份配置与后续入口当 node anthropic_agent.js 已经能列出“加法”“设置转速”并且完成 1234 与转速 300 的 callTool 链路后anthropic_agent.js 与 openai_agent.js 的模型通道就统一到了 TaoToken。后续再写新的 Agent复制 CONFIG.api 时只需要确认三件事Key 是否来自官网、baseURL 是否为 https://taotoken.net/api、model 是否为模型广场中的有效模型 ID。MCP server 仍然由 node mcp_server.js 启动工具逻辑仍然留在 mcp_server.js 里。如果你准备把同一把 Key 继续用于 Claude Code 或其他本地 Agent建议先把 Key 管理和接入文档放在手边API Keys 页面用于创建、轮换和核对 KeyClaude Code 接入文档用于对照 settings.json 或 ANTHROPIC_* 环境变量的写法。入口如下API Keyshttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewriteClaude Code 接入文档https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-codeutm_campaignrewrite把 anthropic_agent.js、openai_agent.js 的 CONFIG.api 固定成这套配置后下一次换模型只需要改 model 字段下一次新建 Agent 也只需要复用同一组 Key 与 Base URLMCP 工具调用链路不需要跟着重写。

相关新闻

压 CAD 批量生成:1.5B 模型和 TaoToken base_url 的配合

压 CAD 批量生成:1.5B 模型和 TaoToken base_url 的配合

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 2:14:44 阅读更多 →
图书资料管理系统如何撑住大型软件架构:分层、检索与高并发实践

图书资料管理系统如何撑住大型软件架构:分层、检索与高并发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 2:13:44 阅读更多 →
时空图神经网络实战:交通预测中的图建模与模型部署

时空图神经网络实战:交通预测中的图建模与模型部署

简介:一份面向智能交通与时空数据建模的学习资料,系统讲解城市大脑如何结合时空图神经网络,对交通流量、事故和天气数据进行实时监测与未来趋势预测,并探讨如何通过预测干预避免拥堵和事故,适合从事深度学习、机器学习…

2026/9/19 2:13:44 阅读更多 →

最新新闻

llvm-project源码获取、构建与二次开发实战指南

llvm-project源码获取、构建与二次开发实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 2:51:04 阅读更多 →
MAC上JMeter启动完全指南:三种高效方法及常见问题排查

MAC上JMeter启动完全指南:三种高效方法及常见问题排查

我这几年给团队搭性能测试环境,见过太多人在MAC上装JMeter时卡在最前面那一步:下载好了不知道点哪个文件启动,双击.command没反应,终端里敲jmeter又提示command not found,还有人在Apple Silicon芯片上折腾了半天才发现…

2026/9/19 2:51:04 阅读更多 →
PHP多进程文件锁实战:从flock原理到防重入与竞态处理

PHP多进程文件锁实战:从flock原理到防重入与竞态处理

做 PHP 后端这几年,真正让我觉得"这语言跑在 Web 上很爽,一上 CLI 多进程就原形毕露"的场景,就是文件系统锁定。你单机跑一个 PHP 脚本,写个文件、读个缓存,完全没问题。可一旦上了队列消费者、定时任务、图…

2026/9/19 2:51:04 阅读更多 →
2026年随身WiFi选购全指南:从芯片方案到流量套餐的避坑与验收

2026年随身WiFi选购全指南:从芯片方案到流量套餐的避坑与验收

我先说个结论:2026年这个时间点,你不用再纠结“要不要拉宽带”这个问题了。我身边越来越多的朋友,从北上广深的合租房到老家的自建房,都开始拿随身WiFi当主力网络。它确实不是万能的,但在相当多场景下,它比…

2026/9/19 2:51:04 阅读更多 →
Mac 上 JMeter 快速启动全攻略:三种效率方案与问题排查指南

Mac 上 JMeter 快速启动全攻略:三种效率方案与问题排查指南

JMeter 是我日常做接口压测和性能回归最常用的工具,在 Mac 上用了好几年。你可能觉得“启动工具”这种小事不值得写,但实际上 Mac 版 JMeter 的启动体验和 Windows 差很多:Win 上装完以后桌面有个快捷方式,双击 jmeter.bat 就完事…

2026/9/19 2:51:04 阅读更多 →
高教杯计算机绘图备考:从三视图到参数化建模的工程图全流程解析

高教杯计算机绘图备考:从三视图到参数化建模的工程图全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 2:50:04 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →