关于 AlertOps
AlertOps 是一个只读 MCP 服务,将 AlertOps 事件告警与值班 API 提供给 AI 助手和 WYRE Conduit。其工具仅覆盖 11 项 GET 操作,不会调用创建或修改告警的接口。
主要功能
- 01按状态、日期等筛选分页告警
- 02查询用户及联系方式
- 03列出群组、主题和集成
- 04查询当前值班人员
- 05查询用户或群组值班日程
- 06仅实现 GET 读取操作
适用场景
- 01查看告警并按条件筛选
- 02核对用户联系方式及所属群组
- 03确认当前值班人员
- 04检查指定日期范围的值班安排
MCP 相关
MCP 服务向客户端提供 AlertOps API 的 11 个只读 GET 操作,涵盖告警、用户、群组、主题、集成和排班;不提供写入工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e ALERTOPS_API_KEY -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/alertops-mcp:v1.0.2ALERTOPS_API_KEY密钥AlertOps API key, sent as the `APIKey` query parameter on every REST call. Generate one under Account Settings -> Configurations -> Integrations -> API.MCP_TRANSPORTTransport mode for the server. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.AUTH_MODE密钥Credential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.LOG_LEVELLog verbosity: debug, info, warn, error本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/wyre-ai/alertops-mcp:v1.0.2stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
AlertOps MCP 服务
面向 AI 助手和 WYRE Conduit 网关的 AlertOps 事件告警/值班 API MCP 服务,涵盖告警、消息主题、用户及其联系方式、群组、已配置的入站集成和 on-call 排班。
身份验证
AlertOps 的 REST API(https://api.alertops.com/api/...,对应其发布于 api.alertops.com/swagger/v1/swagger.json 的 OpenAPI 规范)使用静态的账户级 API 密钥进行身份验证。该密钥在 Account Settings -> Configurations -> Integrations -> API 下生成。与大多数 WYRE Conduit sidecar 不同,该密钥不会作为 bearer token 或自定义身份验证标头发送;AlertOps 要求将其作为 APIKey 查询字符串参数附加到每个请求中,GET 和 POST 请求均如此(已于 2026-09-20 实时验证:无效密钥会在此连接器调用的每个端点上返回干净的 {"reason":"Invalid API Key"} HTTP 401)。此连接器通过自定义标头按请求接收密钥(绝不使用 OAuth,与其他所有静态密钥 WYRE Conduit sidecar 的形式相同),并在调用 AlertOps API 时自行附加 ?APIKey=<key>。在网关模式下,密钥通过 X-AlertOps-Api-Key 标头按请求传入;在本地/stdio 模式下,则从 ALERTOPS_API_KEY 读取一次。HTTP /mcp 还需要 X-Gateway-S2S 签名(见下文的 HTTP 身份验证)。如果没有有效的 CONDUIT_S2S_SECRET,HTTP 服务将拒绝启动。
以下是两个彼此独立、置信程度刻意不同的说法——不要将它们合并成一句笼统的“只读”声明:
- 结构上已验证(直接检查过,可完全确认): 此连接器自身的代码不会调用任何会写入/修改 AlertOps 数据的端点。
client.ts中的每个函数都调用下方工具列表中列出的 11 个已文档化 GET 操作之一;src/中不存在任何POST调用。 - 厂商文档有所说明,但未经独立验证(刻意保留限定): AlertOps 提供基于角色的访问控制,内置角色和自定义角色均由可单独授予的只读权限组成(例如
Messages_View_GlobalAccess、User_View_GlobalAccess、Groups_View_GlobalAccess)。AlertOps 自己的文档称,以这种方式构建的自定义角色允许用户“浏览事件、报告、用户和群组,但不能创建、修改或删除任何内容”(help.alertops.com,Role Based Access Control)。AlertOps 的其他文档将一种独立的 User API Key(显示在用户自己的 Profile 页面上)描述为受UserAPIKey_Add权限控制,这意味着通过这种方式签发的 API 密钥会继承签发用户的角色/权限。WYRE 尚未测试这些权限是否真的会在服务端针对本连接器使用的APIKey查询参数及其写入端点生效——也就是说,AlertOps 后端是否会拒绝使用只读权限用户的密钥发出的写入调用(创建告警、关闭告警、分配等),还是此类限制仅会在 AlertOps 自身的 UI 中体现。 没有人使用有效密钥发出写入调用进行检查,这是正确的做法:这样做可能会向真实的值班人员发送实际的页面通知/提醒,不应在未经同意的情况下执行。不要认为此连接器或本 README 已证明以只读权限配置的 AlertOps API 密钥在技术上无法执行写入操作——我们只能确认此连接器自身的代码从不尝试写入,并且 AlertOps 的文档所述角色系统支持以这种方式配置密钥。
配置
复制 .env.example。将该文件中的 CONDUIT_S2S_SECRET 留空。
| 环境变量 | 描述 |
|---|---|
ALERTOPS_API_KEY | 在 Account Settings -> Configurations -> Integrations -> API 下签发的 API 密钥。stdio 和 AUTH_MODE=env 时的 HTTP 均使用此密钥。 |
MCP_TRANSPORT | stdio(默认)或 http。 |
AUTH_MODE | env(本地默认值;读取 ALERTOPS_API_KEY)或 gateway(Docker 镜像和 Compose 默认值)。Gateway 模式要求每个 /mcp 请求都携带 X-AlertOps-Api-Key。 |
CONDUIT_S2S_SECRET | 启动 HTTP 传输所必需。空值和已知占位值(changeme、replace-with-a-real-secret、your-s2s-secret 等)都会被拒绝:进程会记录错误并以非零状态退出。此值绝不会被记录到日志中。未设置此值时,Compose 不会启动。 |
MCP_ALLOW_INSECURE_DEV | 仅用于本地开发,设为 1 可在 CONDUIT_S2S_SECRET 为空时启动 HTTP。程序会记录警告、跳过 X-Gateway-S2S 检查,并且只监听 127.0.0.1。在此模式下,非环回地址的 MCP_HTTP_HOST 会被忽略。已知占位密钥仍会被拒绝。 |
MCP_HTTP_HOST | HTTP 绑定地址。未设置时默认为 127.0.0.1。设置了 CONDUIT_S2S_SECRET 时,会遵循此值(容器镜像设为 0.0.0.0)。 |
MCP_HTTP_PORT | HTTP 端口。默认为 8080。 |
LOG_LEVEL | debug | info(默认)| warn | error。 |
/health 不需要身份验证,也不会读取凭据。stdio 传输不使用 CONDUIT_S2S_SECRET。
HTTP 身份验证
设置了 MCP_TRANSPORT=http 和 CONDUIT_S2S_SECRET 时,每个 /mcp 请求都必须包含 X-Gateway-S2S。其值为:
t=<unix seconds>,v1=<hex hmac-sha256>
v1 是对 ASCII 消息 t=<unix seconds>(与标头中出现的 t= 前缀相同)进行 HMAC-SHA256 运算的结果,以 CONDUIT_S2S_SECRET 为密钥,并编码为 64 个小写十六进制字符。缺少标头或标头无效时,会返回 401。密钥绝不会被记录到日志中。
在 AUTH_MODE=gateway 模式下,/mcp 还要求 X-AlertOps-Api-Key。缺少此标头的请求会返回 401。Gateway 模式会将此标头作为该请求唯一的 AlertOps 凭据。
请求限制
- HTTP 请求正文上限为 256 KiB(262144 字节)。
X-Gateway-S2S检查通过后,如果Content-Length超过上限,会返回带有 JSON-RPC 错误的 413;没有Content-Length的正文则由 MCP SDK 传输限制大小。未经身份验证的请求仍会优先收到 401。 tools/call参数上限为 10,000 个元素(包括任意深度的每个数组项和对象键)。超出上限的输入会返回isError工具结果,且绝不会被分派。
这些限制用于应对 CVE-2026-111768 / GHSA-46jr-4wx8-v453(验证期间的内存耗尽)和 GHSA-f897-62hf-6gxq(缺少请求正文 / 批次上限)。
工具
11 个只读工具,每个对应 AlertOps 已发布 REST API 规范中的一个 GET 操作(总计 25 个操作;其余 14 个为 POST / 写入操作,特意排除在外——请参阅下文的范围)。
告警
alertops_list_alerts- 列出告警,可按状态 / 日期范围 / 组 / 集成 / 升级筛选,并支持分页。alertops_get_alert_id_by_inbound_message_id- 查询入站集成的 messageID 所映射到的 AlertID。alertops_get_alert_id_by_unique_inbound_id- 查询入站集成的 uniqueInboundID 所映射到的 AlertID。
用户
alertops_list_users- 列出用户(用户名、全名、用户类型)。alertops_get_user_contact_methods- 列出用户配置的联系方式(电子邮件、电话 / SMS)。包含联系人个人身份信息(PII)。
组
alertops_list_groups- 列出组(组 ID -> 组名)。
主题
alertops_list_topics- 列出用于告警路由 / 升级的消息主题。
集成
alertops_list_integrations- 列出已配置的入站集成(集成规则 ID -> 集成类型)。
排班
alertops_get_oncall_now- 列出当前值班人员,可查看所有组或指定组。alertops_get_user_schedule- 查询用户在指定日期范围内的值班安排(最长 3 个月)。alertops_get_group_schedule- 查询组在指定日期范围内的值班安排(最长 3 个月)。
范围
这是一个刻意限定范围、只读的 v1 接口,仅涵盖 AlertOps 已记录的 25 项操作中的 11 项。 AlertOps 是一个实时事件呼叫系统——所有排除的操作要么会更改状态,要么会向真人触发实际呼叫/通知,因此这里都不会实现。这是有意为之,并非疏忽:
明确排除(创建或更改实时告警——可能会呼叫真人)——绝不实现:
POST /api/alert/Create(Alert_Create) - 创建新告警,并向其接收者发送呼叫/通知。POST /api/alert/Close(Alert_Close) - 关闭实时告警。POST /api/alert/Update(Alert_Update) - 更新实时告警中的某个字段。POST /api/alert/Assign(Alert_Assign) - 将用户分配给告警。POST /api/alert/Note(Alert_Note) - 向告警添加备注。POST /api/alert/AddRecipients(Alert_AddRecipients) - 向告警添加接收者,即呼叫更多人员。POST /api/alert/Reply(Alert_Reply) - 回复告警。
明确排除(配置/更改——用户、组、排班、集成)——绝不实现:
POST /api/user/CreateUser(User_CreateUser) - 创建新用户。POST /api/user/CreateOutOfOffice(User_CreateOutOfOffice) - 创建外出记录,这会改变被呼叫的人员。POST /api/group/CreateGroup(Group_CreateGroup) - 创建新组。POST /api/group/AddGroupMember(Group_AddGroupMember) - 向组添加成员,这会改变被呼叫的人员。POST /api/schedule/CreateFixedSchedule(Schedule_CreateFixedSchedule) - 创建固定值班排班。POST /api/schedule/CreateRecurringSchedule(Schedule_CreateRecurringSchedule) - 创建循环值班排班。POST /api/integration/CreateMaintenanceWindows(Integration_CreateMaintenanceWindows) - 创建维护时段,以抑制告警。
如有需求,可在经过审慎的范围决策后将这些操作作为后续功能添加,而不是默认加入。
开发
npm install
npm run build
npm test
npm run lint # tsc --noEmit
Docker
镜像在容器内监听 0.0.0.0(MCP_HTTP_HOST),并默认使用 AUTH_MODE=gateway。请将端口发布到回环地址,并传入生成的 S2S 密钥。启动时会拒绝空的 CONDUIT_S2S_SECRET 和已知占位值(your-s2s-secret、changeme 等),因此以下每条命令都会使用 openssl rand -hex 32 创建一个值,而不是直接写入密钥。在 gateway 模式下,每个请求都会通过 X-AlertOps-Api-Key 传入 AlertOps API 密钥。
docker build -t alertops-mcp .
docker run \
-e CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" \
-p 127.0.0.1:8080:8080 \
alertops-mcp
如果未设置 CONDUIT_S2S_SECRET,Compose 将拒绝启动。Compose 服务使用 gateway 模式,不设置 ALERTOPS_API_KEY,并发布 127.0.0.1:8080:8080。如果 gateway 必须使用与容器接收值相同的密钥对请求签名,请导出一个密钥:
export CONDUIT_S2S_SECRET="$(openssl rand -hex 32)"
docker compose up
单租户 HTTP(AUTH_MODE=env)仍需要 S2S 密钥,然后使用环境中的 ALERTOPS_API_KEY。运行命令前,请导出该密钥。
docker run \
-e CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" \
-e AUTH_MODE=env \
-e ALERTOPS_API_KEY \
-p 127.0.0.1:8080:8080 \
alertops-mcp
不带密钥的本地 HTTP 仅用于开发。即使 MCP_HTTP_HOST 为 0.0.0.0,它仍会绑定到 127.0.0.1,并记录一条警告:
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm run start:http
许可证
Apache-2.0
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。