npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

homelab-mcp

v2.4.0

Published

MCP server for Proxmox homelab — modular, AI-extensible. 65+ tools across 17 domains.

Readme

homelab-mcp

CI npm version License: MIT Node: >=20

MCP server that gives AI assistants full control of a Proxmox homelab — manage VMs and containers, deploy Docker projects, monitor services, control the media stack, and check storage health, all from conversation.

65+ tools across 17 domains. Modular architecture designed for AI-assisted extensibility.

AI Setup

No manual config needed. The server includes an AI-native setup wizard. Just connect it to your MCP client and say:

"Set up my homelab" or "Configure the MCP server"

The setup wizard scans your configuration, guides you through each setting interactively, saves your answers, and verifies connectivity — all through conversation. Credentials are never exposed to the AI; the wizard masks passwords, API keys, and tokens before returning any results.

Quick start

Prerequisites

  • Node.js 20+
  • A Proxmox VE host reachable over the network
  • A devbox (any SSH-accessible Linux host running Docker)
  • (Optional) Media services: Plex, Radarr, Sonarr, SABnzbd, Overseerr, Prowlarr
  • (Optional) Monitoring: Prometheus, Grafana, Uptime Kuma

Install

From npm (recommended):

npm install -g homelab-mcp
# Or locally in your project:
npm install homelab-mcp

From source (for contributors):

git clone https://github.com/Nainounen/homelab-mcp.git
cd homelab-mcp
npm install
npm run build

Docker (optional)

A Dockerfile is provided for containerized deployments:

npm run build
cp .env.example .env   # edit with your credentials
docker compose up -d

For most users, running directly with Node.js (no Docker) is simpler — the MCP server communicates over stdio.

Connect to your MCP client

Add to your MCP client's config file. For Claude Code, that's ~/.claude/claude_mcp_config.json:

{
  "mcpServers": {
    "homelab": {
      "command": "npx",
      "args": ["homelab-mcp"],
      "cwd": "/path/to/your/homelab-config"
    }
  }
}

Place your .env file in the cwd directory (copy .env.example from this repo as a starting point). No secrets go in the MCP config — the server loads .env from its working directory.

Then just say "set up my homelab" — the AI-native setup wizard will guide you through the rest.

Configuration

All settings live in .env. See .env.example for the full template. The server starts with the services you configure — any service whose env vars are missing is skipped with a warning.

Required (server won't start without these)

| Variable | Description | |---|---| | PROXMOX_HOST, PROXMOX_PORT, PROXMOX_USER, PROXMOX_NODE | Proxmox API access | | PROXMOX_PASSWORD or PROXMOX_KEY_PATH | Proxmox auth | | DEVBOX_HOST, DEVBOX_USER | Devbox SSH access | | DEVBOX_PASSWORD or DEVBOX_KEY_PATH | Devbox SSH auth | | RADARR_URL, RADARR_API_KEY | Radarr API | | SONARR_URL, SONARR_API_KEY | Sonarr API | | PROWLARR_URL, PROWLARR_API_KEY | Prowlarr API | | SABNZBD_URL, SABNZBD_API_KEY | SABnzbd API | | OVERSEERR_URL, OVERSEERR_API_KEY | Overseerr API |

Optional (skipped with a warning if missing)

| Variable | Service | |---|---| | QNAP_HOST, QNAP_USER, QNAP_PASSWORD or QNAP_KEY_PATH | QNAP NAS | | PLEX_URL, PLEX_TOKEN | Plex | | TAUTULLI_URL, TAUTULLI_API_KEY | Tautulli analytics | | BAZARR_URL, BAZARR_API_KEY | Bazarr subtitles | | ADGUARD_URL, ADGUARD_USER, ADGUARD_PASSWORD | AdGuard Home | | PBS_URL, PBS_TOKEN_ID, PBS_TOKEN_SECRET | Proxmox Backup Server | | LIDARR_URL, LIDARR_API_KEY | Lidarr music | | READARR_URL, READARR_API_KEY | Readarr books | | UPTIME_KUMA_URL, UPTIME_KUMA_USER, UPTIME_KUMA_PASSWORD | Uptime Kuma | | PROMETHEUS_URL | Prometheus API | | GRAFANA_URL, GRAFANA_TOKEN | Grafana API | | TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID | Telegram notifications |

Security settings

| Variable | Default | Description | |---|---|---| | SSH_STRICT_HOST_KEY | false | Set to true to enable known_hosts verification | | PROXMOX_TLS_VERIFY | false | Set to true to validate Proxmox TLS certificates | | PBS_TLS_VERIFY | false | Set to true to validate PBS TLS certificates |

Tuning

| Variable | Default | Description | |---|---|---| | MAX_OUTPUT_CHARS | 30000 | Max characters per tool result before truncation (0 disables) | | HTTP_RETRIES | 3 | Retries for transient HTTP failures (0 disables) | | DEVBOX_CMD_TIMEOUT | 30000 | Devbox SSH command timeout in ms | | PROXMOX_CMD_TIMEOUT | 60000 | Proxmox SSH command timeout in ms |

Tools reference

Infrastructure

| Tool | Description | |---|---| | proxmox_list_nodes | List Proxmox nodes with CPU, RAM, uptime | | proxmox_list_vms | List all VMs and LXC containers | | proxmox_start_vm | Start a VM or container | | proxmox_stop_vm | Stop a VM or container | | proxmox_restart_vm | Restart a VM or container | | proxmox_get_metrics | Detailed metrics for one VM/CT | | proxmox_get_node_metrics | Node-level CPU, RAM, disk, load | | proxmox_create_ct | Create a new Debian 12 LXC container | | proxmox_get_logs | Tail task log for a VM/CT | | proxmox_exec | Run a shell command on Proxmox host (dangerous commands blocked) |

Devbox & Docker

| Tool | Description | |---|---| | devbox_exec | Run a shell command on the devbox (dangerous commands blocked) | | devbox_read_file | Read a file (max 100 KB) | | devbox_write_file | Write a file, auto-creates parent dirs (max 1 MB) | | devbox_list_dir | List directory contents | | devbox_docker_ps | Show running Docker containers | | devbox_docker_compose | Run compose up/down/restart/pull/logs | | devbox_git | Git status, pull, log, or clone a repo | | devbox_project_deploy | Deploy: git pull → compose pull → compose up → status | | devbox_project_status | Health check for a deployed project | | devbox_project_list | Scan a base path for compose projects |

Media — download & library

| Tool | Description | |---|---| | radarr_search_movie | Search for a movie by title | | radarr_add_movie | Add a movie and trigger download search | | radarr_list_movies | List movies with download status (filter/search/limit) | | radarr_remove_movie | Remove a movie (optionally delete files) | | radarr_get_queue | Active movie downloads with progress | | radarr_force_search | Re-search indexers for a movie | | radarr_get_history | Recent download history | | radarr_check_releases | Show available releases and rejections | | radarr_clear_queue | Remove all items from download queue | | radarr_clear_blocklist | Clear the release blocklist | | radarr_blocklist_release | Blocklist a bad release and retry | | radarr_list_path_mappings | List remote path mappings | | radarr_set_path_mapping | Add/update a path mapping | | sonarr_search_series | Search for a TV series by title | | sonarr_add_series | Add a series and trigger download | | sonarr_list_series | List series with episode progress (filter/search/limit) | | sonarr_remove_series | Remove a series (optionally delete files) | | sonarr_get_queue | Active episode downloads with progress | | sonarr_force_search | Re-search for missing episodes | | sonarr_season_search | Search for a specific season | | sonarr_check_releases | Show releases and rejections for a season | | sonarr_blocklist_release | Blocklist and retry a failed download | | sonarr_clear_queue | Clear the download queue | | sonarr_clear_blocklist | Clear the release blocklist | | sonarr_list_path_mappings | List remote path mappings | | sonarr_set_path_mapping | Add/update a path mapping | | sabnzbd_get_status | Download speed, ETA, disk space, queue size | | sabnzbd_list_queue | Active NZB downloads with progress | | sabnzbd_get_history | Recent download history | | sabnzbd_pause_queue | Pause downloads | | sabnzbd_resume_queue | Resume downloads | | sabnzbd_delete_item | Delete a queue item by NZO ID | | prowlarr_list_indexers | List indexers with status | | prowlarr_sync_apps | Sync indexers to Radarr/Sonarr | | prowlarr_test_indexers | Test all (or one) indexer | | lidarr_search_artist | Search for a music artist | | lidarr_add_artist | Add an artist to Lidarr | | lidarr_list_artists | List all artists with album counts | | lidarr_remove_artist | Remove an artist | | lidarr_get_queue | Active music downloads | | readarr_search_book | Search for a book | | readarr_add_book | Add a book to Readarr | | readarr_list_books | List all books | | readarr_get_queue | Active book downloads |

Media — Plex & requests

| Tool | Description | |---|---| | plex_get_libraries | List Plex libraries with item counts | | plex_search | Search across all libraries | | plex_get_sessions | Who is streaming, what, transcode/direct play | | plex_recently_added | Recently added movies and episodes | | plex_refresh_library | Trigger a library scan | | plex_delete_media | Permanently delete by ratingKey | | plex_get_watch_history | Recent watch history across users | | seerr_list_requests | List media requests from family | | seerr_approve_request | Approve a pending request | | seerr_decline_request | Decline a request | | seerr_delete_request | Delete a request | | seerr_stats | Request statistics | | tautulli_get_activity | Current Plex streams (Tautulli) | | tautulli_get_history | Plex watch history (Tautulli) | | tautulli_get_stats | 30-day play stats | | bazarr_status | Wanted subtitle counts | | bazarr_download_subtitle | Trigger manual subtitle download |

Media — operational

| Tool | Description | |---|---| | media_status | Running container status and uptime | | media_logs | Tail logs for a media container | | media_restart | Restart a media container | | media_dashboard | All-in-one: Proxmox, containers, downloads, library, storage, GPU | | nvidia_status | GPU temp, util, VRAM, power | | security_status | SSH config and Proxmox firewall status |

Monitoring & observability

| Tool | Description | |---|---| | prometheus_snapshot | Quick CPU, RAM, disk, network, container health | | prometheus_query | Run an arbitrary PromQL query | | prometheus_range_query | Historical metric trends | | grafana_list_dashboards | List all dashboards | | grafana_get_dashboard | Get panel list for a dashboard | | grafana_query_panel | Query actual data from a panel | | uptime_status | Monitor up/down status and latency |

Storage, network & DNS

| Tool | Description | |---|---| | qnap_status | QNAP NAS: RAID, drive temps, storage | | qnap_disk_health | SMART health per drive | | qnap_storage_usage | Per-share usage and LVM | | qnap_raid_status | RAID array health check | | pbs_status | PBS datastore usage | | pbs_list_snapshots | Recent backup snapshots | | pbs_get_tasks | Backup/verify/GC task history | | adguard_stats | DNS query stats and block rate | | adguard_check_host | Check if a domain is blocked | | adguard_toggle_protection | Enable/disable DNS filtering | | wol_send | Wake-on-LAN magic packet | | tailscale_status | Tailscale peers and status |

Updates, notifications & meta

| Tool | Description | |---|---| | container_check_updates | Check for newer Docker images | | container_update | Pull + restart a container | | notify_telegram | Send a message to Telegram | | homelab_health | Ping all configured services, report reachable/down + latency | | homelab_capabilities | Start here — lists all available tools | | homelab_setup | AI-guided setup wizard — configure .env through conversation |

Architecture

src/
├── {service}.ts          # Layer 1: HTTP/SSH client factory
├── tools/{service}.ts    # Layer 2: Zod schemas + implementations
├── modules/{service}.ts  # Layer 3: Tool definitions + handler router
├── modules/registry.ts   # Central module registry
└── index.ts              # MCP server entry point

Each integration follows the same three-file pattern. Adding a new service means creating these three files and registering it in the registry. The scaffolding script handles the boilerplate:

npm run new-module -- tautulli

See CONTRIBUTING.md for the full guide.

Security

  • Credentials: All secrets live in .env, which is gitignored. Never commit it.
  • SSH host keys: Verification is off by default (homelab hosts change keys often). Set SSH_STRICT_HOST_KEY=true to enable it.
  • TLS: Proxmox/PBS self-signed certs — verification off by default. Set PROXMOX_TLS_VERIFY=true / PBS_TLS_VERIFY=true if you have trusted certs.
  • Command safety: exec tools block destructive commands (rm -rf /, mkfs, shutdown, etc.).
  • Error sanitization: Error messages returned to the MCP client are sanitized — full details go to stderr.

See SECURITY.md for details.

License

MIT — see LICENSE.