Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Home Assistant

by foreverworksversion 0.1.2i★ –iRuns on your computer
Registry namecom.foreverworks/home-assistant

Install

Overview

Description from the maker (original English)

Read your Home Assistant's states, areas and history, and run its actions, approving locks first.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs on your computer
  • Transport: stdio
  • Category: Other
  • You need to fill in: HOME_ASSISTANT_URL, HOME_ASSISTANT_TOKEN_FILE

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 1 of 1 passed
  • Runs on your computer with your user’s permissions (files, network, apps).
  • You fill in yourself: HOME_ASSISTANT_URL, HOME_ASSISTANT_TOKEN_FILE, HOME_ASSISTANT_CONFIRM_DOMAINS

You need

  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "home-assistant": {
      "command": "npx",
      "args": [
        "-y",
        "@foreverworks/mcp-home-assistant"
      ],
      "env": {
        "HOME_ASSISTANT_URL": "your-value",
        "HOME_ASSISTANT_TOKEN_FILE": "your-value",
        "HOME_ASSISTANT_CONFIRM_DOMAINS": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add home-assistant --env HOME_ASSISTANT_URL=your-value --env HOME_ASSISTANT_TOKEN_FILE=your-value --env HOME_ASSISTANT_CONFIRM_DOMAINS=your-value -- npx -y @foreverworks/mcp-home-assistant

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "home-assistant": {
      "command": "npx",
      "args": [
        "-y",
        "@foreverworks/mcp-home-assistant"
      ],
      "env": {
        "HOME_ASSISTANT_URL": "your-value",
        "HOME_ASSISTANT_TOKEN_FILE": "your-value",
        "HOME_ASSISTANT_CONFIRM_DOMAINS": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "home-assistant": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@foreverworks/mcp-home-assistant"
      ],
      "env": {
        "HOME_ASSISTANT_URL": "your-value",
        "HOME_ASSISTANT_TOKEN_FILE": "your-value",
        "HOME_ASSISTANT_CONFIRM_DOMAINS": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • HOME_ASSISTANT_URL required env
    The address you open Home Assistant at, such as http://homeassistant.local:8123.
  • HOME_ASSISTANT_TOKEN_FILE required env
    Path of a file holding a long-lived access token made in an administrator's Home Assistant profile.
  • HOME_ASSISTANT_CONFIRM_DOMAINS env
    Action domains you approve call by call, comma-separated (default lock,alarm_control_panel,cover,valve; none for none).

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Runs on your computer; the tool list appears in your AI app after you install it.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified against the domain foreverworks.com (the registry checks domain ownership)

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • – Not applicable

    Endpoint responds

    This one runs on your computer; there is no internet endpoint

  • – Not applicable

    Sign-in with OAuth

    Runs on your computer and uses local settings instead

  • … Not checked yet

    No hidden instructions in tool descriptions

    Runs on your computer; we can only read tool lists from internet endpoints

Compared with others in Otheri

  • More stars than 0% of the other 18474 servers in this category
  • Published to the registry more recently than 89% of the other 18474 servers in this category
  • Basic checks equal to or better than 100% of the other 18474 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Home Assistant safe?

It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: HOME_ASSISTANT_URL, HOME_ASSISTANT_TOKEN_FILE

Does it run on my computer or in the cloud?

It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.1.2) reached the registry 5 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.

What can I use instead?

In the same category: Spec Driven Development, Remote Desktop Commander, Readfirst

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

by formulahendryEarly↓ 66/wk★ 440Updated 14 months ago

Runs on your computer

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

by desktop-commanderGrowing★ 211Updated 3 days ago

Runs in the cloud✓ desktopcommander.app

Readfirst

What to read and check before changing a file: project rules, risks, checks and tests per file.

by jeonghun917Growing↓ 5.3K/wkUpdated today

Runs on your computer

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

Home Assistant MCP server

Read your Home Assistant's entities, areas, history and logbook from your AI assistant, ask it anything a template can answer, and run its actions: dim a light, set a thermostat, start a script. Running an action is the only thing that changes anything, and actions on locks, alarm panels, covers and valves are approved by you, call by call, before they run. Nothing here moves money.

You need a Home Assistant this machine can reach (on your network or through its remote address) and a long-lived access token. A token of a user who is not an administrator is the recommended choice: every tool works with it except render_template, and the server refuses by itself, without asking Home Assistant, the few actions Home Assistant keeps for administrators (reloads, restarts and the like). An administrator's token adds those. There is no account to open and no cost. A wrong token costs a failed login, and Home Assistant may ban an address after a few, so the server never sends a refused token twice.

What you can ask

  • "Which lights are on right now?"
  • "How did the living room temperature change overnight?"
  • "Who or what unlocked the front door this morning?"
  • "Which devices are in the hallway?"
  • "Dim the kitchen light to 30 percent."
  • "Lock the front door." (you approve it first)

Install

.%22%7D%5D&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40foreverworks%2Fmcp-home-assistant%22%5D%2C%22env%22%3A%7B%22HOME_ASSISTANT_URL%22%3A%22%24%7Binput%3Ahome_assistant_url%7D%22%2C%22HOME_ASSISTANT_TOKEN_FILE%22%3A%22%24%7Binput%3Ahome_assistant_token_file%7D%22%2C%22HOME_ASSISTANT_CONFIRM_DOMAINS%22%3A%22%24%7Binput%3Ahome_assistant_confirm_domains%7D%22%7D%7D)

With Claude Code:

claude mcp add home-assistant -e HOME_ASSISTANT_URL="<Home Assistant address>" -e HOME_ASSISTANT_TOKEN_FILE="<path to Long-lived access token file>" -- npx -y @foreverworks/mcp-home-assistant

Claude Desktop (Settings, Developer, Edit Config) and most other clients read the same command as JSON:

{

"mcpServers": { "home-assistant": { "command": "npx", "args": ["-y", "@foreverworks/mcp-home-assistant"], "env": { "HOME_ASSISTANT_URL": " ", "HOME_ASSISTANT_TOKEN_FILE": " " } } } }

Each runs the published package on Node 22.19 or newer. VS Code and the Claude Desktop bundle ask for each setting as they add the server; leave an optional one empty. Cursor reads each from your environment instead (${env:HOME_ASSISTANT_URL} and so on), so set them before you start Cursor. The commands above set only what is required; Configuration has the rest.

From a clone
git clone https://github.com/foreverworks/mcps.git && cd mcps

npm ci && npm run build claude mcp add home-assistant -e HOME_ASSISTANT_URL=" " -e HOME_ASSISTANT_TOKEN_FILE=" " -- node "$PWD/servers/home-assistant/dist/index.js"

In a JSON configuration, the command is node and its one argument the full path of servers/home-assistant/dist/index.js. To share one running copy between several clients over HTTP, see docs/deploying.md.

Configuration

VariableRequiredMeaning
HOME_ASSISTANT_URLyesThe address you open Home Assistant at, such as http://homeassistant.local:8123 or https://ha.example.com, without /api. A path prefix is kept, for an instance behind a proxy.
HOME_ASSISTANT_TOKEN_FILEyesA file holding the long-lived access token and nothing else (HOME_ASSISTANT_TOKEN takes the token itself, for a local run).
HOME_ASSISTANT_CONFIRM_DOMAINSnoThe action domains you approve call by call, separated by commas. Default lock,alarm_control_panel,cover,valve; none for none. A value that is not a list of domains refuses every action until it is fixed, so a typo never turns approval off.

Every call reads these again, so a corrected value takes effect on the next call without a restart. With them unset the server still starts and lists its tools, and each tool answers a config error naming what is missing.

A deployment that sets MCP_EGRESS_ALLOW must allow the host of HOME_ASSISTANT_URL (homeassistant.local for the address above): the server reaches nothing else, over HTTP or its WebSocket. A sandbox that closes private networks (systemd's IPAddressDeny) must open the instance's address (docs/deploying.md). The variables every server shares are in docs/configuration.md.

Getting a long-lived access token
  1. Make a person for the assistant in Settings, People, let it log in, and leave Administrator off; then sign in as that user. The logbook then names it as the cause of what it does, and it can do everything in your home's entities but change Home Assistant itself. Use an administrator only if you want render_template and the admin-only actions: Home Assistant answers anyone else's request for those with a 401 that it counts as a failed login, which is why this server learns whose token it holds and never sends them one.
  2. Open your profile (your name at the bottom of the sidebar) and its Security tab.
  3. Under Long-lived access tokens, select Create token, give it a name such as "MCP server", and copy the token. Home Assistant shows it once; it is valid for ten years unless you delete it there.
  4. Save it alone in a file only you can read, and point HOME_ASSISTANT_TOKEN_FILE at it:
   umask 077 && printf '%s\n' '<the token>' > home-assistant-token

First run

  1. Ask for health. A good answer says ok: true, the version, state: RUNNING, the time zone, websocket: ok, the token's user and whether it is an administrator (if not, unavailable_tools lists render_template), and how many entities each domain has.
  2. Ask what is in an area, or which lights are on, to see list_areas and list_entities at work, then try an action on a light.
  3. If health answers auth, fix the token before anything else: see Troubleshooting.

Tools

read changes nothing; write runs an action in your home; write in bold is approved by you before every call (below).

ToolAccessWhat it does
healthreadWhether the server works with the instance: version, state, time zone, whether the WebSocket API signs in, and entities per domain; ok: false with the problem.
list_entitiesreadFinds entities by domain, area or words: one row each with id, name, state, unit and area (up to 1,000, default 100).
get_statesreadThe state of up to 50 entities, with their attributes and when they last changed.
list_areasreadEvery area (or one) with its floor, devices and entities, from Home Assistant's registries.
historyreadHow up to 20 entities' states changed over a window (default the last 24 hours, at most 31 days), keeping the newest changes.
logbookreadWhat happened over a window, optionally for one entity, with what caused each entry: a user, an action, an automation.
list_actionsreadThe actions on offer: every domain's action names, or one domain's actions with their fields.
render_templatereadRenders a Home Assistant template, with its states and helpers; with an administrator's token only.
call_actionwriteRuns an action on a target (entities, devices, areas, floors or labels) with its data, and answers with the states that changed; refuses one you approve call by call, and one only an administrator may run when the token's user is not one.
call_action_confirmedwriteThe same, for any action, after you approve the call.
Confirmation

call_action refuses, with needs_confirmation and before sending anything, an action that needs your approval:

  • an action in one of HOME_ASSISTANT_CONFIRM_DOMAINS (lock.unlock, cover.open_cover, alarm_control_panel.alarm_disarm, valve.open_valve);
  • an action of another domain aimed at an entity of one (homeassistant.toggle on cover.garage_door);
  • a homeassistant action aimed at devices, areas, floors, labels or all, which can reach any of them.

Those go through call_action_confirmed, which is confirmed like a payment, though nothing is paid: your client asks you before each call (Claude Code does, in every permission mode). With MCP_CONFIRM=elicit the server asks you itself, in one line computed from the call that will run, a code or a password shown as ****:

home-assistant: run the Home Assistant action lock.unlock on lock.front_door, with code=****

MCP_MAX_ACCESS=read turns both action tools off and leaves every read. How each client asks is in docs/security.md.

Troubleshooting

`auth`, status 401. Home Assistant refused the token: it was deleted, its user was removed or deactivated, or it was copied short. Make a new one (above) and put it in the token file. Until the file holds another token or the server restarts, every call answers auth with sent: false and sends nothing, because Home Assistant logs each refusal as a failed login and can ban the address.

`auth`, status 403. Home Assistant, or a proxy in front of it, refuses this machine's address. Usually Home Assistant banned it after failed logins: remove the address from ip_bans.yaml in Home Assistant's configuration folder, restart Home Assistant, check the token, then restart this server.

`unreachable`. Nothing answered at HOME_ASSISTANT_URL. Check that Home Assistant runs and that this machine reaches it: a browser here should open the same address. The message names what the network said (ECONNREFUSED: nothing listens on that port; ENOTFOUND: the name

Only the beginning is shown; read the rest in the repo

Ask PopNx