SIREN

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.enabledwebui.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 地址:

mcp.json
{
  "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
runclient_id, command,可选 output_mode在指定 SIREN 客户端上执行命令。client_id 可以是数字 Client ID、Instance ID、内网 IP 或主机名,必须唯一匹配当前作用域内的一台客户端。命令上限为 50 KiB;支持流式执行的新客户端最多保留合计 16 MiB 的标准输出和错误输出。执行前检查命令黑名单,超时时间跟随 recon.commandTimeoutauto 对超过 8 KiB 的结果显示首尾预览,full 直接显示 50 KiB 内的结果,超出时仍显示预览
run_batchcommand,可选 client_idsosconcurrency在多台 SIREN 客户端上并发执行同一命令并按主机汇总。client_ids 接受数字 Client ID、Instance ID、内网 IP 或主机名,任一无法唯一匹配时整批拒绝;Project 作用域下省略 client_ids 表示该 Project 的全部在线客户端,全局 /mcp 必须显式指定。os 可选 linuxwindowsconcurrency 默认 8、最多 16,单批最多 64 台。每台主机返回 outcome、退出码和最多 1 KiB 预览,并带独立的 audit_idread_run_resultsearch_run_result 回读;只有全部主机失败时才返回错误
read_run_resultaudit_id,可选 streamoffsetlimit按字节位置读取最近一次 runrun_batch 中某台主机的原文片段,默认最多 8 KiB、单次最多 16 KiB;实际 UTF-8 安全范围和下一偏移量会在 structured content 中返回
search_run_resultaudit_id, query,可选 streamcase_sensitivecontext_linesmax_matches对最近一次 run 的原文做字面搜索并返回匹配位置和上下文;默认不区分大小写,最多返回 20 个匹配,正文上限为 8 KiB
reconclient_id,可选 profile在指定客户端触发一次 Reconclient_id 同样接受 Instance ID、内网 IP 或主机名;省略 profile 时使用客户端默认值,也可显式传 hunt 采集应用拓扑、运行载荷供应链、配置、近期应用活动和凭据证据。正文返回派生 Markdown;Hunt 正文只包含拓扑、覆盖范围和采集质量摘要。structured content 返回 statusformatschemaVersionreportPath 和 Project 相对 snapshotPath。JSONL 与 Markdown 都保存到 Artifacts;旧客户端只能省略 Profile 使用 legacy default
deployuid, instance_id,可选 public_ip通过 SOAR 在单台阿里云 ECS 上放行网络并安装 SIREN,等待客户端实际连接后返回 operation ID、状态和 Client ID。仅当用户明确要求部署到该实例时调用;同一 UID 与实例已有部署任务运行时会拒绝重复请求

Hunt 的 JSONL 是权威证据。只有能访问对应 Project 工作目录的 Agent 才能通过 snapshotPath 读取完整内容;外部纯 MCP 客户端目前只能获得摘要和路径。读取时应使用 jqrg 等流式工具,按 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,也可选择 stdoutstderrraw_stdoutraw_stderr;读取原始流时,精确字节放在 Base64 编码的 content_base64 中。可解析的 PowerShell CLIXML 会提供可读错误视图,原始错误流仍保留。

preview_complete 表示展示是否省略内容,capture_complete 表示输出是否完整捕获,顶层 complete 只有在两者均确认完整时才为真;分页的 complete 仅表示到达已保留数据末尾。真实退出码与 PowerShell ErrorRecord 分开报告,非零退出也可能完整捕获。旧客户端的捕获完整性与取消确认保持未知,并提示升级;没有收到取消确认时,不能据此断言远端命令已经终止。

同一客户端同时只接受一个一次性命令,MCP 和 REPL 共用此限制,冲突时立即返回 busy。并发文件传输可能延迟完成回复;回复超过 30 秒仍无法交付会关闭连接,正在进行的传输也会中断,已收到的结果仍可按捕获状态回读。

runrun_batchread_run_resultsearch_run_resultrecondeploy 的 structured content 还包含必填的 text 字段,与工具返回的文本内容完全一致,供只读取结构化结果的 MCP 客户端使用。字节数和范围仍描述原始证据,不计算这份兼容性镜像。

read_run_resultsearch_run_result 只读取服务端已经收到的结果,不会再次在受害主机上执行命令。可检索记录由当前 SIREN Server 进程保存在内存中,创建 60 分钟后过期;读取不会续期。超过 512 条或 32 MiB 时会从最早记录开始淘汰,服务重启也会清空。正在执行的结果也计入容量限制;超过单次输出上限或容量不足时,返回已收到的内容并标记捕获不完整。旧客户端仍受约 50 KiB 上限限制,已在客户端截断的内容无法恢复。

WebUI Project 作用域

运维客户端使用管理凭证访问 /mcp 时使用全局视图,ls 会列出所有在线 SIREN 客户端。WebUI AIR 在 Project 视图下会自动注入带 Project 作用域的 MCP 地址,ls 只返回当前 Project 的客户端,runrun_batchrecon 也会拒绝操作其他 Project 的客户端;read_run_resultsearch_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 客户端会收到明确的错误信息。

默认黑名单主要阻断破坏性变更,保留常见只读排查命令,例如 catgrepjournalctlsystemctl statusiptables -L。默认拦截以下类别:

  • 删除文件、清空文件、格式化或写入块设备
  • 终止进程、关机、重启或切换运行级别
  • 停止、禁用、重启或重载系统服务
  • 清空防火墙规则
  • 修改账号、用户组、密码、文件属主或关键权限
  • 清除计划任务或 Shell 历史

为了减少误报,普通引号中的说明文本不会直接触发黑名单,比如 echo "rm -rf /tmp/x" 不会被拒绝。通过 sh -cbash -c 等方式包装执行时,SIREN 仍会检查实际命令,因此 bash -c 'rm -rf /tmp/x' 会被拦截。

自定义

黑名单规则使用 Go 正则表达式语法。遇到误报时,建议只收窄命中的那条规则,不要直接清空整组黑名单;修改 server_config.yaml 后需要重启 SIREN Server。

命令审计

run 收到有效的 client_idcommand 后,会在策略检查和客户端执行前写入 mcp.run.requested,并在结束时写入共享同一 audit_idmcp.run.finished。完成记录包含目标客户端、Project、outcome、耗时、命中的黑名单规则、错误,以及捕获字节数、完整性和结果过期时间;新客户端的完整输出通过结果读取工具获取,不重复写入日志,旧客户端仍记录其返回范围内的结果。策略拦截、目标拒绝、发送失败、取消、超时和远端执行失败也会产生完成记录。

这些记录进入普通服务端日志。可以在 WebUI Logs 中选择 mcp 组件,再搜索命令、结果、事件名、客户端 ID 或 audit_id;需要长期审计时,应由 systemd 或容器运行时留存服务端标准输出。

命令与结果属于敏感日志

审计记录保留完整命令、错误说明,以及旧客户端返回的结果,其中可能包含主机路径、进程参数、配置或凭据。Logs 是全局页面,任何已登录用户都能查看;请仅向获授权的内部操作员开放 WebUI,并按调查需要设置日志保留与访问控制。

相关内容

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 认证和项目数据。

On this page