惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
Lohrmann on Cybersecurity
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
S
Schneier on Security
I
Intezer
Latest news
Latest news
N
News and Events Feed by Topic
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
量子位
博客园 - 【当耐特】
S
Security @ Cisco Blogs
Google Online Security Blog
Google Online Security Blog
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
NISL@THU
NISL@THU
The Cloudflare Blog
李成银的技术随笔
T
ThreatConnect
L
LINUX DO - 最新话题
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
有赞技术团队
有赞技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Jina AI
Jina AI
T
Tor Project blog
The Hacker News
The Hacker News
人人都是产品经理
人人都是产品经理
小众软件
小众软件
S
Security Archives - TechRepublic
美团技术团队
博客园 - Franky
Security Latest
Security Latest
J
Java Code Geeks
P
Proofpoint News Feed
V
V2EX
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Help Net Security
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Hugging Face - Blog
Hugging Face - Blog
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
SecWiki News
SecWiki News
腾讯CDC
爱范儿
爱范儿
D
Docker

掘金

juejin.cn juejin.cn juejin.cn Transformer 原论文怎么训出来的:8 张 P100、12 小时、warmup 4000 步 Hermes 升级后,我的 Telegram 附件突然发不出来了 Transformer 中的前馈网络:那个看似平平无奇的两层 MLP,其实是「记忆」所在 juejin.cn 【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (1)---基础 juejin.cn juejin.cn juejin.cn 我让 AI 加了一个开关,结果代码走了原本不该走的分支 Manim物理模拟:别自己写欧拉了! 我也该升级了,陪伴了我7年的博客 juejin.cn juejin.cn 用魔法打败魔法:我让AI替我去面试前端岗,AI面试官给我打了92分,还发了offer juejin.cn juejin.cn juejin.cn juejin.cn Android Input Spy Window Claude Code CLI 命令大全:60 个原生命令一次讲清 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn 关于一个新手小白靠claude帮助下的全栈留言板项目开发 juejin.cn juejin.cn juejin.cn 从本地开发到生产部署:用 Docker Compose 跑通 NestJS、MySQL 与 Milvus AI应用开发七:可以替代 RAG 的技术 juejin.cn 小书匠:一款本地优先、去中心化的全能笔记软件 juejin.cn juejin.cn juejin.cn Shadow实战接入与生产落地:从零搭建到稳定运行 Shadow Transform:编译期的魔法——字节码替换实战 juejin.cn juejin.cn Hermes Agent:一个真正“会成长”的开源 AI Agent,正在改变 AI 自动化玩法 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn CryptoJS:数据安全的JavaScript加密利器 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn ArkClaw AI 盯盘管家 —— 从手动口令到自动推送,4 套预置定时任务模版一键启用 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn “杀!杀!杀!”、“我最讨厌事后道歉”——骂“杀哥”之前,谁还没当过情绪崩溃的人 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn Crawlee StagehandCrawler:自然语言点 Load More 的工程化爬虫 juejin.cn juejin.cn juejin.cn juejin.cn 人人都在鼓吹的OPC,我想给你泼盆冷水 juejin.cn juejin.cn juejin.cn Redis内存用爆了,原来我们都忽略了这个配置 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn
MCP 高德地图实战:当 AI 学会使用工具,一个协议如何重塑大模型的行动边界
Lee川 · 2026-05-25 · via 掘金

MCP高德地图实战:当 AI 学会使用工具,一个协议如何重塑大模型的行动边界

想象这样一个场景:你对 AI 说"帮我查一下广州塔附近的三个景点,在浏览器里打开每个景点的图片,并把标签页标题改成景点名"。几秒钟后,你的浏览器自动打开了三个标签页,每个都精准地展示着对应景点的图片,标题也一一改好了。

这不是科幻,这是 MCP(Model Context Protocol,模型上下文协议)赋能下的日常。

从"聊天机器人"到"行动代理"

传统的大语言模型像一个被困在对话框里的天才——它什么都知道,却什么也做不了。它不能查实时地图,不能读写你的文件,不能操控你的浏览器。它的大脑连接着一根网线,但双手被绑在身后。

MCP 做的事情很简单,也很彻底:它给 AI 装上了手

MCP 是 Anthropic 提出的一套开放协议,定义了大模型与外部工具之间的标准化通信方式。可以把它理解为 AI 世界的 USB-C 接口——无论什么工具,只要遵循 MCP 协议,AI 就能即插即用。

下面我们通过一段真实可运行的代码,来看 MCP 是如何让 AI 从"说"进化到"做"的。

三台服务器,三种能力

代码的核心是 MultiServerMCPClient——一个可以同时连接多个 MCP 服务器的客户端。在这个示例中,我们接入了三台 MCP 服务器:

const mcpClient = new MultiServerMCPClient({
    mcpServers: {
        "amap-maps-streamableHTTP": {
            url: `https://mcp.amap.com/mcp?key=${process.env.AMAP_MAPS_API_KEY}`
        },
        "filesystem": {
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-filesystem", "C:/Users/..."]
        },
        "edge-devtools": {
            "command": "npx",
            "args": ["-y", "chrome-devtools-mcp@latest", "--browser-executable", "..."],
        }
    }
});

这三台服务器各自承担着截然不同的能力:

高德地图 MCP(amap-maps) 是一个远程 HTTP MCP 服务器。通过 API Key 认证后,它赋予 AI 实时地理信息能力——搜索周边景点、规划出行路线、查询地点详情。这是典型的 Streamable HTTP 模式,适合服务商将能力封装为云端 MCP 服务,用户无需本地部署,一个 URL 即插即用。

文件系统 MCP(filesystem) 是一个本地 stdio MCP 服务器。它让 AI 能够读写指定目录下的文件——创建文档、保存规划结果。注意它被限定在特定路径下运行,这是一种安全沙箱机制,确保 AI 不会越权访问系统其他位置。

Chrome DevTools MCP(edge-devtools) 同样是一个本地 MCP 服务器,但它操控的是浏览器。它能打开新标签页、导航到指定 URL、截取页面截图、修改页面标题——本质上,它把浏览器的开发者工具能力暴露给了 AI。

三种服务器,两种通信模式(HTTP 远程 + stdio 本地),统一协议接入。这就是 MCP 的设计哲学。

工具调用循环:AI 的心跳

整个系统的核心是一个循环——Agent Loop,它模拟了人类解决问题的思维过程:

思考 → 行动 → 观察结果 → 再思考 → 再行动 → ... → 最终回答

代码将这个循环实现得干净利落:

async function runAgentWithTools(query, maxIterations = 30) {
    const messages = [new HumanMessage(query)];

    for (let i = 0; i < maxIterations; i++) {
        const response = await modelWithTools.invoke(messages);
        messages.push(response);

        // 没有工具调用 → 任务完成,输出最终答案
        if (!response.tool_calls || response.tool_calls.length === 0) {
            return response.content;
        }

        // 有工具调用 → 执行工具,把结果喂回给 AI
        for (const toolCall of response.tool_calls) {
            const foundTool = tools.find(t => t.name === toolCall.name);
            const toolResult = await foundTool.invoke(toolCall.args);
            messages.push(new ToolMessage({
                content: contentStr,
                tool_call_id: toolCall.id
            }));
        }
    }
}

这个循环的每一轮都严格遵循三个步骤:

  1. AI 生成响应——可能是文本回答,也可能包含工具调用请求
  2. 检测并执行工具调用——如果 AI 说"我需要调用某个工具",就找到对应工具并执行
  3. 反馈执行结果——把工具返回的数据作为新消息,让 AI 决定下一步

maxIterations = 30 是一个安全阀,防止 AI 陷入无限循环。在实践中,大多数任务在 3 到 8 轮内就能完成。

值得细看的是 ToolMessage 的构造方式——工具返回的结果可以是纯字符串,也可以是带 text 属性的对象,代码做了兼容处理。这种弹性是工程实践中的必要考量,因为不同 MCP 服务器返回的数据格式可能略有差异。

三个场景,三种打开方式

代码注释中保留了三个调用示例,恰好展示了 MCP 能力的三层递进:

// 第一层:纯信息查询——AI搜索高德地图,返回文字结果
await runAgentWithTools('北京南站附近的酒店以及去的路线');

// 第二层:信息查询 + 文件落盘——AI规划好路线后,将结果保存为本地 Markdown 文档
await runAgentWithTools('广州南站附近的2个景点,以及去的路线,...保存到...广州南站附近景点及路线规划.md');

// 第三层:信息查询 + 浏览器操控——AI搜索景点,然后打开浏览器展示图片并修改标签页标题
await runAgentWithTools('广州塔附近的3个景点,拿到景点照片,展开浏览器,展示每个景点的图片...');

第一层:感知型任务。 调用地图 API,获取数据,整理输出。AI 替代了你手动打开地图 App、搜索、筛选的过程。

第二层:感知 + 写入型任务。 不仅查询,还要持久化。AI 先调用高德地图拿到路线和景点信息,再调用文件系统工具将格式化好的 Markdown 写入磁盘。两个完全不相关的 MCP 服务器,因为统一的协议,可以无缝协作。

第三层:感知 + 操控型任务。 AI 需要同时调用地图和浏览器。它先从高德地图获取景点照片 URL,然后驱动 Edge 浏览器依次打开每个景点的图片搜索页面,并修改标签页标题。在这个过程中,AI 自动规划了工具调用的先后顺序和参数传递——它知道先调哪个工具,拿到什么数据,再传给下一个工具。这不是预设的工作流,而是 AI 根据任务目标自主编排的。

为什么 MCP 值得关注

回看这段代码的美妙之处:你不需要为高德地图写一个 SDK 封装,不需要为文件操作写一套工具函数,不需要为浏览器操控写一个插件——你只需要用 MCP 协议把它们接进来

这就是标准化的力量。在 MCP 之前,每个 AI Agent 框架都有自己的工具定义方式,工具与平台强耦合,换个模型就得重新适配。MCP 把工具的定义、发现、调用统一为一种协议,让工具提供方和 AI 应用方各司其职:

  • 工具开发者 只需按 MCP 规范暴露工具接口,不用关心下游用的是什么模型、什么框架
  • AI 应用开发者 只需连接 MCP 服务器,不用为每个工具写适配代码

更重要的是,MCP 的服务端生态正在快速生长。从上面的代码可以看到,既有高德这样的商业公司提供云端 MCP 服务,也有开源社区贡献的文件系统、浏览器操控等本地工具。API 正在被 MCP 重新定义——不再是写死的 REST 调用,而是让 AI 自主决定何时调用、如何组合。

技术栈一览

这段不到 100 行的代码背后,是一个完整的现代化 AI Agent 技术栈:

层级技术选型
大模型通义千问(qwen-plus),通过 OpenAI 兼容接口接入
Agent 框架LangChain(@langchain/core + @langchain/mcp-adapters
MCP 传输Streamable HTTP(远程)+ stdio(本地进程)
工具生态高德地图 MCP、文件系统 MCP、Chrome DevTools MCP

值得注意的是模型的接入方式——代码使用了 ChatOpenAI 配合阿里云 DashScope 的兼容端点。这意味着 MCP 本身是模型无关的:只要模型支持 Function Calling / Tool Use,就能接入 MCP 生态。千问可以,GPT 可以,Claude 也可以。

尾声

当一个协议能让 AI 同时操控地图、文件系统和浏览器,而且写得比传统 Selenium 脚本还简洁时,你就知道,有些事情已经彻底变了。

MCP 不是又一个框架,而是一种基础设施。它让 AI 从"能说"进化到"能做",从"聊天工具"进化为"数字代理人"。而这一切,只需要一个 MultiServerMCPClient,几行配置,和你的想象力。