Skip to main content

c64-mcp

Small C64-specific MCP tools layered over GhidraMCP-next and the separately installed Ghidra VICE connector. The server uses stdio and never opens VICE's binary-monitor socket.

Tools

Static analysis

  • apply_c64_symbols creates the bundled C64 hardware and KERNAL labels in one idempotent Ghidra batch. Symbols use nested C64::... namespaces, and the result reports labels_created, labels_skipped, and labels_failed.
  • decode_c64_text decodes inline bytes or a bounded Ghidra read as upper or lower PETSCII or screen codes. Input may use a fixed length, a terminator, or a one/two-byte little-endian length prefix. Token keys are decimal unless prefixed with 0x.
  • decode_c64_hires_bitmap and decode_c64_multicolor_bitmap render bitmap memory.
  • decode_c64_charset, decode_c64_char_screen, and decode_c64_sprites render character and sprite data.

Graphics inputs explicitly name their source:

{"kind": "inline", "bytes": "00ff"}
{"kind": "ghidra", "program": "game", "start": "RAM:2000"}

Renderers return an indexed PNG and a compact summary. output_path is optional; an existing file is replaced only when overwrite=true. Static rendering uses the Pepto PAL palette.

Live VICE

Call vice_connect after the VICE connector has established its TraceRMI session. The remaining vice_* tools cover:

  • status, registers, banks, and bank-aware memory;
  • checkpoints, step/next/finish, resume, interrupt, and stop waits;
  • deterministic keyboard and joystick input;
  • reset and snapshot save/load;
  • capture of VICE's composited display;
  • copying one verified VICE memory range into Ghidra.

vice_disconnect drops only this process's binding. It does not close VICE, the connector, or the trace.

Binary-monitor reads require VICE to be stopped. A normal sequence is vice_interrupt, read or capture, then vice_resume. Display capture is optional: other VICE tools remain usable when the connector lacks it. Capture requires the display methods and a VICE build with the safe display-command fix.

copy_vice_memory_to_ghidra reads the complete range once, verifies its length and SHA-256, then makes one Ghidra write request. It defaults to dry_run=true.

vice_set_joyport injects one raw active-low joystick-line byte on public port 1 or 2. The value remains in effect until another input, reset, or emulator shutdown changes it.

Limits and behavior

  • Text and graphics sources are capped at 64 KiB.
  • VICE memory calls transfer at most 16 KiB; a verified copy into Ghidra may span 64 KiB.
  • Keyboard input is capped at 255 bytes.
  • Graphics geometry is bounded before remote reads.
  • Requests are never retried automatically. A timed-out mutation may already have changed VICE or Ghidra, so inspect state before repeating it.
  • The Ghidra and connector boundaries are local and unauthenticated.

Configuration

  • GHIDRA_MCP_URL defaults to http://127.0.0.1:8089.
  • GHIDRA_MCP_TIMEOUT defaults to 30 seconds.

Run with:

uv run c64-mcp

The package contains the immutable text tables and C64 symbol data used by the tools.

Metadata

Release files for c64-mcp 0.101.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for c64-mcp 0.101.0
File Size Uploaded
c64_mcp-0.101.0.tar.gz 154.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for c64-mcp 0.101.0
File Interpreter ABI Platform
c64_mcp-0.101.0-py3-none-any.whl Python 3 none any Details

Total release size: 209.6 kB

Release files / c64_mcp-0.101.0.tar.gz

Download URL c64_mcp-0.101.0.tar.gz
Size 154.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a8bea56c4f1d2ca62fb64386e2f354d2e00e72739622e981cc52e8c4e9b7361c
BLAKE2b-256 checksum
How to use checksums
92b46bfb64c70ae61d86b1cacc2dfca82631a349b3237c998e0d8d6dbd0f131b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / c64_mcp-0.101.0-py3-none-any.whl

Download URL c64_mcp-0.101.0-py3-none-any.whl
Size 54.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ac4b7dfa8ac862d3a51a20f5f7b5c8bd989b9088bc3691b44b59a3b2fe29fd61
BLAKE2b-256 checksum
How to use checksums
b51e785b53d86a3b0f5eb5e6142739430ba7eb45d54636e67c31957f467a06c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.101.0 This release

2 release files

0.99.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page