关于 Health Monitor
Health Monitor 是用于跟踪 MCP 服务、CI 流水线和 HTTP 端点的 TypeScript MCP 服务。它在 SQLite 中保存有界检查证据,并整合健康历史、断言、告警和跨平台报告。
主要功能
- 01通过 HTTP、SSE 或显式启用的 stdio 监测 MCP 服务
- 02检查 GitHub Actions 与 GitLab 流水线
- 03断言 HTTP 响应并检查 TLS 到期时间
- 04在 SQLite 中保存有界健康历史
- 05配置告警与 Webhook 通知
- 06生成仪表板和报告
适用场景
- 01跟踪 MCP 服务的正常运行时间与延迟
- 02检查 CI 失败任务和流水线记录
- 03验证端点响应与证书到期时间
- 04查看跨平台健康报告和告警
MCP 相关
它作为 MCP 服务提供注册和检查 MCP 目标、CI 流水线、HTTP 端点及 Webhook 的工具,并可查询历史、告警、仪表板和报告。支持 stdio 与 Streamable HTTP。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y health-monitor-mcpHEALTH_MONITOR_DBCustom path for the SQLite databaseHEALTH_MONITOR_AUTO_CHECKSet to '1' to enable background scheduled checksHEALTH_MONITOR_RETENTION_DAYSNumber of days to retain health check historyHEALTH_MONITOR_MAX_CONCURRENCYMaximum concurrent scheduled and interactive server checksGITHUB_TOKEN密钥Optional GitHub token with Actions read access for private repositories and higher API rate limitsGITLAB_TOKEN密钥Optional GitLab token with read access to private projects, pipelines, jobs, and tracesHEALTH_MONITOR_GITLAB_BASE_URL_ALLOWLISTComma-separated self-hosted GitLab HTTPS origins allowed for monitoringHEALTH_MONITOR_HTTP_TARGET_ALLOWLISTComma-separated private HTTP(S) origins allowed only in the full runtime profile本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
22收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 此 GitHub Actions 目标的唯一本地名称 |
| tags | array | 否 | 用于分组的标签 |
| owner | string | 是 | GitHub 用户或组织 |
| branch | string | 否 | 工作流运行的可选分支筛选条件 |
| workflow | string | 是 | 工作流数字 ID 或 .yml/.yaml 文件名 |
| token_env | string | 否 | 包含 GitHub 令牌的环境变量;令牌值不会被持久化 |
| repository | string | 是 | GitHub 仓库名称 |
| check_interval_minutes | integer | 否 |
详细介绍
health-monitor-mcp
用于监控 MCP 服务、CI 工作流和通用 HTTP 端点的 MCP 服务,提供健康历史记录、TLS 过期时间、断言、诊断信息和运维报告。
功能说明
health-monitor-mcp 会维护 MCP 服务、GitHub Actions 工作流、GitLab 流水线和通用 HTTP 端点的本地注册表。它会执行实时检查,将有限的证据记录到 SQLite 中,评估 MCP 告警阈值,并返回适用于 Agent 和运维人员的 JSON 或 Markdown 诊断信息。
支持的目标传输方式:
- Streamable HTTP,适用于当前的远程 MCP 服务。
- SSE,适用于旧版 MCP 服务。
- stdio,适用于明确选择启用后的可信本地可执行文件。
- GitHub Actions 工作流运行、失败的作业和失败的步骤,适用于公开或私有仓库。
- GitLab CI/CD 流水线、失败的作业、阶段、引用、提交、URL,以及有限的跟踪日志摘录,适用于 GitLab.com 或允许列表中的自托管实例。
- 通用 HTTP/HTTPS 端点,支持状态、标头、正文子串、JSON 值、重定向、延迟和 TLS 过期检查。
Azure DevOps 监控已在 v1.1.0 中停止维护。GitHub Actions 已在 v1.2.0 中推出,GitLab CI/CD 已在 v1.3.0 中推出;通用 HTTP/TLS 监控完善了当前的多提供商功能系列。
快速开始
使用 Node.js 24 以非交互方式运行已发布的软件包:
npx -y health-monitor-mcp --version
MCP 客户端配置示例:
{
"mcpServers": {
"health-monitor": {
"command": "npx",
"args": ["-y", "health-monitor-mcp"]
}
}
}
工具
| 工具 | 用途 | 典型提示词 |
|---|---|---|
register_server | 注册 MCP 目标 | Register inventory-prod |
check_server | 执行一次 MCP 健康检查 | Check inventory-prod now |
register_github_actions | 注册 GitHub 工作流 | Monitor ci.yml in owner/repo |
check_github_actions | 检查最新的 GitHub 运行记录及失败作业/步骤诊断 | Check repo-ci now |
register_gitlab_pipeline | 注册 GitLab 项目流水线 | Monitor group/project on GitLab |
check_gitlab_pipeline | 检查最新流水线及有限范围内的失败作业跟踪记录 | Check gitlab-ci now |
register_http_target | 注册仅支持 GET 的 HTTP/HTTPS 端点 | Monitor the public health endpoint |
check_http_target | 检查响应断言和 TLS 过期时间 | Check service-health now |
register_webhook | 注册用于发送警报的 webhook 目标 | Register alert-webhook for notifications |
test_webhook | 发送测试载荷并返回投递诊断信息 | Test alert-webhook delivery |
check_all | 以有限并发检查所有类型的目标 | Check all production targets |
get_uptime | 返回 MCP 运行时间和延迟历史记录 | Show 24h uptime for inventory-prod |
get_dashboard | 返回跨提供方 JSON 仪表板 | Give me a 24h dashboard |
get_report | 返回跨提供方 Markdown 报告 | Generate a 24h health report |
list_servers | 列出已注册的 MCP 目标 | List monitored MCP servers |
list_github_actions | 列出已注册的 GitHub 工作流目标 | List monitored workflows |
list_gitlab_pipelines | 列出已注册的 GitLab 流水线目标 | List monitored GitLab pipelines |
list_http_targets | 列出已注册的 HTTP 目标 | List monitored HTTP endpoints |
list_webhooks | 列出已注册的 webhook 目标 | List webhook targets |
unregister_server | 移除 MCP 目标 | Stop monitoring local-debugger |
unregister_github_actions | 移除 GitHub 目标及其历史记录 | Stop monitoring repo-ci |
unregister_gitlab_pipeline | 移除 GitLab 目标及其历史记录 | Stop monitoring gitlab-ci |
unregister_http_target | 移除 HTTP 目标及其历史记录 | Stop monitoring service-health |
unregister_webhook | 移除 webhook 目标及其历史记录 | Stop monitoring alert-webhook |
set_alert | 配置 MCP 健康阈值 | Alert if inventory-prod exceeds 500ms |
get_monitor_stats | 检查跨提供方的监控活动 | How many checks are stored? |
预期的配置错误会返回稳定的错误代码和修复提示,包括 SERVER_NOT_FOUND、GITHUB_ACTIONS_TARGET_NOT_FOUND、GITLAB_PIPELINE_TARGET_NOT_FOUND、GITLAB_BASE_URL_NOT_ALLOWED、HTTP_TARGET_NOT_FOUND、HTTP_TARGET_URL_NOT_ALLOWED、NO_SERVERS_REGISTERED、STDIO_DISABLED、STDIO_COMMAND_REJECTED、WEBHOOK_ENCRYPTION_KEY_REQUIRED、WEBHOOK_REGISTRATION_FAILED 和 WEBHOOK_NOT_FOUND。 |
注册目标
Streamable HTTP:
register_server name="inventory-prod" type="http" url="https://inventory.example.com/mcp" tags=["production","inventory"]
传统 SSE:
register_server name="legacy-search" type="sse" url="https://search.example.com/sse" tags=["legacy"]
受信任的本地 stdio:
export HEALTH_MONITOR_ALLOW_STDIO=1
export HEALTH_MONITOR_STDIO_ALLOWLIST=npx,node
register_server name="local-debugger" type="stdio" command="npx" args=["-y","mcp-debug-recorder"] tags=["local"]
command 字段只能包含一个可执行文件。将包名和标志放在 args 中。远程安全运行时配置始终会禁用 stdio。
注册 GitHub Actions
无需身份验证即可检查公开仓库。私有仓库和更高的 API 速率限制需要具有 Actions 读取权限的令牌:
export GITHUB_TOKEN=your-runtime-secret
register_github_actions name="repo-ci" owner="oaslananka" repository="health-monitor-mcp" workflow="ci.yml" branch="main" token_env="GITHUB_TOKEN" tags=["production","ci"]
check_github_actions name="repo-ci" timeout_ms=5000
只会存储 token_env 中的环境变量名称。令牌值会在检查时读取,绝不会写入 SQLite、日志、报告或工具响应。
注册 GitLab Pipelines
无需身份验证即可检查 GitLab.com 上的公开项目。私有项目需要使用仅通过运行时环境提供的令牌:
export GITLAB_TOKEN=your-runtime-secret
register_gitlab_pipeline name="gitlab-ci" project="group/project" ref="main" token_env="GITLAB_TOKEN" tags=["production","ci"]
check_gitlab_pipeline name="gitlab-ci" timeout_ms=5000
默认允许 GitLab.com。自托管实例必须使用 HTTPS 源站,并且必须明确列入允许列表:
export HEALTH_MONITOR_GITLAB_BASE_URL_ALLOWLIST=https://gitlab.internal.example
register_gitlab_pipeline name="private-gitlab" base_url="https://gitlab.internal.example" project="platform/service" token_env="GITLAB_TOKEN"
只会持久化 token_env。令牌值、响应正文和完整跟踪记录绝不会被存储或返回。失败任务的跟踪摘录会通过范围请求获取、经过清理并限制长度。
注册 HTTP 目标
默认允许公开的 HTTP 和 HTTPS 端点。提供程序只发送 GET 请求,并支持对状态、标头、正文子字符串、JSON 标量和 TLS 过期时间进行有界断言:
register_http_target name="service-health" url="https://status.example.com/health" expected_statuses=[200] header_assertions=[{"name":"x-ready","equals":"yes"}] body_contains=["ready"] json_assertions=[{"path":"status","equals":"ready"}] tls_expiry_days=30 tags=["production","http"]
check_http_target name="service-health" timeout_ms=5000
私有、环回、链路本地和其他非公开地址均会被阻止。只有在 full 运行时配置中才能使用受信任的私有源站,并且必须将其明确列出:
export HEALTH_MONITOR_HTTP_TARGET_ALLOWLIST=https://status.internal.example:8443
每个 DNS 应答和每个重定向目标都会重新验证。响应大小上限为 262144 字节;完整响应正文和证书链绝不会被存储或返回。
注册 Webhook 目标
Webhook 目标通过 HTTPS POST 接收告警通知,并可选择使用 HMAC-SHA256 签名。配置 HEALTH_MONITOR_WEBHOOK_ENCRYPTION_KEY(至少 32 个字符)后,密钥会以静态加密方式保存;否则会拒绝注册密钥。
register_webhook name="alert-webhook" url="https://hooks.example/alerts" secret="webhook-secret" events=["down","alert"] tags=["production","alerts"]
test_webhook name="alert-webhook"
列表或诊断信息中绝不会返回密钥——始终会将其脱敏。投递诊断信息包括状态、延迟、HTTP 状态码和错误消息。
健康检查和报告
check_server name="inventory-prod" timeout_ms=5000
check_all timeout_ms=5000 tags=["production"]
get_uptime name="inventory-prod" hours=24
get_dashboard hours=24 include_tool_stats=true
get_report hours=24
HEALTH_MONITOR_MAX_CONCURRENCY 通过一个共享的定时和交互式队列限制 MCP、GitHub Actions、GitLab 和 HTTP 检查的并发数。即使检查完成顺序不同,结果仍会按 MCP、GitHub、GitLab、HTTP 的注册顺序排列。
告警
set_alert name="inventory-prod" max_response_time_ms=500 min_uptime_percent=99 consecutive_failures_before_alert=2
check_server、check_all 和 get_dashboard 会评估告警发现结果。使用 register_webhook 配置 Webhook 目标,以接收告警通知。
配置
| 变量 | 默认值 | 用途 |
|---|---|---|
HEALTH_MONITOR_DB | ~/.mcp-health-monitor/health.db | SQLite 数据库路径 |
HEALTH_MONITOR_AUTO_CHECK | 0 | 设为 1 可启用定期检查 |
HEALTH_MONITOR_RETENTION_DAYS | 30 | 健康历史记录保留期限 |
HEALTH_MONITOR_MAX_CONCURRENCY | 5 | 定期检查和交互式检查的并发数 |
GITHUB_TOKEN | 未设置 | 可选的 GitHub Actions 读取令牌 |
GITLAB_TOKEN | 未设置 | 可选的 GitLab 项目/流水线/作业读取令牌 |
HEALTH_MONITOR_GITLAB_BASE_URL_ALLOWLIST | 未设置 | 允许访问的可自托管 GitLab HTTPS 源 |
HEALTH_MONITOR_HTTP_TARGET_ALLOWLIST | 未设置 | 完整配置中允许访问的私有 HTTP(S) 源 |
HEALTH_MONITOR_ALLOW_STDIO | 0 | 允许检查可信的本地 stdio |
HEALTH_MONITOR_STDIO_ALLOWLIST | 未设置 | 可选的逗号分隔可执行文件允许列表 |
HEALTH_MONITOR_HTTP_TOKEN | 未设置 | POST /mcp 的 Bearer 令牌 |
HEALTH_MONITOR_HTTP_ORIGIN_ALLOWLIST | 未设置 | 允许访问的远程客户端源 |
HEALTH_MONITOR_HTTP_MAX_BODY_BYTES | 1048576 | 入站 MCP 请求正文的最大大小 |
HEALTH_MONITOR_HTTP_BODY_TIMEOUT_MS | 15000 | 读取入站正文的超时时间 |
HEALTH_MONITOR_HTTP_STATEFUL_SESSIONS | 0 | 启用有状态 Streamable HTTP 会话 |
HEALTH_MONITOR_HTTP_SESSION_TTL_MS | 1800000 | 有状态会话 TTL |
HEALTH_MONITOR_HTTP_MAX_SESSIONS | 100 | 有状态会话数量上限 |
HEALTH_MONITOR_WEBHOOK_ENCRYPTION_KEY | 未设置 | 用于加密 webhook 密钥的 32 个字符以上密钥 |
HEALTH_MONITOR_WEBHOOK_TIMEOUT_MS | 5000 | Webhook 投递超时时间(毫秒) |
HTTP 部署
默认情况下,服务绑定到 127.0.0.1。绑定到非回环地址需要使用远程安全配置、Bearer 令牌和 Origin 允许列表。
HOST=0.0.0.0 \
HEALTH_MONITOR_PROFILE=remote-safe \
HEALTH_MONITOR_HTTP_TOKEN=change-me \
HEALTH_MONITOR_HTTP_ORIGIN_ALLOWLIST=https://client.example \
npx -y health-monitor-mcp-http
GET /health 无需身份验证,仅公开状态和版本。POST /mcp 需要 Authorization: Bearer <token>。
Docker
请持久化 /data;否则,容器停止后 SQLite 数据库会消失。
docker volume create health-monitor-data
docker run --rm \
-v health-monitor-data:/data \
-p 127.0.0.1:3000:3000 \
-e HOST=0.0.0.0 \
-e HEALTH_MONITOR_PROFILE=remote-safe \
-e HEALTH_MONITOR_HTTP_TOKEN=change-me \
-e HEALTH_MONITOR_HTTP_ORIGIN_ALLOWLIST=https://client.example \
ghcr.io/oaslananka/health-monitor-mcp:latest
开发
此仓库通过 .mise.toml 固定使用 Node.js 24.18.0 和 pnpm 11.14.0。
mise trust
mise install
pnpm install --frozen-lockfile
pnpm run ci
常用检查:
pnpm run build
pnpm run typecheck
pnpm run lint
pnpm run lint:test
pnpm run test:coverage
pnpm run test:integration
pnpm run docs:api:check
pnpm run security:supply-chain
pnpm run check:metadata
pnpm run check:package
覆盖率与测试分析
Jest 仍是强制执行的覆盖率门槛,并采用仓库本地阈值。CI 验证任务会运行一次所有单元测试和集成测试,生成
coverage/lcov.info 和
reports/junit/junit.xml,并将两份报告上传到 Codecov。Codecov 项目状态和补丁状态
初始为提示性状态,使用 target: auto 和 1% 的容差,提供 Pull Request 差异覆盖率、
文件级可见性和失败测试分析,同时避免重复执行本地合并门槛。
本项目有意不启用 Codecov Bundle Analysis。此软件包提供由
tsc 编译的 Node.js 入口点;目前不会生成 Rollup、Vite 或 Webpack 应用程序包,因此下载
大小并非产品指标。
架构与路线图
Agent 运行时配置
此仓库负责管理其产品专属的 MCP 配置、插件清单和技能:
| 文件 | 用途 |
|---|---|
.claude-plugin/plugin.json | Claude Code 插件清单 |
.mcp.json | 项目本地 MCP 配置 |
.codex/config.example.toml | Codex CLI 示例 |
.vscode/mcp.example.json | VS Code / Copilot 示例 |
opencode.example.jsonc | OpenCode 示例 |
skills/ | 产品专属监控工作流 |
docs/agent-runtime-config.md | 运行时设置与验证 |
安全与贡献
通过 GitHub Private Vulnerability Reporting 报告漏洞。请参阅 SECURITY.md 和 docs/security.md。
贡献设置和规范记录在 docs/contributing.md 中。用法问题请前往 GitHub Discussions;可采取行动处理的事项请提交到 issues。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。