ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CAI 实战:通过 MCP 协议为 AI 安全 Agent 接入外部工具(SSE/STDIO 双传输)

CAI 实战:通过 MCP 协议为 AI 安全 Agent 接入外部工具(SSE/STDIO 双传输) CAI 实战通过 MCP 协议为 AI 安全 Agent 接入外部工具SSE/STDIO 双传输【免费下载链接】caiCybersecurity AI (CAI), the framework for AI Security项目地址: https://gitcode.com/GitHub_Trending/cai3/cai本篇技术指南围绕 CAICybersecurity AI框架的 MCPModel Context Protocol集成能力展开讲解如何通过/mcp命令加载远程 SSE 与本地 STDIO 两类 MCP 服务器将 Burp Suite、Chrome DevTools 等安全工具的能力注入红队 Agent。读完本文你将掌握 MCP 服务器的加载、工具挂载、状态管理、故障排查全流程并理解 CAI 在 SDK 层对 MCP 的封装原理与缓存、重连、追踪等底层机制。MCP 是什么CAI 为什么需要它Model Context ProtocolMCP是 AI 应用与外部数据源、工具之间的一种开放标准化协议可以类比为AI 应用的 USB-C 接口——它统一了 LLM 获取上下文与调用工具的通信方式。CAI 作为面向 AI 安全的 Agent 框架通过 MCP 将外部安全工具如 Burp Suite 的 MCP 扩展、Chrome DevTools 协议封装、文件系统服务器等以统一、可插拔的方式接入自己的 Agent 体系从而让红队 Agent 在推理过程中直接调用真实的安全工具而无需为每个工具单独编写适配层。CAI 对 MCP 的完整支持体现在两个层面CLI/REPL 层面通过 src/cai/repl/commands/mcp.py 中的MCPCommand别名为/m提供交互式管理命令这是本指南的主体SDK 层面通过 src/cai/sdk/agents/mcp/init.py 导出的MCPServerStdio、MCPServerSse、MCPUtil等类供代码中直接构建 Agent 时声明式挂载 MCP 服务器。其架构定位参见 docs/cai/architecture/overview.md 中的七大支柱设计Agent、Tools、Handoffs、Patterns、Turns、Tracing 与 HITLMCP 正是Tools支柱向外扩展的关键通道。两种传输机制SSE 与 STDIOMCP 规范定义了基于传输方式的两类服务器CAI 在 src/cai/sdk/agents/mcp/server.py 中分别以MCPServerSse与MCPServerStdio实现传输类型通信方式适用场景CAI 实现类SSEServer-Sent Events通过 HTTP 连接推送事件服务器可远程访问Web 形态的远程服务如 Burp MCP 扩展、HackTheBox CTF MCPMCPServerSseSTDIO标准输入输出作为应用的子进程运行进程间通过 stdin/stdout 通信本地命令行程序如npx启动的 Node 服务器、本地 Python MCP 服务器MCPServerStdio两者统一继承抽象基类MCPServer其核心抽象方法即connect()、cleanup()、list_tools()、call_tool()四个方法构成了 CAI 与任意 MCP 服务器交互的最小契约server.py。加载 SSE 服务器对于基于 Web 的、能通过 HTTP 长连接推送更新的 MCP 服务器在 REPL 中执行CAI/mcp load http://localhost:9876/sse burp/mcp load的第一个参数为服务器 URL第二个参数是你为该连接起的名称后续挂载与管理的标识。加载 STDIO 服务器对于本地进程间通信语法为stdio 名称 命令 [参数...]CAI/mcp load stdio myserver python mcp_server.py带参数的变体例如以 Node 启动并传入端口CAI/mcp load stdio myserver node server.js --port 8080在 mcp.py 的实现中STDIO 服务器加载时会先启动子进程、建立会话并调用一次list_tools()完成连通性测试成功后输出类似✓ Started stdio server myserver与可用工具数量。/mcp 命令全景管理与排障MCPCommand在 mcp.py 中注册了完整的子命令集覆盖从加载到移除的整个生命周期子命令作用示例load加载 SSE 或 STDIO 类型的 MCP 服务器/mcp load http://localhost:9876/sse burplist列出所有活跃连接名称、类型、详情、工具数/mcp listtools列出指定服务器的全部工具及描述/mcp tools burpadd将某服务器的工具挂载到指定 Agent/mcp add burp redteam_agentremove移除服务器连接并清理资源/mcp remove burpstatus检测各服务器连接健康状态并自动重连/mcp statustest对指定服务器做三项连通性测试/mcp test burpassociations查看 Agent 与 MCP 服务器的绑定关系/mcp associationshelp展示完整用法/mcp help几点说明不带子命令直接输入/mcp等价于/mcp listadd的第二个参数既支持 Agent 名称redteam_agent也支持按编号选择/mcp add burp 13load对同名服务器有去重保护若名称已加载会提示先/mcp remove再重载mcp.py。为远程服务器附加认证头SSE 类型的服务器常部署在需要鉴权的远端/mcp load支持通过--header或简写-H携带认证头且可重复指定多个# 携带 Bearer Token 访问 HackTheBox CTF MCP CAI/mcp load https://mcp.ai.hackthebox.com/v1/ctf/sse htb --header Authorization: Bearer YOUR_TOKEN # 多请求头 CAI/mcp load https://api.example.com/mcp myapi -H X-API-Key: secret -H Custom-Header: value参数解析位于 mcp.py要求格式为Key: Value自动去除键值两侧的引号与空白非--header/-H的未知参数会被忽略并给出警告。核心流程将 MCP 工具挂载到 AgentMCP 的价值最终体现在工具被 Agent 实际调用。完整链路为加载服务器 → 挂载到 Agent → 切换到 Agent 下达指令。第一步加载并确认服务器CAI/mcp load http://localhost:9876/sse burp CAI/mcp tools burp # 可选预览该服务器暴露的工具清单第二步挂载工具到目标 AgentCAI/mcp add burp redteam_agent Adding tools from MCP server burp to agent Red Team Agent... Adding tools to Red Team Agent ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Tool ┃ Status ┃ Details ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ │ send_http_request │ Added │ Available as: send_http_request │ │ create_repeater_tab │ Added │ Available as: create_repeater_tab │ │ send_to_intruder │ Added │ Available as: send_to_intruder │ │ url_encode │ Added │ Available as: url_encode │ │ url_decode │ Added │ Available as: url_decode │ │ base64encode │ Added │ Available as: base64encode │ │ base64decode │ Added │ Available as: base64decode │ │ generate_random_string │ Added │ Available as: generate_random_string │ │ output_project_options │ Added │ Available as: output_project_options │ │ output_user_options │ Added │ Available as: output_user_options │ │ set_project_options │ Added │ Available as: set_project_options │ │ set_user_options │ Added │ Available as: set_user_options │ │ get_proxy_http_history │ Added │ Available as: get_proxy_http_history │ │ get_proxy_http_history_regex │ Added │ Available as: get_proxy_http_history_regex │ │ get_proxy_websocket_history │ Added │ Available as: get_proxy_websocket_history │ │ get_proxy_websocket_history_regex │ Added │ Available as: get_proxy_websocket_history_regex │ │ set_task_execution_engine_state │ Added │ Available as: set_task_execution_engine_state │ │ set_proxy_intercept_state │ Added │ Available as: set_proxy_intercept_state │ │ get_active_editor_contents │ Added │ Available as: get_active_editor_contents │ │ set_active_editor_contents │ Added │ Available as: set_active_editor_contents │ └───────────────────────────────────┴────────┴─────────────────────────────────────────────────┘ Added 20 tools from server burp to agent Red Team Agent.第三步切换到 Agent 并使用工具CAI/agent 13 CAICreate a repeater tabAgent 会依据任务描述自主选择刚挂载的 MCP 工具完成请求。工具挂载逻辑见 mcp.pyadd会先校验服务器连接失败时自动尝试重连再将 MCP 工具逐一转换为 CAI 的FunctionTool追加到agent.tools并做同名去重防止重复挂载最后写入 Agent–MCP 关联注册表_AGENT_MCP_ASSOCIATIONS。源码级原理工具是如何被转换与调用的挂载过程的核心是GlobalMCPUtil.to_function_tool()mcp.py它把 MCP 服务器暴露的原始工具元信息名称、inputSchema、描述捕获为服务器配置快照并用functools.partial绑定一个invoke_with_fresh_connection调用函数最终包装为标准FunctionTool。其设计要点STDIO 持久连接 调用锁STDIO 服务器常驻于全局注册表_GLOBAL_MCP_SERVERS每次工具调用通过_SERVER_INVOCATION_LOCKS按服务器粒度加锁串行化避免并发写入破坏子进程通信SSE 每次调用即建即拆SSE 服务器不保活每次调用按保存的 URL/headers/timeout 新建MCPServerSse实例并快速连接调用结束后以超时 0.5 秒快速清理会话超时与重试连接超时 10 秒、工具调用超时 30 秒失败最多重试 2 次重试前清理会话并休眠 0.5 秒错误语义化将ClosedResourceError、ExceptionGroup等底层异常翻译为AgentsException并提示用户用/mcp status或/mcp remove/mcp load恢复结果归一化MCP 返回的CallToolResult.content列表被统一序列化为 JSON 字符串单条内容用model_dump_json()多条则整体转 JSON 数组Tracing 埋点调用结果会写入当前 span 的FunctionSpanData.output与mcp_data.server供追踪系统展示对应 util.py 中的逻辑。而 SDK 层的通用转换工具MCPUtilsrc/cai/sdk/agents/mcp/util.py则提供了面向编程式集成的能力get_function_tools()负责单服务器工具拉取get_all_function_tools()支持多服务器聚合并会检测跨服务器的工具重名冲突以抛错util.py。在代码中声明式集成 MCP 服务器除了 REPL 交互CAI 的 Agent 类原生支持mcp_servers参数见 src/cai/sdk/agents/agent.py每次运行 Agent 时框架会通过MCPUtil.get_all_function_tools()拉取工具列表agent.py使 LLM 感知这些工具当 LLM 发起调用时框架再对服务器执行call_tool()。from cai.sdk.agents import Agent from cai.sdk.agents.mcp import MCPServerStdio samples_dir /path/to/samples mcp_server MCPServerStdio( params{ command: npx, args: [-y, modelcontextprotocol/server-filesystem, samples_dir], } ) agent Agent( nameCybersecurity Lead Agent, instructionsUse the tools to solve the task., mcp_servers[mcp_server], )MCPServerStdioParams与MCPServerSseParams的完整参数server.py 与 server.py类参数含义默认值MCPServerStdioParamscommand启动服务器的可执行文件如python/node必填args传给命令的参数列表[]env设置给子进程的环境变量继承父进程cwd子进程工作目录当前目录encoding消息编解码使用的文本编码utf-8encoding_error_handler编码错误处理策略strict/ignore/replacestrictMCPServerSseParamsurl服务器 URL必填headers发送给服务器的请求头无timeoutHTTP 请求超时秒5sse_read_timeoutSSE 连接读取超时秒3005 分钟工具列表缓存每次运行 Agent 都会调用list_tools()刷新工具感知对远程服务器而言存在延迟开销。若确信服务器工具集不会变化可在构造MCPServerStdio/MCPServerSse时传cache_tools_listTrue启用缓存缓存失效时调用invalidate_tools_cache()手动刷新。缓存实现见 server.py缓存启用且未失效时直接返回内存中的_tools_list省去一次网络往返。实战案例用 CAI 控制 Chrome 浏览器以 MCP 方式将 Chrome 变为红队 Agent 的可操控目标步骤如下安装 Node.js按官方安装包指引完成注意 Chromium 与该功能不兼容需安装标准版 Chrome在 CAI REPL 中依次执行/mcp load stdio devtools npx chrome-devtools-mcplatest /mcp add devtools redteam_agent /agent redteam_agent完成上述三步后红队 Agent 便获得了对 Chrome 的完整控制能力可基于自然语言指令驱动浏览器执行页面访问、DOM 操作、网络拦截等动作。该流程同样遵循加载 → 挂载 → 切换三步范式其中npx chrome-devtools-mcplatest是以 STDIO 方式启动的本地 Node 进程符合MCPServerStdio的进程模型。状态检查与故障排查长期运行后服务器可能因网络波动、进程退出等原因失联CAI 提供两个诊断入口/mcp status遍历所有连接并逐一执行list_tools()探活健康项标记✓ Healthy异常项显示错误摘要并自动尝试重连重连成功标记✓ Reconnected失败标记✗ Failed最后给出整体健康统计mcp.py/mcp test server_name对单个服务器执行三项测试——列出工具、用空参数调用第一个工具结果失败属正常因为多数工具需要输入、强制断开并重连验证恢复能力mcp.py。常见异常与处置建议现象原因与处置Timeout connecting to MCP server连接超时默认 10 秒确认服务器地址、端口与服务状态Timeout calling MCP tool ...工具单次调用超 30 秒检查工具本身是否长时间阻塞Server xxx is already loaded and active同名已加载先/mcp remove xxx再重载Connection lost to MCP server底层连接被关闭用/mcp status确认并重连SSE 服务端偶发异步生成器告警属正常现象无需处理Agent 挂载后工具不可用用/mcp associations核对绑定关系或/mcp remove后重新loadadd退出 REPL 时mcp.py 中的cleanup_mcp_servers()会通过atexit注册的清理钩子统一释放所有服务器资源SSE 使用 0.1 秒短超时快速关闭STDIO 则等待完整清理。验证与测试仓库为 MCP 集成提供了可参考的测试用例可作为理解行为契约的佐证tests/mcp/test_connect_disconnect.py验证MCPServerStdio既支持async with上下文管理器也支持手动connect()/cleanup()且生命周期内session状态的正确切换tests/mcp/test_mcp_util.py验证MCPUtil.get_all_function_tools()的多服务器聚合与 JSON Schema 传递、非法 JSON 输入抛ModelBehaviorError、工具调用崩溃被包装为AgentsException等行为。编程式集成可直接参照 examples/mcp 下的filesystem_example、git_example与sse_example三个完整示例分别演示本地文件系统服务器、Git 服务器与 SSE 服务器的使用而 CLI 交互式集成则以本文的/mcp命令流程为准。更深入的类型与参数说明可查阅 docs/ref/mcp/server.md 与 docs/ref/mcp/util.md。【免费下载链接】caiCybersecurity AI (CAI), the framework for AI Security项目地址: https://gitcode.com/GitHub_Trending/cai3/cai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表