ReversePort

Reverse engineer anything. Port it anywhere.

An MCP server, CLI and Claude Code plugin that lets your coding agent take apart apps, games, binaries and websites — Godot packs, Unity IL2CPP, .NET and native code — then rebuild them or port them to Godot, Unity, Unreal, three.js or another language. It runs on your machine and only reads the target.

npx reverseport setup

Needs Node.js 22.23.4 or newer (24.22.1+ on Node 24). Setup connects Claude Code, Codex, Cursor, Gemini CLI, Copilot, OpenCode and more, and backs up your config first.

A real run of ReversePort 1.0.0 on Godot's 2D platformer demo. JSON trimmed to the key fields.

What's new

ReversePort ships often. These are the last two releases; every change is in the changelog.

1.12

more formats, sturdier results

  • More formats recognised: Doom WAD, Quake and Half-Life WAD2/WAD3, XNB (XNA/MonoGame) and Valve VPK, next to Quake PAK.
  • More game libraries: melonJS, Kontra, Matter.js, Rapier, cannon-es, Planck.js, Howler.js, Tone.js and React Three Fiber.
  • Monorepos: pnpm-workspace.yaml globs, #imports and Deno import maps.
  • Big results always fit the output budget, also with emoji, file-name keys and very deep results.
  • A Godot to three.js walkthrough where every command was run and the result builds.

1.11

a new engine and a new protocol

  • Deep analysis on REA 6.8, the newest version of the engine inside ReversePort.
  • No more timeouts. On MCP 2026-07-28, long calls (a cold Ghidra import, a big port plan) run as tasks with progress. Older clients keep working.
  • Fewer calls, fewer tokens: run_batch runs up to 20 calls at once, and big results are saved to disk with a link.
  • Build diffs for .NET: re_compare shows which types and methods changed, and the next step.
  • Plugin settings in Claude Code instead of environment variables.

Ask your agent. It picks the tools.

You keep talking in plain sentences. ReversePort gives the agent one consistent set of tools, and every answer comes with the evidence behind it.

  • What is this game made with, and how is it built?
    re_scan finds the engine and version, languages, entry points and how it starts, also for exported builds.
  • What changed between build 43 and 44?
    re_compare diffs folders, packs and .NET assemblies down to types and methods, biggest changes first.
  • A Unity IL2CPP game without its C# source.
    re_il2cpp reads global-metadata.dat: classes, methods and strings, plus a C# skeleton.
  • Decompile the function that saves settings and explain it.
    Opens the binary through the Ghidra, Hopper or IDA you have installed, finds the function and shows pseudocode with references.
  • What is this game made with? I don't have the files.
    re_lookup checks public sources: engine with a confidence level, stack, file layout and open-source remakes.
  • Rebuild the movement of this game in Godot.
    re_blueprint writes a clean-room spec: systems, values to measure on the original, a parity table and a project skeleton.
  • How do the packages in this monorepo depend on each other?
    re_graph resolves pnpm, Turborepo and Nx workspace names and tsconfig paths, and shows which package uses which.
  • Show me how this button on the website is built.
    capture_web_screenshot with a CSS selector returns a cropped image of the element, its HTML and its computed CSS.
  • Port my Godot game to Unity.
    port_plan, then the agent ports unit by unit, and port_verify checks that nothing was left behind.

A Godot pack, read field by field

The first bytes of a real Godot 4.3 .pck, and what re_archive makes of them. Point at a field to find its bytes. The same reader finds packs hidden inside an exported .exe.

reverseport archive MiniHeli.pck
{ "format": "godot-pck",
  "packVersion": 2, "godotVersion": "4.3.0",
  "encryptedDirectory": false, "totalEntries": 13,
  "entries": [ { "path": "res://actors/bullet.gd",
                 "offset": 900, "size": 208 }, … ] }
  • Magic"GDPC": a Godot pack
  • Pack format2
  • EngineGodot 4.3.0
  • Pack flagsnone (not encrypted)
  • Files start atbyte 900
  • Files13
  • Path length24
  • First pathres://actors/bullet.gd
  • Its offset0, counted from byte 900
  • Its size208 bytes
  • Its MD526af92524699e4afae68bbe95e718b0b

Findings come with their evidence

An agent that says "done" should be able to show why. A proof case ties every claim to saved evidence and keeps open questions open until they are answered.

  • Evidence is saved with its SHA-256, so a later check sees if a file or tool result changed.
  • Observed claims name a competing explanation and the check that would prove them wrong.
  • In Claude Code, hooks ask first before a tool runs or attaches to a program, refuse remote debugger endpoints, and stop a "done" while a proof case fails its check.
  • With Stashpad, findings become memories you approve, and the next session gets a handoff note that is read once.
reverseport case init --question "What changed between build 43 and 44?" --target ./builds
reverseport case evidence <caseId> --file build-44/Game.pck --locator "build-44" --note "pack"
reverseport case claim <caseId> --statement "Build 44 adds ui/minimap.gd" --evidence '["E001"]'
reverseport case check <caseId>

Port routes

Scenes, transforms and assets convert automatically. Code is ported by your agent with an API map for each pair, one unit at a time.

RouteCodeScenes and prefabsTransformsProject skeleton
Godot→UnityAgent, with API mapSpecs plus a one-click editor builderZ mirroredScene builder script
Godot→UnrealAgent, .h and .cppSpecs in cm, Z upAxes and ×100.uproject, module, targets
Godot→three.jsAgent, TypeScriptTypeScript builder modulesUnchangedVite, TS, fixed-step loop
GDScript→Godot C#Agent, with API mapScript paths swappedUnchanged.csproj, project.godot
Unity→GodotAgent, GDScriptWritten as .tscnZ mirroredproject.godot
Unity→UnrealAgent, with API mapNot yetAxes and ×100.uproject, module
Any→languageAgentNot applicableNot applicableNot applicable

The problems that make ports go wrong

Each of these came from a real port that broke. ReversePort has a tool for it, so the agent does not have to guess.

  • re_apicheck

    Is this GDScript valid for Godot 4.3? Finds Godot 3 names with their replacements, members that do not exist and classes that are too new.

  • port_upgrade

    Godot 3 to 4 as a converted copy: renames, annotations, await, signals, scenes and project.godot, plus what still needs a human.

  • port_convert {physics}

    Gravity, fixed step, damping, friction and layers mapped, and jump velocity recomputed, so the port falls and jumps the same.

  • port_trace

    Logs both versions tick by tick and points to the first tick where they differ.

  • port_shader

    Unity shaders and Shadertoys to Godot: uniforms, intrinsics and built-ins mapped, with markers for the rest.

  • re_save

    Save files: layers, fields with their role, checksums that are verified, and a diff of two saves.

  • re_il2cpp

    A Unity IL2CPP game without source: classes, methods and strings from global-metadata.dat, plus a C# skeleton.

  • port_rpgmaker

    RPG Maker MV/MZ to Godot: maps drawn from the tilesets, events running and a list of what is left.

  • re_archive

    GameMaker, Ren'Py, Unreal, Flash, FMOD, Wwise and Unity WebGL containers: names, assets and facts.

  • re_refs

    Pink materials and "missing" scripts after a Unity move: dangling and duplicate GUIDs, with remap suggestions.

  • re_strings

    Every player-facing string as .pot or .csv, and a translated copy written back.

  • port_verify

    Leftovers, missing functions and stub bodies, so a port that compiles but does nothing is not called done.

Works with the agent you already use

Any vendor and any model size. About 57 tools are listed by default instead of more than 200, so small models stay focused. The rest are one call away, run_batch does several steps in one call, long work runs as a task instead of timing out, and results over 256 KB are saved to a file instead of flooding the context.

  • Claude Code
  • Codex
  • Cursor
  • Gemini CLI
  • GitHub Copilot
  • OpenCode
  • Windsurf
  • Cline
  • Zed
  • VS Code
MCP
npx reverseport setup, or reverseport connect <client> for a config snippet.
MCP over HTTP
reverseport serve on 127.0.0.1:32147/mcp.
Function calling
Tool lists in OpenAI, Anthropic and Gemini formats, plus OpenAPI 3.1.
Shell only
JSON on stdout, errors as JSON with the exact next step.

Skills that know the next step

Setup installs skills next to the server, so the agent follows the right workflow without being told.

  • reverse-engineer

    How does this work? Engine, stack, architecture, dependency graph, classes, scenes and unknown files.

  • build-inspector

    Exported builds: engine and version, what is inside the pack, and what changed between two builds.

  • rebuild

    No files: learn how a game, app or site is built, then write a measured clean-room rebuild spec.

  • port-project

    Any port, unit by unit in dependency order, with API maps, converted scenes and a verified result.

  • godot-port

    Godot 4 to Unity, Unreal, three.js or Godot C#: signals, node paths, autoloads, physics, input and axes.

  • unity-to-godot

    Unity to Godot 4: MonoBehaviours, prefabs and scenes to .tscn, colliders and rigidbodies.

  • port-verify

    The finish line: fix what is left, then hand over with an honest list of what still needs a human.

  • proof-case

    Evidence, claims that cite it, decisions with what was rejected, real tests and open unknowns.

  • troubleshoot

    Unreadable scenes, packs that will not list, refused paths and MCP connection problems.

The Claude Code plugin adds the port-architect agent, which runs a whole port from recon to hand-over, and guard hooks. A copied skill can be older than the tool: reverseport skills get <name> prints the one that matches your version.

What it does and does not do

So you know what to expect before you install.

It does

  • Run locally. Nothing is uploaded to an analysis service and there is no extra API bill.
  • Only read the target. Output always goes to a new folder.
  • Work right after cloning for scanning, packs, IL2CPP metadata, build diffs, lookup, blueprints and porting. No build step.
  • Drive Ghidra, Hopper, IDA and JADX when you have them installed, and show the evidence behind each conclusion. It finds them but never installs them.

It does not

  • Crack, decrypt or bypass DRM, anti-cheat or licensing. Use it on software you own or may analyse.
  • Port code by itself. Your agent writes the code; ReversePort plans, gives API maps and checks the result.
  • Decompile without a backend. Native decompiling needs Ghidra, Hopper or IDA.
  • Convert Unity scenes to Unreal yet. That route ports code and transforms only.

Get started

Three steps, about two minutes.

  1. Connect your agents. Pick them, review the changes and approve.

    npx reverseport setup
  2. Restart your agent so it loads the new MCP server and skill.

  3. Ask something real, for example:

    What is ./MyGame made with? Then plan a port to Unity.

Using Claude Code? You can install the plugin instead, which adds the porting skills and the port-architect agent:

/plugin marketplace add laaielichter/reverseport
/plugin install reverseport@reverseport

The plugin asks for its settings once: the deep-analysis engine on or off, the tool list size, a workspace folder and your Ghidra folder.

The same marketplace has two sister plugins: Stashpad, memory for agents that you can read and review (/plugin install stashpad@reverseport), and agentdisk, a report of what agents left on your disk with a cleanup you can undo (/plugin install agentdisk@reverseport, needs the agentdisk binary).

Help build it

ReversePort is open source. Its own tools live in port/, plain Node with no dependencies. New formats, engines and game libraries are the easiest first pull request: a detector, a fixture and a test.

  • I want to add a format or an engine.
    Pick a good first issue. Each one names the files to touch and says when it is done.
  • I have a question or an idea.
    Ask in Discussions.
  • A port went wrong.
    Open an issue with the command and its JSON error; every error names the next step.
  • How do I run the tests?
    npm run test:port needs no install. The rest is in CONTRIBUTING.md.
godot-demo-projects/2d/platformer