nickol-knx-mcp
Generates Home Assistant KNX YAML configuration files from ETS project data, enabling integration of KNX devices with Home Assistant.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nickol-knx-mcpparse myhouse.knxproj and generate HA KNX YAML"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
nickol-knx-mcp
A design-time KNX / ETS6 assistant exposed as an MCP server.
It reads your .knxproj, analyzes group addresses / DPTs / topology, generates Home Assistant KNX YAML and ETS-importable group-address files (XML/CSV), and produces human-readable reports β without ever touching the live KNX bus.
π·πΊ Π ΡΡΡΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ: README.ru.md
π§ͺ Status & call for testers
This is a public beta. The full pipeline passes an end-to-end smoke test on a synthetic
16-group-address project, but it has had limited testing against real-world .knxproj files β
and real ETS projects are wonderfully messy and diverse.
π If you have an ETS5/ETS6 project, please try it and tell us what happens. Open a Real-project test report issue. The tool is read-only and never connects to a bus, so testing is safe (see Safety model). See CONTRIBUTING.md for details.
Related MCP server: SDS MCP
Why this exists
As of mid-2026 there is no off-the-shelf ETS6 β Claude / MCP tool. The KNX community has been explicitly asking for an integration that can inspect and help modify projects (adding / renaming devices and group addresses) through an AI/CLI workflow. This package fills exactly the design-time layer β the missing one.
The recommended full setup is four layers; only one needs to be built from scratch:
Layer | Purpose | What to use | Build it? |
1. Live | states, control, debugging a running house | official Home Assistant MCP Server + KNX (XKNX) integration | No, already exists |
2. Design-time | parse |
| YES β this is the gap |
3. Files + Git | YAML/CSV/XML, versioning the address schema | standard filesystem + git MCP servers | No, already exists |
4. Skill | design rules (GA structure, naming, DPT, scenes) |
| No, included |
Safety by design: layer 2 (this server) physically cannot connect to a bus. It has no network/bus dependency at all β it only reads
.knxprojand writes files into a confined workspace. The "never write to a live bus" requirement is enforced structurally, not by promise. Any real interaction with the house goes only through layer 1 (Home Assistant).
What the server does
Parses password-protected ETS5/ETS6
.knxprojfiles viaxknxproject(3.9.x).Extracts group addresses, DPTs, devices, topology, descriptions, and ETS Functions.
Classifies every GA: category (lighting / shutter / hvac / sensor / scene / energy / diagnostics) and kind (command / status / sensor) β from the DPT plus multilingual (EN/DE/RU) keywords in the name.
Validates naming against a 3-level structure and a configurable regex.
Finds missing status addresses β primarily from ETS Function roles, falling back to name-token pairing (command in
β¦/0/β¦, feedback inβ¦/4/β¦is common, so it matches by name tokens rather than by middle-group adjacency).Catches DPT problems: missing DPT, mismatch between a Communication Object and its GA, and the same logical name carrying different DPTs.
Generates Home Assistant KNX YAML β category by category, conservatively: covers β lights β switches β sensors/binary. Ambiguous items (e.g. DPT 5.001 β brightness vs blind position) are not guessed; they go into a
reviewlist instead.Generates ETS-importable group addresses in XML (the recommended
knx.org/xml/ga-export/01schema) and CSV (ETS's native layout).Writes a Markdown report (inventory + π΄π‘π΅ findings + HA-mapping preview + next steps) for human review before any import.
All writes go only into the workspace directory (NICKOL_KNX_WORKSPACE, default ./knx-workspace);
writes outside it are rejected.
Installation
Requires Python 3.10+.
git clone https://github.com/NickoScope/nickol-knx-mcp.git
cd nickol-knx-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e .Dependencies: mcp>=1.10, xknxproject>=3.8, PyYAML>=6.0.
On Debian/Ubuntu, if pip complains about an externally-managed environment, use a venv (as above) or
pip install -e . --break-system-packages. IfPyJWTconflicts, runpip install mcp --ignore-installed PyJWTfirst.
Verify:
python tests/test_pipeline.py # synthetic 16-GA project, end-to-end smoke test
nickol-knx-mcp # start the MCP server (stdio)Connecting to Claude
Claude Desktop
examples/claude_desktop_config.json wires up nickol-knx + filesystem + git + home-assistant.
Minimal fragment (macOS config path: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"nickol-knx": {
"command": "nickol-knx-mcp",
"env": { "NICKOL_KNX_WORKSPACE": "/path/to/your/knx-workspace" }
}
}
}Claude Code
claude mcp add nickol-knx \
-e NICKOL_KNX_WORKSPACE="$HOME/knx-workspace" \
-- /absolute/path/to/.venv/bin/nickol-knx-mcpThen drop CLAUDE.md into your project root β it acts as an ETS Assistant skill (design rules,
safety rules, 3-level GA structure, command/status pairing, DPT discipline, naming, KNX Secure
keyring handling, and the recommended workflow).
MCP tools (12)
Tool | Purpose |
| parse a |
| list GAs with classification and filters |
| devices + their communication objects |
| topology (areas / lines / devices) |
| validate naming / structure |
| actuators lacking a status object |
| missing / inconsistent DPTs |
| run every check at once |
| HA KNX YAML + review list |
| ETS-importable GAs |
| Markdown report |
| workspace path + safety guarantees |
Typical workflow
load_projectβ point it at your.knxproj(+ password if protected).analyze_allorproject_reportβ read the findings; human review first.Fix naming/DPT/status in ETS (by importing generated GAs or manually).
generate_ets_group_addresses(fmt="xml")β import the missing GAs into ETS.generate_ha_packageβ place the YAML into Home Assistant; resolvereviewitems by hand.Keep everything (
.knxprojexport, HA configs, address schema) in Git.Touch the live house only through the Home Assistant MCP (layer 1).
Limitations (honest)
command/status and category classification is a heuristic (DPT + names + ETS Functions). On messy projects with no Functions and non-standard names, false negatives/positives are possible β which is why the report is always for human review, and ambiguity goes to
review, not into config.DPT 5.001 is structurally ambiguous (brightness vs position); it's disambiguated by keywords β double-check with non-standard naming.
The HA generator is conservative: it would rather defer an item to
reviewthan emit a wrong entity.The server never writes to the bus and never talks to ETS directly β ETS exchange is file import/export of GAs only.
Tested only on a synthetic project so far. Real
.knxprojfiles vary a lot β hence the call for testers.
π Safety model
No bus access, structurally. There is no networking or bus library in the dependency tree.
workspace_info()reportsbus_access: false.Read-only on your project.
project.pyis the only module that touches.knxproj, and it only reads.Confined writes. All output is constrained to
NICKOL_KNX_WORKSPACE; paths outside it are rejected.Human-in-the-loop. Generate a
project_reportand review it before importing into ETS or deploying into Home Assistant.
Found a security issue? See SECURITY.md.
Package layout
nickol-knx-mcp/
βββ nickol_knx_mcp/
β βββ dpt_map.py # DPT β category / kind / HA platform / value_type
β βββ project.py # the ONLY module that reads .knxproj (read-only)
β βββ pairing.py # commandβstatus pairing by name tokens
β βββ analyze.py # naming / missing-status / DPT checks
β βββ generate_ha.py # Home Assistant KNX YAML generation
β βββ generate_ets.py # ETS XML + CSV generation
β βββ report.py # Markdown report
β βββ server.py # FastMCP server, 12 tools, confined writes
βββ tests/test_pipeline.py
βββ examples/claude_desktop_config.json
βββ CLAUDE.md # ETS Assistant skill / playbook
βββ pyproject.toml
βββ README.mdContributing
Testers and contributors are very welcome β especially real-project test reports. See CONTRIBUTING.md and the issue templates.
License
MIT Β© 2026 Nikolay Miroshnichenko
Not affiliated with or endorsed by the KNX Association. "KNX" and "ETS" are trademarks of the KNX Association cc. This is an independent, community tool.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/NickoScope/nickol-knx-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server