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. 配置步骤
- 定义多服务器参数列表:为每个 MCP 服务器创建参数配置(字典或
StdioServerParameters对象,后者专用于stdio类型); - 初始化 MCPServerAdapter:将参数列表传入适配器,通过上下文管理器(
with语句)启动连接; - 聚合工具并使用:适配器自动加载所有服务器的工具,直接传递给智能体即可调用。
2. 关键代码示例
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 语句) 管理多服务器连接,是文档推荐的核心方式,其优势在于:
- 自动启停:进入
with块时,适配器自动启动所有服务器的连接;退出with块时,自动关闭所有连接,无需手动调用“停止”方法; - 简化资源管理:避免因遗漏关闭连接导致的资源泄漏(如本地
stdio进程残留、远程连接占用); - 统一异常处理:所有服务器的连接错误可通过外层
try...except统一捕获,降低代码复杂度。
四、重要注意事项
- 服务器可用性:需确保所有配置的 MCP 服务器已启动且可访问(本地服务器脚本路径正确、远程服务器 URL 可达),否则会触发连接错误;
- 工具命名冲突:若不同服务器存在同名工具,CrewAI 会自动为工具添加服务器来源前缀(如
mcp_local_stdio_工具名、mcp_sse_工具名),避免调用歧义(延续此前 DSL 集成中的命名规则); - 传输类型匹配:每个服务器的参数需正确指定
transport类型(如stdio必须用StdioServerParameters,远程服务器需明确sse或streamable-http),否则无法建立连接。
