The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the MCP Health Monitor listing page.
MCP server, CI workflow, and generic HTTP endpoint monitoring with health history, TLS expiry, assertions, diagnostics, and operational reports.
health-monitor-mcp keeps local registries of MCP servers, GitHub Actions workflows, GitLab pipelines, and generic HTTP endpoints. It performs live checks, records bounded evidence in SQLite, evaluates MCP alert thresholds, and returns JSON or Markdown diagnostics suitable for agents and operators.
Supported target transports:
Azure DevOps monitoring was retired in v1.1.0. GitHub Actions shipped in v1.2.0 and GitLab CI/CD in v1.3.0; generic HTTP/TLS monitoring completes the current multi-provider feature line.
Run the published package noninteractively with Node.js 24:
Example MCP client configuration:
| Tool | Purpose | Typical prompt |
|---|---|---|
register_server | Register an MCP target | Register inventory-prod |
check_server | Run one MCP health check | Check inventory-prod now |
register_github_actions | Register a GitHub workflow | Monitor ci.yml in owner/repo |
check_github_actions | Check latest GitHub run and failed job/step diagnostics | Check repo-ci now |
register_gitlab_pipeline | Register a GitLab project pipeline | Monitor group/project on GitLab |
check_gitlab_pipeline | Check latest pipeline and bounded failed-job traces | Check gitlab-ci now |
register_http_target | Register a GET-only HTTP/HTTPS endpoint | Monitor the public health endpoint |
check_http_target | Check response assertions and TLS expiry | Check service-health now |
check_all | Check all target kinds with bounded concurrency | Check all production targets |
get_uptime | Return MCP uptime and latency history | Show 24h uptime for inventory-prod |
get_dashboard | Return a cross-provider JSON dashboard | Give me a 24h dashboard |
get_report | Return a cross-provider Markdown report | Generate a 24h health report |
list_servers | List registered MCP targets | List monitored MCP servers |
list_github_actions | List registered GitHub workflow targets | List monitored workflows |
list_gitlab_pipelines | List registered GitLab pipeline targets | List monitored GitLab pipelines |
list_http_targets | List registered HTTP targets | List monitored HTTP endpoints |
unregister_server | Remove an MCP target | Stop monitoring local-debugger |
unregister_github_actions | Remove a GitHub target and its history | Stop monitoring repo-ci |
unregister_gitlab_pipeline | Remove a GitLab target and its history | Stop monitoring gitlab-ci |
unregister_http_target | Remove an HTTP target and its history | Stop monitoring service-health |
set_alert | Configure MCP health thresholds | Alert if inventory-prod exceeds 500ms |
get_monitor_stats | Inspect cross-provider monitor activity | How many checks are stored? |
Expected configuration mistakes return stable error codes and remediation hints, including 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, and STDIO_COMMAND_REJECTED.
Streamable HTTP:
Legacy SSE:
Trusted local stdio:
The command field must contain one executable only. Put package names and flags in args. Remote-safe runtime profiles always disable stdio.
Public repositories can be checked without authentication. Private repositories and higher API rate limits require a token with Actions read access:
Only the environment-variable name in token_env is stored. The token value is read at check time and is never written to SQLite, logs, reports, or tool responses.
Public GitLab.com projects can be checked without authentication. Private projects require a token exposed only through the runtime environment:
GitLab.com is allowed by default. A self-hosted instance must use an HTTPS origin and be explicitly allowed:
Only token_env is persisted. Token values, response bodies, and full traces are never stored or returned. Failed-job trace excerpts are range-requested, sanitized, and bounded.
Public HTTP and HTTPS endpoints are allowed by default. The provider sends GET requests only and supports bounded status, header, body-substring, JSON scalar, and TLS-expiry assertions:
Private, loopback, link-local, and other non-public addresses are blocked. A trusted private origin is available only in the full runtime profile and must be explicitly listed:
Every DNS answer and every redirect destination is revalidated. Responses are capped at 262144 bytes; full response bodies and certificate chains are never stored or returned.
HEALTH_MONITOR_MAX_CONCURRENCY limits MCP, GitHub Actions, GitLab, and HTTP checks through one shared scheduled and interactive queue. Results preserve MCP-then-GitHub-then-GitLab-then-HTTP registration order even when checks complete out of order.
Alert findings are evaluated by check_server, check_all, and get_dashboard. Outbound webhook delivery is not yet exposed as a public MCP tool.
| Variable | Default | Purpose |
|---|---|---|
HEALTH_MONITOR_DB | ~/.mcp-health-monitor/health.db | SQLite database path |
HEALTH_MONITOR_AUTO_CHECK | 0 | Enable scheduled checks with 1 |
HEALTH_MONITOR_RETENTION_DAYS | 30 | Health-history retention |
HEALTH_MONITOR_MAX_CONCURRENCY | 5 | Scheduled and interactive check concurrency |
GITHUB_TOKEN | unset | Optional GitHub Actions read token |
GITLAB_TOKEN | unset | Optional GitLab project/pipeline/job read token |
HEALTH_MONITOR_GITLAB_BASE_URL_ALLOWLIST | unset | Allowed self-hosted GitLab HTTPS origins |
HEALTH_MONITOR_HTTP_TARGET_ALLOWLIST | unset | Private HTTP(S) origins allowed in full profile |
HEALTH_MONITOR_ALLOW_STDIO | 0 | Allow trusted local stdio checks |
HEALTH_MONITOR_STDIO_ALLOWLIST | unset | Optional comma-separated executable allowlist |
HEALTH_MONITOR_HTTP_TOKEN | unset | Bearer token for POST /mcp |
HEALTH_MONITOR_HTTP_ORIGIN_ALLOWLIST | unset | Allowed remote client origins |
HEALTH_MONITOR_HTTP_MAX_BODY_BYTES | 1048576 | Maximum inbound MCP body |
HEALTH_MONITOR_HTTP_BODY_TIMEOUT_MS | 15000 | Inbound body read timeout |
HEALTH_MONITOR_HTTP_STATEFUL_SESSIONS | 0 | Enable stateful Streamable HTTP sessions |
HEALTH_MONITOR_HTTP_SESSION_TTL_MS | 1800000 | Stateful session TTL |
HEALTH_MONITOR_HTTP_MAX_SESSIONS | 100 | Stateful session cap |
The server binds to 127.0.0.1 by default. A non-loopback bind requires a remote-safe profile, bearer token, and Origin allowlist.
GET /health is unauthenticated and exposes only status and version. POST /mcp requires Authorization: Bearer <token>.
Persist /data; otherwise the SQLite database disappears with the container.
The repository pins Node.js 24.18.0 and pnpm 11.14.0 through .mise.toml.
Useful gates:
Jest remains the blocking coverage gate with repository-local thresholds. The CI validation job runs
all unit and integration tests once, writes coverage/lcov.info and
reports/junit/junit.xml, and uploads both reports to Codecov. Codecov project and patch statuses
start as informational with target: auto and a 1% tolerance, adding pull-request diff coverage,
file-level visibility, and failed-test analytics without duplicating the local merge gate.
Codecov Bundle Analysis is intentionally not enabled. This package ships Node.js entrypoints compiled
with tsc; it does not currently produce a Rollup, Vite, or Webpack application bundle whose download
size is a product metric.
This repository owns its product-specific MCP configuration, plugin manifest, and skills:
| File | Purpose |
|---|---|
.claude-plugin/plugin.json | Claude Code plugin manifest |
.mcp.json | Project-local MCP configuration |
.codex/config.example.toml | Codex CLI example |
.vscode/mcp.example.json | VS Code / Copilot example |
opencode.example.jsonc | OpenCode example |
skills/ | Product-specific monitoring workflows |
docs/agent-runtime-config.md | Runtime setup and validation |
Report vulnerabilities through GitHub Private Vulnerability Reporting. See SECURITY.md and docs/security.md.
Contribution setup and standards are documented in docs/contributing.md. Usage questions belong in GitHub Discussions; actionable work belongs in issues.
MIT