Homelab
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOMELAB_CONFIG | No | Path to a config file. By default Homelab reads ~/.config/homelab/config.toml. | |
| HOMELAB_PROXY_URL | No | Nginx Proxy Manager address. | http://localhost:81 |
| HOMELAB_READ_ONLY | No | Set to 'true' to refuse every change, whatever else is set. Reads and dry runs still work. | false |
| HOMELAB_DNS_ZONE_ID | No | Default Cloudflare zone id, so tools can leave zone_id empty. | |
| HOMELAB_DOCKER_HOST | No | Docker engine address. | unix:///var/run/docker.sock |
| HOMELAB_PROXY_EMAIL | No | The NPM admin login email used for the API. | |
| HOMELAB_DNS_API_TOKEN | No | Cloudflare API token with DNS edit permission on the zone. | |
| HOMELAB_PROXY_PASSWORD | No | The NPM admin login password used for the API. | |
| HOMELAB_<MODULE>_ENABLED | No | Set to 'true' or 'false' to turn a module on or off, e.g. HOMELAB_HOME_ASSISTANT_ENABLED=true. Proxy, docker and dns are on by default; home_assistant is off by default. | |
| HOMELAB_HOME_ASSISTANT_URL | No | Home Assistant address. | http://homeassistant.local:8123 |
| HOMELAB_<MODULE>_<KEY>_FILE | No | Read a setting from a file instead, e.g. HOMELAB_DNS_API_TOKEN_FILE=/run/secrets/cf_token. | |
| HOMELAB_DOCKER_PORTAINER_URL | No | Portainer URL to use instead of the Docker socket. Both URL and token are needed. | |
| HOMELAB_HOME_ASSISTANT_TOKEN | No | Home Assistant long-lived access token. | |
| HOMELAB_<MODULE>_ALLOW_WRITES | No | Set to 'true' to let the assistant make changes in that module without asking. Default is 'false': each change asks you first. | false |
| HOMELAB_DOCKER_PORTAINER_TOKEN | No | Portainer token to use instead of the Docker socket. Both URL and token are needed. | |
| HOMELAB_DOCKER_PORTAINER_ENDPOINT_ID | No | Portainer endpoint id. | 1 |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| proxy_hostsA | Proxy hosts. list/get are read-only. create, update and delete change NPM and need the person's approval (or HOMELAB_PROXY_ALLOW_WRITES=true). dry_run=true previews without asking. |
| proxy_redirectionsC | HTTP redirections. list is read-only; create and delete need approval (or ALLOW_WRITES). |
| proxy_certificatesA | SSL certificates. list is read-only. request asks Let's Encrypt for a new certificate (needs approval, or ALLOW_WRITES). Let's Encrypt must be able to reach the domains. |
| proxy_access_listsA | IP access lists. list is read-only. create and delete need approval (or ALLOW_WRITES). allow and deny are comma-separated IPs or CIDRs. Deleting a list affects every proxy host that uses it. |
| docker_containersA | Containers. list, get, logs and stats are read-only. start, stop, restart, remove and prune change state and need the person's approval (or HOMELAB_DOCKER_ALLOW_WRITES=true). remove deletes a container permanently. prune removes ALL stopped containers. container is a name or id (not needed for list or prune). |
| docker_imagesA | Images. list is read-only. pull, remove and prune change the host and need approval (or HOMELAB_DOCKER_ALLOW_WRITES=true). remove deletes an image; prune removes dangling and unused images. |
| docker_inventoryA | Read-only lists: volumes, networks, or Portainer stacks (stacks need the Portainer backend). Pass stack_id with kind=stacks to get that stack's compose file. |
| dns_zonesB | Zones for the Cloudflare account (action=list), or one zone exported in BIND format (action=export). |
| dns_recordsA | DNS records. list and get are read-only. create, update and delete change the zone and need the person's approval (or HOMELAB_DNS_ALLOW_WRITES=true). create needs name, record_type and content; update needs record_id and any field to change; delete removes the record permanently. |
| expose_serviceA | Expose a container: check it runs, add a Cloudflare CNAME to tunnel_hostname (only if given), and add an Nginx Proxy Manager host that forwards domain to forward_host:forward_port. The plan is shown to the person before anything changes. |
| teardown_serviceA | Reverse expose_service: delete the proxy host for domain (found by name unless proxy_host_id is given) and, if dns_record_id is given, that DNS record. The exact plan is shown to the person first. |
| service_statusC | One view of a service: the container, the proxy hosts that name the domain, and its DNS records. |
| infrastructure_overviewA | Counts across Docker, Nginx Proxy Manager and Cloudflare DNS, in one call. |
| diagnose_serviceA | Check each hop between a public domain and its upstream container, and name the first one that fails with the fix for it. Hops: DNS record, tunnel route (if the tunnel module is on), Nginx Proxy Manager host, TLS certificate (expiry and trust), upstream container running (Docker), upstream port answering, uptime monitor (if on), Authentik login in front (if on). Read-only: it changes nothing. |
| homelab_modulesA | Which modules are on, which settings are missing, whether writes are pre-approved, and what each tool does. Pass a module name for its full settings list (values are never shown, only whether they are set). |
| homelab_healthA | Connectivity and version for every enabled module. A module with missing settings reports the variable it needs. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| architecture-diagram | Create polished dark-themed architecture diagrams as self-contained HTML+SVG files. Use when the user asks for system, infrastructure, cloud, security, or network topology diagrams. |
| cloudflare | Discover and choose Cloudflare products for apps, APIs, AI agents, storage, networking, and security. Use for architecture and product selection, including when the user describes a need without naming a Cloudflare product; then find the relevant skill or documentation. |
| cloudflare-one | Design, configure, troubleshoot, or review Cloudflare One Zero Trust and SASE deployments. Use cloudflare-one-migrations for migration planning from other vendors. |
| containers | Check, read, restart and inspect Docker containers on a homelab through the docker tools, with a dry run before every change. Use when the user asks for container status, logs, resource use, a restart, or wants a container started, stopped, removed or its images pulled or pruned. |
| dashmotion | Create dark-themed, animated technical diagrams as self-contained HTML+SVG files — flowcharts whose connectors visibly flow, and architecture diagrams where requests travel as light dots through the system (Diagrid/Temporal landing-page style). Use this skill whenever the user asks for a flowchart, workflow, pipeline, process diagram, state machine, system architecture, infrastructure, cloud, microservices, or network topology diagram — and especially when they mention "animated", "flowing", "dynamic", "alive", "GIF-like", or want a diagram for a landing page, README, docs, or product demo. Also use it to convert Mermaid source (a mermaid code block or .mmd file) into an animated diagram — "animate this mermaid", "make this flowchart move". Prefer this over static diagram output whenever the diagram represents anything that moves: requests, events, data, jobs, messages, or control flow. |
| diagram | Create an editable draw.io (.drawio) diagram file from a description of a system, flow, sequence or architecture. Use when the user wants a diagram they can open and edit in draw.io or diagrams.net. For an animated diagram, use dashmotion; for a map of a homelab network, use network-diagram. |
| expose-a-service-safely | Put a homelab container on a public web address in a fixed order: check the container runs, check the name is free, show the dry-run plan, apply it with approval, then diagnose every hop until the name works from outside. Use when the user wants a service reachable from the internet or a new public domain, or wants to tear one down. |
| fix-and-deploy | Fix a bug in a running homelab service, check the fix against the original symptom, apply it to the live container, proxy or DNS path, then check the live target again before reporting it fixed. Use when a fix must reach something already running, not only a commit or a local copy. |
| getting-started | Set up and check the Homelab MCP server. Covers which modules are on, the settings each module needs, how to switch a module on or off, the first checks, how approvals work, and how to read an error. Use when the user installs Homelab, asks what it can do, gets a homelab.<module>.<code> error, or wants a module turned on or off. |
| homelab-health-check | Run a read-only sweep of the homelab across Homelab modules, containers, certificates, uptime monitors and DNS filtering, and report the results as one table. Use when the user asks for a health check, a status sweep, a morning check, or whether anything in the homelab needs attention. This skill never changes anything. |
| homelab-troubleshooting | Find the root cause of a failing homelab service in a fixed order: state the symptom, run the per-hop checks, gather evidence, test one hypothesis at a time, then verify against the live service. Use when a service is down, returns errors, reports healthy but does not work, has a broken name or certificate, or a container keeps restarting. |
| network-diagram | Map a homelab as an editable draw.io diagram that shows the services, Docker networks, reverse proxy and DNS path from a public name to each container, built from the live Homelab inventory. Use when the user asks to map their homelab, show how a request reaches a service, or document the network layout. |
| runbook | Write an operational runbook for one homelab service as a Markdown file, with the container, proxy host and DNS facts pulled from the live tools. Use when the user asks for a runbook, an SOP, or a document that explains how to operate, restart, roll back or troubleshoot one service. |
| systematic-debugging | Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| architecture-diagram/SKILL.md | |
| architecture-diagram/resources/template.html | |
| cloudflare/SKILL.md | |
| cloudflare/references/ai-gateway/README.md | |
| cloudflare/references/ai-gateway/configuration.md | |
| cloudflare/references/ai-gateway/dynamic-routing.md | |
| cloudflare/references/ai-gateway/features.md | |
| cloudflare/references/ai-gateway/sdk-integration.md | |
| cloudflare/references/ai-gateway/troubleshooting.md | |
| cloudflare/references/ai-search/README.md | |
| cloudflare/references/ai-search/api.md | |
| cloudflare/references/ai-search/configuration.md | |
| cloudflare/references/ai-search/gotchas.md | |
| cloudflare/references/ai-search/patterns.md | |
| cloudflare/references/bindings/README.md | |
| cloudflare/references/bindings/api.md | |
| cloudflare/references/bindings/configuration.md | |
| cloudflare/references/bindings/gotchas.md | |
| cloudflare/references/bindings/patterns.md | |
| cloudflare/references/browser-rendering/README.md | |
| cloudflare/references/browser-rendering/api.md | |
| cloudflare/references/browser-rendering/configuration.md | |
| cloudflare/references/browser-rendering/gotchas.md | |
| cloudflare/references/browser-rendering/patterns.md | |
| cloudflare/references/c3/README.md | |
| cloudflare/references/c3/api.md | |
| cloudflare/references/c3/configuration.md | |
| cloudflare/references/c3/gotchas.md | |
| cloudflare/references/c3/patterns.md | |
| cloudflare/references/containers/README.md | |
| cloudflare/references/containers/api.md | |
| cloudflare/references/containers/configuration.md | |
| cloudflare/references/containers/gotchas.md | |
| cloudflare/references/containers/patterns.md | |
| cloudflare/references/cron-triggers/README.md | |
| cloudflare/references/cron-triggers/api.md | |
| cloudflare/references/cron-triggers/configuration.md | |
| cloudflare/references/cron-triggers/gotchas.md | |
| cloudflare/references/cron-triggers/patterns.md | |
| cloudflare/references/d1/README.md | |
| cloudflare/references/d1/api.md | |
| cloudflare/references/d1/configuration.md | |
| cloudflare/references/d1/gotchas.md | |
| cloudflare/references/d1/patterns.md | |
| cloudflare/references/hyperdrive/README.md | |
| cloudflare/references/hyperdrive/api.md | |
| cloudflare/references/hyperdrive/configuration.md | |
| cloudflare/references/hyperdrive/gotchas.md | |
| cloudflare/references/hyperdrive/patterns.md | |
| cloudflare/references/images/README.md | |
| cloudflare/references/images/api.md | |
| cloudflare/references/images/configuration.md | |
| cloudflare/references/images/gotchas.md | |
| cloudflare/references/images/patterns.md | |
| cloudflare/references/kv/README.md | |
| cloudflare/references/kv/api.md | |
| cloudflare/references/kv/configuration.md | |
| cloudflare/references/kv/gotchas.md | |
| cloudflare/references/kv/patterns.md | |
| cloudflare/references/miniflare/README.md | |
| cloudflare/references/miniflare/api.md | |
| cloudflare/references/miniflare/configuration.md | |
| cloudflare/references/miniflare/gotchas.md | |
| cloudflare/references/miniflare/patterns.md | |
| cloudflare/references/observability/README.md | |
| cloudflare/references/observability/api.md | |
| cloudflare/references/observability/configuration.md | |
| cloudflare/references/observability/gotchas.md | |
| cloudflare/references/observability/patterns.md | |
| cloudflare/references/pages/README.md | |
| cloudflare/references/pages/api.md | |
| cloudflare/references/pages/configuration.md | |
| cloudflare/references/pages/gotchas.md | |
| cloudflare/references/pages/patterns.md | |
| cloudflare/references/pages-functions/README.md | |
| cloudflare/references/pages-functions/api.md | |
| cloudflare/references/pages-functions/configuration.md | |
| cloudflare/references/pages-functions/gotchas.md | |
| cloudflare/references/pages-functions/patterns.md | |
| cloudflare/references/queues/README.md | |
| cloudflare/references/queues/api.md | |
| cloudflare/references/queues/configuration.md | |
| cloudflare/references/queues/gotchas.md | |
| cloudflare/references/queues/patterns.md | |
| cloudflare/references/r2/README.md | |
| cloudflare/references/r2/api.md | |
| cloudflare/references/r2/configuration.md | |
| cloudflare/references/r2/gotchas.md | |
| cloudflare/references/r2/patterns.md | |
| cloudflare/references/secrets-store/README.md | |
| cloudflare/references/secrets-store/api.md | |
| cloudflare/references/secrets-store/configuration.md | |
| cloudflare/references/secrets-store/gotchas.md | |
| cloudflare/references/secrets-store/patterns.md | |
| cloudflare/references/smart-placement/README.md | |
| cloudflare/references/smart-placement/api.md | |
| cloudflare/references/smart-placement/configuration.md | |
| cloudflare/references/smart-placement/gotchas.md | |
| cloudflare/references/smart-placement/patterns.md | |
| cloudflare/references/static-assets/README.md | |
| cloudflare/references/static-assets/api.md | |
| cloudflare/references/static-assets/configuration.md | |
| cloudflare/references/static-assets/gotchas.md | |
| cloudflare/references/static-assets/patterns.md | |
| cloudflare/references/stream/README.md | |
| cloudflare/references/stream/api-live.md | |
| cloudflare/references/stream/api.md | |
| cloudflare/references/stream/configuration.md | |
| cloudflare/references/stream/gotchas.md | |
| cloudflare/references/stream/patterns.md | |
| cloudflare/references/tail-workers/README.md | |
| cloudflare/references/tail-workers/api.md | |
| cloudflare/references/tail-workers/configuration.md | |
| cloudflare/references/tail-workers/gotchas.md | |
| cloudflare/references/tail-workers/patterns.md | |
| cloudflare/references/tunnel/README.md | |
| cloudflare/references/tunnel/api.md | |
| cloudflare/references/tunnel/configuration.md | |
| cloudflare/references/tunnel/gotchas.md | |
| cloudflare/references/tunnel/networking.md | |
| cloudflare/references/tunnel/patterns.md | |
| cloudflare/references/vectorize/README.md | |
| cloudflare/references/vectorize/api.md | |
| cloudflare/references/vectorize/configuration.md | |
| cloudflare/references/vectorize/gotchas.md | |
| cloudflare/references/vectorize/patterns.md | |
| cloudflare/references/waf/README.md | |
| cloudflare/references/waf/api.md | |
| cloudflare/references/waf/configuration.md | |
| cloudflare/references/waf/gotchas.md | |
| cloudflare/references/waf/patterns.md | |
| cloudflare/references/workers-ai/README.md | |
| cloudflare/references/workers-ai/api.md | |
| cloudflare/references/workers-ai/configuration.md | |
| cloudflare/references/workers-ai/gotchas.md | |
| cloudflare/references/workers-ai/patterns.md | |
| cloudflare/references/workflows/README.md | |
| cloudflare/references/workflows/api.md | |
| cloudflare/references/workflows/configuration.md | |
| cloudflare/references/workflows/gotchas.md | |
| cloudflare/references/workflows/patterns.md | |
| cloudflare-one/SKILL.md | |
| containers/SKILL.md | |
| dashmotion/SKILL.md | |
| dashmotion/references/architecture-mode.md | |
| dashmotion/references/flow-mode.md | |
| dashmotion/references/layout-script.md | |
| dashmotion/references/mermaid-input.md | |
| dashmotion/resources/template-architecture.html | |
| dashmotion/resources/template-flow.html | |
| dashmotion/scripts/check_diagram.py | |
| dashmotion/scripts/check_fidelity.py | |
| dashmotion/scripts/layout.py | |
| diagram/SKILL.md | |
| expose-a-service-safely/SKILL.md | |
| fix-and-deploy/SKILL.md | |
| getting-started/SKILL.md | |
| homelab-health-check/SKILL.md | |
| homelab-troubleshooting/SKILL.md | |
| network-diagram/SKILL.md | |
| runbook/SKILL.md | |
| systematic-debugging/SKILL.md | |
| systematic-debugging/CREATION-LOG.md | |
| systematic-debugging/condition-based-waiting-example.ts | |
| systematic-debugging/condition-based-waiting.md | |
| systematic-debugging/defense-in-depth.md | |
| systematic-debugging/root-cause-tracing.md | |
| systematic-debugging/test-academic.md | |
| systematic-debugging/test-pressure-1.md | |
| systematic-debugging/test-pressure-2.md | |
| systematic-debugging/test-pressure-3.md |
TDQS
Scored across 16 tools
Most tools are clearly separated by resource and action: Docker container/image/inventory tools, proxy resource tools, DNS zone/record tools, and diagnostic/overview tools. The main overlap is between high-level composite tools (expose_service, teardown_service, service_status, infrastructure_overview) and the lower-level resource tools, which can require judgment about which abstraction to use.
All names use snake_case, but the convention is mixed: some are plural resource nouns (proxy_hosts, docker_containers, dns_records), some are module/status nouns (homelab_modules, homelab_health, service_status), and some are verb_noun action tools (diagnose_service, expose_service, teardown_service). The names are readable, but there is no single predictable pattern.
Sixteen tools is reasonable for a homelab management server spanning Docker, reverse proxy, DNS, diagnostics, and service lifecycle. The count is slightly high because composite tools coexist with granular resource tools, but each tool still has a plausible role.
The surface covers core homelab workflows well: Docker inspection and lifecycle, proxy hosts/redirections/certificates/access lists, DNS zones/records, diagnostics, exposure/teardown, and status overview. Some gaps remain, such as management operations for tunnels, Authentik, uptime monitoring, and Docker volumes/networks beyond read-only inventory.