homelab-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_PORT | No | Port for the streamable-http transport. Defaults to 8000 in development and 5774 in Docker. | 8000 |
| MCP_TRANSPORT | No | Transport mode: 'stdio' (default for local MCP clients) or 'streamable-http' (for network clients). Defaults to stdio. | stdio |
| MCP_TRUSTED_CIDRS | No | Comma-separated list of CIDRs trusted for LAN bypass authentication in HTTP mode. | 192.168.1.0/24,127.0.0.0/8 |
| REFRESH_INTERVAL_SECONDS | No | Interval in seconds for refreshing registry data (hosts, services, topology). | |
| DOC_REFRESH_INTERVAL_SECONDS | No | Interval in seconds for refreshing documentation and other remote content. |
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
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_docsA | Full-text search across all homelab documentation. Returns matching paragraphs with source file and section. |
| get_service_infoA | Look up a service by name. Returns host, port, stack, domain, role, and co-located services. |
| get_host_infoA | Look up a host by name or IP. Returns specs, role, OS, and all services running on it. |
| get_ip_infoA | Reverse-lookup an IP address. Returns the host and all services at that IP. |
| show_dependency_chainA | Show the full dependency chain for any homelab entity. Returns what it runs on, what depends on it, what it depends on, how it is accessed (ingress), and what storage it uses. |
| show_data_freshnessA | Check connectivity and freshness status for all configured services. Returns which data sources are reachable and which are not. |
| what_changed_last_24hA | Get a unified timeline of recent events across the homelab: alerts, target flaps, failed checks, security bans, expiring certs, and backup issues. |
| what_needs_attentionA | Get a prioritized list of things that need attention right now. Checks host resources, Prometheus target health, cron (Healthchecks) status, security events (CrowdSec), and SSL certificate expiry. Returns verdicts sorted by severity. (Does not check backups -- use get_pbs_status.) |
| explain_host_healthA | Get detailed health data for a specific host: resource usage, services running on it, and any issues detected. |
| explain_service_healthA | Get detailed health data for a specific service: current status, where it runs, what depends on it, and any issues detected. |
| get_homelab_overviewA | Complete homelab overview: host health, container counts, storage utilization, active media streams, recent errors, and speed test results. Returns partial results if individual services are unreachable. |
| get_media_overviewA | Media overview: Plex active streams, Sonarr/Radarr upcoming and queues, Transmission downloads, Overseerr requests, and Prowlarr indexer health. |
| get_infra_overviewA | Infrastructure overview: Proxmox node status, Docker container counts per host, storage utilization (NAS, PBS, Backblaze), CrowdSec security status, and NPM proxy status. |
| fetch_pageA | Fetch a web page and extract its content as clean markdown. Strips navigation, ads, and boilerplate. Only http/https URLs are fetched. Loopback, link-local, and cloud-metadata targets are always blocked; private/RFC1918 targets are blocked unless FETCH_ALLOW_PRIVATE is set (default allows LAN fetches). Redirects are re-validated at every hop. |
| refresh_registriesA | Force an immediate refresh of service and host registries from all live API sources (Portainer, Proxmox, DNS, NPM, Scanopy, WireGuard, Healthchecks, Gitea). Returns a summary of what changed. |
| refresh_docsA | Force an immediate refresh of documentation, Docker stacks, and vault notes from Gitea repositories. Returns a summary of what changed. |
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 16 tools
Most tools have clearly distinct purposes, but pairs like get_service_info vs explain_service_health and get_host_info vs explain_host_health could be confused since they cover the same entity with different details. The overview tools (homelab, infra, media) also have overlapping metrics but are scoped clearly enough.
All names use lowercase_snake_case and follow a verb-first pattern (search_, get_, show_, explain_, fetch_, refresh_). The two 'what_' tools deviate from strict verb_noun but are still clear and consistent in style.
16 tools is slightly above the typical 3-15 well-scoped range, but the homelab monitoring domain is broad and each tool addresses a distinct aspect. The count feels justified rather than excessive.
The set covers most read-only monitoring needs: info lookup, health, overviews, change timeline, and refresh actions. However, what_needs_attention explicitly references get_pbs_status for backup checks, but that tool is not actually in the set, a notable gap. There are also no control/mutation tools, which may be intentional but limits the surface.