Crew连接多个 MCP 服务器

连接多个 MCP 服务器(Connecting to Multiple MCP Servers)内容总结

该文档核心讲解如何通过 CrewAI 中的 MCPServerAdapter 组件,同时连接多个 MCP 服务器并聚合其工具,满足智能体对多来源功能的需求,内容可分为概述、配置方法、连接管理三部分,具体如下:

一、概述

crewai-tools 库中的 MCPServerAdapter 支持并发连接多个 MCP 服务器 ,并自动聚合所有服务器提供的工具,统一提供给 CrewAI 智能体使用。

适用场景:当智能体需要调用分布在不同服务(如本地脚本、远程实时流服务、远程 HTTP 服务)或环境中的工具时,无需单独管理每个服务器连接,可通过一次配置实现多源工具集成。

二、核心配置方法

连接多个 MCP 服务器的核心是向 MCPServerAdapter 传递服务器参数列表 (每个参数对应一个 MCP 服务器),支持的传输类型(transport)包括 stdio(本地)、sse(远程服务器发送事件)、streamable-http(远程可流式 HTTP)。

1. 配置步骤

  1. 定义多服务器参数列表 :为每个 MCP 服务器创建参数配置(字典或 StdioServerParameters 对象,后者专用于 stdio 类型);
  2. 初始化 MCPServerAdapter :将参数列表传入适配器,通过上下文管理器(with 语句)启动连接;
  3. 聚合工具并使用:适配器自动加载所有服务器的工具,直接传递给智能体即可调用。

2. 关键代码示例

python 复制代码
from crewai import Agent, Task, Crew, Process
from crewai_tools import MCPServerAdapter
from mcp import StdioServerParameters  # 用于 stdio 类型服务器
import os

# 1. 定义多个 MCP 服务器的参数列表(包含 3 种传输类型)
server_params_list = [
    # ① Streamable HTTP 远程服务器
    {
        "url": "http://localhost:8001/mcp",
        "transport": "streamable-http"
    },
    # ② SSE 远程服务器
    {
        "url": "http://localhost:8000/sse",
        "transport": "sse"
    },
    # ③ Stdio 本地服务器(需用 StdioServerParameters 配置)
    StdioServerParameters(
        command="python3",  # 启动命令
        args=["servers/your_stdio_server.py"],  # 本地服务器脚本路径
        env={"UV_PYTHON": "3.12", **os.environ}  # 环境变量(如指定 Python 版本)
    )
]

# 2. 上下文管理器启动多服务器连接,自动聚合工具
try:
    with MCPServerAdapter(server_params_list) as aggregated_tools:
        # 打印所有聚合的工具名称(验证加载结果)
        print(f"可用的聚合工具:{[tool.name for tool in aggregated_tools]}")
        
        # 3. 创建智能体,直接使用聚合工具
        multi_server_agent = Agent(
            role="多源工具助手",
            goal="调用本地 Stdio、远程 SSE 和 HTTP 服务器的工具完成任务",
            backstory="能整合多来源 MCP 工具,灵活处理复杂需求的 AI 智能体",
            tools=aggregated_tools,  # 传入所有聚合工具
            verbose=True
        )
        
        # ... 后续可继续定义 Task(任务)和 Crew(智能体团队),执行具体业务逻辑
    
except Exception as e:
    # 异常处理:提示连接或配置错误
    print(f"连接/使用多个 MCP 服务器时出错:{e}")
    print("请确保所有 MCP 服务器已启动,且配置参数正确(如 URL、脚本路径)。")

三、连接生命周期管理

通过 Python 上下文管理器(with 语句) 管理多服务器连接,是文档推荐的核心方式,其优势在于:

  1. 自动启停 :进入 with 块时,适配器自动启动所有服务器的连接;退出 with 块时,自动关闭所有连接,无需手动调用"停止"方法;
  2. 简化资源管理 :避免因遗漏关闭连接导致的资源泄漏(如本地 stdio 进程残留、远程连接占用);
  3. 统一异常处理 :所有服务器的连接错误可通过外层 try...except 统一捕获,降低代码复杂度。

四、重要注意事项

  1. 服务器可用性:需确保所有配置的 MCP 服务器已启动且可访问(本地服务器脚本路径正确、远程服务器 URL 可达),否则会触发连接错误;
  2. 工具命名冲突 :若不同服务器存在同名工具,CrewAI 会自动为工具添加服务器来源前缀(如 mcp_local_stdio_工具名mcp_sse_工具名),避免调用歧义(延续此前 DSL 集成中的命名规则);
  3. 传输类型匹配 :每个服务器的参数需正确指定 transport 类型(如 stdio 必须用 StdioServerParameters,远程服务器需明确 ssestreamable-http),否则无法建立连接。
相关推荐
子兮曰4 小时前
OpenClaw架构揭秘:178k stars的个人AI助手如何用Gateway模式统一控制12+通讯频道
前端·javascript·github
invicinble4 小时前
对linux形成认识
linux·运维·服务器
小Pawn爷5 小时前
14.VMmare安装ubuntu
linux·运维·ubuntu
技术路上的探险家5 小时前
8 卡 V100 服务器:基于 vLLM 的 Qwen 大模型高效部署实战
运维·服务器·语言模型
旅之灵夫5 小时前
【GitHub项目推荐--Remotion:使用React编程化创建视频】⭐⭐⭐
github
有谁看见我的剑了?5 小时前
介绍一款 测试 DNS解析成功率的网站
运维
半桔5 小时前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
绵绵细雨中的乡音5 小时前
深入理解 ET 与 LT 模式及其在 Reactor 模型中的应用
服务器·网络·php
HABuo6 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
Howrun7776 小时前
关于Linux服务器的协作问题
linux·运维·服务器