# MCP 联邦 CyberStrikeAI 同时支持内置 MCP 工具、独立 HTTP MCP 服务和外部 MCP 联邦。MCP 是 Agent 调用工具的主要协议层。 ## 内置 MCP Web 服务内部会创建 MCP Server,并注册: - YAML 命令工具。 - 内置安全执行工具。 - 知识库工具。 - 项目事实工具。 - C2 工具。 - WebShell 工具。 - 批量任务工具。 - 视觉分析工具。 前端和 Agent 通常通过应用内部调用,不需要额外配置。 ## HTTP MCP 服务 配置: ```yaml 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 端点 登录后可通过: ```text POST /api/mcp ``` 该端点复用 Web 认证,适合内部页面或受控集成。 ## 外部 MCP 外部 MCP 配置在: ```yaml external_mcp: servers: {} ``` 也可以通过 Web 的 MCP 管理页面新增、启动、停止和删除。 接口: - `GET /api/external-mcp` - `GET /api/external-mcp/stats` - `GET /api/external-mcp/:name` - `PUT /api/external-mcp/:name` - `POST /api/external-mcp/:name/start` - `POST /api/external-mcp/:name/stop` - `DELETE /api/external-mcp/:name` ## stdio stdio MCP 适合本机命令启动的工具服务。 关注点: - 命令路径必须存在。 - 工作目录正确。 - 环境变量完整。 - 进程退出会导致工具不可用。 - 日志中查看启动失败原因。 ## HTTP / SSE HTTP 或 SSE MCP 适合远端或长期运行服务。 关注点: - URL 可达。 - 认证头正确。 - TLS 证书可信。 - 代理和防火墙放行。 - 服务端协议版本兼容。 ## 工具暴露策略 工具过多会增加上下文成本和误选概率。多代理中可通过: ```yaml 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 后查看审计日志。 ## 调试 排查顺序: 1. `/api/external-mcp/stats` 查看状态。 2. 检查服务日志。 3. 单独运行 stdio 命令。 4. 用 curl 测试 HTTP/SSE 地址。 5. 检查工具是否被角色或 tool_search 策略隐藏。 ## MCP 生命周期 外部 MCP 的生命周期不是简单的“添加 URL”: 1. 注册配置:名称、类型、命令或 URL、环境变量。 2. 启动连接:stdio 拉起进程,HTTP/SSE 建立客户端。 3. 拉取工具列表:工具名、描述、schema 进入平台。 4. 暴露给 Agent:受角色、tool_search、HITL 影响。 5. 执行工具:参数校验、调用、记录监控。 6. 连接恢复:进程退出或网络失败后尝试恢复。 7. 停止/删除:从运行时和配置中移除。 排错时要确认卡在哪一步。 ## 工具命名规范 工具名应: - 稳定。 - 小写或 snake_case。 - 表达动作和对象。 - 避免和内置工具重名。 不建议: ```text run execute scan tool1 ``` 建议: ```text 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`