c64bridge 0.9.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/AGENTS.md +19 -3
  2. package/README.md +190 -148
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/c64Client.js +127 -5
  5. package/dist/config.js +12 -8
  6. package/dist/device.js +75 -45
  7. package/dist/mcp-server.js +11 -3
  8. package/dist/platform.js +13 -2
  9. package/dist/tools/audio.js +1 -1
  10. package/dist/tools/developer.js +6 -6
  11. package/dist/tools/graphics.js +4 -4
  12. package/dist/tools/input.js +129 -12
  13. package/dist/tools/machineControl.js +85 -6
  14. package/dist/tools/memory.js +1 -1
  15. package/dist/tools/meta/index.js +1 -1
  16. package/dist/tools/programRunners.js +5 -5
  17. package/dist/tools/rag.js +1 -1
  18. package/dist/tools/registry/batch.js +1 -1
  19. package/dist/tools/registry/config.js +5 -5
  20. package/dist/tools/registry/disk.js +2 -2
  21. package/dist/tools/registry/drive.js +2 -2
  22. package/dist/tools/registry/graphics.js +2 -2
  23. package/dist/tools/registry/memory.js +2 -2
  24. package/dist/tools/registry/platform.js +7 -5
  25. package/dist/tools/registry/program.js +5 -5
  26. package/dist/tools/registry/rag.js +1 -1
  27. package/dist/tools/registry/sound.js +4 -4
  28. package/dist/tools/registry/system.js +13 -3
  29. package/dist/tools/storage.js +1 -1
  30. package/doc/c64u/c64-openapi.yaml +1130 -774
  31. package/doc/u2/u2-openapi.yaml +1192 -0
  32. package/generated/c64/index.js +142 -9
  33. package/generated/openapi/c64u/index.js +1117 -0
  34. package/generated/openapi/u2/index.js +929 -0
  35. package/mcp/schemas/c64_graphics.schema.json +3 -3
  36. package/mcp/schemas/c64_input.schema.json +247 -6
  37. package/mcp/schemas/c64_memory.schema.json +3 -3
  38. package/mcp/schemas/c64_program.schema.json +3 -3
  39. package/mcp/schemas/c64_select_backend.schema.json +2 -0
  40. package/mcp/schemas/c64_system.schema.json +41 -1
  41. package/mcp/server.json +1 -1
  42. package/mcp/tools.json +382 -41
  43. package/mcp.json +14 -2
  44. package/package.json +4 -2
  45. package/scripts/mockC64Server.mjs +40 -0
  46. package/scripts/prepare-release.mjs +13 -2
  47. package/scripts/update-readme.ts +18 -30
  48. package/server.json +3 -3
@@ -229,7 +229,7 @@
229
229
  "required": [
230
230
  "op"
231
231
  ],
232
- "description": "Graphics operations available via the c64_graphics tool.\n\nOperations:\n- capture_frame: Capture one or more complete video frames from the active backend. Required inputs: none. Optional inputs: count, includePixels, encoding.\n- render_petscii_art: Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64. Required inputs: none. Optional inputs: prompt, text, maxWidth, maxHeight, borderColor, backgroundColor, foregroundColor, dryRun, bitmap.\n- render_petscii_text: Display PETSCII text with optional border and background colours. Required inputs: text. Optional inputs: borderColor, backgroundColor.\n- render_sprite: Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly. Required inputs: sprite. Optional inputs: index, x, y, color, multicolour.\n- render_bitmap: Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it. Required inputs: imagePath, format. Optional inputs: bitmapAddress, screenAddress, borderColor, backgroundColor, preserveAspect.\n- get_display_state: Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. Works on C64U and VICE; both backends are read through shared memory primitives so the response shape is identical. Required inputs: none.",
232
+ "description": "Graphics operations available via the c64_graphics tool.\n\nOperations:\n- capture_frame: Capture one or more complete video frames from the active backend. Required inputs: none. Optional inputs: count, includePixels, encoding.\n- render_petscii_art: Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64. Required inputs: none. Optional inputs: prompt, text, maxWidth, maxHeight, borderColor, backgroundColor, foregroundColor, dryRun, bitmap.\n- render_petscii_text: Display PETSCII text with optional border and background colours. Required inputs: text. Optional inputs: borderColor, backgroundColor.\n- render_sprite: Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly. Required inputs: sprite. Optional inputs: index, x, y, color, multicolour.\n- render_bitmap: Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it. Required inputs: imagePath, format. Optional inputs: bitmapAddress, screenAddress, borderColor, backgroundColor, preserveAspect.\n- get_display_state: Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. The same shared-memory path is used on C64U/U64, U2-family hardware, and VICE, so the response shape is identical. Required inputs: none.",
233
233
  "additionalProperties": false,
234
234
  "x-c64bridge-operations": [
235
235
  {
@@ -624,12 +624,12 @@
624
624
  },
625
625
  {
626
626
  "op": "get_display_state",
627
- "description": "Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. Works on C64U and VICE; both backends are read through shared memory primitives so the response shape is identical.",
627
+ "description": "Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. The same shared-memory path is used on C64U/U64, U2-family hardware, and VICE, so the response shape is identical.",
628
628
  "required": [],
629
629
  "optional": [],
630
630
  "inputSchema": {
631
631
  "type": "object",
632
- "description": "Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. Works on C64U and VICE; both backends are read through shared memory primitives so the response shape is identical.",
632
+ "description": "Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. The same shared-memory path is used on C64U/U64, U2-family hardware, and VICE, so the response shape is identical.",
633
633
  "properties": {
634
634
  "op": {
635
635
  "const": "get_display_state"
@@ -6,7 +6,10 @@
6
6
  "enum": [
7
7
  "write_text",
8
8
  "key",
9
- "joystick"
9
+ "joystick",
10
+ "keyboard",
11
+ "release_all",
12
+ "state"
10
13
  ],
11
14
  "description": "Selects the operation."
12
15
  },
@@ -69,7 +72,9 @@
69
72
  "down",
70
73
  "left",
71
74
  "right",
72
- "fire"
75
+ "fire",
76
+ "fire2",
77
+ "fire3"
73
78
  ]
74
79
  },
75
80
  "minItems": 0
@@ -82,12 +87,98 @@
82
87
  "release",
83
88
  "tap"
84
89
  ]
90
+ },
91
+ "inputs": {
92
+ "type": "array",
93
+ "description": "One or more keys to transition together (for example left_shift + a).",
94
+ "items": {
95
+ "type": "string",
96
+ "description": "Physical keyboard input.",
97
+ "enum": [
98
+ "inst_del",
99
+ "return",
100
+ "cursor_left_right",
101
+ "f7",
102
+ "f1",
103
+ "f3",
104
+ "f5",
105
+ "cursor_up_down",
106
+ "0",
107
+ "1",
108
+ "2",
109
+ "3",
110
+ "4",
111
+ "5",
112
+ "6",
113
+ "7",
114
+ "8",
115
+ "9",
116
+ "a",
117
+ "b",
118
+ "c",
119
+ "d",
120
+ "e",
121
+ "f",
122
+ "g",
123
+ "h",
124
+ "i",
125
+ "j",
126
+ "k",
127
+ "l",
128
+ "m",
129
+ "n",
130
+ "o",
131
+ "p",
132
+ "q",
133
+ "r",
134
+ "s",
135
+ "t",
136
+ "u",
137
+ "v",
138
+ "w",
139
+ "x",
140
+ "y",
141
+ "z",
142
+ "left_shift",
143
+ "right_shift",
144
+ "plus",
145
+ "minus",
146
+ "period",
147
+ "colon",
148
+ "at",
149
+ "comma",
150
+ "pound",
151
+ "star",
152
+ "semicolon",
153
+ "clr_home",
154
+ "equals",
155
+ "arrow_up",
156
+ "slash",
157
+ "arrow_left",
158
+ "ctrl",
159
+ "space",
160
+ "commodore",
161
+ "run_stop",
162
+ "restore"
163
+ ]
164
+ },
165
+ "minItems": 1,
166
+ "maxItems": 8
167
+ },
168
+ "transition": {
169
+ "type": "string",
170
+ "description": "press holds, release frees, tap presses and releases.",
171
+ "enum": [
172
+ "press",
173
+ "release",
174
+ "tap"
175
+ ]
85
176
  }
86
177
  },
87
178
  "required": [
88
179
  "op"
89
180
  ],
90
- "description": "Input operations: write_text, key, joystick.\n\nOperations:\n- write_text: Send a text string to the keyboard buffer, with PETSCII token expansion. Required inputs: text. Optional inputs: delayMs.\n- key: Tap a single key or hold it for a duration. Required inputs: key. Optional inputs: durationMs, count.\n- joystick: Simulate joystick input by writing directly to CIA1 Port A/B registers. Required inputs: port, controls, action. Optional inputs: durationMs.",
181
+ "description": "Input operations: write_text, key, keyboard, joystick, release_all, state.\n\nOperations:\n- write_text: Send a text string to the keyboard buffer, with PETSCII token expansion. Required inputs: text. Optional inputs: delayMs.\n- key: Tap a single key or hold it for a duration. Required inputs: key. Optional inputs: durationMs, count.\n- joystick: Simulate joystick input. On C64U/U64 this uses machine:input (a C64U firmware version that provides it, or U64 3.15+); VICE writes CIA1 registers. Required inputs: port, controls, action. Optional inputs: durationMs.\n- keyboard: Send physical C64 keyboard matrix events through machine:input (a C64U firmware version that provides it, or U64 3.15+). Required inputs: inputs, transition.\n- release_all: Release every key and joystick control injected through machine:input (a C64U firmware version that provides it, or U64 3.15+). Required inputs: none.\n- state: Read the keys and joystick controls held through machine:input (a C64U firmware version that provides it, or U64 3.15+). Required inputs: none.",
91
182
  "additionalProperties": false,
92
183
  "x-c64bridge-operations": [
93
184
  {
@@ -183,7 +274,7 @@
183
274
  },
184
275
  {
185
276
  "op": "joystick",
186
- "description": "Simulate joystick input by writing directly to CIA1 Port A/B registers.",
277
+ "description": "Simulate joystick input. On C64U/U64 this uses machine:input (a C64U firmware version that provides it, or U64 3.15+); VICE writes CIA1 registers.",
187
278
  "required": [
188
279
  "port",
189
280
  "controls",
@@ -194,7 +285,7 @@
194
285
  ],
195
286
  "inputSchema": {
196
287
  "type": "object",
197
- "description": "Simulate joystick input by writing directly to CIA1 Port A/B registers.",
288
+ "description": "Simulate joystick input. On C64U/U64 this uses machine:input (a C64U firmware version that provides it, or U64 3.15+); VICE writes CIA1 registers.",
198
289
  "properties": {
199
290
  "op": {
200
291
  "const": "joystick"
@@ -216,7 +307,9 @@
216
307
  "down",
217
308
  "left",
218
309
  "right",
219
- "fire"
310
+ "fire",
311
+ "fire2",
312
+ "fire3"
220
313
  ]
221
314
  },
222
315
  "minItems": 0
@@ -249,6 +342,154 @@
249
342
  ],
250
343
  "additionalProperties": false
251
344
  }
345
+ },
346
+ {
347
+ "op": "keyboard",
348
+ "description": "Send physical C64 keyboard matrix events through machine:input (a C64U firmware version that provides it, or U64 3.15+).",
349
+ "required": [
350
+ "inputs",
351
+ "transition"
352
+ ],
353
+ "optional": [],
354
+ "inputSchema": {
355
+ "type": "object",
356
+ "description": "Send physical C64 keyboard matrix events through machine:input (a C64U firmware version that provides it, or U64 3.15+).",
357
+ "properties": {
358
+ "op": {
359
+ "const": "keyboard"
360
+ },
361
+ "inputs": {
362
+ "type": "array",
363
+ "description": "One or more keys to transition together (for example left_shift + a).",
364
+ "items": {
365
+ "type": "string",
366
+ "description": "Physical keyboard input.",
367
+ "enum": [
368
+ "inst_del",
369
+ "return",
370
+ "cursor_left_right",
371
+ "f7",
372
+ "f1",
373
+ "f3",
374
+ "f5",
375
+ "cursor_up_down",
376
+ "0",
377
+ "1",
378
+ "2",
379
+ "3",
380
+ "4",
381
+ "5",
382
+ "6",
383
+ "7",
384
+ "8",
385
+ "9",
386
+ "a",
387
+ "b",
388
+ "c",
389
+ "d",
390
+ "e",
391
+ "f",
392
+ "g",
393
+ "h",
394
+ "i",
395
+ "j",
396
+ "k",
397
+ "l",
398
+ "m",
399
+ "n",
400
+ "o",
401
+ "p",
402
+ "q",
403
+ "r",
404
+ "s",
405
+ "t",
406
+ "u",
407
+ "v",
408
+ "w",
409
+ "x",
410
+ "y",
411
+ "z",
412
+ "left_shift",
413
+ "right_shift",
414
+ "plus",
415
+ "minus",
416
+ "period",
417
+ "colon",
418
+ "at",
419
+ "comma",
420
+ "pound",
421
+ "star",
422
+ "semicolon",
423
+ "clr_home",
424
+ "equals",
425
+ "arrow_up",
426
+ "slash",
427
+ "arrow_left",
428
+ "ctrl",
429
+ "space",
430
+ "commodore",
431
+ "run_stop",
432
+ "restore"
433
+ ]
434
+ },
435
+ "minItems": 1,
436
+ "maxItems": 8
437
+ },
438
+ "transition": {
439
+ "type": "string",
440
+ "description": "press holds, release frees, tap presses and releases.",
441
+ "enum": [
442
+ "press",
443
+ "release",
444
+ "tap"
445
+ ]
446
+ }
447
+ },
448
+ "required": [
449
+ "op",
450
+ "inputs",
451
+ "transition"
452
+ ],
453
+ "additionalProperties": false
454
+ }
455
+ },
456
+ {
457
+ "op": "release_all",
458
+ "description": "Release every key and joystick control injected through machine:input (a C64U firmware version that provides it, or U64 3.15+).",
459
+ "required": [],
460
+ "optional": [],
461
+ "inputSchema": {
462
+ "type": "object",
463
+ "description": "Release every key and joystick control injected through machine:input (a C64U firmware version that provides it, or U64 3.15+).",
464
+ "properties": {
465
+ "op": {
466
+ "const": "release_all"
467
+ }
468
+ },
469
+ "required": [
470
+ "op"
471
+ ],
472
+ "additionalProperties": false
473
+ }
474
+ },
475
+ {
476
+ "op": "state",
477
+ "description": "Read the keys and joystick controls held through machine:input (a C64U firmware version that provides it, or U64 3.15+).",
478
+ "required": [],
479
+ "optional": [],
480
+ "inputSchema": {
481
+ "type": "object",
482
+ "description": "Read the keys and joystick controls held through machine:input (a C64U firmware version that provides it, or U64 3.15+).",
483
+ "properties": {
484
+ "op": {
485
+ "const": "state"
486
+ }
487
+ },
488
+ "required": [
489
+ "op"
490
+ ],
491
+ "additionalProperties": false
492
+ }
252
493
  }
253
494
  ]
254
495
  }
@@ -178,7 +178,7 @@
178
178
  "required": [
179
179
  "op"
180
180
  ],
181
- "description": "Memory operations available via the c64_memory tool.\n\nOperations:\n- read: Read a range of bytes and return a hex dump with address metadata. Required inputs: address. Optional inputs: length.\n- write: Write a hexadecimal byte sequence into RAM. Required inputs: address, bytes. Optional inputs: verify, expected, mask, abortOnMismatch.\n- read_screen: Return the current 40x25 text screen converted to ASCII. Required inputs: none.\n- wait_for_text: Poll the screen until a substring or regex appears, or timeout elapses. Required inputs: pattern. Optional inputs: isRegex, caseInsensitive, timeoutMs, intervalMs.\n- disassemble: Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on both C64U and VICE. Required inputs: address. Optional inputs: length, instructionCount.\n- copy_memory: Copy a RAM region to another address. Required inputs: source, dest, length.\n- fill_memory: Fill a memory range with a repeating byte pattern. Required inputs: address, length, pattern.\n- search_memory: Search for a byte pattern within a memory range and return matching addresses. Required inputs: startAddress, endAddress, pattern. Optional inputs: maxResults.\n- compare_memory: Compare two memory regions byte-by-byte and report differences. Required inputs: address1, address2, length. Optional inputs: maxDiffs.\n- save_memory: Dump a memory range to a local file, with an optional PRG load-address header. Required inputs: startAddress, endAddress, filePath. Optional inputs: asPrg.",
181
+ "description": "Memory operations available via the c64_memory tool.\n\nOperations:\n- read: Read a range of bytes and return a hex dump with address metadata. Required inputs: address. Optional inputs: length.\n- write: Write a hexadecimal byte sequence into RAM. Required inputs: address, bytes. Optional inputs: verify, expected, mask, abortOnMismatch.\n- read_screen: Return the current 40x25 text screen converted to ASCII. Required inputs: none.\n- wait_for_text: Poll the screen until a substring or regex appears, or timeout elapses. Required inputs: pattern. Optional inputs: isRegex, caseInsensitive, timeoutMs, intervalMs.\n- disassemble: Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on C64U/U64, U2-family hardware, and VICE. Required inputs: address. Optional inputs: length, instructionCount.\n- copy_memory: Copy a RAM region to another address. Required inputs: source, dest, length.\n- fill_memory: Fill a memory range with a repeating byte pattern. Required inputs: address, length, pattern.\n- search_memory: Search for a byte pattern within a memory range and return matching addresses. Required inputs: startAddress, endAddress, pattern. Optional inputs: maxResults.\n- compare_memory: Compare two memory regions byte-by-byte and report differences. Required inputs: address1, address2, length. Optional inputs: maxDiffs.\n- save_memory: Dump a memory range to a local file, with an optional PRG load-address header. Required inputs: startAddress, endAddress, filePath. Optional inputs: asPrg.",
182
182
  "additionalProperties": false,
183
183
  "x-c64bridge-operations": [
184
184
  {
@@ -372,7 +372,7 @@
372
372
  },
373
373
  {
374
374
  "op": "disassemble",
375
- "description": "Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on both C64U and VICE.",
375
+ "description": "Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on C64U/U64, U2-family hardware, and VICE.",
376
376
  "required": [
377
377
  "address"
378
378
  ],
@@ -382,7 +382,7 @@
382
382
  ],
383
383
  "inputSchema": {
384
384
  "type": "object",
385
- "description": "Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on both C64U and VICE.",
385
+ "description": "Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on C64U/U64, U2-family hardware, and VICE.",
386
386
  "properties": {
387
387
  "address": {
388
388
  "type": "string",
@@ -256,7 +256,7 @@
256
256
  "required": [
257
257
  "op"
258
258
  ],
259
- "description": "Program operations available via the c64_program tool.\n\nOperations:\n- load_prg: Load a PRG from Ultimate storage without executing it. Required inputs: path. Optional inputs: symbolsFile.\n- run_prg: Load and execute a PRG from Ultimate-visible storage on c64u or a host-local path on VICE. Required inputs: path. Optional inputs: symbolsFile.\n- run_crt: Mount and run a CRT cartridge image. Required inputs: path.\n- upload_run_basic: Upload Commodore BASIC v2 source and execute it immediately. Required inputs: program. Optional inputs: verify.\n- upload_run_asm: Assemble 6502/6510 source, upload the PRG, and execute it. Required inputs: program. Optional inputs: verify.\n- batch_run: Run multiple PRG/CRT programs with post-run assertions. Required inputs: programs. Optional inputs: continueOnError, durationMs, outputPath, resetDelayMs.\n- bundle_run: Capture screen, memory, and debug registers into an artifact bundle. Required inputs: runId, outputPath. Optional inputs: captureScreen, memoryRanges, captureDebugReg.\n- cross_platform_greeting: Show a platform-customized greeting on one or more configured backends, capture screenshots, and verify the results. Required inputs: none. Optional inputs: platforms, messageTemplate, verify, captureScreenshot, outputPath, restoreActiveBackend, timeoutMs, pollIntervalMs.",
259
+ "description": "Program operations available via the c64_program tool.\n\nOperations:\n- load_prg: Load a PRG from Ultimate storage without executing it. Required inputs: path. Optional inputs: symbolsFile.\n- run_prg: Load and execute a PRG from Ultimate-visible storage on C64U/U64 or U2-family hardware, or from a host-local path on VICE. Required inputs: path. Optional inputs: symbolsFile.\n- run_crt: Mount and run a CRT cartridge image. Required inputs: path.\n- upload_run_basic: Upload Commodore BASIC v2 source and execute it immediately. Required inputs: program. Optional inputs: verify.\n- upload_run_asm: Assemble 6502/6510 source, upload the PRG, and execute it. Required inputs: program. Optional inputs: verify.\n- batch_run: Run multiple PRG/CRT programs with post-run assertions. Required inputs: programs. Optional inputs: continueOnError, durationMs, outputPath, resetDelayMs.\n- bundle_run: Capture screen, memory, and debug registers into an artifact bundle. Required inputs: runId, outputPath. Optional inputs: captureScreen, memoryRanges, captureDebugReg.\n- cross_platform_greeting: Show a platform-customized greeting on one or more configured backends, capture screenshots, and verify the results. Required inputs: none. Optional inputs: platforms, messageTemplate, verify, captureScreenshot, outputPath, restoreActiveBackend, timeoutMs, pollIntervalMs.",
260
260
  "additionalProperties": false,
261
261
  "x-c64bridge-operations": [
262
262
  {
@@ -298,7 +298,7 @@
298
298
  },
299
299
  {
300
300
  "op": "run_prg",
301
- "description": "Load and execute a PRG from Ultimate-visible storage on c64u or a host-local path on VICE.",
301
+ "description": "Load and execute a PRG from Ultimate-visible storage on C64U/U64 or U2-family hardware, or from a host-local path on VICE.",
302
302
  "required": [
303
303
  "path"
304
304
  ],
@@ -307,7 +307,7 @@
307
307
  ],
308
308
  "inputSchema": {
309
309
  "type": "object",
310
- "description": "Load and execute a PRG from Ultimate-visible storage on c64u or a host-local path on VICE.",
310
+ "description": "Load and execute a PRG from Ultimate-visible storage on C64U/U64 or U2-family hardware, or from a host-local path on VICE.",
311
311
  "properties": {
312
312
  "path": {
313
313
  "type": "string",
@@ -12,6 +12,7 @@
12
12
  "type": "string",
13
13
  "enum": [
14
14
  "c64u",
15
+ "u2",
15
16
  "vice"
16
17
  ],
17
18
  "description": "Backend to activate for subsequent tool calls."
@@ -42,6 +43,7 @@
42
43
  "type": "string",
43
44
  "enum": [
44
45
  "c64u",
46
+ "u2",
45
47
  "vice"
46
48
  ],
47
49
  "description": "Backend to activate for subsequent tool calls."
@@ -9,7 +9,9 @@
9
9
  "reset",
10
10
  "reboot",
11
11
  "poweroff",
12
+ "power_cycle",
12
13
  "menu",
14
+ "read_menu_screen",
13
15
  "start_task",
14
16
  "stop_task",
15
17
  "stop_all_tasks",
@@ -89,7 +91,7 @@
89
91
  "required": [
90
92
  "op"
91
93
  ],
92
- "description": "System operations available via the c64_system tool.\n\nOperations:\n- pause: Pause the machine until resumed. Required inputs: none.\n- resume: Resume CPU execution after a pause. Required inputs: none.\n- reset: Issue a soft reset without cutting power. Required inputs: none.\n- reboot: Trigger a firmware reboot to recover from faults. Required inputs: none.\n- poweroff: Request a controlled shutdown via the Ultimate firmware. Required inputs: none.\n- menu: Toggle the Ultimate menu button for navigation. Required inputs: none.\n- start_task: Start a named background task that runs on an interval. Required inputs: name, operation. Optional inputs: arguments, intervalMs, maxIterations.\n- stop_task: Stop a specific background task and clear its timer. Required inputs: name.\n- stop_all_tasks: Stop every running background task and persist state. Required inputs: none.\n- list_tasks: List known background tasks with status metadata. Required inputs: none.\n- performance_report: Summarize diagnostics spans and tool latencies from the current or latest MCP session. Required inputs: none. Optional inputs: scope, includeTimeline, maxEntries.",
94
+ "description": "System operations available via the c64_system tool.\n\nOperations:\n- pause: Pause the machine until resumed. Required inputs: none.\n- resume: Resume CPU execution after a pause. Required inputs: none.\n- reset: Issue a soft reset without cutting power. Required inputs: none.\n- reboot: Trigger a firmware reboot to recover from faults. Required inputs: none.\n- poweroff: Request a controlled shutdown via the Ultimate firmware. Required inputs: none.\n- power_cycle: Return the active backend to a fresh state. C64U/U64 Tool Menu verification requires machine:menu_screen (a C64U firmware version that provides it, or U64 3.15+); U2-family reboots through REST. Required inputs: none.\n- menu: Toggle the Ultimate menu button for navigation. Required inputs: none.\n- read_menu_screen: Read the active Ultimate menu's raw character and colour matrix through machine:menu_screen (a C64U firmware version that provides it, or U64/U2 3.15+). Required inputs: none.\n- start_task: Start a named background task that runs on an interval. Required inputs: name, operation. Optional inputs: arguments, intervalMs, maxIterations.\n- stop_task: Stop a specific background task and clear its timer. Required inputs: name.\n- stop_all_tasks: Stop every running background task and persist state. Required inputs: none.\n- list_tasks: List known background tasks with status metadata. Required inputs: none.\n- performance_report: Summarize diagnostics spans and tool latencies from the current or latest MCP session. Required inputs: none. Optional inputs: scope, includeTimeline, maxEntries.",
93
95
  "additionalProperties": false,
94
96
  "x-c64bridge-operations": [
95
97
  {
@@ -187,6 +189,25 @@
187
189
  ]
188
190
  }
189
191
  },
192
+ {
193
+ "op": "power_cycle",
194
+ "description": "Return the active backend to a fresh state. C64U/U64 Tool Menu verification requires machine:menu_screen (a C64U firmware version that provides it, or U64 3.15+); U2-family reboots through REST.",
195
+ "required": [],
196
+ "optional": [],
197
+ "inputSchema": {
198
+ "type": "object",
199
+ "description": "Return the active backend to a fresh state. C64U/U64 Tool Menu verification requires machine:menu_screen (a C64U firmware version that provides it, or U64 3.15+); U2-family reboots through REST.",
200
+ "properties": {
201
+ "op": {
202
+ "const": "power_cycle"
203
+ }
204
+ },
205
+ "additionalProperties": false,
206
+ "required": [
207
+ "op"
208
+ ]
209
+ }
210
+ },
190
211
  {
191
212
  "op": "menu",
192
213
  "description": "Toggle the Ultimate menu button for navigation.",
@@ -206,6 +227,25 @@
206
227
  ]
207
228
  }
208
229
  },
230
+ {
231
+ "op": "read_menu_screen",
232
+ "description": "Read the active Ultimate menu's raw character and colour matrix through machine:menu_screen (a C64U firmware version that provides it, or U64/U2 3.15+).",
233
+ "required": [],
234
+ "optional": [],
235
+ "inputSchema": {
236
+ "type": "object",
237
+ "description": "Read the active Ultimate menu's raw character and colour matrix through machine:menu_screen (a C64U firmware version that provides it, or U64/U2 3.15+).",
238
+ "properties": {
239
+ "op": {
240
+ "const": "read_menu_screen"
241
+ }
242
+ },
243
+ "additionalProperties": false,
244
+ "required": [
245
+ "op"
246
+ ]
247
+ }
248
+ },
209
249
  {
210
250
  "op": "start_task",
211
251
  "description": "Start a named background task that runs on an interval.",
package/mcp/server.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "c64bridge",
3
- "version": "0.9.3",
3
+ "version": "1.0.0",
4
4
  "description": "Stdio-based Model Context Protocol (MCP) server that bridges Commodore 64 Ultimate hardware with AI agents.",
5
5
  "transports": [
6
6
  "stdio"