getStatesLABSCO SUMMARY
Home automation and the network underneath it, answered from one place.
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.
What it is
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.
What you get
- 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
Requirements
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.
Setup effort
One command plus a key — npx @coffeerunhobby/mcp-ha-connect, then supply credentials
USE CASES
Turning things on and off in plain language
Find the entity by name, then use the tool built for its device class rather than a raw service call.
Working out why an automation did not fire
List the automations, read the execution trace, then trigger it by hand to see what happens.
Checking whether a device is offline or the network is
Look at the entity's state, then at the access point and clients on the controller.
Answering 'is the internet down'
Read WAN status from the controller instead of guessing from a failing integration.
Capping a device that is saturating the uplink
Find the client, then apply a rate-limit profile or a custom limit.
Getting told when a sensor starts behaving oddly
Run the sensor history through a local model and read back what it flagged.
Sending yourself a notification that does something
Discover the mobile targets, then send with actions and priority attached.
60 tools
Listed in project docs. Your client may show a different list.
getStategetEntitiesByDomainsearchEntitiesgetAllSensorslistEntitiesgetDomainSummarygetHistorylistPersonscallServiceentityActioncontrolLightcontrolClimatecontrolMediaPlayercontrolCovercontrolFanactivateScenerunScriptsendNotificationlistNotificationTargetslistAutomationstriggerAutomationenableAutomationdisableAutomationtoggleAutomationreloadAutomationscreateAutomationdeleteAutomationgetAutomationTracegetVersionrestartHomeAssistantgetSystemLogcheckUpdateslistCalendarsgetCalendarEventsomada_listSitesomada_listDevicesomada_getDeviceomada_searchDevicesomada_getSwitchStackDetailomada_listDevicesStatsomada_listClientsomada_getClientomada_listMostActiveClientsomada_listClientsActivityomada_listClientsPastConnectionsomada_getRateLimitProfilesomada_setClientRateLimitomada_setClientRateLimitProfileomada_disableClientRateLimitomada_getThreatListomada_getInternetInfoomada_getPortForwardingStatusomada_getLanNetworkListomada_getLanProfileListomada_getWlanGroupListomada_getSsidListomada_getSsidDetailomada_getFirewallSettinganalyzeSensorsBEFORE YOU INSTALL
What to know first
Tools you get
60 tools named in the project's documentation.
Requires
- npx on PATH
- Node.js 20+
- HA_URL in your environment
- HA_TOKEN in your environment
INSTALLATION
Connect your client
Server setup
npx @coffeerunhobby/mcp-ha-connectMCP Clients
Claude Desktop, LM Studio
{
"mcpServers": {
"homeassistant": {
"command": "npx",
"args": [
"-y",
"@coffeerunhobby/mcp-ha-connect"
],
"env": {
"HA_URL": "http://homeassistant.local:8123",
"HA_TOKEN": "<YOUR_HA_TOKEN>"
}
}
}
}The 24 omada_ tools load only when the Omada plugin is switched on: set OMADA_PLUGIN_ENABLED=true, OMADA_BASE_URL, OMADA_CLIENT_ID, OMADA_CLIENT_SECRET and OMADA_OMADAC_ID (and optionally OMADA_SITE_ID) as environment variables for the server — in the env block of a JSON config, as extra -e flags before the image name in the Docker command, or ahead of npx in the HTTP-mode command. Without them you get the Home Assistant tools only.
Docker
{
"mcpServers": {
"homeassistant": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"HA_URL=http://host.docker.internal:8123",
"-e",
"HA_TOKEN=<YOUR_HA_TOKEN>",
"ghcr.io/coffeerunhobby/mcp-ha-connect:latest"
]
}
}
}The 24 omada_ tools load only when the Omada plugin is switched on: set OMADA_PLUGIN_ENABLED=true, OMADA_BASE_URL, OMADA_CLIENT_ID, OMADA_CLIENT_SECRET and OMADA_OMADAC_ID (and optionally OMADA_SITE_ID) as environment variables for the server — in the env block of a JSON config, as extra -e flags before the image name in the Docker command, or ahead of npx in the HTTP-mode command. Without them you get the Home Assistant tools only.
n8n
Start the server in HTTP mode on a machine n8n can reach, with your Home Assistant URL and token:
MCP_SERVER_USE_HTTP=true \
MCP_HTTP_PORT=3000 \
MCP_HTTP_BIND_ADDR=0.0.0.0 \
HA_URL=http://homeassistant.local:8123 \
HA_TOKEN=<YOUR_HA_TOKEN> \
npx @coffeerunhobby/mcp-ha-connectAdd an MCP Client node in n8n.
Set its SSE URL to http://<YOUR_SERVER>:3000/mcp, using the address of the machine running the server.
Call tools such as getVersion, listEntities or getSystemLog.
The 24 omada_ tools load only when the Omada plugin is switched on: set OMADA_PLUGIN_ENABLED=true, OMADA_BASE_URL, OMADA_CLIENT_ID, OMADA_CLIENT_SECRET and OMADA_OMADAC_ID (and optionally OMADA_SITE_ID) as environment variables for the server — in the env block of a JSON config, as extra -e flags before the image name in the Docker command, or ahead of npx in the HTTP-mode command. Without them you get the Home Assistant tools only.