{"id":51974946,"url":"https://github.com/64kramsystem/c64-mcp","last_synced_at":"2026-07-30T04:30:22.895Z","repository":{"id":373298778,"uuid":"1311131058","full_name":"64kramsystem/c64-mcp","owner":"64kramsystem","description":"C64-specific MCP tools for Ghidra and the Ghidra VICE connector","archived":false,"fork":false,"pushed_at":"2026-07-26T21:09:29.000Z","size":242,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-26T23:06:33.658Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/64kramsystem.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-07-24T14:39:19.000Z","updated_at":"2026-07-26T21:09:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/64kramsystem/c64-mcp","commit_stats":null,"previous_names":["64kramsystem/c64-mcp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/64kramsystem/c64-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64kramsystem%2Fc64-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64kramsystem%2Fc64-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64kramsystem%2Fc64-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64kramsystem%2Fc64-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/64kramsystem","download_url":"https://codeload.github.com/64kramsystem/c64-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64kramsystem%2Fc64-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36060979,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-30T02:00:05.956Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-30T04:30:21.868Z","updated_at":"2026-07-30T04:30:22.889Z","avatar_url":"https://github.com/64kramsystem.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# c64-mcp\n\nSmall 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.\n\n## Tools\n\n### Static analysis\n\n- `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`.\n- `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`.\n- `decode_c64_hires_bitmap` and `decode_c64_multicolor_bitmap` render bitmap memory.\n- `decode_c64_charset`, `decode_c64_char_screen`, and `decode_c64_sprites` render character and sprite data.\n\nGraphics inputs explicitly name their source:\n\n```json\n{\"kind\": \"inline\", \"bytes\": \"00ff\"}\n{\"kind\": \"ghidra\", \"program\": \"game\", \"start\": \"RAM:2000\"}\n```\n\nRenderers 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.\n\n### Live VICE\n\nCall `vice_connect` after the VICE connector has established its TraceRMI session. The remaining `vice_*` tools cover:\n\n- status, registers, banks, and bank-aware memory;\n- checkpoints, step/next/finish, resume, interrupt, and stop waits;\n- deterministic keyboard and joystick input;\n- reset and snapshot save/load;\n- capture of VICE's composited display;\n- copying one verified VICE memory range into Ghidra.\n\n`vice_disconnect` drops only this process's binding. It does not close VICE, the connector, or the trace.\n\nBinary-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.\n\n`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`.\n\n`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.\n\n## Limits and behavior\n\n- Text and graphics sources are capped at 64 KiB.\n- VICE memory calls transfer at most 16 KiB; a verified copy into Ghidra may span 64 KiB.\n- Keyboard input is capped at 255 bytes.\n- Graphics geometry is bounded before remote reads.\n- Requests are never retried automatically. A timed-out mutation may already have changed VICE or Ghidra, so inspect state before repeating it.\n- The Ghidra and connector boundaries are local and unauthenticated.\n\n## Configuration\n\n- `GHIDRA_MCP_URL` defaults to `http://127.0.0.1:8089`.\n- `GHIDRA_MCP_TIMEOUT` defaults to 30 seconds.\n\nRun with:\n\n```sh\nuv run c64-mcp\n```\n\nThe package contains the immutable text tables and C64 symbol data used by the tools.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F64kramsystem%2Fc64-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F64kramsystem%2Fc64-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F64kramsystem%2Fc64-mcp/lists"}