AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP unreviewed MIT Self-run

Homelab Mcp

mcp-nainounen-homelab-mcp · by Nainounen

MCP server for Proxmox homelab — 65+ tools across 17 domains. Manage VMs, Docker, media stack, monitoring, storage, and networking from AI assistants.

No reviews yet
0 installs
2 views
0.0% view→install

Install

$ agentstack add mcp-nainounen-homelab-mcp

Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.

Security review

⚠ Flagged

1 finding(s); flagged for manual review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures
  • high Destructive filesystem operation.

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Reliability & compatibility

Not yet reviewed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Homelab Mcp? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

homelab-mcp

[](https://github.com/Nainounen/homelab-mcp/actions/workflows/ci.yml) [](https://www.npmjs.com/package/homelab-mcp) [](https://opensource.org/licenses/MIT) [](https://nodejs.org/)

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](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](SECURITY.md) for details.

License

MIT — see [LICENSE](LICENSE).

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.