Labsco
MCP SERVER

HomeLab Monitor

by SikamikanikoBG

A self-hosted homelab dashboard that also answers agents: a read-only MCP server rides in the same container on port 9810, with 19 named tools covering hosts, containers, GPUs, disks, costs and alerts.

Observability, Monitoring & Incident Response
Summary
Read-only by construction, not by policy.

The notable part is not that a dashboard grew an MCP endpoint — it is that the endpoint ships no write tools, so an agent can ask which host is lowest on RAM or what is filling `/backup` and there is nothing there for it to change. Weigh that against what the container itself carries: host access, a read-write Docker socket, and a dashboard with no login, which is why the project tells you to keep it off the public internet.

What it is

A single-page monitor for a home lab — GPU state, power turned into money, containers, systemd services, disks, uptime checks — with a read-only MCP server built into the same container. The dashboard runs on `:9800` and the MCP server on `:9810`, and one line points a client at it: `claude mcp add --transport http homelab http://YOUR-HUB:9810/mcp`. Remote machines are reached over SSH with nothing installed on them; the hub pipes a small self-contained probe over the connection and nothing persists on the far end. Version 0.17.0, MIT licensed.

What you get
  • 19 named tools over one HTTP endpoint, covering what the dashboard shows: hosts, containers, systemd services, GPU and who is driving it, per-process RAM, AI model servers, installed models, costs, experiment runs, model benchmarks, disk treemaps, history and alerts
  • No write tools at all — the MCP surface is read-only, and `ENABLE_MCP=0` removes it entirely
  • GPU detail past the utilisation number: `nvidia-smi` throttle reasons decoded, memory-bandwidth util, core and memory clocks, power against limit, p-state and fan speed, per card, on every machine in the fleet rather than only the one running the container
  • AMD GPUs read on Linux straight from the kernel's `amdgpu` interface with no ROCm, and AMD and Intel GPUs on Windows hosts; anything a driver will not report says so instead of drawing a zero
  • Power priced per machine, per component (GPU via `nvidia-smi`, CPU and DRAM via RAPL) and per process, container or model, with day and night tariffs and a 7×24 busy-hours heatmap
  • Benchmark Lab: loads each of your local ollama models, sweeps context sizes on your own cards, and records generation and prompt tokens/sec, load time, how much spilled from VRAM into system RAM, and the largest context that still fits fully in VRAM
  • Disk treemaps on any host in the fleet, network I/O with per-container top talkers, and a mini-htop for who is eating CPU and RAM
  • Uptime monitoring in the box — any HTTP endpoint or TCP port, with anti-flap confirm, recovery reported with downtime, and an optional slow-response warning
  • Edge-triggered push alerts to Discord, ntfy.sh and Telegram, and a standard `/metrics` endpoint if you already run Prometheus
Requirements

Docker with Compose: fetch the compose file, `docker compose up -d`, and open `http://<your-host>:9800`. No GPU is needed — the GPU panels light up when one is present. Remote hosts need only SSH plus Python 3, or PowerShell on Windows, and the hub's auto-generated key pasted in. The MCP server is on by default at `MCP_PORT` 9810 and switched off with `ENABLE_MCP=0`. The registry package runs `/app/mcp_server.py` under `python` from the `docker.io/sikamikaniko123/homelab-monitor:0.17.0` image over stdio, and requires `HOMELAB_MONITOR_URL`, the base URL of the running dashboard such as `http://YOUR-HUB:9800`; `MCP_TRANSPORT` selects `stdio` or `http`. Know what the container holds before you place it: this is a host monitor with host access, a read-write Docker socket and D-Bus socket and a read-only root mount, and the dashboard itself has no login — keep it behind your LAN, VPN or firewall. `ALLOW_SELF_UPDATE=0` and `ENABLE_CONTROLS=0`, or `docker-compose.readonly.yml`, reduce it to pure monitoring.

Setup effort

One command — claude mcp add --transport http homelab http://YOUR-HUB:9810/mcp