nickol-knx-mcp v0.1.0 — design-time KNX/ETS6 MCP server (public beta)

Design-time MCP server that reads .knxproj (read-only), validates naming/DPT/status,
and generates Home Assistant KNX YAML + ETS-importable group addresses (XML/CSV).
No live bus access — confined-workspace writes only.

Includes: 12 MCP tools, end-to-end smoke test, MIT license, English-first README
(+ Russian), CONTRIBUTING with a real-project test call, SECURITY policy, CHANGELOG,
GitHub Actions CI (Python 3.10–3.12), and issue/PR templates.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Nikolay Miroshnichenko
2026-06-28 09:25:57 +02:00
co-authored by Claude Opus 4.8
commit bba8befcde
26 changed files with 2323 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
name: "🐛 Bug report"
description: "Something is broken or behaves incorrectly."
title: "[bug] "
labels: ["bug"]
body:
- type: textarea
id: what
attributes:
label: What happened?
description: What you did, what you expected, what you got.
validations:
required: true
- type: textarea
id: repro
attributes:
label: Steps to reproduce
placeholder: |
1. load_project on ...
2. call analyze_all
3. ...
validations:
required: true
- type: input
id: tool
attributes:
label: Which MCP tool / command
placeholder: "generate_ha_package"
- type: textarea
id: env
attributes:
label: Environment
placeholder: "OS, Python version (python3 --version), nickol-knx-mcp version, Claude Desktop/Code"
validations:
required: true
- type: textarea
id: logs
attributes:
label: Full error / stack trace
render: shell
- type: checkboxes
id: nopii
attributes:
label: Confirmation
options:
- label: "I have not attached a real `.knxproj`/`.knxkeys` (redacted snippets only)."
required: true
+5
View File
@@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: 💬 Questions & discussion
url: https://github.com/NickoScope/nickol-knx-mcp/discussions
about: General questions, ideas, and show-and-tell. For bugs and test reports, please use an issue template.
@@ -0,0 +1,20 @@
name: "💡 Feature request"
description: "Suggest an improvement or a new capability."
title: "[feat] "
labels: ["enhancement"]
body:
- type: textarea
id: problem
attributes:
label: Problem / use case
description: What are you trying to do that's hard today?
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed solution
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
@@ -0,0 +1,55 @@
name: "🧪 Real-project test report"
description: "You ran nickol-knx-mcp on a real ETS project — tell us how it went (this is the most valuable feedback)."
title: "[test] "
labels: ["test-report"]
body:
- type: markdown
attributes:
value: |
Thank you for testing! The tool is read-only and never touches a bus, so this is safe.
**Please do NOT attach your actual `.knxproj`** — a redacted snippet or a screenshot of the
report is plenty.
- type: input
id: ets
attributes:
label: ETS version
placeholder: "ETS6 (6.3.0) / ETS5 ..."
validations:
required: true
- type: input
id: size
attributes:
label: Project size
placeholder: "~120 group addresses, ~30 devices, 3-level GA"
validations:
required: true
- type: dropdown
id: parsed
attributes:
label: Did load_project parse it?
options:
- "Yes, fully"
- "Yes, but with warnings"
- "No, it crashed"
validations:
required: true
- type: textarea
id: right
attributes:
label: What did it get RIGHT?
placeholder: "Correctly flagged missing status GAs for lights; HA covers looked good..."
- type: textarea
id: wrong
attributes:
label: What did it get WRONG?
placeholder: "False missing-status on X; wrong category for Y; bad DPT call on Z; HA YAML issue..."
- type: textarea
id: env
attributes:
label: Environment
placeholder: "OS, Python version, Claude Desktop or Claude Code"
- type: textarea
id: logs
attributes:
label: Any crash / stack trace
render: shell
+13
View File
@@ -0,0 +1,13 @@
<!-- Thanks for contributing! -->
## What does this PR do?
## Checklist
- [ ] `python tests/test_pipeline.py` passes locally
- [ ] Safety invariant preserved: `project.py` stays the only `.knxproj` reader and stays read-only; no networking/bus libraries added
- [ ] Generators remain conservative (ambiguous → `review`, not guessed)
- [ ] New classification/behavior is covered by a case in `tests/test_pipeline.py`
- [ ] Docs updated if user-facing (README / CHANGELOG)
## Related issues
Closes #
+37
View File
@@ -0,0 +1,37 @@
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
smoke-test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip
- name: Install package
run: |
python -m pip install --upgrade pip
pip install -e .
- name: End-to-end smoke test (synthetic 16-GA project)
run: python tests/test_pipeline.py
- name: Console script is installed
run: |
python -c "import importlib.metadata as m; print('entry points:', [e.name for e in m.entry_points(group='console_scripts') if e.name == 'nickol-knx-mcp'])"
command -v nickol-knx-mcp