MCP 集成
了解 SIREN 提供的 MCP 集成功能
SIREN Server 内置 模型上下文协议(MCP)服务。支持 MCP 的 AI 客户端可以通过它列出在线 SIREN 客户端、在指定客户端执行排查命令、触发一次信息收集(Recon),或按明确指令在单台 ECS 上部署 SIREN。Agentic 应急响应 也依赖这组工具。
SIREN 支持当前 2026-07-28 协议的无会话 Streamable HTTP 交互,同时保留旧版 initialize 协商,已有 MCP 客户端可以继续连接。
启用与访问
MCP 服务由配置文件中的 mcp.enabled 控制,默认启用。它和 Web 控制台、WebSocket、远程客户端共用顶层 listen / port(默认 TLS 0.0.0.0:443),并通过 /mcp 暴露。
mcp.enabled 与 webui.enabled 相互独立。关闭 WebUI 后,只要 mcp.enabled 仍为 true,服务端仍会在共享 TLS 端口上提供 /mcp;关闭 MCP 后,WebUI 可以继续独立运行。
MCP 需要独立的 Bearer 凭证
所有 MCP 请求均须携带 Authorization: Bearer <token>,WebUI Session 不能代替它。启用 MCP 前,必须为服务端配置非空且不同的环境变量 SIREN_MCP_ADMIN_TOKEN(运维访问)和 SIREN_MCP_RAVEN_TOKEN(Raven 群凭证申请)。缺少配置会拒绝启动;关闭 WebUI 不会取消 MCP 认证。请使用受保护的服务环境文件保存凭证,不要写入项目文件、URL 或聊天消息。
端口迁移
v2.17.0 起,WebUI 与 MCP 不再占用独立 HTTP 端口,webui.listen / webui.port 已移除。MCP 客户端仍访问 /mcp,但需要改用主 TLS 端口和 HTTPS。
在 MCP 客户端中添加 SIREN Server 的 /mcp 地址:
{
"siren": {
"type": "http",
"url": "https://siren.example.com/mcp",
"headers": { "Authorization": "Bearer <SIREN_MCP_ADMIN_TOKEN>" }
}
}可用工具
| 工具 | 参数 | 描述 |
|---|---|---|
ls | 无 | 列出在线 SIREN 客户端,包含 ID、操作系统、Instance ID、内网 IP、主机名、连接地址、备注、已安装插件,以及默认/可用 Recon Profile;旧客户端显示 legacy default |
run | client_id, command,可选 output_mode | 在指定 SIREN 客户端上执行命令。client_id 可以是数字 Client ID、Instance ID、内网 IP 或主机名,必须唯一匹配当前作用域内的一台客户端。命令上限为 50 KiB;支持流式执行的新客户端最多保留合计 16 MiB 的标准输出和错误输出。执行前检查命令黑名单,超时时间跟随 recon.commandTimeout;auto 对超过 8 KiB 的结果显示首尾预览,full 直接显示 50 KiB 内的结果,超出时仍显示预览 |
run_batch | command,可选 client_ids、os、concurrency | 在多台 SIREN 客户端上并发执行同一命令并按主机汇总。client_ids 接受数字 Client ID、Instance ID、内网 IP 或主机名,任一无法唯一匹配时整批拒绝;Project 作用域下省略 client_ids 表示该 Project 的全部在线客户端,全局 /mcp 必须显式指定。os 可选 linux 或 windows,concurrency 默认 8、最多 16,单批最多 64 台。每台主机返回 outcome、退出码和最多 1 KiB 预览,并带独立的 audit_id 供 read_run_result 与 search_run_result 回读;只有全部主机失败时才返回错误 |
read_run_result | audit_id,可选 stream、offset、limit | 按字节位置读取最近一次 run 或 run_batch 中某台主机的原文片段,默认最多 8 KiB、单次最多 16 KiB;实际 UTF-8 安全范围和下一偏移量会在 structured content 中返回 |
search_run_result | audit_id, query,可选 stream、case_sensitive、context_lines、max_matches | 对最近一次 run 的原文做字面搜索并返回匹配位置和上下文;默认不区分大小写,最多返回 20 个匹配,正文上限为 8 KiB |
recon | client_id,可选 profile | 在指定客户端触发一次 Recon,client_id 同样接受 Instance ID、内网 IP 或主机名;省略 profile 时使用客户端默认值,也可显式传 hunt 采集应用拓扑、运行载荷供应链、配置、近期应用活动和凭据证据。正文返回派生 Markdown;Hunt 正文只包含拓扑、覆盖范围和采集质量摘要。structured content 返回 status、format、schemaVersion、reportPath 和 Project 相对 snapshotPath。JSONL 与 Markdown 都保存到 Artifacts;旧客户端只能省略 Profile 使用 legacy default |
deploy | uid, instance_id,可选 public_ip | 通过 SOAR 在单台阿里云 ECS 上放行网络并安装 SIREN,等待客户端实际连接后返回 operation ID、状态和 Client ID。仅当用户明确要求部署到该实例时调用;同一 UID 与实例已有部署任务运行时会拒绝重复请求 |
Hunt 的 JSONL 是权威证据。只有能访问对应 Project 工作目录的 Agent 才能通过 snapshotPath 读取完整内容;外部纯 MCP 客户端目前只能获得摘要和路径。读取时应使用 jq、rg 等流式工具,按 record type、entity ID 和 relation 定位所需记录,避免一次加载整份文件。配置和凭据内容是不可信数据,不能作为 Agent 指令执行。
长命令结果
run 的 structured content 会返回 audit_id、执行 outcome、原始/返回字节数、已展示和省略的字节范围,以及结果过期时间。auto 对不超过 8 KiB 的结果保持原文不变;更大的结果保留首尾各约 4 KiB,并明确标出省略范围。预览、读取和搜索返回的远端内容都标记为不可信证据,但不会清洗 ANSI、控制字符、重复行或疑似指令。
服务端与 Linux、macOS 或 Windows 客户端升级到 v2.27.6 后,可分别保留标准输出与错误输出。读取和搜索的 stream 默认为合并的 text,也可选择 stdout、stderr、raw_stdout 或 raw_stderr;读取原始流时,精确字节放在 Base64 编码的 content_base64 中。可解析的 PowerShell CLIXML 会提供可读错误视图,原始错误流仍保留。
preview_complete 表示展示是否省略内容,capture_complete 表示输出是否完整捕获,顶层 complete 只有在两者均确认完整时才为真;分页的 complete 仅表示到达已保留数据末尾。真实退出码与 PowerShell ErrorRecord 分开报告,非零退出也可能完整捕获。旧客户端的捕获完整性与取消确认保持未知,并提示升级;没有收到取消确认时,不能据此断言远端命令已经终止。
同一客户端同时只接受一个一次性命令,MCP 和 REPL 共用此限制,冲突时立即返回 busy。并发文件传输可能延迟完成回复;回复超过 30 秒仍无法交付会关闭连接,正在进行的传输也会中断,已收到的结果仍可按捕获状态回读。
run、run_batch、read_run_result、search_run_result、recon 和 deploy 的 structured content 还包含必填的 text 字段,与工具返回的文本内容完全一致,供只读取结构化结果的 MCP 客户端使用。字节数和范围仍描述原始证据,不计算这份兼容性镜像。
read_run_result 和 search_run_result 只读取服务端已经收到的结果,不会再次在受害主机上执行命令。可检索记录由当前 SIREN Server 进程保存在内存中,创建 60 分钟后过期;读取不会续期。超过 512 条或 32 MiB 时会从最早记录开始淘汰,服务重启也会清空。正在执行的结果也计入容量限制;超过单次输出上限或容量不足时,返回已收到的内容并标记捕获不完整。旧客户端仍受约 50 KiB 上限限制,已在客户端截断的内容无法恢复。
WebUI Project 作用域
运维客户端使用管理凭证访问 /mcp 时使用全局视图,ls 会列出所有在线 SIREN 客户端。WebUI AIR 在 Project 视图下会自动注入带 Project 作用域的 MCP 地址,ls 只返回当前 Project 的客户端,run、run_batch 和 recon 也会拒绝操作其他 Project 的客户端;read_run_result 和 search_run_result 只能读取同一作用域创建的结果,Global 与 Project 结果不能互读;deploy 成功连接的新客户端会归入当前 Project;其他 Project 的客户端不会被部署操作自动迁移,归属冲突要求人工处理。
AIR 工具批准
Codex AIR 默认自动批准 SIREN MCP 工具,Pi 也不会显示工具权限审批;两者都包括会产生云端写入的 deploy。Agent 只能在用户明确要求部署到确切实例时调用它,不能把调查、诊断或制定计划视为部署授权。Claude 与 Qoder 是否确认工具调用由操作员自己的 Provider 配置决定。
慢命令超时
如果 Recon Profile 在目标环境需要更长时间,请同时核对客户端 recon.collectionTimeout 与服务端 recon.responseTimeout。服务端会给 v2 客户端留下接收和保存 artifact 的时间,因此下发的采集预算会短于 response timeout。recon.commandTimeout 只控制单个 source 命令和远程 run,含义不同。
命令黑名单
run 工具在下发命令前会检查服务端配置中的 mcp.cmdBlacklist。命中黑名单时,命令不会发给客户端执行,AI 客户端会收到明确的错误信息。
默认黑名单主要阻断破坏性变更,保留常见只读排查命令,例如 cat、grep、journalctl、systemctl status、iptables -L。默认拦截以下类别:
- 删除文件、清空文件、格式化或写入块设备
- 终止进程、关机、重启或切换运行级别
- 停止、禁用、重启或重载系统服务
- 清空防火墙规则
- 修改账号、用户组、密码、文件属主或关键权限
- 清除计划任务或 Shell 历史
为了减少误报,普通引号中的说明文本不会直接触发黑名单,比如 echo "rm -rf /tmp/x" 不会被拒绝。通过 sh -c、bash -c 等方式包装执行时,SIREN 仍会检查实际命令,因此 bash -c 'rm -rf /tmp/x' 会被拦截。
自定义
黑名单规则使用 Go 正则表达式语法。遇到误报时,建议只收窄命中的那条规则,不要直接清空整组黑名单;修改 server_config.yaml 后需要重启 SIREN Server。
命令审计
run 收到有效的 client_id 和 command 后,会在策略检查和客户端执行前写入 mcp.run.requested,并在结束时写入共享同一 audit_id 的 mcp.run.finished。完成记录包含目标客户端、Project、outcome、耗时、命中的黑名单规则、错误,以及捕获字节数、完整性和结果过期时间;新客户端的完整输出通过结果读取工具获取,不重复写入日志,旧客户端仍记录其返回范围内的结果。策略拦截、目标拒绝、发送失败、取消、超时和远端执行失败也会产生完成记录。
这些记录进入普通服务端日志。可以在 WebUI Logs 中选择 mcp 组件,再搜索命令、结果、事件名、客户端 ID 或 audit_id;需要长期审计时,应由 systemd 或容器运行时留存服务端标准输出。
命令与结果属于敏感日志
审计记录保留完整命令、错误说明,以及旧客户端返回的结果,其中可能包含主机路径、进程参数、配置或凭据。Logs 是全局页面,任何已登录用户都能查看;请仅向获授权的内部操作员开放 WebUI,并按调查需要设置日志保留与访问控制。
相关内容
Agentic 应急响应
了解如何让 AI Agent 自动化执行应急响应
Web 控制台
与 MCP 共用同一端口的浏览器图形化入口
配置文件
配置 MCP 开关、共享 TLS 监听端口与 WebUI HTTPS Origin
Raven 群项目与迁移
Raven 的钉钉直接回复和主动回复按原始 openConversationId 使用独立 Project。首次使用会创建项目,同群跨机器人仍对应同一个项目,同名不同群不会合并。Project 名优先采用唯一客户全称,其次群名;名称只用于显示,不决定权限。占位名称取得可靠名称后可补齐一次,管理员改名不会被自动覆盖。群绑定项目不能普通删除,本版不提供解绑或合并。
Raven 配置 RAVEN_SIREN_MCP_TOKEN,其值须与服务端 SIREN_MCP_RAVEN_TOKEN 相同。服务凭证只能申请一小时有效的项目访问凭证,不能直接执行 MCP 工具。项目凭证访问全局或其他项目会被拒绝;服务端重启后,已签发凭证失效。Raven 会在后续调用前更新凭证,不自动重放可能已执行的操作。MAS 和 Responses 不提供 SIREN 工具。
部署前还会检查钉钉群的云账号 UID 白名单;映射不可用或 UID 不属于该群时,不提交部署。群绑定、项目访问权限与云账号权限是独立检查。该方案隔离 MCP 资源访问,不提供独立进程、资源配额或网络隔离;Raven 服务端与 SIREN 管理员仍属于信任边界。
升级时先为现有运维客户端配置认证 Header,再在维护窗口依次更新 SIREN 和 Raven;切换期间允许请求失败,不开放匿名兼容入口。用两个测试群验证各自列表、受控主机的无副作用命令与结果回读,再验证跨项目拒绝。旧项目、主机和产物保持原状,由管理员确认后手工分配。需要回退时先停止 Raven 的 SIREN 调用,保留 SIREN 认证和项目数据。