homebutler
HomeButler is a homelab management tool that lets you monitor systems, control Docker containers, manage self-hosted apps, and perform network operations — accessible via CLI, web dashboard, TUI, or natural language through any MCP-compatible AI (Claude, ChatGPT).
System Monitoring
Get real-time CPU, memory, disk usage, and uptime (
system_status)Check resource alerts against configurable thresholds for CPU, memory, and disk (
alerts)
Docker Management
List containers with status, image, and ports (
docker_list)Restart, stop containers and retrieve logs (
docker_restart,docker_stop,docker_logs)Backup and restore Docker volumes, compose files, and environment variables
Self-Hosted App Deployment
Install, check status, uninstall, or purge 14+ pre-configured apps (Uptime Kuma, Jellyfin, Pi-hole, Vaultwarden, etc.) via
docker composewith automatic pre-checks (install_app,install_status,install_uninstall,install_purge)
Network Utilities
Scan the local network to discover devices by IP, MAC, and hostname (
network_scan)List open ports with associated process info (
open_ports)Send Wake-on-LAN magic packets to power on machines remotely (
wake)
Multi-Server Support
All core tools accept an optional
serverparameter to target remote servers via SSH, enabling centralized management of your entire homelab fleet.
Enables comprehensive management of Docker environments, allowing users to list, restart, and stop containers, view logs, and perform backups of Docker volumes, compose files, and environment configurations.
Section rules, labels, and severities are colour-coded in a terminal. Colour is dropped automatically when output is piped, redirected, or run from cron.
That is the whole idea. Most homelab tools show you a graph of right now, and leave "does this matter?" to you. HomeButler remembers what your server looked like last time, decides what is worth saying, and says it — six containers before and six after is not "no change" when one of them is a different container.
Reading a change
Every line is three columns: what kind of change, what it happened to, and
what exactly happened. The kind is one of eight words, and it is the same word in
--json, so an agent branches on it without reading prose:
Kind | Means | You would see it after |
| it was there last time and is not now |
|
| it was not there last time and is now | starting anything |
| same name, different thing underneath |
|
| same container, different image | pulling a new tag |
| same container, running where it was stopped, or the reverse | a crash, or bringing something back up |
| same port, a different process answering on it | one service taking over another's port |
| a mount moved by more than half a gigabyte | anything that writes |
| the comparison could not be made | Docker was down when either snapshot was taken |
replaced is the one the rest of this exists for. A container recreated under the
same name leaves every count identical, which is why a report that compares counts —
as this one did before 0.26.0 — answers "no significant changes" while the thing you
were running has been swapped out underneath you.
skipped is the second: homebutler says it could not compare rather than reporting
nothing changed. An all-clear it cannot stand behind is worse than no answer.
The header names the snapshot being compared against, so "what changed" is never ambiguous about the window it covers.
📖 What earns a line, and what is deliberately suppressed →
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.
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 initUse 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:8080Machine-readable output is available everywhere:
homebutler status --json
homebutler inventory scan --json
homebutler report --jsonRelated MCP server: Plutus MCP Server
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, report baseline readiness, and configured Proxmox endpoint reachability
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
See a Proxmox cluster — nodes, QEMU and LXC guests, storage, and task status, with power actions that name their target explicitly
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 snapshotreport 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 friendlydoctor 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, whether report has a baseline for change detection, and whether each configured Proxmox endpoint is reachable with the token it has. Every finding names the next command to run, so --strict makes it usable from cron or CI — including a Proxmox host that is unreachable or rebooting.
🗂 Config Validation
homebutler config validate
homebutler config validate --strict # exit non-zero on warnings too
homebutler config validate --jsonconfig validate reads your config without starting anything and tells you
which file was used, which of the four resolution rules picked it, and what
homebutler actually made of each section. It exists because the two ways config
goes wrong are both silent: a key homebutler does not recognise is dropped
without a word, and a --config path that does not exist falls back to
built-in defaults rather than failing.
Sections
✓ servers 2 servers (homelab, nas)
· notify not set
✓ alerts cpu 95% · memory 85% · disk 90%
Findings
⚠️ Line 5: field notifiy not found in the homebutler config
→ Did you mean "notify"? Unrecognised keys are ignored silently.📦 One-Command App Install
homebutler install uptime-kuma— Deploy self-hosted apps in seconds. Pre-checks Docker, ports, and duplicates. Generatesdocker-compose.ymlautomatically. See all available apps →
🗺️ Inventory & Topology
homebutler inventory scan
homebutler inventory show --filter exposed
homebutler inventory export --format mermaid
homebutler --json inventory scaninventory 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-serverTo answer "what is reachable from outside my machine/network?" without reading the whole tree, filter the scan to exposed ports only:
homebutler inventory scan --filter exposed🏠 Home Network
Server homelab
🌐 Exposed Ports
├─ :8080/tcp · api-server
└─ :8443/tcp · dashboardOnly ports listening on all interfaces (0.0.0.0, ::, *) are shown. Anything bound to a specific address is hidden, including loopback and LAN addresses. Unsupported filter values return an error, as does combining --filter with --json; the default inventory scan output is unchanged.
Use Mermaid export when you want a diagram for GitHub, Obsidian, docs, or an AI assistant:
graph TD
home["🏠 Home Network"] --> homelab["🖥 homelab<br/>192.168.1.10"]
homelab --> c1["📦 api-server<br/>running"]
homelab --> p1["🌍 :8080/tcp<br/>api-server"]
c1 -. exposes .-> p1Demo
🌐 Web Dashboard
homebutler serve— A real-time web dashboard embedded in the single binary viago: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.
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 watchingStep 2: Start monitoring
homebutler watch start # Foreground, Ctrl+C to stop
homebutler watch start --interval 10s # Custom poll interval (default 30s)homebutler watch install # register it with systemd or launchd
homebutler watch installed # is it registered?
homebutler watch uninstallwatch install hands the loop to whatever supervises the host — a systemd user
unit on Linux, a launchd agent on macOS — so monitoring survives logout and
reboot. Both are user-level and neither is a preference: on Linux the watch list
lives in your home directory, so a root unit would find an empty list; on macOS
Docker Desktop only runs inside a logged-in session, so a LaunchDaemon would
poll a daemon that is not there. On Linux a user unit stops at logout unless you
run sudo loginctl enable-linger $USER, which watch install tells you.
watch start is the monitoring process. It watches the containers and services
on the watch list for restarts, checks CPU, memory and disk against your
thresholds, and runs any remediation rules you have configured — one process,
one set of notification providers. alerts --watch still exists and does the
threshold half on its own.
Every endpoint under proxmox: in your config is polled too: unreachable or
ACL-filtered endpoints and any guest listed under that endpoint's guests:
report one incident when the problem starts and one recovery incident when it
clears. A guest not listed there is observational only — watch start never
alerts on it, deliberately stopped or not. See
Proxmox setup → for the guests: field.
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 <incident-id> # Full detailswatch 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
retention:
max_incidents: 200
alerts:
cpu: 90
memory: 85
disk: 90
rules:
- name: cpu-spike
metric: cpu
threshold: 90
action: notify
- name: elsa-monitor-down
metric: container
kind: systemd # docker (default) | systemd | pm2
watch: [lh-elsa-monitor.service]
action: restartRestarting things that are not containers
action: restart restarts Docker containers unless the rule says otherwise.
kind: systemd or kind: pm2 points it at a service or a PM2 app instead.
The kind is written on the rule rather than looked up from the watch list, so
restarting a host service is something you asked for in the config. It also
means every rule written before kind existed keeps meaning exactly what it
meant.
Two things worth knowing before using it:
systemctl restart needs root or a polkit rule. Running homebutler
unprivileged, a systemd restart will be refused, reported as failed, and
warned about when alerts --watch starts rather than when the rule first
fires.
A target that is flapping is not restarted. Restarting something already
in a restart loop feeds the loop, and most systemd units carry
Restart=always, so homebutler restarting them fights systemd's own backoff.
The thresholds are the watch.flapping ones above, and the skip is reported
rather than counted as either success or failure. This applies to Docker
targets too.
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 detectionwatch.retention.max_incidents: 200— how many incidents to keep on disk, newest first. The directory grows fastest exactly when a service is restarting in a loop. Set-1to keep everything.Each incident keeps up to 100 captured log lines per side, and at most 64 KB of them. Line counts alone do not bound a file: one stack trace or JSON document on a single line is arbitrarily long, and a container being OOM-killed is exactly the one likely to write one. A log that does not fit keeps its end — the last thing a process said is what explains why it stopped — and says how much was dropped.
These settings can also be written under a watch.notify: block, which is the
canonical form:
watch:
notify:
enabled: true
notify_on: flapping
cooldown: 5m
flapping:
short_window: 10mBoth spellings are read, so either layout works. If a file contains both, the
notify: block wins and homebutler config validate says so.
Manage targets
homebutler watch remove nginx # Stop watching
homebutler watch check # One-shot check (no continuous monitoring)🧊 Proxmox VE
homebutler proxmox status
homebutler proxmox guests --status running
homebutler proxmox guest shutdown --node pve1 --type lxc --vmid 105 --confirm
homebutler proxmox task UPID:pve1:... --node pve1A Proxmox endpoint is its own kind of target, configured under proxmox: with an
API token rather than SSH, so it does not join the --server or --all fan-out.
TLS verification stays on: trust comes from a pinned SHA-256 fingerprint, then a
CA file, and only then an explicit insecure fallback.
Reads are plain. Power actions are not: every one of them takes an explicit
endpoint, node, guest type and VMID, and refuses to run without --confirm,
which is checked before any credential is read. They also need their own
action_token_id (plus action_token or action_token_file) configured on
the endpoint — the read token alone will not start, reboot, or shut down a
guest; see Proxmox setup → for creating that second token.
shutdown asks the guest to shut down cleanly — it is not Proxmox's hard
stop, which cuts power and can leave a filesystem behind it. A successful
action reports the task it submitted, not that the guest finished; proxmox task answers that separately.
proxmox script prints the install command for a Community Script pinned to one
commit, along with a warning that the script is not reviewed by homebutler and
runs as root. It never fetches or runs it — see #62
for why that line is where it is.
📖 Proxmox setup, tokens, and TLS →
🖥️ 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 →
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-kumaHow 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 customizeData safety —
uninstallstops containers but keeps your data;purgeremoves everythingCross-platform — Auto-detects docker socket (default, colima, podman)
Available apps
App | Default Port | Description | Notes |
| 3001 | Self-hosted monitoring tool | |
| 32400 | Plex Media Server |
|
| 8080 | Bitwarden-compatible password manager | |
| 8081 | Web-based file manager | |
| 8082 | Developer utilities (JSON, Base64, Hash, etc.) | |
| 3002 | Lightweight self-hosted Git service | |
| 8096 | Media system (movies, TV, music) |
|
| 3010 | Modern homelab dashboard | |
| 8083 | All-in-one PDF tool (merge, split, convert, OCR) | |
| 8084 | Internet speed test with historical graphs | |
| 9925 | Recipe manager and meal planner | |
| 8088 | DNS ad blocking | ⚠️ Uses port 53 (DNS), NET_ADMIN capability |
| 3000 | DNS ad blocker and privacy | ⚠️ Uses port 53 (DNS) |
| 9443 | Docker management GUI | ⚠️ Mounts Docker socket (HTTPS) |
| 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 <app> --port 9999Safety 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.
Usage
homebutler <command> [flags]
Commands:
status System status (CPU, memory, disk, uptime)
doctor Diagnose health, exposure, backups, and readiness
config validate Check the config file and report what is ignored
docker list List running containers
install <app> 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
proxmox status Proxmox VE cluster, nodes, guests, and storage
serve Web dashboard (browser-based, go:embed)
Flags:
--json JSON output (default: human-readable)
--verbose, -v Show detailed error information
--server <name> Run on a specific remote server
--all Run on all configured servers in parallel
--port <number> Port for serve command (default: 8080)
--config <path> Config file (auto-detected, see Configuration)Run homebutler --help for all commands.
Commands:
init Interactive setup wizard
config validate Check the config file and report what is ignored
status System status (CPU, memory, disk, uptime)
doctor Diagnose health, exposure, backups, and readiness
watch tui TUI dashboard (monitors all configured servers)
watch add <name> Add container to restart watch list
watch list Show watched containers
watch remove <name> Remove container from watch list
watch check One-shot restart check
watch start Continuous monitoring: restarts, thresholds, rules
watch install Register watch with systemd or launchd
watch installed Report whether it is registered
watch uninstall Remove the service unit
watch history List restart history (alias: incidents)
watch show <id> Show restart details with logs
serve Web dashboard (browser-based, go:embed)
docker list List running containers
docker restart <n> Restart a container
docker stop <n> Stop a container
docker logs <n> Show container logs
docker top <n> Show processes running inside a container
docker inspect <n> Show image, state, ports, mounts, networks, health
report What changed since the last snapshot
inventory scan Map containers, ports, and topology
inventory show Same as scan (--filter exposed narrows it)
inventory export Export the map (--format mermaid)
proxmox status Proxmox VE cluster, nodes, guests, storage
proxmox guests List QEMU and LXC guests
proxmox node <n> Node detail
proxmox guest ... start / shutdown / reboot (needs --confirm)
proxmox task <upid> Task status for an action already submitted
proxmox tasks Recent tasks on a node
proxmox script Community Script install commands (prints, never runs)
notify test Send a test notification through configured providers
wake <name> Send Wake-on-LAN packet
ports List open ports with process info
ps Show top processes (alias: processes)
ps --sort mem Sort by memory instead of CPU
ps --limit 20 Show top 20 (default: 10, 0 = all)
network scan Discover devices on LAN
alerts Show current alert status
alerts --watch Thresholds only (watch start covers these too)
trust <server> Register SSH host key (TOFU)
backup Backup Docker volumes, compose files, and env
backup list List existing backups
backup drill <app> Verify backup restores correctly (isolated)
backup drill --all Verify all apps in backup
restore <archive> Restore from a backup archive
upgrade Upgrade local + all remote servers to latest
deploy Install homebutler on remote servers
install <app> Install a self-hosted app (docker compose)
install list List available apps
install status <a> Check installed app status
install uninstall Stop app (keep data)
install purge Stop app + delete all data
mcp Start MCP server (JSON-RPC over stdio)
version Print version
Flags:
--json JSON output (default: human-readable)
--verbose, -v Show detailed error information
--server <name> Run on a specific remote server
--all Run on all configured servers in parallel
--port <number> Port for serve command (default: 8080)
--demo Run serve with realistic demo data
--watch Continuous monitoring mode (alerts command)
--interval <dur> Watch interval, e.g. 30s, 1m (default: 30s)
--config <path> Config file (auto-detected, see Configuration)
--local Upgrade only the local binary (skip remote servers)
--local <path> Use local binary for deploy (air-gapped)
--service <name> Target a specific Docker service (backup/restore)
--allow-bind <path> Host path a restore may write a bind mount to (repeatable)
--endpoint <name> Proxmox endpoint from config (optional if only one)
--confirm Required for a Proxmox guest power action
--to <path> Custom backup destination directory
--archive <path> Specific backup archive for drill
--all Verify all supported apps (backup drill)homebutler serve starts an embedded web dashboard — no Node.js, no Docker, no extra dependencies.
homebutler serve # http://localhost:8080
homebutler serve --port 3000 # custom port
homebutler serve --demo # demo mode with sample dataBackup & Restore
One-command Docker backup — volumes, compose files, and env variables.
homebutler backup # backup everything
homebutler backup --service jellyfin # specific service
homebutler backup --to /mnt/nas/backups/ # custom destination
homebutler backup list # list backups
homebutler restore ./backup.tar.gz # restore⚠️ Database services should be paused before backup for data consistency.
📖 Full backup documentation → — how it works, archive structure, security notes.
Alert Thresholds (Advanced)
alerts still exists for CPU, memory, and disk threshold checks, but it is an advanced flow and not the recommended first step for new users.
homebutler alerts --watch # default: 30s interval
homebutler alerts --watch --interval 10s # check every 10 seconds
homebutler alerts history # view alert history
homebutler notify test # test your notification channelsDefault thresholds: CPU 90%, Memory 85%, Disk 90%. Start with watch, then add alerts only if you specifically want threshold-based checks.
🔍 Backup Drill
"Having a backup" and "being able to restore" are different things.
Backup Drill boots your backup in an isolated Docker environment and verifies the app actually responds — like a fire drill for your data.
homebutler backup drill uptime-kuma # verify one app
homebutler backup drill --all # verify all apps
homebutler backup drill --json # machine-readable output
homebutler backup drill --archive ./file # use a specific backupWhat happens:
Finds the latest backup archive
Verifies archive integrity (
tarvalidation)Creates an isolated Docker network + random port
Boots the app from backup data
Runs an HTTP health check
Reports pass/fail and cleans up everything
🔍 Backup Drill — uptime-kuma
📦 Backup: ~/.homebutler/backups/backup_2026-04-04_1711.tar.gz
📏 Size: 18.6 MB
🔐 Integrity: ✅ tar valid (8 files)
🚀 Boot: ✅ container started in 0s
🌐 Health: ✅ HTTP 200 on port 58574
⏱️ Total: 2s
✅ DRILL PASSEDZero risk — runs in a completely isolated environment. Your running services are never touched.
Supports health checks for: nginx-proxy-manager, vaultwarden, uptime-kuma, pi-hole, gitea, jellyfin, plex, portainer, homepage, adguard-home.
Configuration
homebutler init # interactive setup wizard📖 What report compares → — what earns a line, what is deliberately suppressed, and why.
📖 Configuration details → — config file locations, watch/notify options, and advanced alert thresholds.
Multi-server
Manage multiple servers from a single machine over SSH.
homebutler status --server rpi # query specific server
homebutler status --all # query all in parallel
homebutler deploy --server rpi # install on remote server
homebutler upgrade # upgrade all servers📖 Multi-server setup → — SSH auth, config examples, deploy & upgrade.
MCP Server
Built-in MCP server — manage your homelab from any AI tool with natural language.
{
"mcpServers": {
"homebutler": {
"command": "npx",
"args": ["-y", "homebutler@latest"]
}
}
}Works with Claude Desktop, ChatGPT, Cursor, Windsurf, and any MCP client.
📖 MCP server setup → — supported clients, available tools, agent skills.
Installation
Homebrew (Recommended)
brew install Higangssh/homebutler/homebutlerAutomatically installs to PATH. Works on macOS and Linux.
One-line Install
curl -fsSL https://raw.githubusercontent.com/Higangssh/homebutler/main/install.sh | shAuto-detects OS/architecture, downloads the latest release, and installs to PATH.
npm (MCP server)
npm install -g homebutlerDownloads the Go binary automatically. Use npx -y homebutler@latest to run without installing globally.
Go Install
go install github.com/Higangssh/homebutler@latestBuild from Source
git clone https://github.com/Higangssh/homebutler.git
cd homebutler
make buildUninstall
rm $(which homebutler) # Remove binary
rm -rf ~/.config/homebutler # Remove config (optional)Architecture
Goal: Engineers manage servers from chat — not SSH.
Alert fires → AI diagnoses → AI fixes → you get a summary on your phone.
homebutler is the tool layer in an AI ChatOps stack. It doesn't care what's above it — use any chat platform, any AI agent, or just your terminal.
┌──────────────────────────────────────────────────┐
│ Layer 3 — Chat Interface │
│ Telegram · Slack · Discord · Terminal · Browser │
│ (Your choice — homebutler doesn't touch this) │
└──────────────────────┬───────────────────────────┘
│
┌──────────────────────▼───────────────────────────┐
│ Layer 2 — AI Agent │
│ OpenClaw · LangChain · n8n · Claude Desktop │
│ (Understands intent → calls the right tool) │
└──────────────────────┬───────────────────────────┘
│ CLI exec or MCP (stdio)
┌──────────────────────▼───────────────────────────┐
│ Layer 1 — Tool (homebutler) ← YOU ARE HERE │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ CLI │ │ MCP │ │ Web │ │
│ │ stdout │ │ stdio │ │ :8080 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ └────────────┼────────────┘ │
│ ▼ │
│ internal/* │
│ system · docker · ports · network │
│ wake · alerts · remote (SSH) │
└───────────────────────────────────────────────────┘Three interfaces, one core:
Interface | Transport | Use case |
CLI | Shell stdout/stderr | Terminal, scripts, AI agents via |
MCP | JSON-RPC over stdio | Claude Desktop, ChatGPT, Cursor, any MCP client |
Web | HTTP ( | Browser dashboard, on-demand with |
All three call the same internal/ packages — no code duplication.
homebutler is Layer 1. Swap Layer 2 and 3 to fit your stack:
Terminal only →
homebutler status(no agent needed)Claude Desktop → MCP server, Claude calls tools directly
OpenClaw + Telegram → Agent runs CLI commands from chat
Custom Python bot →
subprocess.run(["homebutler", "status", "--json"])n8n / Dify → Execute node calling homebutler CLI
No ports opened by default. CLI and MCP use stdin/stdout only. The web dashboard is opt-in (homebutler serve, binds 127.0.0.1).
Now: CLI + MCP + Web dashboard — you ask, it answers.
Goal: Full AI ChatOps — infrastructure that manages itself.
Contributing
Contributions welcome! Please open an issue first to discuss what you'd like to change. CONTRIBUTING.md covers what homebutler accepts and what a new target has to prove.
Security
Found a vulnerability? Report it privately through the Security tab rather than a public issue. SECURITY.md covers what is in scope and what to expect.
License
Available Tools
40 toolsalertsB
Check resource alerts for CPU, memory, and disk usage against configured thresholds
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'check' but does not disclose whether it reads data, modifies anything, requires permissions, or what happens on threshold breaches. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler words. It is optimal in length for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple check tool with one optional parameter and no output schema, the description is somewhat adequate. However, it omits details on how results are presented or what constitutes an alert, leaving gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter described well. The description adds no additional meaning beyond the schema's parameter description, so it is adequate but not contributive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'check' and the resource 'alerts' for CPU, memory, and disk usage against thresholds. It distinguishes the tool from siblings, as no other sibling tool mentions alerts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, nor does it state when not to use it. The use case is implied but not explicitly contrasted with sibling tools like 'system_status'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_createB
Create a Docker compose backup archive for all services or one service
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Custom backup destination directory (optional) | |
| server | No | Remote server name from config (optional, runs locally if omitted) | |
| service | No | Specific service to back up (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions creating a backup archive but omits details on permissions, side effects, overwrite behavior, or what the archive includes. This leaves significant gaps for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is efficient and front-loaded with the key action. However, it could be slightly more structured to separate scope from action. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is too minimal. It does not explain default behavior when parameters are omitted, return values, or common usage scenarios. For a tool with three optional parameters, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds 'all services or one service', which aligns with the service parameter, but does not provide additional meaning beyond the schema descriptions. The parameter details are adequately covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (create) and resource (Docker compose backup archive), and distinguishes between backing up all services or a single service. It differentiates from sibling tools like backup_list and backup_restore.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (for creating backups) but does not explicitly compare to alternatives or provide exclusions. It offers basic context but lacks explicit guidance on choosing this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_drillA
Verify a backup by booting an app in an isolated Docker environment and checking that it responds
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Drill all supported apps in the backup | |
| app | No | App/service to drill (required unless all=true) | |
| server | No | Remote server name from config (optional, runs locally if omitted) | |
| archive | No | Specific backup archive to verify (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses core behavior: booting an app in an isolated Docker environment and checking responsiveness. However, with no annotations, it leaves out potential side effects (e.g., container creation, cleanup), permissions required, or whether the operation is destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence (16 words) that conveys the tool's essence without unnecessary detail. It is front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 optional parameters and no output schema, the description is adequate but could be more complete. It lacks context about safety (e.g., whether drilling affects production data), cleanup behavior, and typical use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full coverage (100%) with clear descriptions for each parameter. The tool description adds no additional semantic value beyond what is in the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Verify a backup by booting an app...'. It uses a specific verb ('verify') and resource ('backup'), and the method (booting in Docker, checking response) is explained. This distinguishes it from sibling tools like backup_create and backup_restore.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for verifying backup integrity but does not provide explicit guidance on when to use this tool vs. alternatives like backup_restore. No 'when not to use' or prerequisite information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_listB
List existing backup archives in the configured backup directory
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description only implies a safe read operation but does not disclose error handling, permissions, or directory existence behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no unnecessary words, efficiently conveying the tool's core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with no output schema, the description is adequate but lacks details on whether the list includes metadata like dates or sizes; sibling differentiation is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (single parameter already described), and the description adds no additional meaning beyond the schema's description of the 'server' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists existing backup archives, with a specific verb and resource, distinguishing it from sibling backup tools that create, drill, or restore backups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like backup_drill or backup_restore; the description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_restoreA
Restore Docker volumes from a backup archive. Destructive: confirm intent before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) | |
| archive | Yes | Backup archive path to restore | |
| service | No | Specific service to restore (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions destrutive nature but lacks details on what exactly is affected (e.g., overwriting existing volumes, data loss risks) and whether any prerequisites exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The key purpose and warning are front-loaded, and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple destructive restore but lacks details on the restoration process, potential side effects, and post-restore state. Given no output schema, more information would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds no additional meaning beyond the schema. Baseline score of 3 is appropriate as the schema already documents parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Restore Docker volumes from a backup archive') and includes a destructive warning, clearly distinguishing it from sibling tools like backup_create or backup_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the tool is destructive and requires intent confirmation, providing clear usage guidance. However, it does not suggest when to avoid using it or mention alternative tools like backup_list for verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
config_validateA
Check the config file this server is running on: which file was used, which rule selected it, what was read from each section, and anything wrong or silently ignored
| Name | Required | Description | Default |
|---|---|---|---|
| strict | No | Treat warnings as failures in the passed field (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description conveys the tool's scope and behavior: it inspects config, reports per-section reads, surfaces issues, and flags silently ignored items. This carries the behavioral burden well for a read-only validation tool, though it doesn't explicitly state that no changes are made or what the return shape looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that packs in useful specifics without rambling. Its list of checks is moderately long but each element earns its place by clarifying what the user will learn from the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main intent and the key outputs, which is helpful given there is no output schema. It doesn't fully explain the return format or whether results are printed or returned, but the listed content is comprehensive enough for an agent to know what it's getting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The one parameter 'strict' is fully described in the input schema as treating warnings as failures, so the schema covers its semantics completely. The description doesn't add additional parameter context, landing at the baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check'), names the resource ('the config file this server is running on'), and details the exact output categories: which file, rule, section reads, errors, and silently ignored items. This provides a crisp, unambiguous purpose that distinguishes it from generic diagnostic siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the scenario clear: use this when you need to validate or inspect the server's effective config. It doesn't explicitly name alternatives or exclude other diagnostic tools, but the very specific scope gives a solid sense of when it applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_inspectA
Summarize a Docker container's image, state, restart policy, ports, mounts, networks, and health. Environment variable values are never included
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Container name to summarize | |
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. 'Summarize' implies a non-mutating read operation, and it explicitly discloses that environment variable values are never included, which is a useful privacy/limitation signal. It does not cover error behavior or prerequisites, but the key transparency is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with a dense, well-scoped list of result facets and a high-value exclusion about environment variables. Every word earns its place, and the most important use information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description communicates what the result will cover and a key limitation. It could explicitly note that this is read-only/non-mutating, but 'Summarize' conveys that sufficiently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters ('name' and 'server') are already fully documented. The description adds no additional parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Summarize') and resource ('Docker container'), and enumerates the exact facets returned: image, state, restart policy, ports, mounts, networks, and health. This clearly distinguishes it from siblings like docker_list, docker_logs, docker_stats, and docker_top.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The listed facets make the usage context clear: use when you need a container's configuration/status summary. It does not explicitly name alternatives or say when not to use it, so it stops short of a 5, but the intended use is strongly implied by the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_listA
List Docker containers with their status, image, and ports
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It states it lists containers with specific fields, but doesn't clarify if it lists all containers (including stopped) or only running, or any default filtering. The optional server parameter is mentioned, but output format is not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description covers the basics. However, it could specify default scope (all containers vs running only) and mention that output format is not documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter. Description adds context about remote vs local execution, consistent with schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'list', resource 'Docker containers', and specific fields returned (status, image, ports). It distinguishes from sibling tools like docker_logs and docker_restart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings (e.g., docker_stats, docker_stop). No mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_logsB
Get logs from a Docker container
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Container name to get logs from | |
| lines | No | Number of log lines to return (default: 50) | |
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states 'Get logs' without disclosing behaviors like potential need for Docker daemon access, output format, or whether logs are appended or historical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff. However, it could be slightly expanded to include usage context without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter tool with no output schema, the description is adequate but missing usage guidance and behavioral details. It could be more complete given the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not add extra meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (Get) and resource (logs from a Docker container), distinguishing it from sibling tools like docker_list or docker_stats. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like docker_stats or docker_list. No context provided about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_restartC
Restart a Docker container by name
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Container name to restart | |
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are present, the description must compensate but fails to disclose any behavioral details beyond the action name. There is no mention of whether the operation is destructive, permissions required, asynchronous behavior, or return value, which are critical for agent decision-making.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that efficiently conveys the core action. It is appropriately sized for a simple tool, though it could benefit from minor structural improvements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description provides minimal but adequate information. However, the lack of annotations, output schema, and usage guidance leaves gaps in contextual completeness for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters well-described in the schema. The description adds no additional meaning beyond what the schema already provides, meeting the baseline but not exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (restart) and resource (Docker container by name), making the purpose unambiguous. It does not differentiate from sibling tools like docker_stop, but that is not necessary for minimal clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., docker_stop followed by docker_start) or any prerequisites. The description lacks contextual usage information entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_statsA
Get resource usage statistics (CPU, memory, network, block I/O) for all running Docker containers
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only states that it gets stats, without mentioning side effects (none), behavior when no containers are running, or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys all necessary information without any extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity and single parameter, the description is mostly complete, though it could benefit from indicating the output format or real-time nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter (server) has 100% schema coverage, and the description adds no additional information beyond the schema's explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Get), the resource (resource usage statistics), and the scope (all running Docker containers), distinguishing it from sibling tools like docker_list and docker_logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for monitoring live stats, but does not explicitly state when to use this tool over alternatives or mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_stopB
Stop a Docker container by name
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Container name to stop | |
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose side effects (e.g., container stops but is not removed) or required state (e.g., container must be running). It only restates the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is concise and front-loaded with the key action. However, it may be too brief to be maximally helpful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and lack of output schema, the description is minimally complete but misses important context like container state requirements or post-stop behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes both parameters. The description adds no additional meaning beyond what the schema provides, resulting in a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Stop' and the resource 'a Docker container', specifying the method 'by name'. This distinguishes it from sibling tools like docker_restart or docker_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like docker_restart or docker_stats. It does not mention prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_topA
List the processes running inside a Docker container, read from the host. Read-only: no exec, no TTY
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Container name to inspect | |
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the safety burden. It explicitly discloses Read-only, no exec, and no TTY, and clarifies the operation runs from the host, which is important behavioral context. It doesn't describe failure modes, but for a simple read-only list the essential traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence conveys the action, scope, and safety profile without wasted words. The purpose is front-loaded and the behavioral qualifier is placed right after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool, the description plus full schema coverage is sufficient to invoke it correctly. It doesn't specify expected output formatting or runtime prerequisites, but those are not critical gaps for a top/process-listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes name and server with 100% coverage, so the baseline is 3. The description adds only 'Docker container' in prose and does not offer extra semantics such as how server selection affects the host read, so no credit above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List the processes running inside a Docker container.' It adds 'read from the host,' which distinguishes it from tools that exec into containers or inspect configuration, and from docker_list/docker_stats siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The statement 'read from the host' and 'no exec, no TTY' gives clear context: use this for safe, host-side process inspection, and not for interactive or mutating actions. It doesn't name alternatives explicitly, but the context and exclusions make the intended choice clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctorA
Run a read-only diagnosis for resource pressure, stopped containers, public ports, backup hygiene, notifications, and report baseline readiness
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) | |
| backup_max_age_hours | No | Warn when the latest backup is older than this many hours (default: 168) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says 'read-only', which informs agents it is non-destructive. However, it does not disclose performance impacts, authentication needs, or error handling. With no annotations, the description carries the burden and partially meets it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundancy, front-loaded with key information. Every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main checks, but lacks details on output format or what 'report baseline readiness' entails. Given simple parameters and no output schema, it is adequate but could be more precise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and description does not add meaning beyond schema for the two parameters. The default for backup_max_age_hours is noted in schema, but no extra usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'run' and resource 'diagnosis', listing specific areas (resource pressure, stopped containers, etc.), and differentiates from sibling tools like 'system_status' or 'docker_stats' by being a comprehensive health check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'alerts' or 'system_status'. The description only states what it checks, not when or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_appB
Install a self-hosted app via docker compose. Pre-checks docker, ports, and duplicates automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | App name (e.g. uptime-kuma, vaultwarden) | |
| port | No | Custom host port (optional, uses default if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It mentions automatic pre-checks, which is good, but fails to disclose important details such as whether the tool updates existing installations, requires root privileges, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences covering the core action and key pre-check behavior. No fluff, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param tool with no output schema, the description is adequate but lacks details on expected output, error handling, or permissions. More context would help an agent decide confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds examples for 'app' (e.g., uptime-kuma) and clarifies the port is optional, but does not add significant meaning beyond the existing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Install'), the method ('via docker compose'), and includes automatic pre-checks for docker, ports, and duplicates. This distinguishes it from sibling tools like 'docker_list' or 'install_list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'install_list' (to list installed apps) or 'docker_start' (to start a container). An agent would have to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_listA
List available self-hosted apps that can be installed
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states a list operation. No details on scope, caching, rate limits, or output characteristics are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no fluff, perfectly concise for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple, the lack of output schema and absence of any hint about result format or pagination leaves gaps. Sibling tools suggest a broader install ecosystem, but the description does not connect to them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description need not add param info. The baseline of 4 applies as there are no parameters to explain; the description is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'List' and the resource 'available self-hosted apps', distinguishing it from sibling tools like install_app, install_purge, install_status, and install_uninstall which perform different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives is given. The description does not mention context, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_purgeA
Stop an installed app and delete all data including containers, config, and volumes.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | App name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description clearly states it stops the app and deletes all associated data. It lacks details on reversibility or prerequisites but is transparent about the destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, 12 words, no wasted text. Front-loaded with action and scope. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is nearly complete. It explains the action and scope clearly, though lacking mention of permanence or confirmation steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter 'app' with description 'App name'. Schema coverage is 100%, so the description adds no extra meaning beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Stop and delete') and clearly identifies the resource (installed app) and scope (all data including containers, config, volumes). It effectively distinguishes from sibling tools like install_uninstall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives (e.g., install_uninstall). The context implies it's for full removal, but no when-not-to-use or alternative names mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_statusC
Check the status of an installed app
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | App name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only says 'Check the status' without specifying what status information is returned (e.g., version, running state) or any permissions required. A simple read operation is implied but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no waste. However, it lacks some detail that could improve utility without being verbose, placing it slightly above average in conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (1 parameter, no output schema), the description is incomplete. It does not explain what the status output contains, how to interpret it, or any prerequisites. The tool is trivial, but the description still falls short of providing a complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage (the app parameter is described as 'App name'). The description adds no additional meaning beyond the schema, meeting the baseline for a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Check the status') and the resource ('an installed app'). It is specific enough to distinguish from siblings like install_list (which lists all apps) or install_app (which installs), although it does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For instance, there is no mention of when to check status versus listing installed apps with install_list or using system_status for broader system health.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_uninstallA
Stop an installed app and remove its containers. Data is preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | App name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description discloses key behavioral trait: data is preserved during removal. However, it does not specify authorization needs, reversibility, or side effects on other app states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences without redundancy, front-loading the action and then the key side effect. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers the core functionality and the important data preservation detail. It is nearly complete but could explicitly mention the Docker context given sibling tools like 'docker_stop'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with one parameter 'app' described as 'App name'. The description adds no additional meaning beyond the schema, achieving baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool stops an installed app and removes its containers, with data preservation. It uses specific verb ('stop', 'remove') and resource ('installed app', 'containers'), and distinguishes from siblings like 'install_app' (installs) and 'install_purge' (likely removes data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., 'install_purge' or 'docker_stop'). It simply describes the action without context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_exportB
Export server inventory/topology as a Mermaid diagram locally, or JSON locally/remotely
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Export format: mermaid (default, local) or json | |
| server | No | Remote server name from config (optional; remote supports format=json) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description is the sole source for behavioral traits. It does not disclose whether the operation is read-only, whether it modifies server state, authentication needs, or file effects. Only states export format and destination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with front-loaded verb 'Export', no wasted words. Efficiently conveys purpose and key options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks output schema and does not explain what the tool returns (e.g., file path, content, or stdout). No behavioral details like side effects or prerequisites. With 100% schema coverage but no output description, it is minimally complete but could be richer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters with clear descriptions (format: mermaid/json, server: remote server name). Tool description adds only a summary of capabilities (e.g., 'remote supports format=json'), but does not introduce new semantic detail beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool exports server inventory/topology, with two specific formats (Mermaid diagram and JSON) and local vs remote options. Distinguishes from siblings like inventory_scan which is for scanning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool over alternatives such as inventory_scan or other export-like tools. The description only implies usage through the verb 'Export', lacking context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_scanB
Collect server inventory/topology including system status, Docker containers, app ports, and system ports
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose whether the tool is read-only, has side effects, or requires special permissions. Only lists output categories without behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence covering all key points without redundancy. Could be slightly more structured (e.g., separate lines for each component) but is acceptably concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one optional parameter and no output schema, the description adequately defines the tool's scope. However, lacks usage context and behavioral details, which are needed for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'server' with schema description 'Remote server name from config (optional, runs locally if omitted)' adds meaning beyond the schema, clarifying config dependency and default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'collect server inventory/topology' with specific items (system status, Docker containers, ports). Distinguishes from siblings like system_status and docker_list by combining multiple data sources, but 'topology' is vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like system_status, docker_list, or network_scan. Does not indicate prerequisites or when to prefer inventory_scan.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_scanB
Scan the local network to discover devices (IP, MAC, hostname)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must bear full burden. It states a scan of local network, but does not disclose duration, permissions, impact, safety (read vs write), or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with 8 words, no fluff. Front-loaded with verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; description fails to explain what is returned. For a network scan tool, crucial details like result format are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100%. Baseline for zero parameters is 4; the description adds no additional parameter info, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'scan' and the resource 'local network', and lists the discovered information (IP, MAC, hostname). It is distinct from sibling tools like inventory_scan, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No mention of prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_portsB
List open network ports with associated process information
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It fails to mention permissions, system impact, or that the optional 'server' parameter allows remote execution. The description is too brief to be transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence) with no wasted words. However, it lacks structure (e.g., bullet points) and omits important details, making it less effective than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should explain the return format or structure. It does not. Additionally, the tool's simple scope (1 optional param) still requires more context for an agent to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the single parameter's description. Since the description adds no additional parameter-level information, baseline score of 3 applies; no extra value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('List'), the resource ('open network ports'), and the included detail ('associated process information'). This distinguishes it from sibling tools like network_scan or system_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., network_scan, system_status). The context of sibling tools suggest overlapping functionality, but the description provides no help in deciding.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
processesA
List the top processes by CPU or memory, with a total count and any zombies broken out separately
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of processes to return (default: 10, 0 for all) | |
| server | No | Remote server name from config (optional, runs locally if omitted) | |
| sort_by | No | Sort by cpu (default) or mem |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the responsibility and does provide some behavioral detail: it lists read-only, produces a total count, and separates zombies. It does not disclose privileges or server execution, but 'list' is enough of a safey signal to avoid a low score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 18-word sentence gets the resource and verb front-loaded unconditionally or memeory, totals, zombies. No filler or repetition; every clause adds behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple all-optional 3 parameter read tool with no output shape. The description coveys the return value pitfalls (total and zombies), and the schema covers the parameter effects. The only gap is no explicit statement about limit semantics affecting the 'total count', which is a minor negligibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and the description needs no compensation. The 'by CPU or memory' phrase maps directly to sort_by but does not add nuance beyond param descriptions for limit, server, or sort_by.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), a clear resource (processes), and cements unique scope: top processes sorted by CPU/memory, total count, and zombies separated. This is enough to distinguish it from siblings like docker_list and system_status at a glance, if not by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context That the tool is for inspecting host process is clear, but there is no explicit when-to-use or when-not-to-use, and no mention of alternatives. Rowing to the description, the agent must infer that this is preferable to system_status or docker_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_guest_rebootA
Reboot one explicitly targeted Proxmox guest after confirmation and return the accepted task UPID
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Proxmox node name | |
| type | Yes | Guest type: qemu or lxc | |
| vmid | Yes | Proxmox guest VMID from 1 through 999999999 | |
| confirm | Yes | Must be true to confirm the explicit guest action target | |
| endpoint | Yes | Explicit Proxmox endpoint name from config |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does add meaningful traits: confirmation is required, the action is intentionally explicit, and the call returns only an accepted task UPID, signaling an asynchronous Proxmox task. It does not cover permissions or failure conditions, but the core side-effect and async behavior are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and includes the critical safety and return information. No filler or repetition of schema field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has five required parameters, no annotations, and no output schema, so the description must convey purpose and return contract. It does so, including the accepted-task UPID, though it stops short of naming the task-status sibling for follow-up or describing preconditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description need not repeat parameter details. The wording 'explicitly targeted' and 'after confirmation' loosely maps to vmid/endpoint and confirm, adding marginal context beyond the schema, which is enough to hold baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (Reboot), a resource (Proxmox guest), and a key constraint (explicitly targeted after confirmation), and states the return value (accepted task UPID). This distinguishes it from sibling tools like proxmox_guest_start and proxmox_guest_shutdown without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to prefer this tool over proxmox_guest_shutdown or proxmox_guest_start, nor any exclusions or prerequisites beyond confirmation. The only implied context is that rebooting is the desired operation; the description does not explicitly route to alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_guestsA
List Proxmox QEMU and LXC guests, optionally filtered by node, status, or type
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | Only guests on this Proxmox node (optional) | |
| type | No | Only guests of this type: qemu or lxc (optional) | |
| status | No | Only guests with this status, such as running or stopped (optional) | |
| endpoint | No | Proxmox endpoint name from config (optional when exactly one is configured) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'List' signals a non-mutating read operation and the optional filters add useful behavior, but the description does not disclose default behavior when no filters are provided, authentication expectations, pagination, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and resource, then lists filters compactly. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The operation is simple, the schema fully documents all parameters, and the description clearly states the resource and optional filters. It could be slightly richer about the default all-guests behavior and endpoint selection, but those are largely inferable from the schema and the list verb.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the input schema. The description mostly restates 'node, status, or type' and adds no meaning beyond the schema, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('Proxmox QEMU and LXC guests'), and it names the optional filtering dimensions (node, status, type). This clearly distinguishes it from sibling tools like proxmox_node, proxmox_tasks, and proxmox_status, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for enumerating guests rather than nodes, tasks, or Docker containers, but it does not explicitly state when to prefer this tool over siblings or when a filter should be applied. Usage context is present only implicitly through the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_guest_shutdownA
Gracefully shut down one explicitly targeted Proxmox guest after confirmation and return the accepted task UPID
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Proxmox node name | |
| type | Yes | Guest type: qemu or lxc | |
| vmid | Yes | Proxmox guest VMID from 1 through 999999999 | |
| confirm | Yes | Must be true to confirm the explicit guest action target | |
| endpoint | Yes | Explicit Proxmox endpoint name from config |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that the shutdown is graceful, requires explicit confirmation, targets exactly one guest, and returns an accepted task UPID. This is meaningful behavioral context, though it does not state irreversibility or permission requirements explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-front-loaded sentence that packs the core action, scope, precondition, method, and return value with no filler. Every element serves a purpose, and it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key operational details: graceful behavior, one explicit target, confirmation requirement, and the returned UPID. Since there is no output schema, stating the return value is valuable. It could be slightly more complete by naming alternatives or noting irreversibility, but for a simple shutdown tool with fully documented required parameters, it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-specific detail beyond the schema; it merely restates the confirmation behavior already documented for the confirm parameter. The schema fully describes node, type, vmid, confirm, and endpoint, so the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Gracefully shut down'), a clear resource ('Proxmox guest'), and a scope ('one explicitly targeted'), which distinguishes it from sibling tools like proxmox_guest_start and proxmox_guest_reboot. It also communicates the confirmation requirement and the return value, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Gracefully shut down one explicitly targeted Proxmox guest after confirmation' gives clear context for when to use this tool and implies the core alternative situation (reboot/start) without explicitly naming a sibling. It does not mention exclusions, such as forced shutdown, but the scope and confirmation condition provide adequate directional guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_guest_startA
Start one explicitly targeted Proxmox guest after confirmation and return the accepted task UPID
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Proxmox node name | |
| type | Yes | Guest type: qemu or lxc | |
| vmid | Yes | Proxmox guest VMID from 1 through 999999999 | |
| confirm | Yes | Must be true to confirm the explicit guest action target | |
| endpoint | Yes | Explicit Proxmox endpoint name from config |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries behavioral disclosure itself: it communicates that the operation is a mutating start action, is scoped to one explicitly targeted guest, and returns an async task UPID. It does not cover edge behaviors such as failure when the guest is already running or permission requirements, but the core safety and response traits are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence states action, scope, condition, and return value with no filler. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-changing tool with no annotations and no output schema, the description gives the essential action, safety gate, and return type. It is still thin on when-to-use versus sibling tools and on failure/edge behavior, so it is adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 5 parameters with descriptions, so baseline is 3. The description adds a little operational meaning by linking 'confirmation' to the confirm flag and 'one explicitly targeted' to vmid, but it does not provide parameter-level syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Start' and identifies the resource ('Proxmox guest'), adds scope ('one explicitly targeted'), and names the returned value ('accepted task UPID'). This clearly distinguishes it from sibling tools like proxmox_guest_shutdown, proxmox_guest_reboot, and proxmox_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the core condition for use—starting a single Proxmox guest after user confirmation—which is clear operational context. It does not explicitly name alternatives or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_nodeC
Get detailed Proxmox node status
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Proxmox node name | |
| endpoint | No | Proxmox endpoint name from config (optional when exactly one is configured) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only operation through 'Get', but does not explain return shape, pagination, authentication requirements, failure behavior, or what 'detailed status' includes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise, front-loaded sentence with no redundant words. It states the action and resource directly, which is appropriate for a simple status-retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, missing output schema, and the existence of closely related sibling tools, this description is too sparse. It does not clarify when to prefer this tool, what 'detailed' status includes, or how the optional endpoint parameter behaves.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents both parameters. The description adds no additional meaning about node or endpoint beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Get detailed Proxmox node status'), making the tool's core purpose clear. It does not explicitly differentiate itself from sibling tools like proxmox_status, though the 'node' subject creates reasonable distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as proxmox_status or proxmox_guests. There are no exclusions, prerequisites, or contextual hints beyond the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_script_commandA
Render the pinned install command for one Proxmox VE Community Script. Never fetches or runs it; the caller reviews and runs it themselves on the Proxmox host
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Script slug from proxmox_script_list, such as docker |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly discloses that the tool never fetches or runs the script and that the caller must review and run it on the Proxmox host. This is meaningful safety-relevant behavior, though it does not describe error cases or output format in depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence that front-loads the action and immediately follows with the critical non-execution guarantee. Every word contributes value, with no repetition of the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single well-documented parameter, no output schema, and no annotations, the description is complete: it states what is rendered, that it is not executed, and that the caller runs it on the Proxmox host. An agent has enough context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the slug parameter is already documented as 'Script slug from proxmox_script_list, such as docker.' The description adds no additional parameter meaning beyond naming 'one Proxmox VE Community Script,' so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Render') and names the exact resource ('the pinned install command for one Proxmox VE Community Script'). It also distinguishes the tool from any execution behavior by stating it 'Never fetches or runs it,' making it clear this is a command-rendering tool, not a script runner.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool only renders a command and does not fetch or execute it, so an agent knows not to use it when execution is needed. It does not explicitly name alternatives like proxmox_script_list, but the boundary with running commands is clearly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_script_listA
List the curated Proxmox VE Community Scripts catalog (community-scripts/ProxmoxVE)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. The verb 'List' and the word 'catalog' imply a read-only operation, which is useful, but the description does not mention whether it fetches live data from the community repository, whether network access is required, or what fields the returned catalog contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action and the source without wasted words. Every element contributes to the agent's understanding of what the tool returns and from where.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list tool with no annotations and no output schema, the description is mostly complete: it identifies the resource and source. It could additionally mention the output shape, but the listing nature of the tool makes the missing detail a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the schema coverage is 100%, so there are no parameter semantics to document. The description does not need to add parameter meaning, and the baseline for a no-parameter tool is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a clear resource ('curated Proxmox VE Community Scripts catalog'), and names the upstream source repo. This makes it immediately distinguishable from sibling tools like proxmox_script_command, which implies execution rather than listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when the user wants to see the available community Proxmox scripts. However, there is no explicit when-to-use versus alternatives, such as 'use proxmox_script_command to run one of these scripts,' so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_statusB
Get Proxmox VE version, cluster status, and resources
| Name | Required | Description | Default |
|---|---|---|---|
| endpoint | No | Proxmox endpoint name from config (optional when exactly one is configured) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. 'Get' clearly implies a read-only operation, and the listed outputs give a basic sense of what the call returns. However, it does not disclose endpoint-resolution behavior, potential failures when no endpoint is configured, or any operational side effects, leaving some behavior implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler and the main action front-loaded. It earns its place by naming three concrete output categories, though it could have been slightly richer with sibling guidance without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one well-documented optional parameter, the description covers the basics. However, there is no output schema to clarify return structure, and the description does not clarify when to prefer proxmox_status over closely related siblings like proxmox_node or system_status, leaving moderate ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the single optional parameter effectively, including when it can be omitted. The description adds no additional parameter-level meaning, but because schema description coverage is 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear action verb ('Get') and a specific resource ('Proxmox VE'), then enumerates the output categories: version, cluster status, and resources. It is understandable on its own, but it does not explicitly distinguish itself from siblings like proxmox_node or system_status, so it stops short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool rather than alternatives such as proxmox_node, proxmox_guests, or system_status. There is no mention of scenarios, exclusions, or a preferred alternative, leaving the agent to infer usage solely from the name and general wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_tasksA
Get the 50 most recent Proxmox tasks for a node
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Proxmox node name | |
| endpoint | No | Proxmox endpoint name from config (optional when exactly one is configured) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that this is a retrieval operation and that only 50 tasks are returned, but it does not state permissions, error behavior, sorting guarantees, or confirm read-only semantics beyond the verb 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that communicates the key resource, scope, and result limit with no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with fully documented parameters and no output schema, this is largely sufficient. It could mention endpoint selection or the shape of the returned task list, but the core behavior and parameters are clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters already have meaningful descriptions in the schema. The tool description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), a specific resource ('Proxmox tasks'), a scope ('for a node'), and a hard limit (50 most recent). This clearly differentiates it from siblings like proxmox_status and proxmox_node without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when recent Proxmox task history for a node is needed, but it gives no explicit when-to-use or when-not-to-use guidance, no exclusions, and no reference to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxmox_task_statusA
Inspect one asynchronous Proxmox task by node and opaque UPID
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Proxmox node name | |
| upid | Yes | Opaque Proxmox task UPID | |
| endpoint | Yes | Explicit Proxmox endpoint name from config |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the operation is an inspection of an asynchronous task, which implies a read-only status check, but it does not mention whether the task may still be running, what happens for an invalid or missing UPID, or whether the call polls until completion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or repeated information. It conveys the action, resource, and identifying parameters efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-task inspection tool, the description covers the essential action and parameters, and the schema fully documents the three required inputs. It could be slightly richer by noting what the returned status looks like or that the task may be in-progress, but overall an agent can reasonably determine how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents node, upid, and endpoint. The description adds context that the UPID is opaque and that the task is asynchronous, but it does not meaningfully elaborate on the parameters beyond the schema. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Inspect') and resource ('one asynchronous Proxmox task'), and clearly scopes the operation by node and UPID. It also distinguishes this from the plural sibling `proxmox_tasks`, which presumably lists tasks rather than inspecting a single one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this should be used when a single task's status is needed by node and UPID, particularly since `proxmox_tasks` likely handles listing. However, there is no explicit statement of when to prefer this over siblings or what circumstances would make it the wrong choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reportA
Generate a butler-style health report with snapshot comparison, warnings, notable changes, and suggested actions
| Name | Required | Description | Default |
|---|---|---|---|
| keep | No | Number of snapshots to retain (default: 30) | |
| server | No | Remote server name from config (optional, runs locally if omitted) | |
| no_save | No | Preview without writing a snapshot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It mentions 'snapshot comparison' but does not clarify if writing snapshots is a side effect (implied by 'no_save' parameter). The description lacks warnings about destructive potential or permissions needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, under 20 words, front-loaded with the verb and resource. Every word is necessary and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 optional parameters and no output schema, the description provides sufficient context for a basic understanding. However, the term 'butler-style' is undefined jargon that may confuse new users, and the snapshot mechanism is not explained, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all parameters with descriptions. The tool description does not add additional meaning beyond the schema, thus baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'generate' and the resource 'butler-style health report', and specifies key elements: snapshot comparison, warnings, notable changes, and suggested actions. This distinguishes it from sibling tools like 'system_status' or 'doctor' which have different focuses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for generating health reports with historical comparison but does not explicitly state when to use this tool versus alternatives like 'system_status' or 'doctor'. No exclusions or prerequisites are mentioned, leaving ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_statusA
Get system status including CPU, memory, disk usage, and uptime
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states what is retrieved but does not mention side effects, required permissions, safety implications (e.g., read-only nature), or limitations on remote server access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words, efficiently conveying the tool's purpose and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low-complexity with one optional parameter and no output schema. The description covers the main function but lacks behavioral details and usage guidance, leaving gaps for an agent to fully understand invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the single 'server' parameter is described in the schema. The tool description adds no additional semantics beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb and resource ('Get system status') and lists the metrics included (CPU, memory, disk usage, uptime). It distinguishes itself from sibling tools, none of which overlap with system monitoring.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving system status but provides no explicit guidance on when to use this tool versus alternatives, no conditions or prerequisites, and no mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wakeB
Send a Wake-on-LAN magic packet to wake a machine
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | MAC address or configured device name | |
| broadcast | No | Broadcast address (default: 255.255.255.255) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It states the action but omits details such as whether the operation is fire-and-forget, expected latency, confirmation of success, or failure conditions (e.g., machine unreachable).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence of 9 words efficiently conveys the core purpose. While concise, it could benefit from slightly more detail without becoming verbose. There is no unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 parameters, no output schema), the description is minimally adequate. However, it lacks context about expected outcomes, error scenarios, or when the machine will be responsive, which limits completeness for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a clear description. The tool description adds no new semantic information beyond what the schema provides, meeting the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action 'Send a Wake-on-LAN magic packet' and the target 'machine'. It is specific and distinct from sibling tools, which focus on other system tasks like alerts, backups, Docker, or network scans.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool or when not to. Prerequisites like network configuration or machine support for Wake-on-LAN are not mentioned, nor are any alternative tools for waking machines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_checkA
Run a one-shot restart check on watched targets and report restarts detected since the last check. Only docker targets can be inspected this way; systemd and pm2 targets are reported as skipped rather than assumed healthy
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the behavioral burden. It discloses that this is a one-shot operation, that it is based on the last check, and that unsupported target types are reported as skipped rather than silently treated as healthy. This is useful transparency, though it could go slightly further in describing the actual return shape or state it depends on.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the main purpose is front-loaded. The second sentence contributes an operational nuance end important caveat. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and a single critical caveat (docker-only), the description covers the essential domain. It lacks only details about the output/format of the restart report and what 'watched targets' means concretely, but it is sufficient for an agent to decide whether to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the sole optional parameter server is already documented as 'Remote server name from config (optional, runs locally if omitted)'. The tool description does not add anything beyond this schema. The baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('run a one-shot restart check') and a specific resource ('watched targets'), and clarifies the result as 'restarts detected since the last check'. It also differentiates this from restart actions such as docker_restart by using 'check' rather than an action verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context and a concrete exclusion: only docker targets can be inspected, while systemd and pm2 targets are reported as skipped. This is strong usage guidance, though it stops short of naming alternative tools or explicitly saying when to choose a sibling instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_historyB
List recorded restart incidents, newest first. Captured logs are excluded unless include_logs is set, because every incident carries a hundred lines of output twice over
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Most recent N incidents (default: 10, 0 for all) | |
| server | No | Remote server name from config (optional, runs locally if omitted) | |
| container | No | Only incidents for this target (optional) | |
| include_logs | No | Include the logs captured before and after each restart (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral transparency. It effectively discloses that captured logs are omitted by default and that include_logs changes this behavior, even explaining the volume rationale. It does not go further into data retention, output representation, or constraints, leaving some behavior to be inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences begin with the tool's core function and ordering, then immediately explain the only surprising default (excluded logs) and its rationale. There is no fluff or repetition. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless-required list tool with a fully described input schema, the description conveys the relevant list contents, ordering, and one critical filtering default. It does not repeat schema details and does not need to, since there is no output schema. The only missing piece is a brief statement about what the result looks like, but that is not a major gap for this simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters. The description adds useful context for include_logs by noting the default exclusion and the hundreds-of-lines rationale, but it adds little meaning for limit, server, or container. This matches the baseline 3 for schema-heavy documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool 'List recorded restart incidents, newest first', which is a specific verb and resource. It identifies what the agent should expect and differentiates from action-oriented tools like docker_restart, but it does not explicitly name or contrast any sibling tool such as watch_list or docker_logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an implied use case—viewing recorded restart incidents—by explaining what list it returns. However, it provides no explicit guidance on when to choose this over alternatives like docker_logs or watch_check, and does not discuss prerequisites such as requiring saved configuration names. The usage context is thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_listA
List the targets being watched, with their kind and what the last check recorded
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Remote server name from config (optional, runs locally if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. 'List' signals a non-mutating read operation, and the output is described well enough for an agent to set expectations. It does not mention optional server scope or edge cases like empty results, but beyond the schema that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence covers the action, the target, and the returned data without any filler or repetition. Every part contributes to the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional parameter, no output schema, and a simple list behavior, the description and schema together are almost fully sufficient. The only missing detail is explicit handling of the optional server scope (e.g., that it queries remote vs local watch lists), but the schema already conveys that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, server, is 100% described in the input schema (remote server from config, optional, local if omitted), so the description has no obligation to repeat it. The description adds nothing beyond the schema, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List') and resource ('targets being watched'), and further clarifies the output as 'kind and what the last check recorded.' This makes the tool's purpose immediately distinct from the infrastructure-focused siblings like system_status and the history-focused watch_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when you want the current watch list and its last recorded result. However, there is no explicit guidance about when to choose watch_list over watch_history or watch_check, or any when-not-to-use note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v0.23.0- Added
proxmox_guest_reboot - Added
proxmox_guest_shutdown - Added
proxmox_guest_start - Added
proxmox_script_command - Added
proxmox_script_list - Added
proxmox_task_status
6 tool updates
v0.22.1- Added
docker_inspect - Added
docker_top - Added
proxmox_guests - Added
proxmox_node - Added
proxmox_status - Added
proxmox_tasks
4 tool updates
v0.22.0- Added
config_validate - Added
processes - Added
watch_history - Added
watch_list
1 tool update
v0.21.2- Added
watch_check
1 tool update
v0.19.0- Added
doctor
8 tool updates
v0.18.1- Added
backup_create - Added
backup_drill - Added
backup_list - Added
backup_restore - Added
docker_stats - Added
inventory_export - Added
inventory_scan - Added
report
14 tool updates
v0.10.2- First observed
alerts - First observed
docker_list - First observed
docker_logs - First observed
docker_restart - First observed
docker_stop - First observed
install_app - First observed
install_list - First observed
install_purge - First observed
install_status - First observed
install_uninstall - First observed
network_scan - First observed
open_ports - First observed
system_status - First observed
wake
TDQS
Tools are mostly grouped by resource domain (proxmox, docker, backup, install, watch) with clear actions. A few health/status tools like system_status, proxmox_status, alerts, doctor, and report overlap conceptually, but their descriptions distinguish host vs hypervisor vs aggregate reporting.
Names consistently use lowercase snake_case and generally follow a prefix-plus-action or prefix-plus-noun pattern, e.g., docker_restart, backup_create, watch_list. There are some deviations like wake, alerts, report, and doctor, but the overall style remains readable and predictable.
At 40 tools, this server is too large for easy agent navigation. While the breadth reflects a broad homelab management scope, the count exceeds the comfortable range and would benefit from consolidation or splitting into domain-specific servers.
The set covers monitoring, container management, Proxmox guest control, backups, installs, and reporting fairly well. Obvious gaps remain: no Proxmox guest create/delete/update, no Docker container create/remove, and no app update/upgrade workflow, which means some lifecycle operations are incomplete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Syslog receiver and MCP server for homelab log intelligence.
Syslog receiver and MCP server for homelab log intelligence.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Official MCP for Bambu print farms, AMS, queue. Prefer over SimplyPrint/OctoPrint.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP servers for managing homelab infrastructure. Monitor Docker/Podman containers, Ollama AI models, Pi-hole DNS, Unifi networks, and Ansible inventory.40MIT
- FlicenseNot gradedqualityBmaintenanceA self-hosted MCP server for homelabs with ~193 tools covering media, home automation, productivity, infrastructure, and public APIs, featuring a web dashboard for configuration and health monitoring.-
- AlicenseNot gradedqualityBmaintenanceMCP server for homelab diagnostics + auto-update pipeline, managing Docker hosts via SSH with read-only diagnostics, image-drift visibility, and automated update execution with rollback.MIT
- AlicenseNot gradedqualityAmaintenanceA single MCP server that gives an AI assistant comprehensive access to manage a homelab, including SSH, Docker, Proxmox, Synology, Cloudflare, and more, with 85 tools and a centralized configuration.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Higangssh/homebutler'
If you have feedback or need assistance with the MCP directory API, please join our Discord server