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:
parent
50658107d5
commit
e456af7c19
3 changed files with 378 additions and 0 deletions
|
|
@ -99,6 +99,35 @@ def consumer_choices():
|
|||
return sorted(_CONSUMER_NAMES.items())
|
||||
|
||||
|
||||
_KEY_CODE_BY_NAME = {name: code for code, name in _SPECIAL_KEYS.items()}
|
||||
_CONSUMER_ID_BY_NAME = {name: cid for cid, name in _CONSUMER_NAMES.items()}
|
||||
|
||||
|
||||
def hid_key_code_for_name(name):
|
||||
"""z.B. 'S' -> 0x16. Wirft ValueError mit Vorschlaegen bei unbekanntem Namen."""
|
||||
if name not in _KEY_CODE_BY_NAME:
|
||||
raise ValueError(f"Unbekannte Taste {name!r}. Gueltige Namen: {sorted(_KEY_CODE_BY_NAME)}")
|
||||
return _KEY_CODE_BY_NAME[name]
|
||||
|
||||
|
||||
def consumer_id_for_name(name):
|
||||
"""z.B. 'Play / Pause' -> 0xCD. Wirft ValueError mit Vorschlaegen bei unbekanntem Namen."""
|
||||
if name not in _CONSUMER_ID_BY_NAME:
|
||||
raise ValueError(f"Unbekannte Medienaktion {name!r}. Gueltige Namen: {sorted(_CONSUMER_ID_BY_NAME)}")
|
||||
return _CONSUMER_ID_BY_NAME[name]
|
||||
|
||||
|
||||
def modifier_bits_for_names(names):
|
||||
"""['Strg','Shift'] -> 0x03. Wirft ValueError bei unbekanntem Namen."""
|
||||
valid = {name: bit for bit, name in MODIFIER_BITS}
|
||||
bits = 0
|
||||
for name in names:
|
||||
if name not in valid:
|
||||
raise ValueError(f"Unbekannter Modifier {name!r}. Gueltig: {sorted(valid)}")
|
||||
bits |= valid[name]
|
||||
return bits
|
||||
|
||||
|
||||
def macro_step_label(step):
|
||||
"""step: {'keycode','modifier'} -> z.B. 'Strg+S'. Reine Keycode/Modifier-Variante
|
||||
von hid_key_label() (dort steckt beides in einem 16-Bit data-Feld, hier getrennt)."""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue