homelab-mcp

homelab-mcp

A collection of MCP servers for managing Proxmox, Linux, Windows, Docker, npm, and Python in a homelab environment.

Category
访问服务器

README

CI Python 3.11+ License: MIT

homelab-mcp

Coleccion de servidores MCP (Model Context Protocol) para gestionar un homelab con Proxmox, Linux, Windows, Docker, npm y Python.

Cada dominio corre como proceso independiente via stdio, se integra con Claude Code y cualquier cliente MCP compatible.

Estructura

homelab-mcp/
├── homelab_mcp/
│   ├── config.py               # Configuracion centralizada (.env + multi-nodo)
│   ├── base.py                 # Factory del servidor MCP + logging
│   ├── logging_conf.py         # Setup de logging
│   ├── utils/
│   │   ├── paths.py            # safe_path — sandbox de rutas
│   │   ├── subprocess_safe.py  # run_safe — ejecucion con whitelist
│   │   ├── responses.py        # ok() / error() / needs_confirmation()
│   │   └── claude_md_parser.py # Extrae config Proxmox de CLAUDE.md
│   ├── proxmox_mcp/server.py   # Multi-nodo (pve, pve2, pve3...)
│   ├── linux_mcp/server.py
│   ├── windows_mcp/server.py
│   ├── docker_mcp/server.py
│   ├── npm_mcp/server.py
│   └── python_mcp/server.py
├── bin/
│   └── auto-config-from-claude.sh  # Genera .env + proxmox_nodes.json
├── scripts/                    # Lanzadores individuales y paralelo
├── tests/
├── .env.example
└── pyproject.toml

Instalacion

git clone https://github.com/CTRQuko/homelab-mcp.git
cd homelab-mcp
cp .env.example .env   # edita los valores reales
pip install -e .
# Con herramientas de desarrollo:
pip install -e ".[dev]"
# Solo tests:
pip install -e ".[test]"

Auto-config desde CLAUDE.md

Si ya tienes configuracion Proxmox en ~/.claude/CLAUDE.md y tokens en un fichero de secrets:

bash bin/auto-config-from-claude.sh

Esto genera automaticamente:

  • .env con el nodo primario y todas las variables
  • proxmox_nodes.json con todos los nodos detectados

Solo necesitas verificar que los valores son correctos.

Variables de entorno (.env)

# Proxmox API token (nodo primario)
PROXMOX_HOST=192.168.1.X
PROXMOX_USER=user@pam
PROXMOX_TOKEN_NAME=my-token
PROXMOX_TOKEN_VALUE=REEMPLAZAR

# Multi-nodo (opcional): fichero JSON con todos los nodos
# Generado por: bash bin/auto-config-from-claude.sh
# PROXMOX_NODES_FILE=proxmox_nodes.json

# Sandbox Linux (read/write dentro de esta ruta)
LINUX_BASE_PATH=/srv/homelab

# Sandbox Windows
WINDOWS_BASE_PATH=C:/homelab

# npm / Python sandboxes
NPM_BASE_PATH=.
PYTHON_BASE_PATH=.

# Docker socket (opcional)
DOCKER_HOST=unix:///var/run/docker.sock

# Nivel de log: DEBUG, INFO, WARNING, ERROR
LOG_LEVEL=INFO

Multi-nodo Proxmox

Con PROXMOX_NODES_FILE=proxmox_nodes.json, los tools de Proxmox aceptan alias de nodo:

  • list_lxc("node1") → conecta al primer nodo
  • list_lxc("node2") → conecta al segundo nodo
  • list_lxc("node3") → conecta al tercer nodo

Sin el fichero JSON, todo usa el nodo unico de PROXMOX_HOST.

Ejecucion manual

homelab-proxmox-mcp
homelab-linux-mcp
homelab-windows-mcp
homelab-docker-mcp
homelab-npm-mcp
homelab-python-mcp

Integracion en mcp.json

{
  "mcpServers": {
    "homelab-proxmox": {
      "command": "homelab-proxmox-mcp",
      "args": []
    },
    "homelab-linux": {
      "command": "homelab-linux-mcp",
      "args": []
    },
    "homelab-windows": {
      "command": "homelab-windows-mcp",
      "args": []
    },
    "homelab-docker": {
      "command": "homelab-docker-mcp",
      "args": []
    },
    "homelab-npm": {
      "command": "homelab-npm-mcp",
      "args": []
    },
    "homelab-python": {
      "command": "homelab-python-mcp",
      "args": []
    }
  }
}

Tools disponibles

Proxmox MCP

Tool Descripcion
list_nodes() Lista nodos del cluster
get_node_status(node) CPU, memoria, uptime del nodo
list_qemu(node) VMs QEMU/KVM del nodo
list_lxc(node) Contenedores LXC del nodo
get_vm_status(node, vmid, vm_type) Estado de VM o LXC
start_vm(node, vmid, vm_type, confirm) Arrancar VM/LXC (requiere confirm=True)
stop_vm(node, vmid, vm_type, confirm) Parar VM/LXC (requiere confirm=True)
restart_vm(node, vmid, vm_type, confirm) Reiniciar VM/LXC (requiere confirm=True)

Linux MCP

Tool Descripcion
read_file(rel_path) Leer fichero dentro del sandbox
write_file(rel_path, content) Escribir fichero dentro del sandbox
list_dir(rel_path) Listar directorio
file_exists(rel_path) Comprobar existencia
run_command(cmd) Comando whitelisted (ls, cat, df, du, grep, find, head, tail...)

Windows MCP

Tool Descripcion
read_file(rel_path) Leer fichero dentro del sandbox
write_file(rel_path, content) Escribir fichero dentro del sandbox
list_dir(rel_path) Listar directorio
file_exists(rel_path) Comprobar existencia
run_powershell(cmd) PS de solo lectura (Get-*, Test-Path...)

Docker MCP

Tool Descripcion
list_containers(all) Listar contenedores
inspect_container(name) Inspeccionar configuracion
get_container_logs(name, tail) Ultimas N lineas de logs
restart_container(name, confirm) Reiniciar contenedor (requiere confirm=True)

npm MCP

Tool Descripcion
npm_outdated(path) Dependencias desactualizadas
npm_audit(path) Vulnerabilidades
npm_list(path) Arbol de dependencias

Python MCP

Tool Descripcion
python_version() Version Python del servidor
pytest_run(path) Ejecutar tests
ruff_check(path) Linting con ruff
pip_list() Paquetes instalados

Tests

pytest

83 tests cubriendo todos los MCPs, utilidades y configuracion.

Seguridad

Sandboxes por MCP

MCP Variable .env Default Aplicado en
Linux LINUX_BASE_PATH /srv/homelab read_file, write_file, list_dir, file_exists, run_command
Windows WINDOWS_BASE_PATH C:/homelab read_file, write_file, list_dir, file_exists, run_powershell
npm NPM_BASE_PATH . npm_outdated, npm_audit, npm_list
Python PYTHON_BASE_PATH . pytest_run, ruff_check
Docker No aplica (trabaja con nombres de contenedores)
Proxmox No aplica (trabaja con la API autenticada)

Medidas de seguridad

  • Sandbox de rutas: Linux, Windows, npm y Python MCP validan que todas las rutas se resuelvan dentro del directorio base configurado. Path traversal (../..) es rechazado usando Path.relative_to().
  • Whitelist de comandos: run_command (Linux) solo permite binarios explicitamente listados. Los comandos se parsean con shlex y se ejecutan sin shell=True.
  • PowerShell restringido: Solo verbos de lectura (Get-*, Test-Path). Se bloquean pipes (|), punto y coma (;), ampersand (&), backticks, subexpresiones ($()), verbos destructivos (Remove-*, Set-*, Invoke-*, etc.) y binarios peligrosos (rm, del, cmd, etc.). Se ejecuta con -ExecutionPolicy Restricted -NonInteractive.
  • Docker con confirmacion: restart_container requiere confirm=True explicito. Sin el devuelve un aviso de confirmacion.
  • Proxmox con confirmacion: start_vm, stop_vm y restart_vm requieren confirm=True explicito. Se valida configuracion antes de conectar.
  • Sin secretos hardcodeados: Todo por .env, nunca en el codigo.

Limitaciones conocidas

  • run_safe no soporta rutas absolutas con espacios como nombre de binario (e.g. C:\Program Files\...). Esto es intencional: usa nombres simples (python, ls).
  • run_powershell pasa el comando como string a -Command; la validacion cubre la mayoria de vectores pero un escape creativo de PowerShell podria evadirla en teoria.
  • No hay autenticacion entre el cliente MCP y el servidor; la seguridad recae en el control de acceso al proceso.

Ejemplo mcp.json alternativo (con python -m)

Si prefieres invocar los servidores con python -m en lugar del entrypoint:

{
  "mcpServers": {
    "proxmox": {
      "command": "python",
      "args": ["-m", "homelab_mcp.proxmox_mcp.server"],
      "env": { "PYTHONPATH": "/path/to/homelab-mcp" },
      "type": "stdio"
    },
    "linux": {
      "command": "python",
      "args": ["-m", "homelab_mcp.linux_mcp.server"],
      "env": { "PYTHONPATH": "/path/to/homelab-mcp" },
      "type": "stdio"
    },
    "docker": {
      "command": "python",
      "args": ["-m", "homelab_mcp.docker_mcp.server"],
      "env": { "PYTHONPATH": "/path/to/homelab-mcp" },
      "type": "stdio"
    },
    "windows": {
      "command": "python",
      "args": ["-m", "homelab_mcp.windows_mcp.server"],
      "env": { "PYTHONPATH": "/path/to/homelab-mcp" },
      "type": "stdio"
    },
    "npm": {
      "command": "python",
      "args": ["-m", "homelab_mcp.npm_mcp.server"],
      "env": { "PYTHONPATH": "/path/to/homelab-mcp" },
      "type": "stdio"
    },
    "python": {
      "command": "python",
      "args": ["-m", "homelab_mcp.python_mcp.server"],
      "env": { "PYTHONPATH": "/path/to/homelab-mcp" },
      "type": "stdio"
    }
  }
}

Contributing

See CONTRIBUTING.md for guidelines.

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选