概述
模型上下文协议 (MCP) 提供了一种标准化的方式,使 AI 代理通过与外部服务(称为 MCP 服务器)通信来向 LLM 提供上下文。 CrewAI 为 MCP 集成提供了两种方法:🚀 简单的 DSL 集成(推荐)
直接在代理上使用mcps 字段,实现无缝 MCP 工具集成。DSL 支持字符串引用(用于快速设置)和结构化配置(用于完全控制)。
基于字符串的引用(快速设置)
非常适合远程 HTTPS 服务器和 CrewAI AOP 市场结构化配置(完全控制)
用于完全控制连接设置、工具过滤和所有传输类型🔧 高级:MCPServerAdapter(用于复杂场景)
对于需要手动连接管理的高级用例,crewai-tools 库提供了 MCPServerAdapter 类。 我们目前支持以下传输机制:- 标准输入输出 (Stdio):用于本地服务器(同一机器上进程间的标准输入/输出通信)
- 服务器发送事件 (SSE):用于远程服务器(通过 HTTP 从服务器到客户端的单向、实时数据流)
- 可流式 HTTPS (Streamable HTTPS):用于远程服务器(通过 HTTPS 进行灵活的、潜在的双向通信,通常利用 SSE 进行服务器到客户端的流)
视频教程
观看此视频教程,获取 CrewAI 与 MCP 集成的全面指南安装
CrewAI MCP 集成需要mcp 库
快速入门:简单的 DSL 集成
集成 MCP 服务器最简单的方法是在代理上使用mcps 字段。您可以使用字符串引用或结构化配置。
使用字符串引用的快速入门
使用结构化配置的快速入门
MCP 引用格式
mcps 字段支持字符串引用(用于快速设置)和结构化配置(用于完全控制)。您可以在同一个列表中混合使用这两种格式。
基于字符串的引用
外部 MCP 服务器
CrewAI AOP 市场
结构化配置
标准输入输出 (Stdio) 传输(本地服务器)
非常适合作为进程运行的本地 MCP 服务器HTTP/可流式 HTTP 传输(远程服务器)
用于通过 HTTP/HTTPS 的远程 MCP 服务器SSE 传输(实时流)
用于使用服务器发送事件的远程服务器混合引用
您可以结合字符串引用和结构化配置工具过滤
结构化配置支持高级工具过滤配置参数
每种传输类型都支持特定的配置选项MCPServerStdio 参数
command(必需):要执行的命令(例如,"python"、"node"、"npx"、"uvx")args(可选):命令参数列表(例如,["server.py"]或["-y", "@mcp/server"])env(可选):要传递给进程的环境变量字典tool_filter(可选):用于过滤可用工具的工具过滤函数cache_tools_list(可选):是否缓存工具列表以便后续更快访问(默认值:False)
MCPServerHTTP 参数
url(必需):服务器 URL(例如,"https://api.example.com/mcp")headers(可选):用于身份验证或其他目的的 HTTP 头字典streamable(可选):是否使用可流式 HTTP 传输(默认值:True)tool_filter(可选):用于过滤可用工具的工具过滤函数cache_tools_list(可选):是否缓存工具列表以便后续更快访问(默认值:False)
MCPServerSSE 参数
url(必需):服务器 URL(例如,"https://api.example.com/mcp/sse")headers(可选):用于身份验证或其他目的的 HTTP 头字典tool_filter(可选):用于过滤可用工具的工具过滤函数cache_tools_list(可选):是否缓存工具列表以便后续更快访问(默认值:False)
通用参数
所有传输类型都支持tool_filter:过滤函数,用于控制哪些工具可用。可以是None(默认):所有工具都可用- 静态过滤器:使用
create_static_tool_filter()创建,用于允许/阻止列表 - 动态过滤器:使用
create_dynamic_tool_filter()创建,用于上下文感知过滤
cache_tools_list:当True时,在首次发现后缓存工具列表,以提高后续连接的性能
主要特点
- 🔄 自动工具发现:工具会自动发现并集成
- 🏷️ 名称冲突预防:服务器名称会作为工具名称的前缀
- ⚡ 性能优化:按需连接,带模式缓存
- 🛡️ 错误恢复能力:优雅处理不可用服务器
- ⏱️ 超时保护:内置超时,防止连接挂起
- 📊 透明集成:与现有 CrewAI 功能无缝协作
- 🔧 完整传输支持:Stdio、HTTP/可流式 HTTP 和 SSE 传输
- 🎯 高级过滤:静态和动态工具过滤功能
- 🔐 灵活认证:支持头、环境变量和查询参数
错误处理
MCP DSL 集成设计为具有弹性,并能优雅地处理故障- 连接失败:记录为警告,代理继续使用可用工具
- 超时错误:连接在 30 秒后超时(可配置)
- 认证错误:清晰记录以便调试
- 无效配置:在代理创建时引发验证错误
高级:MCPServerAdapter
对于需要手动连接管理的复杂场景,请使用crewai-tools 中的 MCPServerAdapter 类。使用 Python 上下文管理器(with 语句)是推荐的方法,因为它会自动处理与 MCP 服务器的连接启动和停止。
连接配置
MCPServerAdapter 支持多种配置选项来定制连接行为
connect_timeout(可选):等待与 MCP 服务器建立连接的最长时间(以秒为单位)。如果未指定,则默认为 30 秒。这对于响应时间可能变化的远程服务器特别有用。
过滤工具
有两种过滤工具的方法- 使用字典式索引访问特定工具。
- 将工具名称列表传递给
MCPServerAdapter构造函数。
使用字典式索引访问特定工具。
将工具名称列表传递给 MCPServerAdapter 构造函数。
与 CrewBase 一起使用
要在 CrewBase 类中使用 MCPServer 工具,请使用get_mcp_tools 方法。服务器配置应通过 mcp_server_params 属性提供。您可以传递单个配置或多个服务器配置列表。
连接超时配置
您可以通过设置mcp_connect_timeout 类属性来配置 MCP 服务器的连接超时。如果未指定超时,则默认为 30 秒。
过滤工具
您可以通过向get_mcp_tools 方法传递工具名称列表来过滤可供代理使用的工具。
探索 MCP 集成
简单的 DSL 集成
推荐:使用简单的
mcps=[] 字段语法,轻松实现 MCP 集成。标准输入输出 (Stdio) 传输
通过标准输入/输出连接到本地 MCP 服务器。适用于脚本和本地可执行文件。
SSE 传输
使用服务器发送事件与远程 MCP 服务器集成,实现实时数据流。
可流式 HTTP 传输
利用灵活的可流式 HTTP,与远程 MCP 服务器进行可靠通信。
连接多个服务器
使用单个适配器同时聚合来自多个 MCP 服务器的工具。
安全注意事项
查看 MCP 集成的重要安全最佳实践,以确保您的代理安全。
GitHub 存储库
CrewAI MCP 演示
使用 MCP 保持安全
安全警告:DNS 重绑定攻击
如果未正确保护,SSE 传输可能容易受到 DNS 重绑定攻击。为防止这种情况发生:- 始终验证传入 SSE 连接上的 Origin 头,以确保它们来自预期来源
- 在本地运行时,避免将服务器绑定到所有网络接口 (0.0.0.0) - 请仅绑定到 localhost (127.0.0.1)
- 为所有 SSE 连接实施适当的身份验证
局限性
- 支持的原语:目前,
MCPServerAdapter主要支持适配 MCPtools。其他 MCP 原语(如prompts或resources)目前尚未通过此适配器直接集成到 CrewAI 组件中。 - 输出处理:适配器通常处理 MCP 工具的主要文本输出(例如,
.content[0].text)。复杂或多模态输出如果与此模式不符,可能需要自定义处理。
