Install
$ agentstack add mcp-higangssh-homebutler Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
β Flagged3 finding(s); flagged for manual review. Β· v0.1.0 How review works β
- β’ Prompt-injection patterns
- β’ Secret / credential exfiltration
- β’ Dangerous shell & filesystem operations
- β’ Untrusted network calls
- β’ Known-malicious package signatures
- high Dangerous shell/eval execution.
- high Destructive filesystem operation.
- high Pipes remote content directly into a shell (remote code execution).
What it can access
- β Network access Used
- β Filesystem access No
- β Shell / process execution Used
- β Environment & secrets No
- β Dynamic code execution No
From automated source analysis of v0.1.0. βUsedβ means the capability is present in the source β more access means more to trust, not that itβs unsafe.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work βAbout
HomeButler
Your tiny homelab butler. A single Go binary for running a small home server without babysitting it.
Website Β· Docs Β· Releases
HomeButler helps you answer the boring but painful questions every homelab eventually creates:
- What is running on my server right now?
- Which container owns this port?
- Why did this service restart at 3 AM?
- Is my backup actually restorable?
- Can I install this self-hosted app without hand-writing another compose file?
- Can I let an AI assistant inspect my server without handing it a full SSH shell?
No daemon required. No database. No always-on web service. Just one Go binary you can use from the terminal, scripts, a web dashboard, or AI tools.
The design goal is simple: give humans and agents a narrow, structured interface to the server. HomeButler returns readable summaries and JSON instead of asking you to trust a black-box shell session.
βΆοΈ 34s demo β monitor, diagnose, and manage your homelab
Quick Start
# One-line install (auto-detects OS/arch)
curl -fsSL https://raw.githubusercontent.com/Higangssh/homebutler/main/install.sh | sh
# Or via Homebrew
brew install Higangssh/homebutler/homebutler
# Interactive setup β add your servers in seconds
homebutler init
Use it right away:
homebutler status # CPU, memory, disk, uptime
homebutler docker list # running containers
homebutler inventory scan # containers + ports + topology
homebutler report # butler-style health report + change summary
homebutler install uptime-kuma # deploy a self-hosted app
homebutler backup drill uptime-kuma # verify a backup actually restores
homebutler watch tui # terminal dashboard
homebutler serve # web dashboard at http://localhost:8080
Machine-readable output is available everywhere:
homebutler status --json
homebutler inventory scan --json
homebutler report --json
What it does
- Install apps β deploy Uptime Kuma, Jellyfin, Pi-hole, Gitea, Portainer, and more with one command
- Map your server β see containers, exposed ports, system ports, and service topology
- Run a doctor check β diagnose resource pressure, stopped containers, public ports, backup hygiene, notifications, and report baseline readiness
- Catch crashes β save logs before/after Docker, systemd, or PM2 restarts and detect flapping loops
- Verify backups β boot backups in isolated containers before you trust them
- Use it anywhere β CLI, JSON, web dashboard, or MCP for AI agents without giving them SSH
Why homebutler?
Self-hosting is not hard because one docker compose up is hard. It is hard because the maintenance never ends: ports collide, containers restart silently, backups look fine until restore day, and every server becomes a slightly different snowflake.
HomeButler is a small operations toolkit for that messy middle.
Why not just use Portainer, Netdata, or CasaOS?
Those are great dashboards. HomeButler is CLI-first, scriptable, JSON-friendly, air-gap friendly, and safe to copy onto any server. Use it when you want commands you can run from a terminal, cron job, SSH session, CI script, or AI agent β especially when you care more about βwhat changed?β than another graph.
Core workflows
π§Ύ Butler Report
homebutler report
homebutler report --keep 7 # retain only the latest 7 snapshots
homebutler report --no-save # preview without writing a snapshot
report gives you a concise butler-style summary of your homelab: current health, warnings, notable changes since the previous snapshot, and suggested next commands. On the first run, HomeButler creates a baseline under ~/.homebutler/reports/snapshots/; later runs compare against the latest snapshot. Old snapshots are pruned automatically (--keep 30 by default) so reports do not grow forever.
π©Ί Doctor Check
homebutler doctor
homebutler doctor --strict # non-zero exit if warnings/failures are found
homebutler doctor --json # automation / MCP friendly
doctor is a read-only preflight for the problems homelab users usually discover too late: high disk or memory usage, stopped containers, public bind ports, stale or missing backups, missing notifications, and whether report has a baseline for change detection.
π¦ One-Command App Install
> homebutler install uptime-kuma β Deploy self-hosted apps in seconds. Pre-checks Docker, ports, and duplicates. Generates docker-compose.yml automatically. [See all available apps β](#app-install)
πΊοΈ Inventory & Topology
homebutler inventory scan
homebutler inventory export --format mermaid
homebutler --json inventory scan
inventory scan gives you a quick map of what is running on a server: system health, Docker containers, app ports, and system ports. Docker-published ports are connected back to the container that owns them, so local forwarding details like Colima/Lima stay understandable.
π Home Network
Server homelab (192.168.1.10)
Summary β
1 running Β· βͺ 1 stopped Β· π 2 public ports Β· π 4 local ports
π¦ Containers (2)
ββ βͺ vaultwarden Β· not started
β ββ image vaultwarden/server:latest
ββ β
api-server Β· running
ββ image my-api:latest
ββ exposes :8080 β 8080/tcp
π App Ports (1)
ββ π :8080/tcp Β· api-server
Use Mermaid export when you want a diagram for GitHub, Obsidian, docs, or an AI assistant:
graph TD
home["π Home Network"] --> homelab["π₯ homelab192.168.1.10"]
homelab --> c1["π¦ api-serverrunning"]
homelab --> p1["π :8080/tcpapi-server"]
c1 -. exposes .-> p1
Demo
π Web Dashboard
> homebutler serve β A real-time web dashboard embedded in the single binary via go:embed. Monitor all your servers, Docker containers, open ports, alerts, and Wake-on-LAN devices from any browser. Dark theme, auto-refresh every 5 seconds, fully responsive.
β¨ Web Dashboard Highlights
- Server Overview β See all servers at a glance with color-coded status (green = online, red = offline)
- System Metrics β CPU, memory, disk usage with progress bars and color thresholds
- Docker Containers β Running/stopped status with friendly labels ("Running Β· 4d", "Stopped Β· 6h ago")
- Top Processes β Top processes sorted by CPU/memory with zombie detection
- Resource Warnings β Visual CPU, memory, and disk thresholds in the dashboard
- Network Ports β Open ports with process names and bind addresses
- Wake-on-LAN β One-click wake buttons for configured devices
- Server Switching β Dropdown to switch between local and remote servers
- Zero dependencies β No Node.js runtime needed. Frontend is compiled into the Go binary at build time
homebutler serve # Start on port 8080
homebutler serve --port 3000 # Custom port
homebutler serve --demo # Demo mode with realistic sample data
π Process Restart Watch
Your container crashed at 3 AM β but why? homebutler watch catches it the moment it happens, saves the dying logs, figures out the cause, and tells you if it's happening over and over.
Supported backends: Docker (real-time event stream) Β· systemd (polling) Β· PM2 (polling)
Step 1: Add targets to watch
homebutler watch add nginx # Interactive: choose Docker / systemd / PM2
homebutler watch add --kind docker nginx # or specify directly
homebutler watch add --kind systemd nginx.service
homebutler watch add --kind pm2 my-api
homebutler watch list # See what you're watching
Step 2: Start monitoring
homebutler watch start # Foreground, Ctrl+C to stop
homebutler watch start --interval 10s # Custom poll interval (default 30s)
When a crash is detected, you'll see:
[03:14:22] INCIDENT: nginx (incident nginx-20260410-031422.581-7a2124)
Crash: OOM β process killed by SIGKILL (oom, confidence: high)
β FLAPPING: acute (3 restarts in short window)
Step 3: Investigate
homebutler watch history # List all incidents
homebutler watch show # Full details
watch show output includes:
- Pre-death logs β what the process printed right before it died
- Post-restart logs β what happened after the restart
- Crash analysis β category (oom / panic / segfault / timeout / dependency / error), reason, confidence level, matched log patterns
- Flapping status β if the process is stuck in a crash loop
Crash Analysis
Every incident is automatically analyzed using exit codes and log patterns:
| Signal | Exit Code | Meaning | |--------|-----------|---------| | SIGKILL | 137 | OOM Killer or forced kill | | SIGSEGV | 139 | Segmentation fault (memory corruption) | | SIGTERM | 143 | Graceful shutdown request | | β | 1 | Application error | | β | 0 | Clean exit (may be intentional restart) |
Log patterns like panic:, Out of memory, Connection refused, FATAL, and timeout are matched automatically to help identify the root cause.
Flapping Detection
Detects when a process is stuck in a restart loop (e.g., crash β restart β crash again):
- Acute β 3+ restarts within 10 minutes (something is broken right now)
- Chronic β 5+ restarts within 24 hours (slow recurring issue)
Flapping incidents are tagged [FLAPPING] in history and highlighted in watch show.
Notifications (optional, off by default)
Notifications are disabled by default, which is useful for air-gapped or closed networks where everything runs locally.
A minimal example in ~/.config/homebutler/config.yaml:
notify:
telegram:
bot_token: "your-bot-token"
chat_id: "your-chat-id"
watch:
enabled: true
notify_on: flapping
cooldown: 5m
flapping:
short_window: 10m
short_threshold: 3
long_window: 24h
long_threshold: 5
alerts:
cpu: 90
memory: 85
disk: 90
rules:
- name: cpu-spike
metric: cpu
threshold: 90
action: notify
Legacy ~/.homebutler/watch/config.json is still read as a fallback for watch-specific settings, and legacy alerts.yaml notify/webhook provider settings are still accepted for older setups.
watch.enabled: trueβ allow watch notificationswatch.notify_on: flappingβ notify only when repeated restart loops are detectedwatch.notify_on: incidentβ notify on every incidentwatch.notify_on: allβ notify on both incidents and flappingwatch.notify_on: offβ disable watch notifications without removing provider configwatch.cooldown: 5mβ suppress duplicate notifications for the same event fingerprint during the cooldown windowwatch.flappingβ optional advanced tuning for restart-loop detection
Manage targets
homebutler watch remove nginx # Stop watching
homebutler watch check # One-shot check (no continuous monitoring)
π₯οΈ TUI Dashboard
> homebutler watch tui β A terminal-based dashboard powered by Bubble Tea. Monitors all configured servers with real-time updates, color-coded resource bars, and Docker container status. No browser needed.
π§ AI-Powered Management (MCP)
> Use natural language when you want automation. MCP clients can call homebutler tools to check server status, list Docker containers, inspect ports, or run operational workflows. [See screenshots & setup β](#mcp-server)
App Install
Deploy self-hosted apps with a single command. Each app runs via docker compose with automatic pre-checks, health verification, and clean lifecycle management.
# List available apps
homebutler install list
# Install (default port)
homebutler install uptime-kuma
# Install with custom port
homebutler install uptime-kuma --port 8080
# Install jellyfin with media directory
homebutler install jellyfin --media /mnt/movies
# Check status
homebutler install status uptime-kuma
# Stop (data preserved)
homebutler install uninstall uptime-kuma
# Stop + delete everything
homebutler install purge uptime-kuma
How it works
~/.homebutler/apps/
βββ uptime-kuma/
βββ docker-compose.yml β auto-generated, editable
βββ data/ β persistent data (bind mount)
- Pre-checks β Verifies docker is installed/running, port is available, no duplicate containers
- Compose-based β Each app gets its own
docker-compose.ymlyou can inspect and customize - Data safety β
uninstallstops containers but keeps your data;purgeremoves everything - Cross-platform β Auto-detects docker socket (default, colima, podman)
Available apps
| App | Default Port | Description | Notes | |-----|-------------|-------------|-------| | uptime-kuma | 3001 | Self-hosted monitoring tool | | | plex | 32400 | Plex Media Server | --media /path to mount media dir | | vaultwarden | 8080 | Bitwarden-compatible password manager | | | filebrowser | 8081 | Web-based file manager | | | it-tools | 8082 | Developer utilities (JSON, Base64, Hash, etc.) | | | gitea | 3002 | Lightweight self-hosted Git service | | | jellyfin | 8096 | Media system (movies, TV, music) | --media /path to mount media dir | | homepage | 3010 | Modern homelab dashboard | | | stirling-pdf | 8083 | All-in-one PDF tool (merge, split, convert, OCR) | | | speedtest-tracker | 8084 | Internet speed test with historical graphs | | | mealie | 9925 | Recipe manager and meal planner | | | pi-hole | 8088 | DNS ad blocking | β οΈ Uses port 53 (DNS), NET_ADMIN capability | | adguard-home | 3000 | DNS ad blocker and privacy | β οΈ Uses port 53 (DNS) | | portainer | 9443 | Docker management GUI | β οΈ Mounts Docker socket (HTTPS) | | nginx-proxy-manager | 81 | Reverse proxy with SSL and web UI | β οΈ Uses ports 80/443 |
App-specific options
# Jellyfin: mount your media library
homebutler install jellyfin --media /mnt/movies
# Pi-hole / AdGuard: DNS ad blocking (port 53 required)
homebutler install pi-hole
# β οΈ If port 53 is in use (Linux): sudo systemctl disable --now systemd-resolved
# Portainer: Docker GUI (mounts docker socket)
homebutler install portainer
# Access via HTTPS: https://localhost:9443
# Nginx Proxy Manager: reverse proxy
homebutler install nginx-proxy-manager
# Default login: admin@example.com / changeme (change immediately!)
# Any app: custom port
homebutler install --port 9999
Safety checks
- Port conflict detection β Checks if the port is already in use before install
- DNS mutual exclusion β Warns if pi-hole and adguard-home are both installed
- Docker socket warning β Alerts when an app requires Docker socket access (portainer)
- OS-specific guidance β Linux gets systemd-resolved fix, macOS gets lsof command
- Post-install tips β DNS setup, HTTPS access, default credential warnings
> Want more apps? Open an issue or see [Contributing](CONTRIBUTING.md).
Usage
homebutler [flags]
Commands:
status System status (CPU, memory, disk, uptime)
doctor Diagnose health, exposure, backups, and readiness
docker list List running containers
install Install a self-hosted app (docker compose)
alerts Show current alert status
watch tui TUI dashboard (monitors all configured servers)
watch add/list/remove Manage watched containers
watch check/start One-shot or continuous restart detection
watch history/show Browse restart history
serve Web dashboard (browser-based, go:embed)
Flags:
--json JSON output (default: human-readable)
--server Run on a specific remote server
--all Run on all configured servers in parallel
--port Port for serve command (default: 8080)
-
β¦
## Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source β we do not rehost the code.
- **Author:** [Higangssh](https://github.com/Higangssh)
- **Source:** [Higangssh/homebutler](https://github.com/Higangssh/homebutler)
- **License:** MIT
- **Homepage:** https://homebutler.dev
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.