nickol-knx
PYPI · NICKOL-KNX-MCP · SCANNED SEP 20
Read-only KNX/ETS project auditor: validates a .knxproj and generates Home Assistant YAML
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 1 of 35 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 6 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability71
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 2884 tokens (~90/item across 32 items; 32 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 32 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 32 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the nickol-knx MCP server?
nickol-knx runs locally as a PyPI package, launched with uvx nickol-knx-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · nickol-knx-mcp
claude mcp add nickoscope-nickol-knx-mcp -- uvx nickol-knx-mcp
{
"mcpServers": {
"nickoscope-nickol-knx-mcp": {
"command": "uvx",
"args": [
"nickol-knx-mcp"
]
}
}
} {
"servers": {
"nickoscope-nickol-knx-mcp": {
"command": "uvx",
"args": [
"nickol-knx-mcp"
]
}
}
} codex mcp add nickoscope-nickol-knx-mcp -- uvx nickol-knx-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"nickoscope-nickol-knx-mcp": {
"type": "local",
"command": [
"uvx",
"nickol-knx-mcp"
],
"enabled": true
}
}
} openclaw mcp add nickoscope-nickol-knx-mcp --command uvx --arg nickol-knx-mcp
mcp_servers:
nickoscope-nickol-knx-mcp:
command: "uvx"
args: ["nickol-knx-mcp"] {
"McpServers": {
"nickoscope-nickol-knx-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"nickol-knx-mcp"
]
}
}
} assistant mcp add nickoscope-nickol-knx-mcp -t stdio -c uvx -a nickol-knx-mcp
{
"mcpServers": {
"nickoscope-nickol-knx-mcp": {
"command": "uvx",
"args": [
"nickol-knx-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- 16 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 14 Sept 26 −14
- Malware scan: pass → unverified ▼ security
- Schema quality: 80 → 90 ▼ functional
- Stability: unverified → 0.07 ▲ functional
- Package version: 0.8.1 → 0.8.2 functional
- 12 Sept 26 68
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/nickol-knx-mcp@0.8.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | setuptools.build_meta |
Background: Why install scripts are a supply-chain risk →
Dependencies 35 packages
| Packages resolved | 35 |
|---|---|
| Stale | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
analyze_all ~26
Run every check and return the report summary plus all findings.
| Name | Type | Req | Description |
|---|---|---|---|
| name_regex | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
check_device_parameters ~196
Find the device whose ETS **parameter** settings differ from its N identical siblings — the odd thermostat/sensor out (e.g. one thermostat with a different setpoint/hysteresis, one presence detector with a different detection time). Reads per-device parameter values straight from the `.knxproj` project part (data xknxproject does not expose), groups identical devices by application program, and returns `clear_outliers` (a strong majority with a small minority — likely a mistake) and `split_configs` (balanced 2+ variants — review, often two zones). Numeric config parameters are listed first; names are resolved from the device application program. Read-only, no ETS/bus. Give a real `.knxproj` `path` (a password-protected/encrypted project cannot be read).
| Name | Type | Req | Description |
|---|---|---|---|
| min_group | integer | – | – |
| password | – | – | – |
| path | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
check_dpt ~20
Detect missing, inconsistent or mismatched DPTs.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
check_energy ~50
Check the metering/energy domain (energy DPTs 13.x / 14.056) and suggest a per-circuit / PV / battery / EVSE structure for the HA energy dashboard.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
check_matter ~41
Matter-readiness lint: which controllable functions round-trip to a Matter cluster (have command + status + a decodable DPT) and which won't.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
check_missing_status ~21
Detect controllable GAs lacking a status/feedback counterpart.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
check_naming ~24
Validate naming conventions and 3-level structure.
| Name | Type | Req | Description |
|---|---|---|---|
| name_regex | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
check_policy ~148
Validate the loaded project against a **Project Policy Profile** — *your* agreed rules (main-group taxonomy, naming regex, command/status exemptions), not one universal "standard". Flags GAs whose domain doesn't match the main group your policy assigns, and names that don't match your pattern. Pass `profile_path` to a YAML profile (omit to validate against the taxonomy inferred from the project itself). Set `write_example_to` to drop a commented example profile into the workspace — **seeded from the loaded project's own main groups** (mains that do not exist in the project are not written). Report-only.
| Name | Type | Req | Description |
|---|---|---|---|
| profile_path | – | – | – |
| write_example_to | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
check_secure ~80
Summarise KNX Data Secure posture + the keyring handover checklist. Reports how many group addresses are secured vs plaintext, flags middle groups that mix secure and plaintext addresses (a function is only as secure as its weakest GA), and emits the ETS/HA keyring workflow as a checklist. Report-only — this server never touches key material.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
check_topology ~54
Check topology capacity and individual-address validity (KNX Handbook). Flags lines over the TP1 segment (64) / line (256) limits, invalid or duplicate individual addresses, and multi-line projects missing a coupler.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
compose_rooms ~317
Compose a **new** KNX project from a list of room templates (constructor). ``rooms`` is a list of specs, each: ``{template, preset?, slot_presets?, params?, label?}`` — e.g. ``{"template": "bedroom", "preset": "comfort"}``. ``preset`` is basic|comfort (per-room); ``slot_presets`` overrides individual slots (mix comfort climate with basic lighting); ``params`` overrides template defaults (window/circuit counts); ``label`` sets a custom zone name. Pipeline: resolve templates+params to a functional model, allocate group addresses (main = domain, middle = role, sub sequential), write a real ``.knxproj`` and **re-read it with the standard loader**, then run our linters on the re-read project. Output: a ``manifest`` (allocation), ETS GA XML/CSV, and a device ``bom`` proposal from the device library. R1 builds NEW projects only and is dry-run by default (nothing written). Set ``dry_run=false`` with ``output_dir`` (a folder inside the workspace) to write the .knxproj, ETS exports, manifest.yaml and bom.yaml. Docking into an existing project and exact device selection are R2. Never touches a bus.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | – |
| language | string | – | – |
| output_dir | – | – | – |
| project_name | string | – | – |
| rooms | array | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
decompose_device ~134
Expand a device into its group-address decomposition recipe. A KNX actuator channel is not one GA — it expands into command/status/dimming/ position/mode objects, each with its DPT. Given a device order number, type or alias (e.g. 'ZIO-MB24', 'dimmer', 'JRA/S', 'presence detector') and a channel count, returns the objects a professional wires per channel and the total GA count. Use when turning a spec/ТЗ device list into a group-address structure.
| Name | Type | Req | Description |
|---|---|---|---|
| channels | integer | – | – |
| order_number | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
diff_projects ~79
Semantic diff between two .knxproj files (path_a = base/old, path_b = new): added / removed GAs, DPT changes, renames, security-flag changes. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| password_a | – | – | – |
| password_b | – | – | – |
| path_a | string | yes | – |
| path_b | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
explain_ga ~135
**Provenance** for one group address — why the tool classified it the way it did. Replays the classification and shows, per decision (category / kind / status pairing), the signals that fired with a **confidence tier**: authoritative (an ETS Function role) > structural (the KNX DPT) > heuristic (a name keyword). Flags **conflicts** (e.g. a GA the DPT calls `lighting` while its name says "AC") — the hotspot for silent misclassification. Read-only; use before trusting a category or generating an entity.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
generate_ets_group_addresses ~68
Generate an ETS-importable Group Address export. Args: fmt: 'xml' (ga-export/01, recommended) or 'csv' (native ETS layout). output_path: optional file inside the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| fmt | string | – | – |
| output_path | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
generate_ha_package ~52
Generate a Home Assistant KNX package YAML. If output_path is given, the YAML is written into the workspace and the path returned; otherwise the YAML text is returned inline.
| Name | Type | Req | Description |
|---|---|---|---|
| output_path | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
generate_handover_pack ~127
Generate a project handover pack (as-built deliverable for commissioning). Assembles an equipment inventory, group-address map by domain, command/status coverage, KNX Secure scope and QA state into ``handover.md``, plus a ``topology.svg`` diagram, the full ``group-addresses.csv`` and the ``ha-package.yaml``. When ``output_dir`` is given (a folder inside the workspace) all files are written there and the paths returned; otherwise the handover markdown + SVG are returned inline.
| Name | Type | Req | Description |
|---|---|---|---|
| output_dir | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
generate_knx_iot ~52
Export a KNX IoT semantic view (Turtle/RDF) of the project's functional datapoints — a pragmatic skeleton for the IP-native model, for review.
| Name | Type | Req | Description |
|---|---|---|---|
| output_path | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
generate_test_protocol ~49
Draft a functional acceptance protocol (per function: command → expected status, pass/fail/sign-off) as Markdown. Execution is manual/on-site; this only drafts it.
| Name | Type | Req | Description |
|---|---|---|---|
| output_path | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_devices ~70
List devices (individual address, name, order number, manufacturer), sorted by individual address (area/line/device numerically). Same paging contract as `list_group_addresses`: `next_cursor` / `total_matched` / `returned`.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | – | – | – |
| limit | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_topology ~18
Return the area/line/device topology tree.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
grade_completeness ~55
Grade the project: bare functional skeleton vs as-built grade — by the presence of the professional patterns (central macros, device tuning, astro/meteo, monitoring, deep metering, scenes, reserves, a debug main).
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
list_device_recipes ~22
List the device decomposition recipes in the built-in device library.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_group_addresses ~191
List parsed group addresses with classification, in a **stable order**. Filters: category (lighting/shutter/hvac/sensor/scene/energy/diagnostics), kind (command/status/sensor), missing_dpt_only. Paging: results are always sorted by the group address itself (main/middle/sub numerically, free-style addresses numerically, anything else lexically), so the order does not depend on how the project happened to parse and a retry returns the same page. Pass the returned `next_cursor` back as `cursor` for the next page; `next_cursor` is null on the last page. `total_matched` reports how many addresses match the filters, so a truncated answer is never silent.
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | – |
| cursor | – | – | – |
| kind | – | – | – |
| limit | integer | – | – |
| missing_dpt_only | boolean | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
load_ga_export ~217
Load an ETS group-address export (ga-export/01 XML) instead of a full .knxproj. For when you only have the GA list: an ETS "Export Group Addresses" file, or the ETS import file a planning tool produces (TapPlan and similar). Names, addresses, DPTs, descriptions, the security flag and the range tree are read; the result replaces the loaded project for every other tool. Works: check_naming, check_missing_status, check_dpt, check_policy, check_secure, analyze_all, suggest_repairs, project_report, generate_ha_package, generate_ets_group_addresses. Nothing to read (the export has no devices, ETS Functions or topology): get_devices, get_topology, check_topology, decompose_device, check_device_parameters, parse_devices_from_project. Pairing relies on names only, since there are no ETS Function roles. Args: path: Path to the exported .xml file.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
load_project ~92
Parse a .knxproj file (read-only) and cache it for the session. Args: path: Path to the .knxproj file. password: Project password, if the .knxproj is protected. language: Optional language code (e.g. 'de-DE', 'ru-RU').
| Name | Type | Req | Description |
|---|---|---|---|
| language | – | – | – |
| password | – | – | – |
| path | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
parse_devices_from_project ~234
Extract exact device object models from a .knxproj / .knxprod application programs. Reads the manufacturer application programs (M-*) embedded in an ETS `.knxproj` (devices actually used) or a `.knxprod` product database, and returns each device's order number, app-program version, object counts and detected per-channel blocks — the EXACT vendor comm-object model, not a generic recipe. Read-only and PII-safe: it reads only vendor catalog data, never the client project (P-*/0.xml). Use this to build/grow the local device catalog that `decompose_device` consumes (set NICKOL_KNX_CATALOG to the catalog dir). If `output_path` is given, the full catalog is written into the workspace as device-library YAML; the return value is always a compact per-device summary + coverage manifest (the full object lists are not inlined). DPT `unverified` = the vendor app-program declares none (never guessed).
| Name | Type | Req | Description |
|---|---|---|---|
| output_path | – | – | – |
| password | – | – | – |
| path | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
project_report ~32
Produce the human-readable Markdown report (review before any import).
| Name | Type | Req | Description |
|---|---|---|---|
| name_regex | – | – | – |
| output_path | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
suggest_names ~23
Naming hygiene suggestions (empty names, status GAs missing a status keyword).
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
suggest_repairs ~110
Propose concrete fixes for the project's findings — repair, don't just flag. For each issue it suggests a reviewable fix: infer a DPT for a GA that has none, correct a suspect sub-DPT, synthesise a status/feedback GA in a free address slot, or add an absolute-brightness GA for a relative-only dimmer. Suggestions only — a human reviews them; accepted new GAs feed generate_ets_group_addresses. The server never writes to ETS or the bus.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
validate_room_template ~129
Validate a Room Library template against the R1 schema (report-only). Pass ``template`` (a built-in template's semantic slot_id, e.g. 'bedroom', 'kitchen') or ``path`` to a custom template YAML. Checks the public contract: a locale-neutral slot_id, ru/en labels, per-slot basic/comfort presets, known function types, valid multiplicities, and that ``area_m2`` is a hint with provenance (never a normative fact). Returns ok + findings; nothing is written.
| Name | Type | Req | Description |
|---|---|---|---|
| path | – | – | – |
| template | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
workspace_info ~18
Show the confined output workspace and the safety guarantees.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
What is the nickol-knx MCP server?
nickol-knx is an MCP server listed in the public MCP registry as io.github.NickoScope/nickol-knx-mcp. Read-only KNX/ETS project auditor: validates a .knxproj and generates Home Assistant YAML. This page covers its PyPI package (nickol-knx-mcp).
Is the nickol-knx MCP server safe to use?
nickol-knx scores 57 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the nickol-knx MCP server expose?
nickol-knx exposes 32 tools: load_project, load_ga_export, list_group_addresses, get_devices, get_topology, and 27 more. Their descriptions and schemas cost roughly 2,884 tokens of context every time the server is loaded.
Is the nickol-knx MCP server still maintained?
nickol-knx is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the nickol-knx MCP server under?
nickol-knx declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.