mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-07-10 14:28:43 +02:00
4.1 KiB
4.1 KiB
MCP 联邦
CyberStrikeAI 同时支持内置 MCP 工具、独立 HTTP MCP 服务和外部 MCP 联邦。MCP 是 Agent 调用工具的主要协议层。
内置 MCP
Web 服务内部会创建 MCP Server,并注册:
- YAML 命令工具。
- 内置安全执行工具。
- 知识库工具。
- 项目事实工具。
- C2 工具。
- WebShell 工具。
- 批量任务工具。
- 视觉分析工具。
前端和 Agent 通常通过应用内部调用,不需要额外配置。
HTTP MCP 服务
配置:
mcp:
enabled: true
host: 0.0.0.0
port: 8081
auth_header: "X-MCP-Token"
auth_header_value: "random-secret"
生产环境必须设置 auth_header_value,并限制网络访问。
Web 内 MCP 端点
登录后可通过:
POST /api/mcp
该端点复用 Web 认证,适合内部页面或受控集成。
外部 MCP
外部 MCP 配置在:
external_mcp:
servers: {}
也可以通过 Web 的 MCP 管理页面新增、启动、停止和删除。
接口:
GET /api/external-mcpGET /api/external-mcp/statsGET /api/external-mcp/:namePUT /api/external-mcp/:namePOST /api/external-mcp/:name/startPOST /api/external-mcp/:name/stopDELETE /api/external-mcp/:name
stdio
stdio MCP 适合本机命令启动的工具服务。
关注点:
- 命令路径必须存在。
- 工作目录正确。
- 环境变量完整。
- 进程退出会导致工具不可用。
- 日志中查看启动失败原因。
HTTP / SSE
HTTP 或 SSE MCP 适合远端或长期运行服务。
关注点:
- URL 可达。
- 认证头正确。
- TLS 证书可信。
- 代理和防火墙放行。
- 服务端协议版本兼容。
工具暴露策略
工具过多会增加上下文成本和误选概率。多代理中可通过:
multi_agent:
eino_middleware:
tool_search_enable: true
tool_search_min_tools: 20
tool_search_always_visible: 12
tool_search_always_visible_tools:
- read_file
- glob
- grep
- tool_search
让常用工具常驻,其余工具由 tool_search 动态解锁。
安全建议
- 外部 MCP 只接入可信服务。
- 远端 MCP 必须认证。
- 高风险工具不要常驻上下文。
- 外部 MCP 的文件系统和命令执行能力要单独评估。
- 变更外部 MCP 后查看审计日志。
调试
排查顺序:
/api/external-mcp/stats查看状态。- 检查服务日志。
- 单独运行 stdio 命令。
- 用 curl 测试 HTTP/SSE 地址。
- 检查工具是否被角色或 tool_search 策略隐藏。
MCP 生命周期
外部 MCP 的生命周期不是简单的“添加 URL”:
- 注册配置:名称、类型、命令或 URL、环境变量。
- 启动连接:stdio 拉起进程,HTTP/SSE 建立客户端。
- 拉取工具列表:工具名、描述、schema 进入平台。
- 暴露给 Agent:受角色、tool_search、HITL 影响。
- 执行工具:参数校验、调用、记录监控。
- 连接恢复:进程退出或网络失败后尝试恢复。
- 停止/删除:从运行时和配置中移除。
排错时要确认卡在哪一步。
工具命名规范
工具名应:
- 稳定。
- 小写或 snake_case。
- 表达动作和对象。
- 避免和内置工具重名。
不建议:
run
execute
scan
tool1
建议:
burp_send_to_repeater
asset_lookup_domain
cloud_list_public_buckets
好的工具名会提升 tool_search 命中率,也降低误调用。
外部 MCP 安全审查清单
接入前问:
- 它能读写本机文件吗?
- 它能执行命令吗?
- 它会访问哪些网络?
- 它是否把请求发给第三方?
- 它的工具描述是否可信?
- 它的输出是否可能包含 prompt injection?
- 它是否需要独立运行用户或容器隔离?
只要答案不清楚,就不要放进生产环境常驻工具池。
源码锚点
- 外部 MCP Manager:
internal/mcp/external_manager.go - 连接恢复:
internal/mcp/connection_recovery.go - MCP 工具适配:
internal/einomcp/mcp_tools.go - 外部 MCP Handler:
internal/handler/external_mcp.go - 工具调用通知:
internal/einomcp/tool_invoke_notify.go