写Agent还要重复封装工具?一套MCP多服务方案,3个能力让AI自动查地图、读写文件、操控浏览器
前言做AI Agent开发最折磨人的是什么每接入一类外部能力就要写一套胶水代码、适配一套接口、处理不同返回格式。想让AI查地图单独封装高德接口想读写本地文件重新写文件操作函数想控制浏览器又要对接Chrome调试协议。代码冗余、维护成本爆炸换个大模型还要重新适配一遍工具调用逻辑。直到我用上MCPModel Context Protocol协议彻底解决这个痛点。读完本文你能学到MCP协议核心价值为什么它是AI工具统一标准Node.jsLangChain完整可运行代码同时对接3种MCP服务真实实战场景AI自主查询酒店、生成文档、打开浏览器分页展示图片开发中高频踩坑点与修复方案多MCP服务协同Agent完整执行流程一、先搞懂MCP到底是什么MCP全称模型上下文协议是AI领域标准化工具通信协议业内俗称AI万能USB插头。传统工具接入痛点每个第三方服务、本地能力都要单独写适配层返回格式不统一每次调用都要手动做数据兼容切换大模型、更换工具时大量代码需要重构MCP带来的改变所有工具统一封装成MCP Server通过stdio/HTTP两种方式通信。客户端只需要一次配置就能自动读取全部工具交给LLM自由调用。本文实战用到3套成熟MCP服务amap-maps-streamableHTTP远程HTTP服务高德地图查位置、酒店、路线filesystem本地子进程服务读写本地文件、创建目录、生成md文档chrome-devtools本地子进程服务操控Chrome浏览器新开标签、修改页面标题、打开图片链接二、项目前置依赖安装新建项目安装全部依赖包复制执行npminstalldotenv langchain/mcp-adapters langchain/openai chalk langchain.env环境变量配置项目根目录新建.env文件填入密钥DEEPSEEK_API_KEY你的DeepSeek密钥 AMAP_KEY你的高德地图key三、完整可运行实战代码 mcp-test.jsimportdotenv/config;import{MultiServerMCPClient}fromlangchain/mcp-adapters;import{ChatOpenAI}fromlangchain/openai;importchalkfromchalk;import{HumanMessage,SystemMessage,ToolMessage}fromlangchain/core/messages;// 初始化DeepSeek大模型兼容OpenAI调用格式constmodelnewChatOpenAI({modelName:deepseek-v4-pro,apiKey:process.env.DEEPSEEK_API_KEY,temperature:0,// 设为0保证工具调用稳定不随机发散configuration:{baseURL:https://api.deepseek.com/v1,},});// 多MCP服务统一客户端配置constmcpClientnewMultiServerMCPClient({mcpServers:{// 高德地图远程MCP服务HTTP流式传输amap-maps-streamableHTTP:{url:https://mcp.amap.com/mcp?key${process.env.AMAP_KEY}},// 本地文件系统MCPnpx启动子进程限定访问目录filesystem:{command:npx,args:[-y,modelcontextprotocol/server-filesystem,C:/Users/Administrator/Desktop/ai_doubao_ysw/ai/agent_in_action/remote-mcp]},// Chrome浏览器控制MCP本地调试端口9222chrome-devtools:{command:npx,args:[-y,chrome-devtools-mcplatest,]}}});// 自动拉取全部MCP服务暴露的工具consttoolsawaitmcpClient.getTools();// 将所有工具绑定到大模型模型自动识别可用操作constmodelWithToolsmodel.bindTools(tools);/** * Agent循环执行核心函数 * param {string} query 用户任务指令 * param {number} maxIterations 最大迭代轮次防止死循环 * returns {string} 最终执行结果 */asyncfunctionrunAgentWithTools(query,maxIterations30){constmessages[newHumanMessage(query)];// 循环执行模型思考→调用工具→接收结果→再次思考for(leti0;imaxIterations;i){console.log(chalk.bgGreen(第${i1}轮迭代));constresponseawaitmodelWithTools.invoke(messages);messages.push(response);// 无工具调用任务结束返回最终回答if(!response.tool_calls||response.tool_calls.length0){console.log(chalk.bgRed(AI 最终回答${response.content}));returnresponse.content}console.log(chalk.bgBlue(本轮工具调用${response.tool_calls.map(tt.name).join(, )}));// 逐个执行模型发起的工具调用for(consttoolCallofresponse.tool_calls){constfoundTooltools.find(tt.nametoolCall.name);if(foundTool){consttoolResultawaitfoundTool.invoke(toolCall.args);letcontentStr;// 兼容MCP两种返回格式纯字符串 / {text: 内容} 对象if(typeoftoolResultstring){contentStrtoolResult;}elseif(toolResulttoolResult.text){contentStrtoolResult.text;}// 将工具执行结果存入消息队列供下一轮模型推理messages.push(newToolMessage({content:contentStr,tool_call_id:toolCall.id}));}}}// 达到最大迭代次数返回最后一条AI输出returnmessages[messages.length-1].content;}// 实战任务查询北京南站最近3家酒店、生成文档、浏览器分页打开酒店图片并修改标签标题awaitrunAgentWithTools(北京南站附近的酒店最近的 3 个酒店拿到酒店图片打开浏览器每个tab一个url展示并且把页面标题改为酒店名同时将酒店信息、步行/驾车路线保存为本地md文档);// 关闭所有MCP进程连接awaitmcpClient.close();四、实战场景完整执行效果需求拆解调用高德MCP定位北京南站筛选距离最近3家酒店获取坐标、地址、评分、图片链接、步行/驾车路线调用FileSystem MCP自动生成北京南站附近酒店及路线指南.md保存全部数据调用Chrome DevTools MCP新开3个浏览器标签分别加载酒店图片修改每个Tab页面标题为对应酒店名称生成文档核心内容节选北京南站附近酒店及路线指南北京南站| 坐标116.378059, 39.867679| 北京市丰台区 推荐酒店概览序号酒店名称评分步行距离驾车距离1汉庭酒店(北京南站北广场店)⭐4.4约403米约1.2公里2海友酒店(北京南站南广场店)⭐4.4约1.6公里约1.8公里3桔子酒店(北京南站店)⭐4.6约1.5公里约1.6公里酒店路线详情每家酒店单独区块包含完整步行分步指引、驾车路线、商圈信息最后附带综合对比表格与入住推荐建议。浏览器执行动作Agent拿到每家酒店图片URL后自动调用Chrome工具新建独立Tab页跳转图片链接修改页面document.title为酒店全称3个酒店对应3个独立浏览器标签五、开发高频踩坑提醒坑1Chrome MCP启动失败报错无法连接Chrome调试端口解决启动Chrome时开启远程调试端口chrome --remote-debugging-port9222必须先打开带调试端口的浏览器再运行脚本。坑2FileSystem无权限读写文件报错文件夹访问拒绝解决npx参数里的目录路径必须是绝对路径Windows路径分隔符统一用/不要用\。坑3工具调用频繁失效、模型乱输出解决LLM配置temperature:0降低随机度保证工具调用逻辑稳定最大迭代次数建议设置20~30避免多轮工具调用中断。坑4MCP返回数据解析报错部分MCP工具返回对象带text字段部分直接返回纯字符串代码中做了双重兼容不要删除类型判断逻辑。坑5脚本运行结束进程残留代码末尾必须执行await mcpClient.close()否则npx启动的子进程会常驻后台占用端口。六、MCP核心优势总结统一工具标准高德、文件、浏览器三类能力一套客户端管理无需单独写接口适配可复用生态任何人开发MCP Server直接接入项目不用重构Agent逻辑本地/远程双模式高德HTTP远程服务、文件/浏览器本地子进程服务同时兼容Agent自动编排大模型自主判断何时调用地图、何时写文件、何时操控浏览器不用手动拆分任务低维护成本新增工具仅需在mcpServers配置新增节点其余代码完全不用改动

相关新闻

小米15省电优化:21项设置提升续航与性能

小米15省电优化:21项设置提升续航与性能

1. 小米15实用设置教程:21项调校实现顺滑低耗电刚拿到小米15那会儿,我和大多数人一样直接开机就用。直到有天发现续航突然尿崩,才意识到新机默认设置并不完美适配每个人的使用习惯。经过两周深度调校,这套包含21个关键设置的方案让…

2026/10/12 2:29:08 阅读更多 →
URP Shader开发:从Built-in迁移的5个HLSL核心变化与实战指南

URP Shader开发:从Built-in迁移的5个HLSL核心变化与实战指南

1. 项目概述:从Built-in到URP,Shader开发者的必经之路如果你是从Unity的Built-in渲染管线转向Universal Render Pipeline(URP),并且在Shader开发上栽过跟头,那这篇文章就是为你准备的。我经历过那个阶段&am…

2026/10/13 21:30:55 阅读更多 →
NVIDIA Vera CPU技术详解:88核Olympus、176线程与1.2TB/s内存

NVIDIA Vera CPU技术详解:88核Olympus、176线程与1.2TB/s内存

NVIDIA于2026年7月21日进一步公开Vera CPU的Olympus核心、Spatial Multithreading、SCF、SOCAMM2内存、NUMA与I/O细节。Vera采用兼容Armv9.2-A的NVIDIA自研Olympus核心,定位不仅是GPU Host,也覆盖Agent沙箱、RL环境、数据处理与分析等CPU侧负载。1&#…

2026/10/2 13:09:47 阅读更多 →

最新新闻

PCL点云圆柱体分割实战:RANSAC原理、参数调优与工业应用

PCL点云圆柱体分割实战:RANSAC原理、参数调优与工业应用

做点云处理这几年,我有个特别深的体会:几乎每个项目里需要找的几何元素,翻来覆去就那么几种——平面、球、圆柱。平面最简单,一个法线加一个距离就描述完;球也不难,中心加半径一共四个参数;唯独…

2026/10/13 21:30:25 阅读更多 →
PHP+UniApp开发宠物饲养交流系统实战

PHP+UniApp开发宠物饲养交流系统实战

1. 项目概述最近完成了一个宠物饲养交流系统的开发项目,采用PHP后端UniApp前端的混合开发模式。这个系统包含APP和小程序双端应用,主要解决宠物主人在饲养过程中遇到的交流、知识分享和日常管理需求。从技术选型到功能实现,整个项目走下来积累…

2026/10/13 21:30:25 阅读更多 →
litellm实战:统一大模型API与网关部署全解析

litellm实战:统一大模型API与网关部署全解析

1. 多家大模型API来回切换的痛苦,才是litellm真正的用武之地 过去一年,我先后在几个项目里接入了不同的大模型服务商。说实话,最让人头疼的不是模型效果本身,而是API的调用方式五花八门。有的用 messages 数组传对话历史&#x…

2026/10/13 21:30:25 阅读更多 →
操作系统进程线程模型:状态切换、同步互斥与死锁详解

操作系统进程线程模型:状态切换、同步互斥与死锁详解

2. 状态模型与控制方法:从“三态图”到上下文切换2.1 三态与五态:多出来的“创建态”和“终止态”用来干嘛先解决一个最基础的问题:进程到底有哪几种状态?很多教材开头就给出三态模型——运行态、就绪态、阻塞态——配合那张经典的…

2026/10/13 21:30:25 阅读更多 →
LiteLLM:大模型API统一网关与智能路由中枢

LiteLLM:大模型API统一网关与智能路由中枢

1. 为什么是 LiteLLM:当大模型调用变成“API 路由器”这件事LiteLLM 这个名字第一次出现在我视野里,是在一个凌晨三点的告警群里。某高校实验室部署的推理服务突然响应延迟飙升,监控显示 OpenAI 接口超时率突破 40%,但本地 vLLM 实…

2026/10/13 21:30:25 阅读更多 →
imgsTools图片合并实战:基于Python和Pillow的拼接与批处理

imgsTools图片合并实战:基于Python和Pillow的拼接与批处理

简介:这是一份面向游戏开发者的图片合并工具 imgsTools 完整工程,基于 VALib 图像库与 MFC、GDI 技术实现,用于把多张图片合并为透明 PNG、GIF、JPEG,并生成 Cocos2d 可识别的 .plis 资源清单。PNG 适合精细界面元素与图标&#x…

2026/10/13 21:29:24 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →