别再写胶水代码了!用MCP多服务器架构让AI同时操控地图、浏览器、文件系统

前言

不知道你有没有遇到过这样的场景:想让AI帮你查公司附近的咖啡店,把评分最高的3家信息截图保存到本地,再自动发钉钉消息给同事。

以前要实现这个功能,你得分别对接地图API、浏览器自动化工具、文件系统接口、钉钉开放平台,写一堆胶水代码做参数转换、异常处理,光是联调就要耗大半天。

直到我用上了MCP的多服务器架构,整个过程只需要一句自然语言指令,AI会自动调用对应的工具完成所有操作,代码量直接减少了70%。

今天就把这套可落地的多服务器架构方案拆解清楚,附带完整可运行的代码,新手也能直接抄走用。

一、先搞懂:MCP多服务器架构到底解决了什么问题?

MCP的核心价值是把工具调用标准化,相当于给AI装了个通用的"工具接口",而多服务器架构就是让AI能同时连接多个不同的工具服务,按需调用。

它的核心优势有三个:

  • 一次开发,到处复用:你封装好的地图MCP Server,任何支持MCP协议的AI应用都能直接调用,不用重复造轮子
  • 解耦工具与AI:工具升级、更换不影响AI逻辑,只要符合MCP协议就能无缝接入
  • 多工具协同:AI可以根据任务需求,自动串联多个工具完成复杂工作流,不用手动写调度逻辑

举个直观的例子:你输入"帮我查北京南站附近的咖啡店,把前3家的名称、评分、距离保存到本地result.txt",AI会自动完成三步操作:调用地图MCP查询周边咖啡店→筛选前3家信息→调用文件系统MCP写入本地文件,全程不需要你手动干预。

二、架构设计:整体流程一目了然

我们先理清楚整个系统的组件关系,避免写代码的时候搞混:

scss 复制代码
┌─────────────────────────────────────────────────────┐
│                AI Agent(以DeepSeek为例)             │
│           解析自然语言指令 → 决策调用哪些工具          │
└──────────────────────┬──────────────────────────────┘
                       │ 绑定工具集
┌──────────────────────▼──────────────────────────────┐
│              MultiServerMCPClient                    │
│          统一管理多个MCP Server暴露的工具             │
└──┬──────────┬──────────────┬──────────────┬─────────┘
   │ HTTP     │ stdio        │ stdio        │ stdio
┌──▼────┐ ┌───▼──────┐ ┌────▼──────┐ ┌───▼─────────┐
│ 高德  │ │ 自定义   │ │ Chrome    │ │ FileSystem  │
│ 地图  │ │ 加法MCP  │ │ DevTools  │ │    MCP      │
│ MCP   │ │  Server  │ │   MCP     │ │   (本地)    │
│(远程) │ │ (本地)   │ │  (本地)   │ │             │
└───────┘ └──────────┘ └───────────┘ └─────────────┘

这里我们接入4个MCP Server做演示:

  • 高德地图MCP(远程) :调用官方提供的HTTP服务,查询周边POI、路线规划等能力
  • 自定义加法MCP(本地) :演示如何自己封装本地工具
  • Chrome DevTools MCP(本地) :控制浏览器做截图、点击等操作
  • FileSystem MCP(本地) :读写本地文件

三、环境准备:3分钟搭好开发环境

我们选Node.js技术栈,对前端开发者更友好,所有代码都可以直接跑。

第一步:初始化项目

bash 复制代码
mkdir mcp-multi-server-demo
cd mcp-multi-server-demo
npm init -y

第二步:安装核心依赖

bash 复制代码
npm install @langchain/mcp-adapters @langchain/openai @modelcontextprotocol/sdk zod dotenv

几个核心依赖的作用说清楚,避免大家装错:

  • @langchain/mcp-adapters:LangChain官方提供的MCP适配层,核心是MultiServerMCPClient,用来统一管理多个MCP Server
  • @langchain/openai:兼容OpenAI协议的模型调用库,这里我们用来连DeepSeek的API
  • @modelcontextprotocol/sdk:MCP官方SDK,用来封装自定义的本地MCP Server
  • zod:TypeScript的Schema校验库,用来定义工具的参数格式,AI会根据这个理解工具需要什么参数

第三步:配置环境变量

在项目根目录创建.env文件,填入你的API Key:

ini 复制代码
# DeepSeek API配置,去platform.deepseek.com申请
DEEPSEEK_API_KEY=sk-xxxxxx
DEEPSEEK_BASE_URL=https://api.deepseek.com

# 高德地图MCP远程服务地址,官方提供的公共测试地址
AMAP_MCP_URL=https://mcp.amap.com/sse?key=你的高德Key

四、核心代码实现:分步骤上手

1. 先封装你自己的本地MCP Server

我们先从最简单的开始,写一个本地的加法计算工具,熟悉MCP Server的开发流程。

创建文件custom-mcp-server.mjs

css 复制代码
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';

// 1. 创建MCP Server实例,定义名称和版本
const server = new McpServer({
  name: 'custom-calculator',
  version: '1.0.0',
});

// 2. 注册加法工具,定义名称、描述、参数Schema和处理逻辑
server.tool(
  'add',
  '计算两个数字的和',
  {
    a: z.number().describe('第一个加数'),
    b: z.number().describe('第二个加数'),
  },
  async ({ a, b }) => ({
    content: [{ type: 'text', text: `计算结果:${a + b}` }],
  })
);

// 3. 注册乘法工具,演示一个Server可以暴露多个工具
server.tool(
  'multiply',
  '计算两个数字的乘积',
  {
    a: z.number().describe('第一个乘数'),
    b: z.number().describe('第二个乘数'),
  },
  async ({ a, b }) => ({
    content: [{ type: 'text', text: `计算结果:${a * b}` }],
  })
);

// 4. 通过stdio协议启动服务,等待客户端连接
const transport = new StdioServerTransport();
await server.connect(transport);

这里有两个关键知识点:

  • 每个工具必须有三个核心要素:唯一名称、参数Schema(用zod定义)、处理逻辑,AI会通过名称区分工具,通过Schema理解需要什么参数
  • stdio协议适合本地工具,通过标准输入输出通信,不需要额外配置端口,本地调试更方便

2. 配置多服务器客户端

接下来我们把所有MCP Server统一接入客户端,创建文件agent.mjs

javascript 复制代码
import { MultiServerMCPClient } from '@langchain/mcp-adapters';
import { ChatOpenAI } from '@langchain/openai';
import dotenv from 'dotenv';

dotenv.config();

// 1. 初始化大模型,这里用DeepSeek,兼容OpenAI协议
const model = new ChatOpenAI({
  modelName: 'deepseek-chat',
  openAIApiKey: process.env.DEEPSEEK_API_KEY,
  configuration: {
    baseURL: process.env.DEEPSEEK_BASE_URL,
  },
  temperature: 0,
});

// 2. 配置多个MCP Server的连接信息
const client = new MultiServerMCPClient({
  // 远程HTTP服务,比如高德地图MCP
  amap: {
    transport: 'sse',
    url: process.env.AMAP_MCP_URL,
  },
  // 本地stdio服务,对应刚才写的自定义Server
  calculator: {
    transport: 'stdio',
    command: 'node',
    args: ['custom-mcp-server.mjs'],
  },
  // 本地文件系统MCP,用官方提供的包
  filesystem: {
    transport: 'stdio',
    command: 'npx',
    args: ['-y', '@modelcontextprotocol/server-filesystem', './output'],
  },
  // Chrome浏览器MCP,需要先安装Chrome DevTools MCP
  browser: {
    transport: 'stdio',
    command: 'npx',
    args: ['-y', '@anthropic/mcp-server-chrome-devtools'],
  },
});

async function runAgent() {
  // 3. 获取所有MCP Server暴露的工具
  const tools = await client.getTools();
  
  // 4. 把工具绑定到大模型
  const modelWithTools = model.bindTools(tools);
  
  // 5. 发送自然语言指令
  const response = await modelWithTools.invoke(
    '帮我计算123+456的结果,然后把结果保存到output/result.txt文件中'
  );
  
  console.log('AI响应:', response.content);
  
  // 6. 执行工具调用(如果有)
  if (response.tool_calls?.length > 0) {
    for (const toolCall of response.tool_calls) {
      console.log(`调用工具:${toolCall.name},参数:`, toolCall.args);
      // 这里可以进一步处理工具调用的结果,串联多个工具
    }
  }
  
  // 7. 关闭所有MCP连接
  await client.close();
}

runAgent().catch(console.error);

3. 运行测试

先确保你的项目结构是这样的:

lua 复制代码
mcp-multi-server-demo/
├── .env
├── custom-mcp-server.mjs
├── agent.mjs
├── output/(用来存放生成的文件)
└── package.json

然后运行node agent.mjs,你会看到AI自动调用了加法工具和文件写入工具,最终把计算结果保存到了output/result.txt里。

五、进阶玩法:串联多个工具完成复杂任务

刚才的演示只是简单的工具调用,实际业务中我们更常用的是多工具串联的工作流。比如"查北京南站附近的咖啡店,把前3家的信息保存到本地文件",AI会自动按顺序完成三步操作:

  1. 调用高德地图MCP的search_around工具,查询周边咖啡店
  2. 筛选出前3家的名称、评分、距离信息
  3. 调用文件系统MCP的write_file工具,把信息写入本地文件

整个过程不需要你写任何调度逻辑,AI会根据任务需求自动决策调用顺序,这就是多服务器架构的核心优势。

六、避坑指南:这些坑我替你踩过了

实际开发中这几个问题很容易遇到,提前说清楚能省很多时间:

  1. 本地stdio服务的命令路径问题 :如果npx找不到,可以用绝对路径,比如/usr/local/bin/npx,Windows用户用npx.cmd
  2. 工具参数描述要写清楚 :AI完全依赖参数的describe描述来理解参数的含义,描述越清晰,调用准确率越高
  3. 远程MCP服务的鉴权:很多官方MCP服务需要在URL里带API Key,不要直接把Key写在代码里,用环境变量管理更安全
  4. 工具调用的异常处理:如果某个工具调用失败,AI可能会重试或者换其他工具,建议给工具加上错误返回,让AI能感知到失败原因

七、总结

MCP多服务器架构的本质是把"AI调用工具"这件事标准化了,你不需要再为每个工具写适配代码,只需要关注业务逻辑本身。

这套方案特别适合这几类场景:

  • 自动化办公:串联日历、邮件、文档工具,实现自动排日程、发邮件、生成报告
  • 数据采集:串联浏览器、文件、数据库工具,实现自动抓取网页数据并存储
  • 运维自动化:串联监控、日志、告警工具,实现故障自动诊断和处理
相关推荐
来日方长。。。。long7 小时前
生产级MCP落地指南:FastMCP与官方MCP SDK的选型、架构与实战
架构·mcp
Danny转行做跨境2 天前
亚马逊选品插件推荐: 免费额度与各档位成本拆解
跨境电商·mcp·sorftime
跨境Jacky2 天前
Shopee怎么用AI选品?MCP工具从安装到选品实战
跨境电商·mcp·sorftime
华科大胡子2 天前
MCP协议开发实战:从零搭建AI Agent工具链
mcp
jufeng13073 天前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 11 篇】
python·ai agent·mcp
ningmengjing_3 天前
MCP 通讯方式与实现指南
python·agent·mcp
跨境Jacky3 天前
Shopee怎么用AI选品?我的脚本实操与5款工具横评
跨境电商·mcp·sorftime
海兰3 天前
mcporter — 安装部署及使用完全指南(一)
人工智能·agent·mcp
Tisfy4 天前
Codex:通过编辑配置文件添加带Bearer的自定义MCP
数据库·大模型·agent·codex·mcp