CrewAI Flow 开发:DSL接入Mcp高级

注意!

摘要:随着 CrewAI v1.6+ 版本的演进,官方已移除旧的 MCPServerAdapter,全面转向更优雅的 MCP DSL (领域特定语言) 集成 方式。本文将深度解析 DSL 集成的底层原理,提供开箱即用的实战代码,并重点剖析生产环境中极易踩中的"协议兼容性"与"反爬拦截"等致命坑点,助你打造高可用的企业级 AI Agent 系统。


文章目录

  • 注意!
  • 一、CrewAi通过Dsl集成Mcp的基础版本导航
  • 二、CrewAi通过Dsl集成Mcp的高级配置
    • 1、Stdio模式
      • [1.1 客户端(CrewAI)集成配置代码](#1.1 客户端(CrewAI)集成配置代码)
      • [1.2 配置参数详解](#1.2 配置参数详解)
      • 1.3适用场景
    • 2、SSE模式
      • [2.1 工作原理](#2.1 工作原理)
      • [2.2 客户端(CrewAI)集成配置](#2.2 客户端(CrewAI)集成配置)
      • [2.3 配置参数详解](#2.3 配置参数详解)
      • [2.4 适用场景](#2.4 适用场景)
    • [3、Streamable HTTP(双向流式 HTTP)------ 企业级远程服务的首选](#3、Streamable HTTP(双向流式 HTTP)—— 企业级远程服务的首选)
      • [3.1 工作原理](#3.1 工作原理)
      • [3.2 客户端(CrewAI)集成配置](#3.2 客户端(CrewAI)集成配置)
      • [3.3 配置参数详解](#3.3 配置参数详解)

一、CrewAi通过Dsl集成Mcp的基础版本导航

https://blog.csdn.net/weixin_44399264/article/details/162922720?spm=1011.2415.3001.10575\&sharefrom=mp_manage_link

二、CrewAi通过Dsl集成Mcp的高级配置

1、Stdio模式

1.1 客户端(CrewAI)集成配置代码

python 复制代码
from crewai import Agent
from crewai.mcp import MCPServerStdio

agent = Agent(
    role="本地数据分析师",
    goal="分析本地文件并调用工具",
    backstory="...",
    mcps=[
        MCPServerStdio(
            command="python",                        # 启动命令
            args=["server_stdio.py"],                # 命令参数
            env={"PYTHONUNBUFFERED": "1"},           # 环境变量(可选)
            cache_tools_list=True,                   # 缓存工具列表
            # tool_filter=...                        # 工具过滤(本文暂不展开)
        )
    ]
)

1.2 配置参数详解

参数 类型 必填 默认值 说明
command str --- 启动服务器的命令(如 python、node、uvx)
args liststr \[\] 命令参数列表
env str {} 传递给子进程的环境变量
cache_tools_list str True 是否缓存工具列表(提升性能)
tool_filter str None 静态或动态工具过滤函数

1.3适用场景

  • 文件系统操作(读取/写入本地目录)
  • 本地命令行工具封装(如 git、ffmpeg、kubectl)
  • 开发调试阶段(快速验证 MCP 服务逻辑)
  • CI/CD 流水线中的自动化任务
  • 对网络延迟极度敏感的场景

2、SSE模式

2.1 工作原理

复制代码
1、客户端通过 HTTP GET 建立 SSE 长连接,服务端持续推送事件(如工具调用结果、资源更新通知)。

2、客户端如需发送请求,通常另开 HTTP POST 通道(或复用 SSE 连接的消息通道)。

3、单向推送能力强大,但双向交互相对笨重,且连接中断后需重新建立。

2.2 客户端(CrewAI)集成配置

python 复制代码
from crewai import Agent
from crewai.mcp import MCPServerSSE

agent = Agent(
    role="实时监控分析师",
    goal="监听实时数据流并作出响应",
    backstory="...",
    mcps=[
        MCPServerSSE(
            url="http://localhost:8000/sse",        # SSE 端点 URL
            headers={"Authorization": "Bearer token"}, # 可选认证头
            # tool_filter=...
        )
    ]
)

2.3 配置参数详解

参数 类型 必填 默认值 说明
url str --- SSE 服务端点(通常为 /sse)
headers dictstr, str {} 自定义 HTTP 请求头(如认证信息)
tool_filter Callable None 工具过滤函数

2.4 适用场景

  • 实时日志流订阅(如应用监控、错误追踪)
  • 低频但需持续推送的场景(如股票价格、天气更新)
  • 消息推送服务(通知 Agent 某个事件已发生)
  • 需要从服务端主动推送消息给客户端(如触发 Agent 重新规划)

注意:SSE 在负载均衡、断线重连方面不如 Streamable HTTP 成熟,因此更推荐在内部网络或非关键路径中使用。

3、Streamable HTTP(双向流式 HTTP)------ 企业级远程服务的首选

3.1 工作原理

复制代码
1、基于 HTTP/1.1 或 HTTP/2,客户端使用 POST 请求发送 JSON-RPC 消息,服务端在同一个 HTTP 响应中返回
结果(或分块返回流式数据)。

2、支持 双向通信:客户端可以随时发起新请求,服务端可以在响应中携带多个消息(如中间结果、进度更新)。

3、比 SSE 更灵活,比 WebSocket 更易实现负载均衡,且天然兼容 RESTful 架构。

3.2 客户端(CrewAI)集成配置

基础配置(单服务器):

python 复制代码
from crewai import Agent
from crewai.mcp import MCPServerHTTP

agent = Agent(
    role="高级电商营销分析师",
    goal="调用远程工具生成营销报告",
    backstory="...",
    mcps=[
        MCPServerHTTP(
            url="http://localhost:8000/mcp",          # MCP 端点(通常为 /mcp)
            headers={
                "Authorization": f"Bearer {API_KEY}",
                "X-Tenant-ID": "tenant_001"
            },
            streamable=True,                          # 关键:启用 Streamable HTTP
            cache_tools_list=True,                    # 推荐开启
            # tool_filter=...                        # 工具过滤(见下文)
        )
    ]
)

多服务器聚合(企业级微服务):

python 复制代码
agent = Agent(
    role="全能电商助手",
    goal="综合使用多个远程服务完成复杂任务",
    backstory="...",
    mcps=[
        # 搜索服务
        MCPServerHTTP(
            url="https://search.internal/mcp",
            headers={"Authorization": f"Bearer {API_KEY}"},
            streamable=True,
            cache_tools_list=True,
            tool_filter=create_static_tool_filter(
                allowed_tool_names=["search_products", "get_product_details"]
            ),
        ),
        # 合规服务
        MCPServerHTTP(
            url="https://compliance.internal/mcp",
            headers={"Authorization": f"Bearer {API_KEY}"},
            streamable=True,
            cache_tools_list=True,
        ),
        # 分析服务(带租户隔离)
        MCPServerHTTP(
            url="https://analytics.internal/mcp",
            headers={
                "Authorization": f"Bearer {API_KEY}",
                "X-Tenant-ID": "tenant_001",
                "X-Request-ID": "req-12345"
            },
            streamable=True,
            cache_tools_list=True,
        )
    ]
)

动态认证与租户隔离----补充参数(通过 headers 间接控制)

python 复制代码
headers = {
    "Authorization": f"Bearer {os.getenv('JWT_TOKEN')}",
    "X-Tenant-ID": current_tenant_id,          # 运行时动态获取
    "X-User-ID": user_id,
    "X-Client-Version": "2.0"
}

3.3 配置参数详解

参数 类型 必填 默认值 说明
url str --- MCP 服务的 HTTP 端点,FastMCP 默认 /mcp。支持 http:// 和 https://。
headers dictstr, str {} 自定义请求头,常用于传递认证令牌(Bearer、API Key)、租户 ID、追踪 ID 等。支持动态计算(如从环境变量或上下文获取)。
streamable bool False 必须设为 True 以启用 Streamable HTTP。开启后支持双向流式通信(服务端可主动推送中间结果)。设为 False 时回退为普通 HTTP,性能较差且无法接收流式响应。
cache_tools_list bool True 启用后,工具列表将被缓存(默认 5~15 分钟),避免每次创建 Agent 都请求 tools/list,显著降低延迟和 API 成本。生产环境强烈建议开启
tool_filter Callable None 工具过滤函数,支持静态过滤(create_static_tool_filter)或自定义动态过滤(基于用户角色、权限等)。过滤后的工具仅对当前 Agent 可见,实现细粒度权限控制
相关推荐
koharu1232 个月前
CrewAI :多智能体开发
人工智能·llm·agent·crewai
大龄码农有梦想2 个月前
Spring AI Alibaba和CrewAI:多智能体开源框架对比与选型
spring ai·crewai·多智能体协作框架·spring ai阿里巴巴·spring ai aliba·java智能体框架·python智能体框架
大龄码农有梦想2 个月前
单智能体编排 vs 多智能体协作:AI应用开发技术路线之争
人工智能·dify·langgraph·工作流编排·crewai·单智能体编排·多智能体协助
Java码农也是农3 个月前
Agent编排框架对比:LangGraph vs AutoGen vs CrewAI
langchain·autogen·langgraph·crewai
YuanDaima20484 个月前
[CrewAI] 第15课|构建一个多代理系统来实现自动化简历定制和面试准备
人工智能·python·面试·agent·crewai
七夜zippoe4 个月前
AI Agent 框架选型指南:OpenClaw、LangChain、AutoGPT、CrewAI 深度对比
人工智能·langchain·autogpt·crewai·openclaw
容沁风8 个月前
llama.cpp作为crewAI的模型后端
llama.cpp·crewai
YuanDaima20488 个月前
[CrewAI] 第5课|基于多智能体构建一个 AI 客服支持系统
人工智能·笔记·多智能体·智能体·crewai
用什么都重名9 个月前
LangGraph vs CrewAI vs OpenAI Swarm:三大AI框架
人工智能·langgraph·crewai·openai swarm