MCP server for Z-Wave device management via the zwave-js-server WebSocket exposed by Z-Wave JS UI
Project description
mcp-server-zwave-js-ui
An MCP server for managing a Z-Wave network
through Z-Wave JS UI. It connects to
the zwave-js-server WebSocket that Z-Wave JS UI exposes and surfaces the mesh
— controller, nodes, values, and configuration parameters — as tools an MCP
client (e.g. Claude) can call.
Status: early / read-only. This first release covers read-only introspection. Write control and administrative operations are on the roadmap — see Roadmap.
What it connects to
Z-Wave JS UI runs two servers: the web UI (default port 8091) and the
Z-Wave JS Server WebSocket (default port 3000) that Home Assistant and
this MCP server talk to. Point ZWAVE_JS_URL at the WebSocket, not the UI.
Install
Requires Python 3.12+.
pip install mcp-server-zwave-js-ui
# or, isolated:
pipx install mcp-server-zwave-js-ui
# or, no install:
uvx mcp-server-zwave-js-ui
Configure
| Variable | Default | Description |
|---|---|---|
ZWAVE_JS_URL |
ws://localhost:3000 |
WebSocket URL of the Z-Wave JS Server. |
Use with Claude Code
claude mcp add zwave-js-ui \
--env ZWAVE_JS_URL=ws://borg:3002 \
-- uvx mcp-server-zwave-js-ui
Or add it to an MCP client config directly:
{
"mcpServers": {
"zwave-js-ui": {
"command": "uvx",
"args": ["mcp-server-zwave-js-ui"],
"env": { "ZWAVE_JS_URL": "ws://borg:3002" }
}
}
}
Tools
| Tool | Description |
|---|---|
zwave_controller_info |
Controller and network summary (home id, versions, RF region, node counts). |
zwave_list_nodes |
One-line summary of every node (status, readiness, security, device). |
zwave_node_info |
Full detail for a node (device class, command classes, endpoints, signal). |
zwave_node_values |
A node's current values, excluding configuration parameters. |
zwave_node_config |
A node's configuration parameters with current values and metadata. |
Roadmap
- Level 2 — read/write: set values (on/off/dim), set configuration parameters, manage association groups. Mutating tools will be gated behind a
ZWAVE_JS_READ_ONLYflag. - Level 3 — admin/lifecycle: inclusion/exclusion, re-interview, network heal / rebuild routes, OTA firmware update.
Development
git clone https://github.com/cacack/mcp-server-zwave-js-ui
cd mcp-server-zwave-js-ui
uv venv --python 3.13 && source .venv/bin/activate
uv pip install -e ".[dev]"
pytest
ruff check . && ruff format --check .
See CLAUDE.md for architecture and design notes.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_server_zwave_js_ui-0.3.0.tar.gz.
File metadata
- Download URL: mcp_server_zwave_js_ui-0.3.0.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09440301a265db89cd3dcfefcf7a81ccce6fd7effa6d79ea62f884dc83f0f03f
|
|
| MD5 |
c68370e187c9ce94151a73dd43bf6c2c
|
|
| BLAKE2b-256 |
d236f8647e5a206480b5880a1b87d362c610f0e0df6e4db9bc73cf2df1b06dca
|
Provenance
The following attestation bundles were made for mcp_server_zwave_js_ui-0.3.0.tar.gz:
Publisher:
release.yml on cacack/mcp-server-zwave-js-ui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_server_zwave_js_ui-0.3.0.tar.gz -
Subject digest:
09440301a265db89cd3dcfefcf7a81ccce6fd7effa6d79ea62f884dc83f0f03f - Sigstore transparency entry: 2134477779
- Sigstore integration time:
-
Permalink:
cacack/mcp-server-zwave-js-ui@dcbb119c00c3fc0bc807632666125e3ab15fba6b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/cacack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dcbb119c00c3fc0bc807632666125e3ab15fba6b -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcp_server_zwave_js_ui-0.3.0-py3-none-any.whl.
File metadata
- Download URL: mcp_server_zwave_js_ui-0.3.0-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b0eae706a6c80156ca446db51014b3364b24ef602924a54d319dabc612afb42
|
|
| MD5 |
b5407642f95a77e03e8b7cf48b0fa6ba
|
|
| BLAKE2b-256 |
0e084d7e04375e98405bf3623cdb7cebd6c1d83e05dde3686d32844df1b8a09c
|
Provenance
The following attestation bundles were made for mcp_server_zwave_js_ui-0.3.0-py3-none-any.whl:
Publisher:
release.yml on cacack/mcp-server-zwave-js-ui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_server_zwave_js_ui-0.3.0-py3-none-any.whl -
Subject digest:
6b0eae706a6c80156ca446db51014b3364b24ef602924a54d319dabc612afb42 - Sigstore transparency entry: 2134477925
- Sigstore integration time:
-
Permalink:
cacack/mcp-server-zwave-js-ui@dcbb119c00c3fc0bc807632666125e3ab15fba6b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/cacack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dcbb119c00c3fc0bc807632666125e3ab15fba6b -
Trigger Event:
push
-
Statement type: