2026-03-07 00:45:50 +01:00
# Homelable
2026-03-09 11:26:49 +01:00
Homelable is a self-hosted infrastructure visualization solution. It provides a network scanning feature to accelerate the identification of machines and services deployed on your local infrastructure.
2026-03-07 00:45:50 +01:00
2026-03-09 11:26:49 +01:00
Homelable also offers a healthcheck system (WIP) through multiple methods (ping/TCP, /health API, etc.) to get a global overview of online/offline services.
2026-03-07 00:45:50 +01:00
2026-03-11 16:41:40 +01:00
You can also select some pre-built design styles, or personalize each device in your diagram.
2026-03-09 14:27:10 +01:00
If you just like the design, you can only run the frontend and export your design as PNG.
2026-03-07 00:45:50 +01:00
2026-03-11 16:38:51 +01:00
---
## Screenshots
<p align="center">
<img src="docs/homelable1.png" alt="Homelable canvas overview" width="100%" />
<img src="docs/homelable2.png" alt="Homelable node detail" width="100%" />
2026-03-28 18:37:57 +01:00
<img src="docs/homelable3.png" alt="Homelable sidebar and scan" width="48%" />
<img src="docs/homelable4.png" alt="Homelable edit pannel" width="48%" />
2026-03-11 16:38:51 +01:00
</p>
2026-03-07 00:45:50 +01:00
---
2026-03-27 09:19:22 +01:00
## Installation
2026-03-07 00:45:50 +01:00
2026-03-27 09:19:22 +01:00
Docker, Proxmox LXC, build from source, configuration, and development setup are all covered in ** [INSTALLATION.md ](./INSTALLATION.md )**.
2026-03-07 00:45:50 +01:00
---
2026-03-07 01:33:20 +01:00
## Network Scanner
The scanner runs `nmap -sV --open` on your configured CIDR ranges and populates a **Pending Devices** queue. From the sidebar you can then approve (adds a node to the canvas), hide, or ignore each discovered device.
### Triggering a scan
2026-03-27 09:19:22 +01:00
To save you time when mapping your infrastructure, Homlable can scan your network and report all the services it detects. It can also identify them, saving you even more time.
Click **Scan Network** in the sidebar. The Scan History tab opens automatically and refreshes every 3 seconds until the scan completes.
2026-03-07 01:33:20 +01:00
### macOS / root privileges
Some nmap scan types (SYN scan, OS detection) require root. If the scan fails with a permissions error, run it manually with sudo using the included script:
```bash
cd backend
sudo python ../scripts/run_scan.py 192.168.1.0/24
# Multiple ranges:
sudo python ../scripts/run_scan.py 192.168.1.0/24 10.0.0.0/24
```
Results are written directly to the database and appear as Pending Devices in the UI without restarting the backend.
> On Linux the backend process itself can be given the `NET_RAW` capability instead of running as root:
> ```bash
> sudo setcap cap_net_raw+ep $(which nmap)
> ```
---
2026-03-07 00:45:50 +01:00
## Node Check Methods
2026-03-27 09:19:22 +01:00
Homelable continuously monitors your nodes and displays their live status (online / offline / unknown) directly on the canvas. Each node can be configured with an independent check method suited to the service it runs.
2026-03-07 00:45:50 +01:00
| Method | Description |
|--------|-------------|
| `ping` | ICMP ping |
| `http` | GET request, success if status < 500 |
| `https` | GET with TLS verify |
| `tcp` | TCP connect (target: `host:port` ) |
| `ssh` | TCP connect to port 22 |
| `prometheus` | GET `/metrics` |
| `health` | GET `/health` |
---
2026-03-28 16:59:33 +01:00
## Live View (read-only public canvas)
Live View lets you share a read-only snapshot of your canvas with anyone on your network — no login required. It is disabled by default.
### Activation
Add LIVEVIEW_KEY to your .env:
`LIVEVIEW_KEY=your-secret-key`
Then restart the backend:
`docker compose restart backend`
### Usage
Use this URL to view your canvas:
http://<your-homelab-ip>/view?key=your-secret-key
The page shows your canvas in pan/zoom-only mode — no editing, no credentials needed. Clicking a node that has an IP opens it in a new tab.
---
2026-03-27 09:19:22 +01:00
## MCP Server (AI Integration) (optionnal)
2026-03-13 16:41:34 +01:00
2026-03-27 09:19:22 +01:00
Homelable can exposes a [Model Context Protocol ](https://modelcontextprotocol.io ) server so any MCP-compatible AI client (Claude Code, Claude Desktop, Open WebUI…) can read your homelab topology and act on it.
2026-03-13 16:41:34 +01:00
### What the AI can do
| | Action |
|---|---|
| **Read** | List all nodes, edges, full canvas, pending devices, scan history |
| **Write** | Add / update / delete nodes and edges, trigger a network scan, approve or hide discovered devices |
### Setup
**1. Add the keys to your `.env`:**
```env
# Authenticates AI clients (Claude Code, etc.) → MCP server
MCP_API_KEY = mcp_sk_changeme
# Authenticates MCP server → backend (internal Docker network only, never exposed)
MCP_SERVICE_KEY = svc_changeme
# Generate both with:
# python3 -c "import secrets; print(secrets.token_hex(32))"
```
No plain-text passwords involved — `AUTH_PASSWORD_HASH` is only used for the web UI login.
**2. Start the MCP service:**
```bash
docker compose up -d mcp
# MCP server is now listening on http://<your-homelab-ip>:8001
```
**3. Configure your AI client:**
2026-03-13 16:52:36 +01:00
**Claude Code** — run this command in your terminal:
```bash
claude mcp add --transport sse homelable http://<your-homelab-ip>:8001/mcp \
--header "X-API-Key: mcp_sk_yourkey"
```
Or add it manually to `~/.claude.json` :
2026-03-13 16:41:34 +01:00
```json
{
"mcpServers" : {
"homelable" : {
"type" : "sse" ,
"url" : "http://<your-homelab-ip>:8001/mcp" ,
"headers" : {
"X-API-Key" : "mcp_sk_yourkey"
}
}
}
}
```
2026-03-13 16:52:36 +01:00
**Claude Desktop** — edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
2026-03-13 16:41:34 +01:00
```json
{
"mcpServers" : {
"homelable" : {
"type" : "sse" ,
"url" : "http://<your-homelab-ip>:8001/mcp" ,
"headers" : {
"X-API-Key" : "mcp_sk_yourkey"
}
}
}
}
```
### Example prompts
- *"What nodes are currently offline?"*
- *"Add a new LXC container named `pihole` at 192.168.1.5, connected to my switch."*
- *"Trigger a network scan on 192.168.1.0/24 and show me the pending devices."*
- *"Show me the full canvas topology."*
### Security
- The MCP server is **not** intended to be exposed to the internet — keep port 8001 firewalled to your LAN.
- Rotate the key any time by updating `MCP_API_KEY` in `.env` and restarting: `docker compose restart mcp` .
- The MCP server communicates with the backend over the internal Docker network — the backend API is never directly exposed to MCP clients.
2026-03-09 11:26:49 +01:00
---