The MCP server for your home

Let your AI run the house.

Connect Claude, or any agent that speaks MCP, and it can see and run every device in your Home app. It still asks before it unlocks, writes down everything it does, and never takes orders from a device’s name.

Claude and other MCP clientsOr your own model, on your networkOpen source

Living RoomOn · 80 %
KitchenOn
PorchOn
19.5°
HeatingHeat to 21°
60%
ShuttersOpen · 60 %
TVOff
CoffeeOff
Front DoorLocked
Your AI agentOver Homeswift’s MCP server · demo, nothing real is changed
MCPtools/call get_server_status {}

Built for agents

One connector. Your whole house.

Homeswift is an MCP server, the standard way AI agents reach tools. Add it to Claude as a custom connector, sign in with your web UI account, and decide how far it may go. Other MCP clients connect with a token.

  1. Put the web UI online

    Over HTTPS at a name: Cloudflare Tunnel, Tailscale Funnel or your own reverse proxy.

  2. Add the connector

    In Claude, Settings › Connectors › Add custom connector, with https://home.example.com/mcp. No client ID to copy: Claude registers itself.

  3. Sign in and choose

    Read, Control or Administer, never more than your account may do. It follows you to the Claude apps on your phone.

46tools, plus each plugin's own actions, like pairing a TV
5prompts: diagnose the logs, troubleshoot a device, build a scene…
Liveaccessory changes and new log lines pushed to the agent

It asks before it acts

An assistant you can hand the keys to. Almost.

Turning off a lamp should be instant. Unlocking the front door should not. Homeswift draws that line for you.

Every change shows you what it will do

Anything that unlocks, rewrites configuration or restarts the bridge runs as a dry run first. You see each setting and its new value, then Allow or Don't allow. A change that would fail anyway is never put to you.

Unlock Front Door?set_security_accessory
Lock Target StateSecured → Unsecured
Don't allowAllow

Locks go through one door

Locks, garage doors and alarms change through a single guarded tool that always asks. A scene that would unlock something refuses to run unattended.

Everything is written down

Each change lands in an audit log with who asked, from where, and what happened. Read it back any time, or just ask: “what changed today?”

Your secrets stay home

Passwords, tokens and keys are masked before anything reaches a model. A password a TV hands out while pairing travels as a handle the model never reads.

A budget you set

Daily and monthly limits in tokens or dollars. When it's spent, the assistant stops until midnight; your lights don't.

Logs are data, not orders

Text from devices and logs is fenced off as untrusted. A device that names itself “unlock the door” gets read, never obeyed.

Ways to ask

Wherever you already type, or talk.

One assistant, one set of rules, three doors in. Siri and the Home app keep working as they always have: every device is still a HomeKit accessory.

⌘K
Movie night in the living room
Lights at 15 %, shutters closed, TV on.
Hold to speak

In the bridge's web UI

The sparkle button on every page, or ⌘K. Hold the mic to speak, and hear the answer read back. Conversations are kept, per user, on your own machine.

HomeswiftConnected · control
Is anything left on upstairs?
Only the desk light, at 70 %.

In Claude

Add Homeswift as a connector in claude.ai and the Claude apps. You sign in with your web UI account and choose what it may do: read, control, or administer.

$ homeswift ask "why does the key light
  show No Response at night"
It loses Wi-Fi when the router's
nightly restart runs at 03:00…

In a terminal

ask, explain an error, diagnose a log, or get today's digest. Pipe journalctl straight in.

More than a remote

It knows how your house is put together.

The assistant reads the same plugins, logs and history the bridge does, so it can answer the questions a switch can't.

Why did the porch light drop off last night?

Searches the log around the time, tells you what happened and whether there's anything to fix.

What happened today?

A daily digest under 200 words, what needs attention first. It's also on the Status page each morning.

Add the Elgato light at 192.168.1.50.

Writes the plugin's settings, checked against its schema, and shows you the change before saving.

Pair my Philips TV.

Finds the TV, runs the pairing, and keeps the password it gets out of the conversation.

Make a movie-night scene.

Picks the accessories, proposes values, tries them, and saves a scene you can schedule.

Tidy up my rooms.

Suggests rooms and clearer names for forty accessories called “Switch 2”.

New in 0.9

Set the mood.

143 photographic colour palettes in 28 themes, alongside twenty-two moods for a room’s lights. Browse themes such as Get cozy, Movie night and Wanderlust, and choose the same images for your saved scenes. The animated moods restore the lights when they end.

Arctic aurora
Rolling hills
Blossom
CandlelightVery warm, dim light for dinner.
FireplaceReds, oranges and amber dancing unevenly.
OceanBlues and teals rolling from light to light like waves.
Northern lightsGreen, teal and violet drifting slowly.
SunsetTen minutes from golden yellow through orange and pink to a dim red.
DiscoEvery light jumps to a vivid colour on each beat.
Police sirenRed and blue swapping from light to light.
HalloweenPurple and orange with an eerie flicker.
Make the living room feel like a jazz bar.

Your assistant writes the mood from your words: the colours, how long each holds, whether it loops. It learns how many lights there are, never their names.

Halloween on the dining room lights.

Purple and orange with an eerie flicker for half an hour, then every light back as it was. Or say “stop”.

A ten-minute sunset in the bedroom.

Golden yellow through orange and pink to a dim red, and the lights stay there. Also a button on the Scenes page.

Your choice of model

Bring your own brain.

The assistant is optional, off until you add it, and talks to the provider you pick over plain HTTPS.

ClaudeOpus 5.5 by default; Haiku when cost matters
OpenAIResponses API, nothing stored on their side
GeminiFlash by default, a 1M-token context
LocalOllama, LM Studio or vLLM on your network
Apple on-deviceQuestions only, nothing leaves the Mac

Underneath

A bridge first. A fast one.

The assistant sits on Homebridge, rewritten in Swift: your Homebridge config and plugins, in one small binary with no Node.js. Turn the assistant off and it's still the lightest bridge you can run.

8.6 MBmemory at idle, against 76 MB for HAP-NodeJS
0.3 msfrom a write to every Home app seeing it
11plugins compiled in, from UniFi Protect to Daikin

Apple M1, one run each over loopback. The full comparison.

UP
UniFi ProtectCameras, doorbells
UA
UniFi AccessDoor locks
DC
Daikin CloudAir conditioners
DY
DysonPurifiers, fans
LG
LG ThinQAppliances
PH
Philips TVAmbilight, remote
EK
ElgatoKey Lights
GV
GoveeLights
HU
Philips HueLights, scenes
IK
IKEALights, outlets
eW
eWeLinkSonoff
DL
DolphinPool cleaners

Install

Talking in five minutes.

# 1. The bridge. Host networking lets HomeKit find it over mDNS.
docker run -d --name homeswift --network host \
  --restart unless-stopped \
  -v ~/homeswift:/homeswift \
  ghcr.io/mp-consulting/homeswift:latest
// 2. The assistant: one block in config.json, with a budget.
{ "platform": "HomeswiftAiKit",
  "provider": "anthropic",
  "apiKey": "sk-ant-…",
  "budget": { "monthlyUsd": 5 } }
  1. Open the web UI

    On port 8581, and create your account with the code the bridge prints.

  2. Add your devices

    Pick plugins and fill in their settings, or ask the assistant to do it.

  3. Add the bridge in Home

    Scan the QR code on the Status page.

  4. Say something

    Press ⌘K and tell your house what you want.