homelab-monitor-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOMELAB_HOSTS | No | Comma-separated list of remote servers in the format name=user@host. Used for monitoring remote servers via SSH. | |
| MCP_HTTP_PORT | No | Port to run the HTTP server on (e.g. 3000). Used for remote access mode. | |
| MCP_AUTH_TOKEN | No | Authentication token required for HTTP mode. Requests need Authorization: Bearer <token>. | |
| HOMELAB_DB_OVERRIDES | No | Map DB hostnames to local addresses for db_query, e.g. "pgsql=127.0.0.1:5433". | |
| HOMELAB_PROJECT_DIRS | No | Colon-separated list of directories that file tools (list_dir, read_file, edit_file) and run_command are restricted to. | |
| HOMELAB_ALLOW_COMMANDS | No | Comma-separated list of allowlisted binaries for run_command. | npm, npx, node, python3, pytest, tsc, go, cargo, make, git |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| system_infoB | Get system uptime, load average, memory and disk usage (read-only) |
| service_statusB | Check systemd service status (read-only) |
| port_listeningA | List listening TCP ports and owning processes (read-only, like 'ss -tlnp') |
| disk_detailA | Disk usage: all mounts plus largest top-level directories (read-only) |
| list_hostsA | List remote servers configured via HOMELAB_HOSTS env var |
| docker_psB | List Docker containers with status (read-only, like 'docker ps') |
| docker_statsA | One-shot Docker container CPU/memory usage (read-only, like 'docker stats --no-stream') |
| docker_logsA | Read recent logs of a Docker container (read-only) |
| docker_restartA | Restart a Docker container. WRITE action — your MCP client will ask for approval before running it. |
| list_dirB | List directory contents (read-only) |
| read_fileC | Read a text file with line pagination (read-only) |
| edit_fileB | Replace text in a file. WRITE action — your MCP client will ask for approval before running it. old_text must occur exactly once. |
| run_commandA | Run a dev command (tests, build, typecheck, git) inside a project directory. EXECUTION action — your MCP client will ask for approval before running it. Single command only; the binary must be in HOMELAB_ALLOW_COMMANDS. |
| db_queryA | Run a READ-ONLY SQL query (SELECT/WITH) against a Laravel project's database. Credentials come from the project's .env — never returned. Rows capped by limit. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Tools target mostly distinct resources (system, services, ports, disk, Docker, files, commands, DB), so an agent can usually pick correctly. The only real overlap is system_info and disk_detail, which both report disk usage, though disk_detail is clearly deeper.
Names mix noun_noun (system_info, docker_ps, db_query), verb_noun (list_dir, read_file, edit_file), and noun_verb (docker_restart). The docker_ prefix groups Docker tools, but the overall set lacks a predictable verb pattern even though all names are snake_case.
14 tools is within a reasonable range for a homelab monitor/manager and covers several domains without excessive duplication. It is slightly heavy, but nearly every tool appears to earn its place.
Monitoring coverage is strong, but lifecycle gaps exist: services only have status (no start/stop/restart), Docker only has restart (no stop/start), file operations lack create/delete, and list_hosts has no companion tools to act on remote hosts. These gaps will force agents to rely on run_command for common management tasks, which is explicitly restricted.