Homelab MCP-Server
đ CI
đ Python 3.12+
đ License: MIT
KI-gestĂŒtzte Verwaltung der Homelab-Infrastruktur ĂŒber das Model Context Protocol
đ TestSprite Season 2 Hackathon-Einreichung
Branch: TestSprite_Hackathon | EndgĂŒltige Erfolgsquote: 10/10 (100%)
Was ich gebaut habe
homelab_mcp ist ein MCP-Server (Model Context Protocol) â er spricht kein REST. TestSprite testet REST-APIs. Die Kernherausforderung dieser Einreichung bestand darin, diese Protokoll-LĂŒcke zu schlieĂen.
Die Lösung: Ein FastAPI-Wrapper, der alle 56 MCP-Tools als korrekte REST-Endpunkte bereitstellt, komplett mit einem dokumentierten HTTP-Fehlervertrag, sodass TestSprite die gesamte Tool-OberflÀche ohne MCP-Protokollkenntnisse testen kann.
TestSprite Agent â FastAPI wrapper (port 8080) â homelab_mcp tools â InfrastructureDesign des Fehlervertrags
Anstatt generische 500er-Fehler zurĂŒckzugeben, implementiert der Wrapper einen dreistufigen HTTP-Fehlervertrag:
Status | Bedeutung | Beispiel |
422 | Fehlende oder fehlerhafte Anforderungsfelder | Erforderlicher |
412 | Infrastruktur-Vorbedingung nicht erfĂŒllt | GerĂ€te-ID nicht in der Sitemap registriert |
424 | Externe AbhÀngigkeit nicht erreichbar | SSH-Ziel / Proxmox-Host ausgefallen |
Das Design 424 Failed Dependency ist der interessanteste Teil. Tools, die mit echter Infrastruktur kommunizieren (SSH-Hosts, Proxmox API, TrueNAS), fĂŒhren einen TCP-Preflight-Test durch, bevor der Handler aufgerufen wird. Wenn das Ziel nicht erreichbar ist, gibt der Wrapper einen 424-Fehler mit einer strukturierten Nutzlast zurĂŒck â status, host, port, protocol und ein requires-Hinweis zur Fehlerbehebung â, ohne den Handler jemals zu berĂŒhren. Keine TeilausfĂŒhrung, kein Durchsickern von Anmeldeinformationen an nicht erreichbare Hosts.
Sobald dieser Vertrag in der Swagger-Spezifikation dokumentiert war, generierte TestSprite automatisch Negativ-TestfĂ€lle fĂŒr alle drei Fehlertypen.
Testergebnisse â FĂŒnf-Durchlauf-Zyklus
Durchlauf | Erfolgsquote | Wichtige Ănderung |
Pre-Hackathon-Baseline | ~40% | MCP-Protokoll-NichtĂŒbereinstimmung â alle Test-Harness-Fehler, null Server-Bugs |
Durchlauf 1 | 7/10 (70%) | FastAPI-Wrapper + 424-Spezifikation â echte Bugs aufgedeckt |
Durchlauf 2 | 9/10 (90%) | Validierung pro Route via jsonschema â 422-Vertrag fĂŒr alle 56 Tools korrigiert |
Durchlauf 3 | 7/10 (70%) | Testplan nach Korrektur von code_summary.yaml neu generiert â strengere Tests deckten neue LĂŒcken auf |
Durchlauf 4 | 8/10 (80%) | ResourceManager-Lebenszyklus-Verkabelung + 412-Klassifizierer-Muster |
Durchlauf 5 | 10/10 (100%) | minItems-Schema-Korrektur + konsistente Wortwahl bei Fehlermeldungen |
Durch TestSprite gelieferte Korrekturen
Datei | Ănderung |
| jsonschema-Validator pro Route; 422 mit Feldpfad; FastAPI-Lebenszyklus fĂŒr ResourceManager; erweiterter Fehlerklassifizierer |
| Kurzschluss zu 412, wenn keine Drift-Baselines registriert sind |
|
|
| Konsistente Wortwahl "GerĂ€t nicht gefunden" fĂŒr Klassifizierer-Abgleich |
| Feldnamen korrigiert; 412/422/424-VertrÀge pro Tool dokumentiert |
AusfĂŒhren der TestSprite-Testsuite
# Clone the hackathon branch
git clone -b TestSprite_Hackathon https://github.com/washyu/homelab_mcp.git
cd homelab_mcp
# Install dependencies
uv sync
# Start the FastAPI wrapper (no auth mode for testing)
uv run python run_server.py --openapi --port 8080 --no-auth
# TestSprite test cases are in testsprite_tests/
# Run via the TestSprite agent pointed at http://localhost:8080Gelernte Lektionen
MCP-Server benötigen eine REST-Fassade fĂŒr konventionelle API-Test-Tools
Ihre Swagger-Spezifikation ist Ihr Testplan â dokumentieren Sie FehlervertrĂ€ge und TestSprite generiert Tests dafĂŒr
Genauigkeit von
code_summary.yamlist wichtig â falsche Feldnamen erzeugen falsche TestsFĂŒgen Sie CLAUDE.md-Leitplanken hinzu, bevor Sie Claude Code in die NĂ€he von TestSprite lassen â ohne diese wird es autonom in einer Schleife aus KorrekturâNeustart feststecken und Credits verbrauchen
SchlieĂen Sie
testsprite_tests/von Ihrem Linter und Formatter aus â behandeln Sie es wievendor/Berichte nach jedem Durchlauf committen oder kopieren â die Zusammenfassung wird jedes Mal ĂŒberschrieben
Auth- und No-Auth-Modi erfordern separate DurchlĂ€ufe â können nicht beide in einer TestSprite-Sitzung abgedeckt werden
VollstÀndiger Bericht: shaunjackson.space
Ein Python-MCP-Server, der es KI-Assistenten ermöglicht, Homelab-Infrastruktur zu verwalten, bereitzustellen und zu ĂŒberwachen. Die Tools umfassen SSH-Erkennung, VM-Verwaltung, Dienstinstallation, Netzwerk-Topologie-Mapping, Proxmox-Operationen und Anmeldeinformationsverwaltung.
Hauptfunktionen
SSH-Erkennung -- Umfassende Hardware- und Softwareinformationen von jedem System sammeln
Dienstinstallation -- Jellyfin, Pi-hole, Ollama, Home Assistant und mehr aus Vorlagen bereitstellen
Proxmox-Integration -- Voller API-Zugriff sowie Erkennung von Community-Skripten
VM/Container-Lebenszyklus -- Docker- und LXD-Workloads bereitstellen, steuern und entfernen
Netzwerk-Mapping -- GerĂ€te entdecken, Topologie analysieren und Ănderungen verfolgen
Terraform und Ansible -- Zustandsverwaltete Bereitstellungen mit Drift-Erkennung und Playbooks
Anmeldeinformationsverwaltung -- Server einmal registrieren, verbinden ohne erneute Eingabe von Anmeldedaten
Schnellstart
# Install from PyPI (recommended â no clone needed)
uvx homelab-mcp
# Or clone and run from source
git clone https://github.com/washyu/homelab_mcp.git
cd homelab_mcp
uv sync && uv run python run_server.pyFĂŒr die vollstĂ€ndige Anleitung (Umgebungsvariablen, MCP-Client-Konfiguration, erster Tool-Aufruf), siehe den Setup-Guide.
Dokumentation
Anleitung | Beschreibung |
Von Null bis zum ersten Tool-Aufruf | |
Alle Tools mit Argumenten und Beispielen | |
Umgebungsvariablen und CLI-Optionen | |
Anleitung zur Claude Desktop-Integration |
Funktionsweise
Setup -- Der Server generiert beim ersten Start ein SSH-SchlĂŒsselpaar (
~/.ssh/mcp_admin_rsa)Host anbinden -- Verwenden Sie
setup_mcp_admin, um einen verwalteten Benutzer auf dem Zielsystem zu erstellenVerifizieren -- Verwenden Sie
verify_mcp_admin, um den passwortlosen SSH-Zugriff zu bestÀtigenVerwalten -- Hardware entdecken, Dienste installieren, VMs steuern und Ihr Netzwerk abbilden
Der Server kommuniziert ĂŒber stdio unter Verwendung des MCP-Protokolls. Verbinden Sie ihn mit einem beliebigen MCP-kompatiblen Client (Claude Desktop, etc.) und interagieren Sie ĂŒber natĂŒrliche Sprache.
Anmeldeinformationsverwaltung
Speichern Sie SSH- und Proxmox-Anmeldedaten einmal, damit der Server sie bei jeder Verbindung automatisch einfĂŒgt:
# Store an SSH credential
homelab-mcp credentials add 192.168.1.10 admin
# Store an SSH key-based credential (stores the key file path in the keyring, not the key)
homelab-mcp credentials add 192.168.1.10 admin --key-path ~/.ssh/id_ed25519
# Store a Proxmox API credential
homelab-mcp credentials add 192.168.1.200 root@pam --type proxmox
# Update an existing credential â `add` is upsert; re-running replaces the stored entry
homelab-mcp credentials add 192.168.1.10 admin
# List stored credentials
homelab-mcp credentials list
homelab-mcp credentials list --type proxmox
# Remove a credential
homelab-mcp credentials remove 192.168.1.10Die CLI bietet vollstĂ€ndiges CRUD fĂŒr Anmeldedaten: add (erstellen/aktualisieren â upsert), list (lesen), remove (löschen). Es gibt keinen separaten update-Unterbefehl â ein erneutes AusfĂŒhren von add ersetzt sowohl das Keyring-Geheimnis als auch den Authentifizierungstyp des Registrierungseintrags.
Anmeldedaten werden im OS-Keyring gespeichert (libsecret unter Linux, Keychain unter macOS). Wenn der OS-Keyring nicht verfĂŒgbar ist (Headless-Server), greifen die Anmeldedaten auf Umgebungsvariablen zurĂŒck.
Siehe Credentials CLI-Referenz fĂŒr die vollstĂ€ndige Dokumentation.
MCP-Client-Konfiguration
Von PyPI (uvx) â empfohlen:
{
"mcpServers": {
"homelab": {
"command": "uvx",
"args": ["homelab-mcp"]
}
}
}Vom Quellcode-Klon:
{
"mcpServers": {
"homelab": {
"command": "uv",
"args": ["run", "python", "run_server.py"],
"cwd": "/path/to/homelab_mcp"
}
}
}Entwicklung
# Install with dev dependencies
uv sync --group dev
# Run tests (unit only, no Docker required)
uv run pytest tests/ -m "not integration"
# Code quality
uv run ruff check src/ tests/
uv run mypy src/Siehe DEPLOYMENT.md fĂŒr Details zur Produktionsbereitstellung.
Projektstruktur
src/homelab_mcp/
server.py # MCP server with JSON-RPC protocol
tool_schemas/ # Tool definitions (8 schema files)
tool_annotations.py # MCP annotation hints per tool
ssh_tools.py # SSH discovery and hardware detection
service_installer.py # Service installation framework
infrastructure_crud.py # Infrastructure lifecycle management
vm_operations.py # VM/container operations
sitemap.py # Network topology mapping
database.py # SQLite device tracking
error_handling.py # Centralized error handling
credential_store.py # OS keyring credential storage
log_filter.py # Credential redaction for log output
prompt_registry.py # MCP prompts registry
resource_readers.py # MCP resource read handlers
service_templates/ # YAML service definitions
testsprite_tests/ # TestSprite generated test suite (hackathon)
tests/ # Unit and integration tests
docs/ # Full documentationDanksagungen
Proxmox-Community-Skript-Integration unterstĂŒtzt durch community-scripts/ProxmoxVE (MIT-Lizenz).
Mitwirken
Forken Sie das Repository
Erstellen Sie einen Feature-Branch
Schreiben Sie Tests fĂŒr neue Funktionen
Stellen Sie sicher, dass alle Tests bestehen
Senden Sie einen Pull Request
Lizenz
MIT-Lizenz -- siehe LICENSE-Datei fĂŒr Details.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/washyu/homelab_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
