Alertpaca
Server health checker β run it, see what needs attention.
Ask AI about Alertpaca
Powered by Claude Β· Grounded in docs
I know everything about Alertpaca. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
alertpaca
Server health checker β run it, see what needs attention.
Single binary, zero config, one screen.
Why alertpaca?
alertpaca doesn't show you what's happening β it tells you what's about to go wrong.
It predicts when disks will fill up, checks if backups actually ran, notices when services silently disappear, and warns before TLS certificates expire. One screen, no graphs, no config required.
AI & Automation
alertpaca is built for AI agents and scripts, not just humans.
- MCP server β
alertpaca --mcpexposes acheck_healthtool via Model Context Protocol. Connect it to Claude Desktop, Claude Code, or any MCP client. - JSON output β
alertpaca --jsonreturns structured results. Pipe tojq, feed to an LLM, or parse in scripts. - Exit codes β
0= healthy,2= something needs attention. Use in CI, cron, or agent workflows.
# Ask an LLM to summarize server health
alertpaca --json | llm "summarize health, flag anything urgent"
# Filter problems
alertpaca --json | jq '.[] | select(.status != "Ok")'
# Alert if anything is wrong
alertpaca --once || notify-send "server needs attention"
See MCP server below for Claude Desktop configuration.
Quick start
Download a prebuilt binary from the latest release:
# Linux (x86_64)
curl -Lo alertpaca https://github.com/fabioconcina/alertpaca/releases/latest/download/alertpaca-linux-amd64
chmod +x alertpaca
./alertpaca
# macOS (Apple Silicon)
curl -Lo alertpaca https://github.com/fabioconcina/alertpaca/releases/latest/download/alertpaca-darwin-arm64
chmod +x alertpaca
./alertpaca
Or build from source:
cargo build --release
./target/release/alertpaca
Press q to quit, r to refresh, ββ to scroll.
CLI modes
Interactive TUI (default)
alertpaca [-c path/to/config.toml]
Full-screen terminal UI with auto-refresh (60s), keyboard navigation, and a splash screen on startup.
| Key | Action |
|---|---|
q | Quit |
r | Force immediate refresh |
β / k | Scroll up |
β / j | Scroll down |
JSON output (--json)
alertpaca --json
Runs all checks once, prints a JSON array to stdout, and exits. Suitable for piping to jq, scripts, or AI agents.
[
{
"section": "System",
"name": "cpu",
"status": "Ok",
"summary": "12% usage (4 cores)"
},
{
"section": "Certificates",
"name": "nextcloud.home.lan:443",
"status": "Warning",
"summary": "expires in 21d"
}
]
Plain-text table (--once)
alertpaca --once
Runs all checks once, prints a human-readable table to stdout, and exits.
MCP server (--mcp)
alertpaca --mcp
Runs an MCP (Model Context Protocol) server on stdio, exposing a check_health tool. This allows AI agents (e.g. Claude Desktop, Claude Code) to check server health programmatically.
Tool: check_health
- Parameters: none
- Returns: JSON array of check results (same schema as
--jsonoutput)
Claude Desktop configuration:
{
"mcpServers": {
"alertpaca": {
"command": "/path/to/alertpaca",
"args": ["--mcp"]
}
}
}
Exit codes
Exit codes apply to --json and --once modes:
| Code | Meaning |
|---|---|
| 0 | All checks passed (Ok or Skipped) |
| 1 | Error (config load failure, I/O error) |
| 2 | At least one check returned Warning or Critical |
What it checks
| Check | Auto-detected | Status |
|---|---|---|
| CPU usage | β | warn >80%, critical >95% |
| Memory usage | β | warn >80%, critical >95% |
| Swap usage | β | warn >50%, critical >90% |
| Disk usage | β | warn >80%, critical >90% |
| Disk fill prediction | β | estimates days until full |
| System load | β | warn > cores, critical > 2x cores |
| Temperature | β | warn 15Β°C below critical, critical at hardware limit (default 95Β°C CPU / 70Β°C disk) |
| Uptime | β | informational |
| Systemd failed units | β | critical if any failed (configurable ignore list) |
| Docker containers | β | warn if unhealthy/restarting |
| Backup freshness | config | warn at max_age, critical at 2x |
| TLS certificate expiry | config | warn <30d, critical <7d |
| Port/service drift | β | warn if listeners disappear |
| NTP clock skew | β | warn >500ms, critical >1s |
| HTTP endpoints | config | critical if unreachable/5xx, warn if 4xx |
| DNS resolution | config | critical if resolution fails, warn if >1s |
| Pending updates | β | shows upgradable packages, warns on security updates |
| Cron jobs | β | parses crontab, warns if scheduled jobs show no evidence of running |
Configuration
Optional. Create ~/.config/alertpaca/config.toml:
[[backup]]
name = "documents"
type = "file"
path = "/mnt/backup/docs"
pattern = "backup-*.tar.gz"
max_age = "24h"
[[backup]]
name = "photos"
type = "restic"
repo = "/mnt/backup/restic-photos"
max_age = "7d"
# password_file = "/etc/restic/password"
[[backup]]
name = "tank/data"
type = "zfs"
dataset = "tank/data"
max_age = "1h"
[[certificate]]
endpoint = "nextcloud.home.lan:443"
[[certificate]]
endpoint = "jellyfin.home.lan:443"
[[endpoint]]
name = "Pi-hole"
url = "http://localhost:80"
[[endpoint]]
name = "Immich"
url = "http://localhost:2283"
# expect_status = 200 # optional, default: any 2xx/3xx is Ok
[[dns]]
name = "Pi-hole"
domain = "google.com"
server = "127.0.0.1" # optional, defaults to 127.0.0.1
# Notifications β alert on status changes (ntfy.sh, Slack, Discord, etc.)
[notify]
url = "https://ntfy.sh/your-topic-here"
# Optional β ignore noisy systemd units
[systemd]
ignore = ["systemd-networkd-wait-online.service"]
# Optional β defaults to pool.ntp.org, 500ms warn, 1000ms critical
[ntp]
server = "pool.ntp.org"
# warn_ms = 500
# critical_ms = 1000
# Optional β ignore specific cron commands (substring match)
[cron]
ignore = ["run-parts"]
Notifications
When [notify] is configured, alertpaca sends a POST to the URL whenever a check changes status. Alerts fire when checks transition to Warning/Critical, and recovery messages fire when they return to Ok. No notifications are sent when status stays the same.
Works with ntfy.sh, Slack incoming webhooks, Discord webhooks, Gotify, or any endpoint that accepts a POST with a text body.
State files
Stored in ~/.local/share/alertpaca/:
history.jsonβ disk usage history for fill predictionports.jsonβ last known listening ports for drift detectionlast_status.jsonβ previous check statuses for notification diffing
License
MIT
