mirror of
https://github.com/NickoScope/nickol-knx-mcp.git
synced 2026-09-30 03:41:58 +02:00
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:
@@ -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
|
||||
@@ -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
|
||||
@@ -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 #
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user