cyanheads/devops-status-mcp-server

GitHub: cyanheads/devops-status-mcp-server

一个通过 MCP 协议提供供应商状态检查、SSL/TLS 证书与 DNS 传播诊断以及事件响应手册的 DevOps 运维工具服务器。

Stars: 1 | Forks: 1

@cyanheads/devops-status-mcp-server

通过 MCP 检查供应商状态页、检查 SSL/TLS 证书、验证 DNS 传播,并获取事件响应手册。支持 STDIO 或 Streamable HTTP。

7 个工具 • 1 个资源

[![Version](https://img.shields.io/badge/Version-0.5.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/devops-status-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/devops-status-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/devops-status-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.0-blueviolet.svg?style=flat-square)](https://bun.sh/)
[![在 Claude Desktop 中安装](https://img.shields.io/badge/Install_in-Claude_Desktop-D97757?style=for-the-badge&logo=anthropic&logoColor=white)](https://github.com/cyanheads/devops-status-mcp-server/releases/latest/download/devops-status-mcp-server.mcpb) [![在 Cursor 中安装](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=devops-status-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvZGV2b3BzLXN0YXR1cy1tY3Atc2VydmVyIl19) [![在 VS Code 中安装](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22devops-status-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fdevops-status-mcp-server%22%5D%7D) [![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-67E8F9?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)
**公共托管服务器:** [https://devops-status.caseyjhand.com/mcp](https://devops-status.caseyjhand.com/mcp)
## 工具 分为三个功能组的七个工具 — 供应商状态(涵盖 Atlassian Statuspage、Status.io、Slack、AWS Health 和 Firehydrant 后端的 50 个内置供应商,统一规范化为同一种格式,+ 原始 Statuspage URL 透传),纯 TypeScript 实现的证书/DNS 检查(任意域名),以及事件响应指南: | 工具 | 描述 | |:-----|:------------| | `devops_list_vendors` | 列出内置注册表中的供应商,可选择按名称或类别进行筛选。返回 slug、显示名称、类别和状态页 URL。 | | `devops_status_check` | 检查一个或多个供应商的当前健康状况。返回每个供应商的指示器(`none` / `minor` / `major` / `critical`)、降级的组件以及活跃的事件摘要。 | | `devops_get_incidents` | 获取供应商的事件历史记录 — 活跃、已解决或计划内的维护。返回完整的事件时间轴,包含每次更新的正文内容和受影响的组件。 | | `devops_watch_stack` | 检查保存在会话状态中的指定供应商堆栈的健康状况。传递一次 `vendors` 即可保存列表;后续调用会自动复用。返回汇总的健康状况报告以及各供应商的详细信息。 | | `devops_check_certs` | 通过真实的 TLS 握手检查一个或多个域名的 SSL/TLS 证书健康状况。报告过期时间、链深度、协议版本、加密套件以及是否存在 HSTS。纯 TypeScript 实现 — 无需外部 API。 | | `devops_check_dns` | 解析 DNS 记录并验证一个或多个域名在 Google (8.8.8.8)、Cloudflare (1.1.1.1) 和 Quad9 (9.9.9.9) 之间的传播情况。报告每个解析器的延迟和解析器之间的差异。纯 TypeScript 实现 — 无需外部 API。 | | `devops_suggest_action` | 指令工具 — 根据供应商名称和可选的事件上下文,返回定制的事件响应手册和预填充的后续工具调用。无需外部调用;完全确定性。 | ### `devops_list_vendors` 在运行状态检查或配置堆栈之前发现可用的供应商。 - 接受可选的自由文本 `query`(匹配名称和 slug,不区分大小写)以及可选的 `category` 筛选器 - 八个类别:`cloud`、`cdn-edge`、`dev-platform`、`data`、`comms`、`auth`、`monitoring`、`ai` - 返回 slug(用于传递给其他工具)、显示名称、类别和状态页 URL - 50 个内置条目 — 具有经验证的状态端点的知名公共供应商(大多数使用 Atlassian Statuspage;`aws`、`gitlab`、`neon`、`slack` 和 `redis-cloud` 通过原生 API 适配器提供服务) 内置供应商注册表: | 类别 | 供应商 | |:---------|:--------| | `cloud` | digitalocean, linode, aws | | `cdn-edge` | cloudflare, akamai | | `dev-platform` | gitlab, github, npm, vercel, netlify, render, fly-io, circleci, travis-ci, snyk, atlassian, figma, launchdarkly | | `data` | mongodb-atlas, planetscale, supabase, neon, redis-cloud, elastic, influxdb, upstash, cloudinary, segment | | `comms` | slack, discord, twilio, sendgrid, mailgun, hubspot, brevo, courier, loops | | `auth` | auth0, clerk, workos | | `monitoring` | datadog, sentry, new-relic, grafana-cloud, honeycomb | | `ai` | openai, anthropic, elevenlabs, pinecone, cohere | 大多数注册表条目都是 Atlassian Statuspage 端点;`aws` (AWS Health Dashboard)、`gitlab` / `neon` (Status.io)、`slack` (Slack 官方的 status API) 和 `redis-cloud` (Firehydrant) 通过适配器提供服务,将其规范化为相同的格式,因此所有工具对它们的操作方式完全相同。GCP 和 Azure 没有发布无需密钥的机器可读源,因此不在注册表中 — 但仍然可以通过传递原始的 base URL 来访问兼容 Statuspage 的页面。 ### `devops_status_check` 在一次调用中对一个或多个供应商进行批量健康快照。 - 接受已注册的供应商 slug(例如 `"github"`、`"aws"`)或原始的 Atlassian Statuspage base URL(例如 `"https://www.githubstatus.com"`)— 可自由混合使用 - `mode: "summary"`(默认):指示器 + 降级的组件 + 活跃事件 - `mode: "detailed"`:添加完整的组件列表和计划维护窗口 - `Promise.allSettled` 扇出 — 一个供应商失败不会阻塞其余供应商;错误会直接在结果中展示 - 结果由 60 秒内存缓存提供;每个结果上带有 `cached: true` 标志 ### `devops_get_incidents` 获取供应商的完整事件时间轴并支持筛选。 - `filter: "all"`(默认):事件以及计划维护 - `filter: "active"`:仅处于 `investigating` / `identified` / `monitoring` 状态的事件 - `filter: "resolved"`:仅完全解决的事件 - `filter: "scheduled"`:仅计划内的维护窗口 - 按时间顺序返回每次更新的正文内容、受影响的组件名称、持续时间(以分钟为单位,针对已解决的事件),以及指向事件页面的直接短链接 - 可配置的 `limit` (1–50);供应商状态 API 每次调用最多返回约 50 条近期记录 - AWS 仅公开当前开启的事件(无历史记录源) — 因此对于 `aws`,`filter: "resolved"` 和 `filter: "scheduled"` 始终为空 ### `devops_watch_stack` 用于周期性健康扫描的命名、持久化供应商堆栈。 - 在首次调用时,提供 `vendors` 以定义堆栈 — 它将被保存到 `stack_name` 下的租户会话状态中 - 后续调用可省略 `vendors`;系统将自动复用已保存的列表 - 通过不同的 `stack_name` 值(例如 `"production"`、`"data-layer"`)可以共存多个堆栈 - 汇总健康状况输出:`all_operational` / `degraded` / `partial_outage` / `major_outage` - 注意:堆栈状态存在于内存中;不会跨服务器重启持久化 ### `devops_check_certs` 直接进行 TLS 握手检查 — 无需外部 API。 - 接受纯主机名(不带 `https://` 前缀)— 每次调用最多 10 个 - 报告:距离过期的天数(< 30 天标记为 `warning`,< 7 天标记为 `critical`)、证书主体和 SANs、颁发者通用名称、链深度、协商的 TLS 版本(将 1.0 和 1.1 标记为不安全)、密码套件 - HSTS 检测:在同一 TLS socket 上发送最小的 HTTP/1.1 GET 请求,读取 `Strict-Transport-Security` 响应头 - 单个域名失败会在结果中直接报告(状态:`"error"`)而不是抛出异常 — 在检查多个域名时可提供有用的部分结果 - 可配置端口(默认 443)和单个域名超时时间 ### `devops_check_dns` 多解析器 DNS 传播检查 — 无需外部 API。 - 并行查询每个域名的 Google (8.8.8.8)、Cloudflare (1.1.1.1) 和 Quad9 (9.9.9.9) - 支持的记录类型:A、AAAA、CNAME、MX、TXT、NS(默认为 A、AAAA、MX、TXT) - 报告每个解析器的延迟、传播差异(解析器结果不一致的地方)以及易读的标志 - 支持自定义解析器列表 — 传递任意 IP 地址以测试内部 DNS 或解析器特定的行为 - 每次调用最多支持 10 个域名;可配置每个域名的超时时间 ### `devops_suggest_action` 确定性的事件响应指南,无需外部调用。 - 返回根据供应商类别量身定制的 Markdown 格式操作手册(CDN 宕机 vs. CI/CD 宕机 vs. 认证提供商宕机 vs. AI 服务宕机) - `nextToolSuggestions` 使用提供的上下文中的参数预填充 — 按顺序执行以收集诊断数据 - 可选的 `your_domain` 会自动填充证书和 DNS 检查的参数 - 可选的 `vendor_indicator` — 传递来自 `devops_status_check` 的 `indicator`,以针对严重程度定制的紧急指南(`none` / `minor` / `major` / `critical`)引导操作手册 - 对于无法识别的供应商,回退到通用指南 - 当 `DEVOPS_STATUS_DISABLE_ACTIVE_PROBES=true` 时,建议和操作手册文本会使用等效的手动命令(`dig`、`openssl s_client`)替换未注册的探测工具 ## 资源与提示 | 类型 | 名称 | 描述 | |:-----|:-----|:------------| | 资源 | `devops-status://vendors/{name}` | 根据 slug 获取供应商的完整注册表条目 — 状态页 URL、类别、API 类型。 | 所有资源数据也可以通过工具访问。完全支持仅使用工具的 Agent。 ## 功能 基于 [`@cyanheads/mcp-ts-core`](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) 构建: - 声明式工具和资源定义 — 每个基础组件对应单个文件,由框架处理注册和验证 - 统一的错误处理 — 处理程序抛出异常,框架捕获、分类并格式化 - 可插拔的身份验证:`none`、`jwt`、`oauth` - 可替换的存储后端:`in-memory`、`filesystem`、`Supabase`、`Cloudflare KV/R2/D1` - 结构化日志记录,支持可选的 OpenTelemetry 链路追踪 - STDIO 和 Streamable HTTP 传输 DevOps 状态专属功能: - **无需 API 密钥** — 每个状态后端都是公共 API;TLS 和 DNS 使用 Node.js 标准库(`node:tls`、`node:dns`) - 包含 50 个供应商的内置注册表,涵盖云、CD、开发平台、数据、通信、认证、监控和 AI 类别;适配器层将 Status.io、Slack、AWS Health 和 Firehydrant 后端统一规范化为 Statuspage 格式;可通过原始 Statuspage URL 透传进行扩展 - 所有租户共享对状态读取的 60 秒内存缓存 — 防止在批量调用时发生惊群效应 - `devops_watch_stack` 将命名的供应商列表持久化在租户范围的会话状态中,方便每日晨检或部署前扫描 - `devops_suggest_action` 确定性地调度特定类别的操作手册 — 不依赖 LLM 采样,适用于所有客户端 对 Agent 友好的输出: - 批量工具(`devops_status_check`、`devops_watch_stack`、`devops_check_certs`、`devops_check_dns`)使用 `Promise.allSettled` — 一个失败的目标绝不会阻塞其余目标;错误以行内 `error` 字段的形式呈现 - 每个状态结果上都包含 `cached: true` / `checked_at` — Agent 可以知道数据的获取时间 - 区分指示器和状态枚举(`none` / `minor` / `major` / `critical`;`operational` / `degraded_performance` / `partial_outage` / `major_outage` / `under_maintenance`) — 调用者基于数据进行逻辑分支,而不是解析字符串 - `devops_suggest_action` 中的 `nextToolSuggestions` 会根据事件上下文自动预填充工具参数 — Agent 可以机械地执行操作手册 ## 快速开始 ### 公共托管实例 公共实例可通过 `https://devops-status.caseyjhand.com/mcp` 访问 — 无需安装。通过 Streamable HTTP 将任何 MCP 客户端指向它: ``` { "mcpServers": { "devops-status-mcp-server": { "type": "streamable-http", "url": "https://devops-status.caseyjhand.com/mcp" } } } ``` ### 自托管 / 本地运行 无需 API 密钥。将以下内容添加到您的 MCP 客户端配置文件中: ``` { "mcpServers": { "devops-status-mcp-server": { "type": "stdio", "command": "bunx", "args": ["@cyanheads/devops-status-mcp-server@latest"], "env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" } } } } ``` 或使用 npx(无需 Bun): ``` { "mcpServers": { "devops-status-mcp-server": { "type": "stdio", "command": "npx", "args": ["-y", "@cyanheads/devops-status-mcp-server@latest"], "env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" } } } } ``` 或使用 Docker: ``` { "mcpServers": { "devops-status-mcp-server": { "type": "stdio", "command": "docker", "args": [ "run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/devops-status-mcp-server:latest" ] } } } ``` 对于 Streamable HTTP,请设置传输方式并启动服务器: ``` MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http # 服务器监听地址为 http://localhost:3010/mcp ``` ### 前置条件 - [Bun v1.3.0](https://bun.sh/) 或更高版本(或 Node.js v24+)。 - 无需 API 密钥或外部账户。 ### 安装说明 1. **克隆代码库:** ``` git clone https://github.com/cyanheads/devops-status-mcp-server.git ``` 2. **进入目录:** ``` cd devops-status-mcp-server ``` 3. **安装依赖:** ``` bun install ``` 4. **配置环境:** ``` cp .env.example .env # 如果你想覆盖默认设置,请编辑 .env ``` ## 配置说明 无需 API 密钥。所有环境变量都是可选的。 | 变量 | 描述 | 默认值 | |:---------|:------------|:--------| | `DEVOPS_STATUS_CACHE_TTL_MS` | 供应商状态读取(所有后端)的内存缓存 TTL,以毫秒为单位。 | `60000` | | `DEVOPS_STATUS_FETCH_TIMEOUT_MS` | 供应商状态 API 调用(所有后端)的每次请求超时时间,以毫秒为单位。 | `8000` | | `DEVOPS_STATUS_CERT_TIMEOUT_MS` | `devops_check_certs` 的默认 `timeout_ms`(针对单域名的 TLS 握手,以毫秒为单位)。调用者传入的 `timeout_ms` 将覆盖此设置。 | `5000` | | `DEVOPS_STATUS_DNS_TIMEOUT_MS` | `devops_check_dns` 的默认 `timeout_ms`(针对单域名+解析器的查询,以毫秒为单位)。调用者传入的 `timeout_ms` 将覆盖此设置。 | `3000` | | `DEVOPS_STATUS_ALLOW_PRIVATE_TARGETS` | 当为 `true` 时,禁用对用户提供的 URL 和域名的 SSRF 防护。仅适用于受信任的本地/内网部署。 | `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_AUTH_MODE` | 认证模式:`none`、`jwt` 或 `oauth`。 | `none` | | `MCP_LOG_LEVEL` | 日志级别 (RFC 5424)。 | `info` | | `LOGS_DIR` | 日志文件目录(仅限 Node.js)。 | `/logs` | | `OTEL_ENABLED` | 启用 [OpenTelemetry 监控](https://github.com/cyanheads/mcp-ts-core/tree/main/docs/telemetry)。 | `false` | 有关可选覆盖的完整列表,请参见 [`.env.example`](./.env.example)。 ## 运行服务器 ### 本地开发 - **构建并运行:** bun run rebuild bun run start:stdio # 或者 bun run start:http - **运行检查和测试:** bun run devcheck # Lint、格式化、类型检查、安全检查 bun run test # Vitest 测试套件 bun run lint:mcp # 根据规范验证 MCP 定义 ### Docker ``` docker build -t devops-status-mcp-server . docker run --rm -p 3010:3010 devops-status-mcp-server ``` Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志输出到 `/var/log/devops-status-mcp-server`。默认会安装 OpenTelemetry 对等依赖 — 在构建时使用 `--build-arg OTEL_ENABLED=false` 可省略它们。 ## 项目结构 | 路径 | 用途 | |:-----|:--------| | `src/index.ts` | `createApp()` 入口点 — 注册工具、资源并初始化服务。 | | `src/config/` | 使用 Zod 进行服务器特定的环境变量解析和验证。 | | `src/mcp-server/tools/` | 工具定义 (`*.tool.ts`)。 | | `src/mcp-server/resources/` | 资源定义 (`*.resource.ts`)。 | | `src/services/cert/` | `node:tls` — TLS 握手、X.509 解析、过期时间和协议标志。 | | `src/services/dns/` | `node:dns` — 多解析器 DNS 扇出、传播差异检测。 | | `src/services/statuspage/` | 带有 60 秒内存缓存的 Statuspage 公共 API 客户端。 | | `src/services/status-adapters/` | 原生 API 适配器 (Status.io, Slack, AWS Health, Firehydrant) + `api_type` 调度,统一规范化为 Statuspage 格式。 | | `src/services/vendor-registry/` | 从 `src/data/vendor-registry.ts` 加载的内存供应商注册表。 | | `src/data/` | 静态供应商注册表数据文件 (`vendor-registry.ts`)。 | | `tests/` | 映射 `src/` 结构的 Vitest 测试。 | ## 开发指南 有关开发指南和架构规则,请参见 [`CLAUDE.md`](./CLAUDE.md)。简短版本如下: - 处理程序抛出异常,框架捕获 — 工具逻辑中无需 `try/catch` - 使用 `ctx.log` 进行请求范围的日志记录,使用 `ctx.state` 进行租户范围的存储 - 通过 `src/mcp-server/*/definitions/index.ts` 中的 barrel 文件注册新工具和资源 - `devops_check_certs` 和 `devops_check_dns` 仅使用 Node.js 标准库 — 不要为这些代码路径添加外部依赖项 ## 贡献 欢迎提交 Issue 和 pull request。在提交之前请运行检查和测试: ``` bun run devcheck bun run test ``` ## 许可证 Apache-2.0 — 详见 [LICENSE](LICENSE)。
标签:DNS检查, MCP, MITM代理, SSL/TLS, TypeScript, 安全插件, 库, 应急响应, 暗色界面, 状态监控, 自动化攻击, 请求拦截, 运维