AnthropicSDK实现Agent调用MCP服务
参考express风格的mcpServer飞书聊天机器人事件回调测试mqtt接入事件回调测试安装依赖npminstallanthropic-ai/sdk modelcontextprotocol/sdk zod ming_nodemcp_server.jsimport{z}fromzod;importMfromming_node;importMyMcpServerfrom./lib/StdioMcpServer.js;constappnewMyMcpServer(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;constcab1;res.send(c);});app.get(设置转速,{speed:z.number()},async(req,res){const{speed}req.params;M.log(转速设置为${speed});res.send(转速设置完成);});agentimportAnthropicfromanthropic-ai/sdk;import{Client}frommodelcontextprotocol/sdk/client/index.js;import{StdioClientTransport}frommodelcontextprotocol/sdk/client/stdio.js;// ─────────────────────────────────────────────// 配置区需要修改时只动这里// ─────────────────────────────────────────────constCONFIG{api:{apiKey:ak_xxx,baseURL:https://api.longcat.chat/anthropic,model:LongCat-Flash-Chat,// ── messages.create 全参数 ──────────────maxTokens:1024,// 最大输出 token 数必填system:你是一个智能助手请用中文回答。,// 系统提示词temperature:1.0,// 随机性 0~1与 top_p 二选一// top_p: 0.9, // 核采样与 temperature 二选一// top_k: 50, // 只从概率最高的 K 个 token 中采样// stopSequences: [END], // 遇到这些字符串时停止生成// toolChoice: auto, // auto | any | none | { type:tool, name:xx }// metadata: { user_id: u1 }, // 请求元数据// stream: false, // 是否流式返回},server:{command:node,args:[mcp_server.js],// 切换 MCP Server 只改这里},};// ─────────────────────────────────────────────// 初始化 Anthropic 客户端// ─────────────────────────────────────────────functioncreateAnthropicClient(){returnnewAnthropic({apiKey:CONFIG.api.apiKey,baseURL:CONFIG.api.baseURL,defaultHeaders:{Authorization:Bearer${CONFIG.api.apiKey},x-api-key:CONFIG.api.apiKey,},});}// ─────────────────────────────────────────────// 初始化 MCP 客户端// ─────────────────────────────────────────────asyncfunctioncreateMcpClient(){consttransportnewStdioClientTransport(CONFIG.server);constclientnewClient({name:agent,version:1.0.0},{capabilities:{}});awaitclient.connect(transport);returnclient;}// MCP 工具格式 → Claude 工具格式functiontoClaudeTool(tool){return{name:tool.name,description:tool.description,input_schema:tool.inputSchema,};}// ─────────────────────────────────────────────// Agent 主循环// ─────────────────────────────────────────────asyncfunctionrunAgent(anthropic,mcpClient,tools,userMessage){console.log(\n${─.repeat(48)});console.log(${userMessage});console.log(─.repeat(48));constmessages[{role:user,content:userMessage}];while(true){constresponseawaitanthropic.messages.create({// ── 必填 ────────────────────────────model:CONFIG.api.model,max_tokens:CONFIG.api.maxTokens,messages,// ── 可选从 CONFIG 读取注释掉的参数不传 ──system:CONFIG.api.system,temperature:CONFIG.api.temperature,tools,// top_p: CONFIG.api.top_p,// top_k: CONFIG.api.top_k,// stop_sequences: CONFIG.api.stopSequences,// tool_choice: CONFIG.api.toolChoice,// metadata: CONFIG.api.metadata,// stream: CONFIG.api.stream,});// Claude 回复纯文本 → 任务完成if(response.stop_reasonend_turn){consttextresponse.content.find(bb.typetext)?.text;if(text)console.log(\n${text});break;}// Claude 请求调用工具if(response.stop_reasontool_use){messages.push({role:assistant,content:response.content});consttoolResultsawaitexecuteTools(mcpClient,response.content);messages.push({role:user,content:toolResults});}}}// 执行本轮所有工具调用返回结果列表asyncfunctionexecuteTools(mcpClient,contentBlocks){constresults[];for(constblockofcontentBlocks.filter(bb.typetool_use)){console.log(${block.name}(${JSON.stringify(block.input)}));constresultawaitmcpClient.callTool({name:block.name,arguments:block.input,});consttextresult.content[0]?.text??;console.log(→${text});results.push({type:tool_result,tool_use_id:block.id,content:text,});}returnresults;}// ─────────────────────────────────────────────// 入口// ─────────────────────────────────────────────asyncfunctionmain(){constanthropiccreateAnthropicClient();constmcpClientawaitcreateMcpClient();try{const{tools:mcpTools}awaitmcpClient.listTools();consttoolsmcpTools.map(toClaudeTool);console.log( 已连接可用工具${tools.map(tt.name).join(, )});// ↓ 在这里添加更多对话awaitrunAgent(anthropic,mcpClient,tools,帮我算一下 12 34然后把转速设置为 300);}finally{awaitmcpClient.close();}}main();测试$nodeagent.js 已连接可用工具加法, 设置转速 ──────────────────────────────────────────────── 帮我算一下1234然后把转速设置为300──────────────────────────────────────────────── 加法({a:12,b:34})→47 设置转速({speed:300})→ 转速设置完成 计算结果为46转速已设置为300

相关新闻

svg-mesh-3d参数配置指南:打造完美3D网格模型的10个技巧

svg-mesh-3d参数配置指南:打造完美3D网格模型的10个技巧

svg-mesh-3d参数配置指南:打造完美3D网格模型的10个技巧 【免费下载链接】svg-mesh-3d :rocket: converts a SVG path to a 3D mesh 项目地址: https://gitcode.com/gh_mirrors/sv/svg-mesh-3d svg-mesh-3d是一款强大的工具,能够将SVG路径转换为高…

2026/7/6 7:46:29 阅读更多 →
Logistic Regression在BitVision中的应用:56.7%准确率背后的算法原理

Logistic Regression在BitVision中的应用:56.7%准确率背后的算法原理

Logistic Regression在BitVision中的应用:56.7%准确率背后的算法原理 【免费下载链接】BitVision Terminal dashboard for trading Bitcoin, predicting price movements, and losing all your money 项目地址: https://gitcode.com/gh_mirrors/bi/BitVision …

2026/7/3 19:39:23 阅读更多 →
PHP架构测试利器PHPat:10个实用断言规则助你写出更健壮代码

PHP架构测试利器PHPat:10个实用断言规则助你写出更健壮代码

PHP架构测试利器PHPat:10个实用断言规则助你写出更健壮代码 【免费下载链接】phpat PHP Architecture Tester - Easy to use architectural testing tool for PHP :heavy_check_mark: 项目地址: https://gitcode.com/gh_mirrors/ph/phpat PHPat(P…

2026/7/3 22:51:38 阅读更多 →

最新新闻

生产级AI代理如何不迷失方向 Fable5的循环与目标系统完整拆解

生产级AI代理如何不迷失方向 Fable5的循环与目标系统完整拆解

2026年,越来越多独立开发者、AI驱动的机构和产品团队开始把核心运营工作交给模型。但现实很快打脸:模型跑着跑着就偏离目标、重复劳动、或者在第4轮后彻底忘记上周做了什么。直接扔一个大prompt给Claude或类似模型,初期看起来聪明&#xff0c…

2026/7/6 8:45:54 阅读更多 →
25-AGENTS.md最佳实践

25-AGENTS.md最佳实践

25 AGENTS.md 最佳实践 概述 前面三篇文章详细介绍了 AGENTS.md 的机制、高级用法和配置灵活性。这一篇,我们将回归到最本质的问题:怎样写出能让 AI 真正高效工作的 AGENTS.md? 本文不是理论的堆砌,而是从真实踩坑经验中提炼出来的实战规则。这些规则来自大量 AGENTS.m…

2026/7/6 8:45:54 阅读更多 →
RAG 检索优化实战:基于 Recall@5、Precision@3、NDCG@10 的 3 步调优法

RAG 检索优化实战:基于 Recall@5、Precision@3、NDCG@10 的 3 步调优法

RAG 检索优化实战:基于 Recall5、Precision3、NDCG10 的 3 步调优法在构建检索增强生成(RAG)系统时,检索模块的性能直接影响最终生成内容的质量。本文将介绍一套基于 Recall5、Precision3 和 NDCG10 指标的实用调优方法&#xff0…

2026/7/6 8:43:54 阅读更多 →
终极指南:如何使用Scarab模组管理器快速安装空洞骑士游戏模组

终极指南:如何使用Scarab模组管理器快速安装空洞骑士游戏模组

终极指南:如何使用Scarab模组管理器快速安装空洞骑士游戏模组 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾经为了在《空洞骑士》中安装一个心仪的模组…

2026/7/6 8:43:54 阅读更多 →
终极智能BP助手:如何用Seraphine轻松实现英雄联盟自动BP与战绩分析

终极智能BP助手:如何用Seraphine轻松实现英雄联盟自动BP与战绩分析

终极智能BP助手:如何用Seraphine轻松实现英雄联盟自动BP与战绩分析 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 你是否在英雄联盟排位赛中经常因为错过接受对局而懊恼?是否在BP阶段…

2026/7/6 8:41:53 阅读更多 →
专业显卡优化工具NVIDIA Profile Inspector:解锁游戏性能的6个关键步骤

专业显卡优化工具NVIDIA Profile Inspector:解锁游戏性能的6个关键步骤

专业显卡优化工具NVIDIA Profile Inspector:解锁游戏性能的6个关键步骤 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款专业的开源显卡驱动配置工具&#xf…

2026/7/6 8:39:52 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻