)
本文深入解析了MCP协议的实战应用通过具体代码案例详细讲解了如何将高德地图和Playwright浏览器接入LangGraph Agent中使AI Agent具备实际操作能力。文章涵盖了环境搭建、工具接入、多服务器并发处理等关键环节并针对开发中常见的五个问题提供了解决方案。对于想要提升AI应用实战能力的小白和程序员来说本文提供了宝贵的实践指导。很多人在这卡住了MCP 原理我懂但一上代码就蒙——MultiServerMCPClient怎么配stdio 和 HTTP 怎么选高德的 API Key 塞哪里工具冲突怎么处理这篇全讲清楚。1 、先搞清楚架构你的 Agent 和 MCP Server 是什么关系在写代码之前先把整体架构想清楚。┌─────────────────────────────────────────────────────┐ │ 你的应用层 │ │ ┌──────────────────────────────────────────────┐ │ │ │ LangGraph ReAct Agent │ │ │ │ (LLM 工具选择逻辑 状态管理) │ │ │ └───────────────────┬──────────────────────────┘ │ │ │ 调用工具 │ │ ┌───────────────────▼──────────────────────────┐ │ │ │ langchain/mcp-adapters │ │ │ │ MultiServerMCPClient工具代理层 │ │ │ └──────┬────────────┬──────────────┬───────────┘ │ └─────────┼────────────┼──────────────┼───────────────┘ │ │ │ stdio │ HTTP │ SSE │ ▼ ▼ ▼ ┌───────────┐ ┌──────────┐ ┌──────────────┐ │ 高德 MCP │ │ 浏览器 │ │ 文件系统 │ │ Server │ │ Server │ │ Server │ │(本地进程) │ │(本地进程) │ │ (远程服务) │ └───────────┘ └──────────┘ └──────────────┘三个关键层Agent 层LangGraph 的 ReAct Agent负责想——分析任务、选工具、看结果、再决策适配层langchain/mcp-adapters把 MCP 工具转成 LangChain 兼容的 Tool 对象Server 层真正干活的 MCP Server可以是本地进程stdio也可以是远程服务HTTP/SSE这三层分离的好处换一个 MCP ServerAgent 代码一行不改。2、环境搭建安装依赖和准备工作npm init -y npm install langchain/mcp-adapters langchain/langgraph langchain/core # 用 OpenAI npm install langchain/openai # 或者用 Anthropic npm install langchain/anthropiclangchain/mcp-adapters目前最新是 0.6.0支持三种传输方式stdio启动本地子进程最常用streamable-httpHTTP 流式MCP 新标准sseServer-Sent Events旧标准向下兼容3、 接入高德地图 MCP Server地理查询实战高德开放了官方 MCP Server支持地点搜索、路线规划、地理编码等功能。第一步获取高德 API Key去 高德开放平台[1] 注册创建应用拿到Web服务类型的 Key。第二步安装高德 MCP Servernpm install -g amap/amap-maps-mcp-server第三步核心代码import { MultiServerMCPClient } from langchain/mcp-adapters; import { createReactAgent } from langchain/langgraph/prebuilt; import { ChatOpenAI } from langchain/openai; async function buildAmapAgent() { // 初始化 MCP 客户端连接高德 Server const client new MultiServerMCPClient({ amap: { transport: stdio, command: npx, args: [-y, amap/amap-maps-mcp-server], env: { AMAP_MAPS_API_KEY: process.env.AMAP_API_KEY!, // 高德 API Key }, }, }); // 拉取 MCP Server 暴露的所有工具 const tools await client.getTools(); console.log(已加载工具:, tools.map(t t.name)); // 输出: [maps_regeocode, maps_geo, maps_text_search, // maps_around_search, maps_direction_walking, ...] // 创建 ReAct Agent const agent createReactAgent({ llm: new ChatOpenAI({ model: gpt-4o, temperature: 0 }), tools, }); return { agent, client }; } // 使用示例 async function main() { const { agent, client } await buildAmapAgent(); try { const result await agent.invoke({ messages: [ { role: user, content: 帮我查一下北京故宫附近500米内的餐厅给我推荐3家, }, ], }); console.log(result.messages.at(-1)?.content); } finally { // 用完记得关闭连接释放子进程 await client.close(); } } main().catch(console.error);运行后Agent 会自动调用maps_around_search工具查询周边餐厅结果直接返回真实地点数据。4、接入 Playwright 浏览器 MCP Server让 Agent 真正上网浏览器 MCP Server 是最强力的工具之一——Agent 可以打开网页、点击按钮、填表单、截图。npm install -g playwright/mcp # 安装 Chromium首次需要 npx playwright install chromiumimport { MultiServerMCPClient } from langchain/mcp-adapters; import { createReactAgent } from langchain/langgraph/prebuilt; import { ChatAnthropic } from langchain/anthropic; async function buildBrowserAgent() { const client new MultiServerMCPClient({ playwright: { transport: stdio, command: npx, args: [ playwright/mcp, --headless, // 无头模式生产环境用 --browser, chromium, ], }, }); const tools await client.getTools(); // 工具列表包含: browser_navigate, browser_click, browser_type, // browser_screenshot, browser_get_text ... const agent createReactAgent({ llm: new ChatAnthropic({ model: claude-opus-4-5, temperature: 0, }), tools, }); return { agent, client }; } async function main() { const { agent, client } await buildBrowserAgent(); try { const result await agent.invoke({ messages: [ { role: user, content: 打开 https://news.ycombinator.com告诉我今天排名第一的文章标题和链接, }, ], }); console.log(result.messages.at(-1)?.content); } finally { await client.close(); } } main().catch(console.error);Agent 会自动导航到 HN → 读取页面内容 → 提取第一条 → 返回给你。5 、多 MCP Server 同时接入高德 浏览器 文件系统真正强大的 Agent 往往需要同时使用多个工具。MultiServerMCPClient一次可以接多个 Server。import { MultiServerMCPClient } from langchain/mcp-adapters; import { createReactAgent } from langchain/langgraph/prebuilt; import { ChatOpenAI } from langchain/openai; async function buildSuperAgent() { const client new MultiServerMCPClient({ // 高德地图地理查询 amap: { transport: stdio, command: npx, args: [-y, amap/amap-maps-mcp-server], env: { AMAP_MAPS_API_KEY: process.env.AMAP_API_KEY!, }, }, // Playwright 浏览器网页操作 browser: { transport: stdio, command: npx, args: [playwright/mcp, --headless], }, // 文件系统读写本地文件 filesystem: { transport: stdio, command: npx, args: [ -y, modelcontextprotocol/server-filesystem, /tmp/agent-workspace, // 限制访问范围安全起见 ], }, }); const tools await client.getTools(); console.log(共加载 ${tools.length} 个工具); // 实际项目里可能有 20-30 个工具 // 工具太多时可以按名称过滤减少 LLM context 占用 const selectedTools tools.filter(t [maps_text_search, maps_around_search, maps_direction_walking, browser_navigate, browser_get_text, browser_screenshot, read_file, write_file].includes(t.name) ); const agent createReactAgent({ llm: new ChatOpenAI({ model: gpt-4o, temperature: 0, }), tools: selectedTools, }); return { agent, client }; } async function main() { const { agent, client } await buildSuperAgent(); try { // 复合任务搜索地点 保存结果 const result await agent.invoke({ messages: [ { role: user, content: 帮我完成以下任务 1. 查询上海陆家嘴附近的咖啡店取前5家 2. 把结果整理成 JSON 格式 3. 保存到 /tmp/agent-workspace/coffee-shops.json , }, ], }); console.log(result.messages.at(-1)?.content); } finally { await client.close(); } } main().catch(console.error);6、 进阶用 HTTP 传输接入远程 MCP Server前面几个都是stdio本地子进程。生产环境里更常见的是 HTTP 传输——Server 部署在远端客户端通过 HTTP 调用。import { MultiServerMCPClient } from langchain/mcp-adapters; // 场景你们团队内部部署了一个 MCP Server提供数据库查询、CRM 等企业能力 const client new MultiServerMCPClient({ // Streamable HTTPMCP 最新标准 company_tools: { transport: http, url: https://internal.example.com/mcp, headers: { Authorization: Bearer ${process.env.INTERNAL_API_TOKEN}, }, // 可选重连配置 reconnectAttempts: 3, reconnectDelay: 1000, }, // SSE 传输兼容老版本 MCP Server legacy_service: { transport: sse, url: https://legacy.example.com/mcp/sse, headers: { X-API-Key: process.env.LEGACY_KEY, }, }, }); const tools await client.getTools();stdio vs HTTP 怎么选┌─────────────────┬─────────────────┬──────────────────┐ │ 特性 │ stdio │ HTTP/SSE │ ├─────────────────┼─────────────────┼──────────────────┤ │ 部署位置 │ 本地进程 │ 本地或远程服务 │ │ 延迟 │ 极低 (1ms) │ 网络延迟 │ │ 扩展性 │ 单机 │ 可水平扩展 │ │ 安全性 │ 进程隔离 │ 需要鉴权 │ │ 适用场景 │ 本地工具/开发 │ 团队共享/生产 │ └─────────────────┴─────────────────┴──────────────────┘高德、Playwright 这类跑在本地的用 stdio。公司内部 API、SaaS 服务用 HTTP。7、 生产踩坑这 5 个问题 99% 的人都会遇到坑1忘记await client.close()MCP client 会启动子进程或保持 HTTP 长连接。不关闭的话进程泄漏内存慢慢涨上去。// ❌ 危险写法 const client new MultiServerMCPClient({...}); const tools await client.getTools(); // 用完不关... // ✅ 正确写法用 try/finally 保证关闭 const client new MultiServerMCPClient({...}); try { const tools await client.getTools(); // ... 使用 tools } finally { await client.close(); } // 更优雅封装成工厂函数配合 using (TS 5.2)坑2工具名冲突多个 Server 可能有同名工具比如两个 Server 都有search。MultiServerMCPClient默认会以serverName__toolName格式区分// 高德的搜索amap__maps_text_search // 浏览器的搜索browser__browser_navigate const tools await client.getTools(); console.log(tools.map(t t.name));坑3环境变量没传给子进程stdio 模式下MCP Server 子进程默认继承父进程环境变量。但有时需要显式传amap: { transport: stdio, command: npx, args: [-y, amap/amap-maps-mcp-server], env: { ...process.env, // 继承所有父进程变量 AMAP_MAPS_API_KEY: xxx, // 覆盖特定变量 }, },坑4工具太多撑爆 Context一口气接 10 个 MCP Server工具可能有 50工具描述加起来占用大量 token。解法// 按任务过滤工具 const allTools await client.getTools(); const taskTools allTools.filter(t relevantToolNames.includes(t.name) );坑5MCP Server 启动慢导致超时getTools()是异步的有些 Server 启动需要几秒。在请求链路上直接await会拖慢响应。// ✅ 应用启动时预热而不是每次请求都初始化 let cachedTools: StructuredTool[] | null null; async function getAgentTools(): PromiseStructuredTool[] { if (cachedTools) return cachedTools; const client new MultiServerMCPClient({...}); cachedTools await client.getTools(); // 优雅退出时关闭 process.on(SIGTERM, () client.close()); return cachedTools; }总结这篇我们从零到一把 MCP 实战跑通了langchain/mcp-adapters是胶水层把任意 MCP Server 的工具转成 LangChain ToolAgent 代码一行不改就能扩展能力stdio 接本地、HTTP 接远端高德、Playwright 等本地工具用 stdio 子进程公司内部服务、SaaS 接口用 HTTP/SSEMultiServerMCPClient支持多 Server 并联一次初始化拿到所有工具Agent 自动按需调用工具数量要控制工具太多会撑爆 LLM context按任务筛选工具是生产级的做法连接生命周期必须管好try/finallyclient.close()应用启动时预热避免每次请求重建连接最后2026年技术圈的分化愈发明显降薪裁员潮持续蔓延传统开发、测试等岗位大批缩水不少从业者陷入职业焦虑与之形成鲜明对比的是AI大模型相关岗位迎来疯狂扩招薪资逆势飙升150%大厂更是直接开出70-100W年薪疯抢具备实战能力的大模型人才甚至放宽年龄限制只求能快速落地技术、创造价值很多程序员、职场新人纷纷入局大模型领域绝非盲目跟风而是实实在在看到了不可替代的价值优势这也是2026年最值得抓住的职业风口1、窗口期红利入门门槛友好不同于成熟赛道的“内卷式招聘”2026年大模型人才缺口巨大简历只要达标掌握基础AI应用具备简单项目经验年龄、学历均非硬性要求小白可快速入门转行程序员也能无缝衔接2、技术可复用上手速度翻倍如果你有前后端开发、测试、数据分析等基础在大模型落地、系统部署、Prompt工程等环节会更具优势无需从零开始复用原有技术能力就能快速进阶3、懂业务更吃香竞争力翻倍单纯懂技术已不够2026年大厂更看重“技术业务”的复合型人才有垂直领域金融、医疗、工业等经验者能精准定位模型落地痛点薪资比纯技术岗高出30%以上更重要的是即便没有转型需求用AI大模型工具为工作赋能、提升效率也已经成为80%企业的硬性要求——不会用大模型提效未来很可能被行业淘汰那么2026年小白/程序员该如何高效学习大模型很多人想入门大模型却陷入两大困境要么到处搜集零散资料不成体系越学越懵要么被收费高昂的课程割韭菜花了钱却学不到实战技能白白浪费时间走弯路。今天就给大家精心整理了一份2026年最新、免费、系统化的AI大模型学习资源包覆盖从零基础入门到商业实战、从理论沉淀到面试通关的全流程所有资料均已整理归档无需拼凑直接领取就能上手学习小白可照做程序员可进阶扫码免费领取全部内容1、大模型系统化学习路线这份学习路线结合2026年行业趋势和新手学习规律由行业专家精心设计从零基础到精通每一步都有明确指引帮你节省80%的无效学习时间少走弯路、高效进阶避免踩坑。2、从0到进阶大模型学习视频教程从入门到进阶这里都有跟着老师学习事半功倍。3、大模型学习书籍电子文档涵盖2026年最新技术要点包括基础入门、Transformer核心原理、Prompt工程、RAG实战、模型微调与部署等内容4、AI大模型最新行业报告报告包含腾讯、阿里、甲子光年等权威机构发布的核心内容还有2026年中文大模型基准测评报告、AI Agent行业研究报告等帮你站在行业前沿把握技术风口。5、大模型项目实战配套源码项目包含Deepseek R1、GPT项目、MCP项目、RAG实战等热门方向还有视频配套代码手把手教你从0到1完成项目开发既能练手提升技术又能丰富简历为求职和职业发展加分。6、2026大模型大厂面试真题2026年大模型面试已全面升级不再单纯考察基础原理而是转向侧重技术落地和业务结合的综合考察很多程序员和新手因为缺乏针对性准备明明技术不错却在面试中失利。适用人群四阶段学习规划共90天可落地执行第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容7、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】