The Home Assistant half is thorough — typed control tools per device class rather than making the model hand-assemble service calls, and automations you can create and trace, not just trigger. The Omada half is the unusual part: when a light stops responding, being able to ask whether its access point is even up turns two investigations into one. Roles range from read-only to full, so an assistant can be given querying without being given the ability to restart the server.
A Home Assistant server that talks to the instance's own API with a long-lived token, covering entities, device control, automations and calendars — and, on the same connection, a TP-Link Omada controller for the network those devices sit on.
- getStates, getState, searchEntities, listEntities, getEntitiesByDomain and getAllSensors — paginated, with attributes off by default
- controlLight, controlClimate, controlCover, controlFan and controlMediaPlayer for typed device control instead of raw service payloads
- callService and entityAction when you want the underlying service call
- listAutomations, triggerAutomation, enableAutomation, disableAutomation, createAutomation, deleteAutomation and getAutomationTrace
- getHistory, getSystemLog, checkUpdates, getVersion and restartHomeAssistant
- sendNotification with mobile app actions, priority and images, and listNotificationTargets to find where to send
- listCalendars and getCalendarEvents; activateScene and runScript
- omada_listDevices, omada_listClients, omada_getInternetInfo, omada_getFirewallSetting and omada_getThreatList for the network side
- omada_setClientRateLimit and omada_setClientRateLimitProfile to cap a device's bandwidth
- omada_browse and omada_read as a two-tool graph mode, for models that cannot afford the full Omada schema
- analyzeSensors, which reads sensor data through a local Ollama model to flag anomalies
HA_URL and HA_TOKEN — a long-lived access token created from your Home Assistant profile page, shown only once. Node.js 20 or newer, or the published Docker image. It runs over stdio by default; HTTP mode binds to 127.0.0.1 unless told otherwise. Bearer auth with role-based permissions is available and off by default, which is worth turning on before anything but stdio. The Ollama analysis tool is the only part that needs a model running locally.
One command plus a key — npx @coffeerunhobby/mcp-ha-connect, then supply credentials
