Homebridge MCP
An AI and Model Context Protocol (MCP) integration for Homebridge that gives ChatGPT, Claude, and other compatible clients authenticated access to normalized smart-home state, camera snapshots, and explicitly authorized controls.
Homebridge MCP is a self-contained plugin that runs inside the Homebridge process. It exposes an authenticated MCP-over-HTTP endpoint for ChatGPT, Claude, and other compatible clients, with no companion service, database, or separate runtime required.
For discovery, it reads configured Homebridge bridge ports through local HomeKit Accessory Protocol (HAP) endpoints. It refreshes live values when possible and falls back to persisted Homebridge accessory caches when live discovery is unavailable. The fallback is a snapshot: cache-only devices cannot be used for writes. Services with the same HomeKit accessory ID are combined into one physical device record, while battery, motion, health, and similar services appear as capabilities.
The MCP tool surface includes device listing and detail reads, camera snapshots returned as image attachments, power on/off, brightness, and thermostat target controls. Normalized capabilities can include temperature, heating and cooling state, fan speed, contact, motion, occupancy, battery level, and camera snapshots, depending on the accessories available.
Access is localhost-only by default and every request requires a bearer token or a valid Cloudflare Access assertion. Writes also require write mode, the relevant category permission, and an explicit per-device allowlist entry. Locks, garage doors, and security systems are disabled by default; arbitrary characteristic writes and general Homebridge API passthrough are not exposed. Optional audit logging records write actions without logging tokens or authorization headers.
Live discovery requires Homebridge insecure mode and configured local bridge ports. Camera snapshots depend on the camera bridge supporting HomeKit resource requests. An existing HTTPS proxy or Cloudflare Tunnel can provide remote access, but the plugin does not create the tunnel or its access policies.