vice.pingLABSCO SUMMARY
A modern debugging workflow for an 8-bit machine.
Loading symbol files and setting breakpoints by label is what turns this from a novelty into a workflow — you debug by name, not by address. Two things to know before you plan around it: the events endpoint exists but currently returns 501 Not Implemented, so state has to be polled, and the Windows build is headless only because GTK3 cross-compilation is not in place. Binding to all interfaces without a token is permitted for compatibility, but VICE logs a warning, and it deserves one.
What it is
The VICE emulator with an MCP server compiled into it. Not a wrapper around the monitor and not a screen-scraper: tool calls are dispatched through VICE's own trap mechanism onto the emulator's main thread, and read the actual register values rather than a cached copy.
What you get
- Tools grouped by category, every one JSON Schema validated
- Execution and registers:
vice.execution.run,vice.execution.pause,vice.execution.step,vice.run_until,vice.registers.get,vice.registers.set - Memory:
vice.memory.read,vice.memory.write,vice.memory.banks,vice.memory.searchwith wildcard patterns,vice.memory.fill,vice.memory.compare - Breakpoints and watchpoints with conditions, ignore counts, grouping and auto-snapshots, through the
vice.checkpoint.*family - Chip state:
vice.sprite.inspectrenders a sprite bitmap as ASCII art,vice.vicii.get_stateandvice.sid.get_stateread the video and sound chips,vice.cia.get_statecovers the timer chips - Disks and machine control:
vice.disk.attach,vice.disk.read_sector,vice.autostart,vice.machine.reset,vice.machine.config.get - Interaction and capture:
vice.keyboard.type,vice.joystick.set,vice.display.screenshot - Debugging support:
vice.disassemble,vice.symbols.loadfor KickAssembler or VICE symbol files,vice.backtrace,vice.cycles.stopwatch, and tracing withvice.trace.startandvice.interrupt.log.start - The tool surface adapts to the machine: C64, C128, SCPU64, C64 DTV, VIC-20, Plus/4 and C16, PET and CBM-II are all covered, and the config call reports which chips and memory banks the running machine actually has
Requirements
Either a pre-built binary from the project's releases, or a source build of VICE configured with the MCP server enabled — which needs libmicrohttpd, GTK3, autoconf, automake, pkg-config and the xa assembler. Start any VICE machine with the MCP flag and clients connect to http://127.0.0.1:6510/mcp; the port and bind host are flags. A bearer token flag is available and is mandatory once CORS is configured, where wildcard origins are rejected.
Setup effort
Follow the published steps — git clone https://github.com/barryw/vice-mcp.git
USE CASES
Debugging 6502 code without leaving your editor
Load your symbol file, set a breakpoint on a label, run, and read the registers where it stopped.
Finding what changed in memory
Compare a region against a saved snapshot, or search for a byte pattern with wildcards.
Working out why a sprite looks wrong
Read the sprite state and see its bitmap rendered as ASCII art instead of decoding bytes by hand.
Automating a run end to end
Attach the disk image, autostart the program, type into the keyboard and capture the screen.
64 tools
Listed in project docs. Your client may show a different list.
vice.execution.runvice.execution.pausevice.execution.stepvice.run_untilvice.registers.getvice.registers.setvice.memory.readvice.memory.writevice.memory.banksvice.memory.searchvice.memory.fillvice.memory.comparevice.checkpoint.addvice.checkpoint.deletevice.checkpoint.listvice.checkpoint.togglevice.checkpoint.set_conditionvice.checkpoint.set_ignore_countvice.checkpoint.group.createvice.checkpoint.group.addvice.checkpoint.group.togglevice.checkpoint.group.listvice.checkpoint.set_auto_snapshotvice.checkpoint.clear_auto_snapshotvice.sprite.getvice.sprite.setvice.sprite.inspectvice.vicii.get_statevice.vicii.set_statevice.sid.get_statevice.sid.set_statevice.cia.get_statevice.cia.set_statevice.disk.attachvice.disk.detachvice.disk.listvice.disk.read_sectorvice.autostartvice.machine.resetvice.machine.config.getvice.machine.config.setvice.display.screenshotvice.display.get_dimensionsvice.keyboard.typevice.keyboard.key_pressvice.keyboard.key_releasevice.keyboard.restorevice.keyboard.matrixvice.joystick.setvice.disassemblevice.symbols.loadvice.symbols.lookupvice.watch.addvice.backtracevice.cycles.stopwatchvice.snapshot.savevice.snapshot.loadvice.snapshot.listvice.trace.startvice.trace.stopvice.interrupt.log.startvice.interrupt.log.stopvice.interrupt.log.readBEFORE YOU INSTALL
What to know first
Tools you get
64 tools named in the project's documentation.
INSTALLATION
Connect your client
Server setup
Get the emulator: download a pre-built binary from https://github.com/barryw/vice-mcp/releases (Linux x86_64 GUI+headless, macOS arm64 GUI+headless, Windows x86_64 headless only), or build from source with the steps below.
To build from source, clone the repository:
git clone https://github.com/barryw/vice-mcp.gitInstall the build prerequisites for your platform. Debian/Ubuntu:
apt install build-essential autoconf automake pkg-config libmicrohttpd-dev libgtk-3-dev xa65 flex byaccmacOS:
brew install autoconf automake pkg-config libmicrohttpd gtk+3 xa lameWindows (MSYS2):
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-libmicrohttpd mingw-w64-x86_64-gtk3 autoconf automake pkg-configBuild VICE with the MCP server enabled:
cd vice-mcp/vice
./autogen.sh
mkdir build && cd build
../configure --enable-mcp-server --enable-gtk3ui
make -j$(nproc)Start a VICE machine with the server enabled: x64sc -mcpserver (C64), x128 -mcpserver (C128), xvic -mcpserver (VIC-20). It listens on 127.0.0.1:6510 by default.
Point your MCP client at http://127.0.0.1:6510/mcp.
Optional hardening for non-local use: x64sc -mcpserver -mcpserverhost 0.0.0.0 -mcpservertoken secret, then have the client send Authorization: Bearer secret; browser clients also need one exact -mcpservercorsorigin <YOUR_MCPSERVERCORSORIGIN> (wildcard * is rejected, and CORS without a token is rejected)
MCP Clients
Any MCP client
http://127.0.0.1:6510/mcpOther routes
Test with curl
curl -sS http://127.0.0.1:6510/mcp -H 'Content-Type: application/json' -H 'Accept: application/json' --data '{"jsonrpc": "2.0", "id": 1, "method": "vice.ping"}'