Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Read your Home Assistant's states, areas and history, and run its actions, approving locks first.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
HOME_ASSISTANT_URL, HOME_ASSISTANT_TOKEN_FILE, HOME_ASSISTANT_CONFIRM_DOMAINS必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、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"
}
}
}
}ターミナルでこれを実行します
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動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
HOME_ASSISTANT_CONFIRM_DOMAINS envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月8日にチェック
レジストリ名はドメイン foreverworks.com で確認済みです(レジストリがドメインの所有を確認しています)
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:HOME_ASSISTANT_URL, HOME_ASSISTANT_TOKEN_FILE
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.2)がレジストリに届いたのは5 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Tool Guardian
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Too many MCP servers eating your context? A router that loads each tool's schema only when needed.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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.
.%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.
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.
| Variable | Required | Meaning |
|---|---|---|
HOME_ASSISTANT_URL | yes | The 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_FILE | yes | A file holding the long-lived access token and nothing else (HOME_ASSISTANT_TOKEN takes the token itself, for a local run). |
HOME_ASSISTANT_CONFIRM_DOMAINS | no | The 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.
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.HOME_ASSISTANT_TOKEN_FILE at it: umask 077 && printf '%s\n' '<the token>' > home-assistant-token
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.list_areas and list_entities at work, then try an action on a light.health answers auth, fix the token before anything else: see Troubleshooting.read changes nothing; write runs an action in your home; write in bold is approved by you before every call (below).
| Tool | Access | What it does |
|---|---|---|
health | read | Whether 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_entities | read | Finds entities by domain, area or words: one row each with id, name, state, unit and area (up to 1,000, default 100). |
get_states | read | The state of up to 50 entities, with their attributes and when they last changed. |
list_areas | read | Every area (or one) with its floor, devices and entities, from Home Assistant's registries. |
history | read | How up to 20 entities' states changed over a window (default the last 24 hours, at most 31 days), keeping the newest changes. |
logbook | read | What happened over a window, optionally for one entity, with what caused each entry: a user, an action, an automation. |
list_actions | read | The actions on offer: every domain's action names, or one domain's actions with their fields. |
render_template | read | Renders a Home Assistant template, with its states and helpers; with an administrator's token only. |
call_action | write | Runs 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_confirmed | write | The same, for any action, after you approve the call. |
call_action refuses, with needs_confirmation and before sending anything, an action that needs your approval:
HOME_ASSISTANT_CONFIRM_DOMAINS (lock.unlock, cover.open_cover, alarm_control_panel.alarm_disarm, valve.open_valve);homeassistant.toggle on cover.garage_door);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.
`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
冒頭だけを表示しています。続きはリポジトリで読めます