Byggt med AI
Mina byggen

Jag gav AI:n nycklarna till hemmaservern

En egen MCP-server låter Claude starta maskiner, läsa loggar och ändra Home Assistant direkt från chatten. Så byggde jag den, och så skyddar jag den.

Nivå
Avancerad
Lästid
10 min
Uppdaterad
5 november 2026
Verktyg
Claude, MCP, TypeScript, Docker, Proxmox, Unraid, Home Assistant

Varför jag ville ha det

Jag har en hemmaserver med ett tjugotal tjänster: Home Assistant, backup, mediaservrar, en reklamblockerare och några egna appar. Varje gång något krånglade kopierade jag loggar fram och tillbaka mellan terminalen och AI-chatten. AI:n föreslog ett kommando, jag körde det och klistrade in svaret. Det var långsamt och lätt att göra fel.

MCP (Model Context Protocol) löser just det. Det är ett öppet sätt att ge en AI-assistent verktyg den kan använda själv. I stället för att föreslå docker logs kör den kommandot, läser svaret och fortsätter.

Vad den kan göra

Servern har i dag 50 verktyg uppdelade på sju områden:

Område Exempel på vad Claude kan göra
Virtualisering Lista, starta och stänga virtuella maskiner och containrar, skapa nya
Lagringsservern Diskstatus, Docker-containrar, virtuella maskiner
Containrar Bygga, starta om och läsa loggar via Portainer
Home Assistant Läsa sensorer och historik, lista automationer, läsa fellogg, anropa tjänster
Skal och filer Köra kommandon, läsa och redigera konfigurationsfiler
Trädgården Lägga till växter och skötselsysslor i en egen databas
Bakgrundsjobb Följa kommandon som tar längre tid än ett chattsvar

I praktiken betyder det att jag kan skriva “duschfläkten har gått i en timme, vad hände?” och få ett svar baserat på riktiga data i stället för gissningar. Värmestyrningen i guiden om elpatronen byggdes helt på det sättet. Guiden du läser nu är också skriven så: Claude läste serverns egen dokumentation och historik och skrev utkastet.

Hur den är byggd

Diagram: Claude anropar MCP-servern över HTTPS med OAuth. Servern är en Docker-container som pratar med virtualiseringen, lagringsservern, containrarna, Home Assistant och en trädgårdsdatabas.

Servern är skriven i TypeScript med det officiella MCP-biblioteket och körs som en enda Docker-container. Den pratar med varje system på det sätt systemet erbjuder: API för virtualiseringen, Portainer och Home Assistant, GraphQL för lagringsservern och SSH för allt som kräver ett skal.

Den nås från Claude via en så kallad anpassad koppling (custom connector). Servern nås utifrån bara via HTTPS, och Claude loggar in med OAuth precis som när du kopplar ett vanligt program till ett konto.

Jag skrev den inte på en kväll. Den började i april med bara virtualiseringsverktygen och har växt i etapper:

  1. April: grundserver och virtualisering.
  2. Juni: skapa nya maskiner och containrar.
  3. Augusti: egna Home Assistant-verktyg, eftersom det färdiga paketet jag använde hade en trasig fellogg. Plus trädgårdsdatabasen.
  4. September: bakgrundsjobb, säkrare inloggning och stöd för virtuella maskiner på lagringsservern.
  5. Oktober: åtkomst till Home Assistants skal när den vanliga vägen hänger sig.

Säkerheten är hela poängen

Det här är det viktigaste avsnittet. Den som har en giltig inloggning till servern har i praktiken full kontroll över hela hemmanätverket. Därför har jag byggt flera lager:

  • Inloggning med OAuth 2.1 och PKCE. Engångskoder som går ut efter fem minuter, och nycklar som bara sparas som hashvärden.
  • Låst omdirigering. Inloggningen kan bara skicka tillbaka till Claudes egna adresser. En falsk länk kan alltså inte fånga en inloggningskod.
  • Spärr mot gissning. Efter tio fel lösenord på en kvart vägras alla försök tills tiden gått.
  • Bekräftelse på farliga saker. Att stänga av en maskin, skriva över en fil eller starta om Home Assistant ger först en förhandsvisning och en bekräftelsekod. Koden gäller bara exakt samma anrop, i fem minuter.
  • Ingen Docker-socket i containern. Servern kan inte ta över sin egen värd genom genvägar.

Ett misstag jag gjorde

En gång bad jag Claude felsöka en container, och den körde docker inspect. Kommandot visar containerns miljövariabler, och där låg flera nycklar i klartext. De hamnade i chatthistoriken. Jag fick byta ut alla.

Lärdomen: lägg hemligheter i en hemlighetshanterare eller i filer som läses vid start, inte som miljövariabler. Och tänk på att allt AI:n läser kan hamna i en logg någonstans.

Ska du bygga en egen?

Ärligt svar: förmodligen inte som första projekt. En MCP-server med skalåtkomst är kraftfull just för att den kan göra allt, och det är också risken.

Det finns säkrare sätt att börja:

  • Bara läsa. En server som läser sensorer och loggar men inte kan ändra något ger nästan hela nyttan för felsökning.
  • Färdiga servrar. Det finns färdiga MCP-servrar för Home Assistant och många andra system. Börja där och bygg eget först när du saknar något.
  • Ett system i taget. Min började med ett enda område. Lägg till nästa när du litar på det första.

Vill du ändå bygga är grunden enkel: ett MCP-bibliotek, ett par verktyg som anropar ett API du redan använder, och en ordentlig inloggning innan servern blir nåbar utifrån. Det sista är inte valfritt.

Gör det själv

Startprompt

Klistra in i Claude, ChatGPT eller en annan AI-assistent. Byt ut det som står inom hakparentes mot det som gäller hos dig.

Jag vill låta en AI-assistent läsa från min hemmaserver via MCP, men säkert. Hjälp mig planera en första version.

Min miljö:
- Det jag vill kunna fråga om: [t.ex. Home Assistant, Docker-containrar, loggar]
- Hur servern nås utifrån idag: [inte alls / VPN / Cloudflare Tunnel / omvänd proxy]
- Språk jag kan läsa: [TypeScript / Python / inget, förklara allt]

Krav:
1. Första versionen får bara läsa, aldrig ändra något.
2. Föreslå om det finns en färdig MCP-server jag kan använda i stället för att bygga eget.
3. Om vi bygger eget: ett litet projekt med två eller tre verktyg, och inloggning med OAuth innan något blir nåbart utifrån.
4. Lista riskerna, särskilt hemligheter som kan hamna i loggar eller i chatten.

Ge mig en plan i steg. Skriv ingen kod förrän jag har godkänt planen.

Ett mejl varannan vecka

En sak jag testat, en sak jag byggt och ett tips du kan använda direkt. Inget annat.