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),否则无法建立连接。
相关推荐
R&ain4 小时前
Linux目录结构
linux·运维·服务器
ddacrp4 小时前
RHEL_2_部署 chrony服务器
运维·服务器
Caesar Zou4 小时前
ssh远程连接服务器,vscode不显示claude
服务器·vscode·ssh
NewCarRen4 小时前
针对汽车远程无钥匙进入系统的新型重放同步攻击的缓解策略
运维·网络·安全
东方佑4 小时前
多路由隔离:构建模块化Agent工具服务器
运维·服务器
想学全栈的菜鸟阿董4 小时前
通过 Stdio(标准输入/输出)传输机制,实现 CrewAI 与本地 MCP 服务器的连接
运维·服务器·github
K_i1344 小时前
Tomcat核心原理与运维实战指南
java·运维·tomcat
彬彬醤4 小时前
如何正确选择住宅IP?解析适配跨境、流媒体的网络工具
服务器·开发语言·网络·网络协议·tcp/ip
帅得不敢出门5 小时前
Linux服务器编译android报no space left on device导致失败的定位解决
android·linux·服务器