@cyanheads / devops-status-mcp-server
检查供应商状态页面,检查SSL/TLS证书,验证DNS传播,并通过MCP获得事件响应剧本。STDIO或可流HTTP。
概述
71家供应商的状态页面——AWS、谷歌Cloud、Azure、Slack等等——采用一种标准化格式。检查一下谁倒下了,调出事故时间线,注意你的堆栈,拿到事故应对手册。加上TLS证书和DNS检查任何域。不需要API密钥。
工具
| 工具 | 描述 |
|---|---|
devops_list_vendors | 列出内置注册表中的供应商,可根据名称或类别进行筛选。返回标记、显示名称、类别和状态页URL。 |
devops_status_check | 检查一个或多个供应商的当前运行状况。返回每个供应商指示符(none / minor / major / critical / maintenance)、降级组件和活动事件摘要。 |
devops_get_incidents | 获取供应商的事件历史记录——活动维护、已解决维护或计划维护。返回包含每次更新主体和受影响组件的完整事件时间轴。 |
devops_watch_stack | 检查指定供应商堆栈的运行状况。服务器在哪里识别调用者(stdio或HTTP) jwt/oauth 身份验证),通过 vendors 一次保存列表,以后调用重用它;在HTTP上 MCP_AUTH_MODE=none 没有什么是被保存的 vendors 每次通话都需要。返回总体运行状况汇总和每个供应商的详细信息。 |
devops_check_certs | 通过真正的TLS握手检查一个或多个域的SSL/TLS证书运行状况。报告HTTP端口上的过期、链深度、协议版本、密码套件和HSTS存在。纯TypeScript——没有外部API。 |
devops_check_dns | 解析DNS记录,并验证谷歌(8.8.8.8)、Cloudflare(1.1.1.1)和Quad9(9.9.9.9)之间一个或多个域的传播。报告每个解析器延迟和解析器差异。纯TypeScript——没有外部API。 |
devops_suggest_action | 指令工具—返回定制的事件响应剧本和预先填充的后续工具调用,并给出供应商名称和可选的事件上下文。没有外部电话;完全确定的。 |
资源
| 资源 | 描述 |
|---|---|
devops-status://vendors/{name} | 根据标签状态页URL、类别和API类型,供应商的完整注册表项。 |
所有资源数据也可以通过工具访问。完全支持纯工具代理。
能力的参考
devops_list_vendors 工具
- 可选的自由文本
query(名称和符号,不区分大小写)和可选category:cloud,cdn-edge,dev-platform,data,comms,auth,monitoring,ai - 返回标识符(传递给其他工具的内容)、显示名称、类别和状态页URL;空结果携带a
notice说出错过了什么 - 71个内置条目,大部分在Atlassian Statuspage上;
aws,gcp,azure,azure-devops,gitlab,neon,slack,redis-cloud,以及九个Datadog网站条目(datadogUS1,datadog-us3,datadog-us5,datadog-eu1,datadog-uk1,datadog-ap1,datadog-ap2,datadog-us1-fed,datadog-us2-fed)使用本机api适配器。注册表中没有与statuspage兼容的页面通过将原始基本URL传递给其他工具来工作 - 这些Atlassian产品有自己的入口(
jira,confluence,bitbucket,jira-service-management,atlassian-compass,atlassian-developer,trello,opsgenie,atlassian-statuspage,atlassian-guard)。atlassian读取伞形页面,该页面不发布组件,只发布跨产品事件;任何提供它的工具都是这样写的notice并给这些鼻涕虫命名
内置供应商注册表:
| 类别 | 供应商 |
|---|---|
cloud | Digitalocean, linode, aws, gcp, azure |
cdn-edge | cloudflare, akamai |
dev-platform | Gitlab、github、azure-devops、npm、vercel、netlify、render、fly-io、cireci、travis-ci、snyk、atlassian、jira、confluence、bitbucket、jira-service-management、atlassian-compass、atlassian-developer、trello、figma、launchdarkly |
data | Mongodb-atlas, planetscale, supabase, neon, reddiscloud, elastic, influxdb, upstash, cloudinary, segment |
comms | Slack, discord, twilio, sendgrid, mailgun, hubspot, brevo, courier, loops |
auth | Auth0,职员,工人,地图集守卫 |
monitoring | Datadog、Datadog -us3、Datadog -us5、Datadog -eu1、Datadog -uk1、Datadog -ap1、Datadog -ap2、Datadog -us1-fed、Datadog -us2-fed、sentry、new-relic、grafna -cloud、honeycomb、opsgenie、atlassian-statuspage |
ai | Openai, anthropic, elevenlabs,松果,粘在一起 |
devops_status_check 工具
- 接受供应商文件(例如:
github,aws)或原始的Atlassian Statuspage基础url,自由混合。每次呼叫最多可检查20个;剩下的人回来了deferred_vendors与一个notice重新发送。超过100个参赛作品已被拒绝(invalid_arguments) mode: "summary"(默认)返回指示器、降级组件和活动事件;mode: "detailed"添加完整的组件列表(component_limit(默认为50,固定为500)和定期维护窗口。component_filter匹配组件或组名称- 一个长于
component_limit页面:每个封顶供应商返回next_component_offset,你把它作为component_offset(应用后component_filter)。degraded_components和active_incidents每一页都是完整的吗 - 一个失败的供应商永远不会阻止其他供应商(每个供应商)
error字段)。结果缓存60秒(cached: true),summary计数operational/degraded/down/maintenance/unavailable indicator是供应商自己的评级,而Statuspage页面可以将其保持在none而一个事件它评级minor或者更糟的是开放。summary把每个供应商算在两者中最差的;事件的评价none或者maintenance而预定的Windows操作系统永远不会被算作宕机nextToolSuggestions预填充一个devops_suggest_action打电话给每个有问题的供应商-供应商计数degraded或者down
devops_get_incidents 工具
filter:all(默认),active,resolved,或者scheduled(仅限维护窗口)。limit(默认20,最大50)offset对于分页- 按时间顺序返回每个更新主体的纯文本、受影响的组件名称、已解决事件的持续时间(以分钟为单位)和短链接。谷歌云和AWS事件也会发生
affected_locations(区域ID、名称,以及它是否仍然受到影响;在AWS上,一个区域的事件名称,或global). 每个事件都承载着source:api,或者history对于归档记录(仅限标题、影响、时间和最终消息) since和until(YYYY-MM-DD(UTC)绑定开始日期并使用filter: "all"或者"resolved";since还可以读取Statuspage历史档案,最长可达24个月,超过API的最新west-50限制;一个达到这个极限的电话since被告知设置它。match保存标题、组件名称或(在谷歌云和AWS上)位置名称和id包含给定的每个空格分隔术语的事件(最多200个字符);用标点符号连接的术语,如eu-central-1,必须找到它的文字,并在其中一个顺序- 每个表面的响应上限为64,000字节;剪页套装
truncated: true和nextOffset.full_updates: true保持对单个超大事件的每一次更新 - 错误:
invalid_since和invalid_until(filter: "active"或者"scheduled",或者until之前since) - 过滤器中没有数据的feed返回空:
resolvedAzure,scheduled适用于AWS、Azure、Azure DevOps、谷歌Cloud和Slack。历史记录很短,供应商不读取存档:AWS将已解决的事件保存几个小时,而状态则保存几个小时。io (gitlab,neon)只列出当前的事件。在那些饲料上since比返回的最老记录早,或早until没有since,得到一个。notice命名提要开始的日期
devops_watch_stack 工具
- 通过
vendors(最多20个)一次保存堆栈下stack_name(1-64个字符;多个堆栈可以共存,例如:"production"); 以后的调用可以省略vendors. 超过20被拒绝stack_too_large. 保存工作在工作室和HTTP与MCP_AUTH_MODE=jwt|oauth;使用默认值in-memory存储,已保存的堆栈在重新启动后无法存活 - 在HTTP上
MCP_AUTH_MODE=none没有什么是保存的:一个电话与vendors运行扫描并返回stack_persisted: false和一个没有的电话vendors失败与vendors_required - 总
health:all_operational/maintenance/degraded/partial_outage/major_outage/unknown(无法联系到供应商),从相同的每个供应商评级中滚动summary.component_limit和nextToolSuggestions工作就像devops_status_check;没有component_offset,所以一个封顶的供应商next_component_offset仍在继续devops_status_check
devops_check_certs 工具
- 接受主机名,IP地址,
host:port,或url;条目上的端口将被覆盖port443(默认)。检查前10个参赛作品(最多可接受100个);剩下的人回来了deferred_domains,重新发送 - 报告截止日期(
warning在30天内,critical7),主题和san,颁发者,链深度,TLS版本(1.0和1.1标记不安全),密码套件和HTTP端口上的HSTS status: "critical"分隔主机名不匹配(hostname_verification_error)从不受信任的链(authorization_error). 每个域的失败返回为status: "error"有理由errortimeout_ms每个域名有一个截止日期(最多15000个)
devops_check_dns 工具
- 接受域名、url或
host:port;查询前10个域(最多可接受100个),然后返回其余域deferred_domains. IP地址有自己的地址error行 - 对A、AAAA、CNAME、MX、TXT、NS、CAA、SOA(默认为A、AAAA、MX、TXT)并行查询谷歌(8.8.8.8)、Cloudflare(1.1.1.1)、Quad9 (9.9.9.9)
- 报告每个解析器延迟和类型差异:
partial_resolution(一些解决方案没有回答)是一个真正的问题;value_variation(不同的值)对于任意cast或地理导向域是正常的 - 自定义
resolvers获取公共IP字面量,查询前5个,其余的在deferred_resolvers;需要私有地址和环回地址DEVOPS_STATUS_ALLOW_PRIVATE_TARGETS=true.timeout_ms适用于每个域和解析器(最多10000)
devops_suggest_action 工具
- 接受供应商名称或显示名称,并返回针对类别定制的降价剧本,并为未识别的供应商提供通用指导
- 可选
incident_summary,affected_components,vendor_indicator添加子系统部分和基于严重性的紧急性 nextToolSuggestions预填充后续呼叫,包括证书和DNS检查时your_domain给出。与DEVOPS_STATUS_DISABLE_ACTIVE_PROBES=true,引导使用手动命令(dig,openssl s_client)而不是
devops-status://vendors/{name} 资源
- 返回供应商段的完整注册表项:状态页URL、类别、API类型(
statuspage,statusio,slack,aws,gcp,azure,azure-devops,firehydrant,datadog),component_scope_prefix如供应商提供部分共享网页(sendgrid),product_slugs在不发布组件的伞形页面(atlassian) - 公开缓存1小时;同样的数据可以通过
devops_list_vendors
功能
建立在 @cyanheads/mcp-ts-core:工作室和流的HTTP传输,可插拔的授权(none / jwt / oauth)、可交换存储(in-memory, filesystem, Supabase, Cloudflare KV/R2/D1),具有可选OpenTelemetry跟踪的结构化日志记录。
DevOps-status-specific:
- 不需要API密钥 每个状态后端都是一个公共API;TLS和DNS使用Node.js标准库
- 71个供应商内置注册表跨八个类别;本机适配器normalize Status。io、Slack、AWS Health、谷歌Cloud、Azure、Azure DevOps、Firehydrant和Datadog放到Statuspage形状中
- 供应商编写的文本被转义,因此它被读取为数据,而不是标记;DNS记录值和证书名称呈现为代码跨度,其回读方式与解析后的完全相同
- 状态读取时的60秒内存缓存,在租户之间共享
devops_watch_stack保存命名的供应商列表,以便重复检查和预部署扫描devops_suggest_action是确定性的,没有LLM采样依赖
代理技能:
devops-status-guide介绍了如何将这些工具一起使用:状态读取可以建立什么,不能建立什么,事件历史在每个后端上到达多远,区域位于何处,以及如何诊断DNS更改或证书故障。MCP客户端从服务器读取它作为skill://devops-status-guide/SKILL.md;它还包含在npm包、Docker镜像和.mcpb包和插件安装扫描它从skills/.
Agent-friendly输出:
- 批处理工具永远不会让一个失败的目标阻碍其他目标;错误将作为内联返回
error字段 checked_at每个状态的结果都是检查的时间;cached: true标记从缓存中读取服务的状态,该状态可以达到缓存TTL(默认为60秒)- 固定的指示器和状态枚举(
none/minor/major/critical/maintenance)让调用者在数据上进行分支 nextToolSuggestions预填充来自事件上下文的后续工具参数
开始
连接到托管实例,不安装:
claude mcp add --transport http devops-status-mcp-server https://devops-status.caseyjhand.com/mcp
或者在本地运行:
claude mcp add devops-status-mcp-server -- npx -y @cyanheads/devops-status-mcp-server
对于其他客户端,请将此添加到MCP配置文件中:
{
"mcpServers": {
"devops-status-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/devops-status-mcp-server"]
}
}
}
不需要API密钥。有关Docker或源代码构建,请参见 运行服务器.
配置
不需要API密钥。所有环境变量都是可选的。
| 变量 | 描述 | 默认的 |
|---|---|---|
DEVOPS_STATUS_CACHE_TTL_MS | 以毫秒为单位读取供应商状态(所有后端)的内存缓存TTL。 | 60000 |
DEVOPS_STATUS_FETCH_TIMEOUT_MS | 供应商状态API调用(所有后端)的每个请求超时(以毫秒为单位)。 | 8000 |
DEVOPS_STATUS_CERT_TIMEOUT_MS | 默认的 timeout_ms 用于 devops_check_certs (1000 - 15000)。 | 5000 |
DEVOPS_STATUS_DNS_TIMEOUT_MS | 默认的 timeout_ms 用于 devops_check_dns (1000 - 10000)。 | 3000 |
DEVOPS_STATUS_ALLOW_PRIVATE_TARGETS | 当 true在用户提供的状态页url上禁用SSRF保护; devops_check_certs 主机, devops_check_dns 解析器IPs。仅受信任的本地部署。 | false |
DEVOPS_STATUS_DISABLE_ACTIVE_PROBES | 当 true,删除 devops_check_dns 和 devops_check_certs. 用于共享的公共实例。 | false |
MCP_TRANSPORT_TYPE | 交通: stdio 或者 http. | stdio |
MCP_HTTP_PORT | HTTP服务器端口号。 | 3010 |
MCP_SESSION_MODE | HTTP会话处理: stateless, stateful,或者 auto. | stateless |
MCP_AUTH_MODE | 身份验证模式: none, jwt,或者 oauth. | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424)。 | info |
LOGS_DIR | 日志文件目录(仅限Node.js)。 | <project-root>/logs |
OTEL_ENABLED | 启用 OpenTelemetry仪器. | false |
一个无效的 DEVOPS_STATUS_* 值在命名变量时出现错误,从而停止启动。
看到 .env.example 获取可选覆盖的完整列表。
运行服务器
地方发展
需要 包子v1.4.0 或更高版本(或Node.js v24+)。
-
克隆并安装:
git clone https://github.com/cyanheads/devops-status-mcp-server.git cd devops-status-mcp-server && bun install cp .env.example .env # optional overrides -
构建和运行:
bun run rebuild bun run start:stdio # or bun run start:http -
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
码头工人
docker run --rm -p 3010:3010 ghcr.io/cyanheads/devops-status-mcp-server:latest
镜像默认为HTTP传输,无状态会话模式,并记录为 /var/log/devops-status-mcp-server. 要从MCP客户端在演播室上运行它,使用 "command": "docker" 与 "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/devops-status-mcp-server:latest"]. 为了在当地建设, docker build -t devops-status-mcp-server .;默认情况下安装OpenTelemetry对等依赖 --build-arg OTEL_ENABLED=false 省略它们。
项目结构
| 路径 | 目的 |
|---|---|
src/index.ts | createApp() 入口点-注册工具,资源,并启动服务。 |
src/config/ | 特定于服务器的环境变量解析和验证。 |
src/mcp-server/tools/ | 工具定义(*.tool.ts)。 |
src/mcp-server/resources/ | 资源定义(*.resource.ts)。 |
src/services/cert/ | node:tls -TLS握手,X.509解析,过期和协议标记,遗留TLS重试,HSTS读取。 |
src/services/dns/ | DNS连接客户端(node:dgram / node:net):消息编码和边界检查解码,UDP与TCP重试;多解析器扇出和传播差异检测。 |
src/services/statuspage/ | Statuspage公共API客户端(读取)中的共享缓存 src/utils/cached-fetch.ts)。 |
src/services/status-adapters/ | 本机api适配器(状态。io、Slack、AWS健康、谷歌云服务健康、Azure状态、Azure DevOps状态、消防栓、Datadog)、共享RSS提取器、+ api_type 调度,规范化为Statuspage形状。 |
src/services/vendor-registry/ | 从内存中加载的供应商注册表 src/data/vendor-registry.ts. |
src/data/ | 静态厂商注册表数据文件(vendor-registry.ts)。 |
src/utils/ | 共享的帮助程序——响应缓存和获取、SSRF保护、域入口规范化、html到文本、供应商文本标记转义、DNS和证书值的代码范围呈现、输入绑定通知、单词匹配。 |
skills/ | 发布座席技能(devops-status-guide),通过MCP提供,并在npm包、Docker镜像和 .mcpb 包。 |
tests/ | 最测试镜像 src/. |
开发指南
看到 CLAUDE.md 开发指南和架构规则。简而言之:
- 处理程序抛出,框架捕获——没有
try/catch在工具逻辑中 - 使用
ctx.log对于请求范围的日志记录,ctx.state用于租户范围的存储 - 通过桶注册新的工具和资源
src/mcp-server/*/definitions/index.ts devops_check_certs和devops_check_dns只使用Node.js stdlib -不要为这些路径添加外部深度
贡献
问题是受欢迎的。在提交之前运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0 -参见 许可证 获取详细信息。