mcpField
R
reverse-engineer

reverse-engineer

Local
github.com/FirzusDeveloper Tools4Updated 4d ago

About reverse-engineer

reverse-engineer is a read-only MCP server and CLI for inspecting Electron apps and compiled binaries. It is aimed at agents and developers who need bounded, citable analysis without running the target; some decompilation features require optional tools.

Key features

  1. 01Identify formats and binary markers
  2. 02Inspect Electron app structure and IPC
  3. 03Search files and archives with locations
  4. 04Inventory binary sections and strings
  5. 05Read Go and Rust build information
  6. 06Decompile native, .NET, and APK code

Use cases

  1. 01Triage an unfamiliar executable
  2. 02Locate code or strings in an app archive
  3. 03Inspect Electron preloads and IPC channels
  4. 04Examine binary metadata or decompiled functions

MCP support

It exposes read-only reverse-engineering tools to MCP clients, including triage, search, binary inventory, and decompilation. Results include cited locations, and analysis is cached by SHA-256.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"firzus-reverse-engineer": {
"command": "npx",
"args": [
"-y",
"reverse-engineer"
]
}
}
}
Run commandnpx -y reverse-engineer

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npmreverse-engineer0.1.0-alpha.2

Tools

8

Saved tool list · updated 1w ago

ParameterTypeRequiredDescription
pathstringYesFile or directory

Details

From the project README

reverse-engineer server

The read-only MCP server and CLI behind the reverse-engineer skill. The skill is the agent-facing entry point; this server replaces the commands that are missing or fragile on a given platform (otool, strings, jq, go version -m, asar extraction) with TypeScript parsers, and answers in at most 8 KB with citable locations. Installing the skill does not install the server.

Tools

ToolWhat it returns
triageFormat by magic bytes, architecture, size, SHA-256, markers (Go, Rust, Electron fuses, N-API, packers) and the next call
electron_surfaceCached asar extraction, main, preloads and exposeInMainWorld keys, .node addons and the addon names called from JS, IPC channels grouped by call site (app wrappers included), fuses, asar integrity
searchBounded search in a tree, a .asar or one file (hidden folders included), with file:line:col or file@offset and a short excerpt
readLine ranges, a column window for minified code (instead of reformatting it), hexdumps
binary_inventoryPE, ELF and Mach-O sections, libraries and imports, exports, Node addon names, ASCII and UTF-16 strings, PE resources
buildinfoGo build info (toolchain, main package, module, settings, dependencies) and Rust cargo-auditable packages
decompileGhidra headless, cached per file: list functions, map a string to the functions that use it, return one function's C
managed.NET (via ilspycmd) and APK/DEX/JAR (via jadx): decompile once, summarize, return one type

The catalog is about 6 KB for the 8 tools; the skill is about 5.5 KB.

Design rules:

  • Compact by default. Each answer stays under REVERSE_ENGINEER_MAX_BYTES (8192). Longer output is written to the cache, and the answer ends with its path, so read and search can page through it.
  • Cited facts. Every location is file:line:col, file@0xoffset, a symbol or a string.
  • No blocking on common cases. A .node file signed after packaging shows up as an unverified hash, not as an error. Malformed or hostile binaries degrade to partial results instead of hanging.
  • Read-only. The tools never run the target. They write only to their cache: %LOCALAPPDATA%\reverse-engineer\cache, ~/Library/Caches/reverse-engineer, or $XDG_CACHE_HOME/reverse-engineer (override with REVERSE_ENGINEER_CACHE). Exceptions: Ghidra refuses project paths with a dot folder, so with such a cache path (the Linux default ~/.cache) its projects go to a private per-user folder in the temp directory; when the cache path contains a space, Ghidra keeps its settings in the home folder; jadx and the .NET SDK may write their own settings there on first use.
  • Cache by SHA-256. An extraction or an analysis is reused.

Use

Requirements: Node.js 24.11 or later. Optional: Ghidra 11+ with JDK 21 for decompile, ilspycmd (.NET 10 SDK) and jadx (JDK 21) for managed. The agent can install them with the skill's install guide: official releases go into a per-user tools root (%LOCALAPPDATA%\reverse-engineer\tools, ~/Library/Application Support/reverse-engineer/tools, or $XDG_DATA_HOME/reverse-engineer/tools; override with REVERSE_ENGINEER_TOOLS), without admin rights or a PATH change. The tools look there first, then on PATH, GHIDRA_INSTALL_DIR and the usual install folders.

The package is published to npm as an alpha prerelease, reverse-engineer, and listed in the MCP Registry as io.github.Firzus/reverse-engineer. Pin the exact version:

npx -y [email protected] triage ./some.exe
npx -y [email protected] electron_surface "C:\Program Files\App" --focus audio,microphone

Claude Code MCP configuration (project .mcp.json):

{
  "mcpServers": {
    "reverse-engineer": {
      "command": "npx",
      "args": ["-y", "[email protected]", "mcp"]
    }
  }
}

On Windows, use "command": "cmd" with "args": ["/c", "npx", "-y", "[email protected]", "mcp"]. To run an unreleased build from a clone, run the Develop commands, then point the configuration at node <checkout>/mcp/reverse-engineer/dist/cli.mjs mcp.

Install the skill with npx skills add Firzus/agent-skills --skill reverse-engineer.

Develop

The toolchain is Vite+ (vite-plus, local dev dependency). .github/workflows/reverse-engineer-check.yml runs the same checks on Windows, macOS and Linux:

npm install
npx vp check    # format, lint, type check
npx vp test     # unit tests on synthetic and hostile fixtures
npx vp pack     # bundle dist/cli.mjs, a single file with no runtime dependency

Tests against real targets are opt-in: set RE_TARGETS (a folder with app.asar, app.asar.unpacked/ and gh.exe), RE_NOTION_DIR (an installed Notion app), RE_GHIDRA=1, RE_DOTNET_DLL, or RE_APK.

Release

.github/workflows/reverse-engineer-publish.yml publishes to npm and the MCP Registry. Merging a version change to main publishes it, so treat the merge as the release decision. In the release pull request:

  1. Set the same version in package.json, package-lock.json, server.json, the pinned commands above and in the skill's SKILL.md; a unit test checks the first three. When vp pack reports a new bundled dependency, add its license to THIRD_PARTY_NOTICES.md.
  2. Run the Develop checks, then npm pack (it rebuilds dist/) and inspect the tarball: LICENSE, README.md, THIRD_PARTY_NOTICES.md, dist/cli.mjs, ghidra/ExportDecompiled.java, package.json.

The workflow stops when the version is already on npm and the MCP Registry. Otherwise it runs the check workflow, builds the tarball in a job without publishing rights, then publishes in the release environment, from a job that runs no project or dependency code. npm uses trusted publishing, with a prerelease published under its own dist-tag (alpha), never latest; the MCP Registry uses its GitHub OIDC login. A last job runs the published --version. When a run fails, fix the cause and use Re-run all jobs on that run: each publication step rechecks its registry and skips what already exists. Never overwrite or unpublish a version to hide a failed release; publish a new one.

npm must trust the workflow before the first automated release: in the reverse-engineer package settings, add a GitHub Actions trusted publisher with user Firzus, repository agent-skills, workflow reverse-engineer-publish.yml and environment release.

Benchmark

bench/ adapts the harness from leanrea to Windows and compares four arms: no skill, leanrea, REA (MCP and skill), and this tool. See bench/BENCHMARK.md for the method, the results and their limits.

License

MIT. The benchmark tasks and harness are adapted from leanrea, MIT-licensed; its notice is in bench/LICENSE-leanrea. Fuse names and the Go build-info layout follow the public formats documented by Electron and the Go toolchain; no code is copied from REA.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.