Add MCP server so Claude (or any MCP client) can reprogram VersaPad directly

Wraps the existing protocol/serial/combined-config layers as MCP tools
(set_button_key, set_encoder_consumer, set_macro, load_from_board,
write_to_board, ...) instead of requiring hand-written JSON + manual
GUI import. Registered at user scope via `claude mcp add`.
This commit is contained in:
cjjohn 2026-08-05 08:16:22 +02:00
parent 50658107d5
commit e456af7c19
3 changed files with 378 additions and 0 deletions

View file

@ -18,6 +18,20 @@ faktisch ein schlankes Python-Pendant zu VersaGUI. Der Browser-Server
Profil-Wechsel über `?profile=0|1|2`, Auto-Reload alle 4s. Rein lesend,
kein Programmiermodus (bewusst einfach gehalten).
**MCP-Server (Config per KI-Tool-Aufruf statt Hand-JSON):**
- `versapad_mcp_server.py` — registriert als User-Scope-MCP-Server "versapad"
(`claude mcp add -s user versapad -- <Python313> versapad_mcp_server.py`,
landet in `~/.claude.json`). Tools: `list_profiles`/`get_profile`/
`get_macro`/`get_board_status` (lesen), `set_button_key`/`_consumer`/
`_macro`/`_profile_switch`/`_none`/`_led`, dieselben `set_encoder_*`,
`set_macro`, `rename_profile` (mutieren nur In-Memory-State), `save_local`/
`load_local` (↔ `versapad_config_all.json`), `load_from_board`/
`write_to_board` (↔ echtes Board per Serial). Nutzt das MCP-SDK v2 (Paket
`mcp`, Klasse `mcp.server.mcpserver.MCPServer`**nicht** `FastMCP` aus
`mcp.server.fastmcp`, das gibt's in dieser SDK-Version nicht mehr, wurde
umbenannt). `@mcp.tool()`-dekorierte Funktionen bleiben direkt aufrufbar
(kein `.fn`-Unterschied wie bei alten FastMCP-Versionen).
**Binaer-/Serial-Schicht (fuer den Programmiermodus):**
- `versapad_protocol.py` — pack/unpack fuer `SDeviceConfig`(740B, alle 3
Profile) und `SMacroTable`(512B, 32 Slots) + CRC16 (Poly 0x1021, Init