nickol-knx-mcp
Reads .knxproj files, analyzes group addresses/DPTs/topology, generates Home Assistant KNX YAML and ETS-importable group-address files (XML/CSV), and produces human-readable reports without touching the live KNX bus.
README
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
<p align="center"> <a href="https://nickoscope.github.io/nickol-knx-mcp/"> <img src="docs/assets/banner.svg" alt="nickol-knx-mcp β live interactive demo and dashboard" width="100%"> </a> </p>
<h3 align="center">π¬ <a href="https://nickoscope.github.io/nickol-knx-mcp/">Explore the live interactive demo & dashboardΒ β</a></h3>
New β a whole demo house.
examples/demo-homeships a synthetic 239-GA / 47-Function project, the tool's generated report + Home Assistant config + ETS export, and a full smart-home βbrainβ β circadian lighting, an 8-factor climate setpoint, a presence/season/time state machine and statistics β driving a 5-view dashboard. See it all on the live siteΒ β.
π₯οΈ The dashboard β live in Home Assistant
Real screenshots from a live Home Assistant running the demo house. Note the brain at work: Summer flipped the whole house to Cooling at 92 % comfort, lights follow a circadian curve (71 % @ 3750 K), and the climate setpoints are computed, not set by hand.
<p align="center"> <img src="docs/assets/screenshots/overview.png" alt="Overview β home mode, comfort gauge, scenes, climate snapshot" width="78%"> </p>
βΆ Explore it interactively on the live site β Β· config in examples/demo-home/ha-brain
π§ͺ 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.
π¬ Join the discussion β β say hi, ask anything, or share what the tool found on your project.
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 .knxproj, validate DPT/naming/status, generate HA YAML & ETS XML/CSV |
nickol-knx-mcp (this package) |
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) | CLAUDE.md in this package |
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-mcp
Then 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 |
|---|---|
load_project(path, password?, language?) |
parse a .knxproj (read-only) and cache it |
list_group_addresses(category?, kind?) |
list GAs with classification and filters |
get_devices() |
devices + their communication objects |
get_topology() |
topology (areas / lines / devices) |
check_naming(name_regex?) |
validate naming / structure |
check_missing_status() |
actuators lacking a status object |
check_dpt() |
missing / inconsistent DPTs |
analyze_all(name_regex?) |
run every check at once |
generate_ha_package(output_path?) |
HA KNX YAML + review list |
generate_ets_group_addresses(fmt="xml"|"csv", output_path?) |
ETS-importable GAs |
project_report(output_path?, name_regex?) |
Markdown report |
workspace_info() |
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.md
Contributing
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.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.