REA

Local reverse-engineering toolkit for binaries, apps, websites and Android devices over MCP

By morluto (individual) TypeScript Local · stdio SecurityDeveloper tools

123 popularity score ★ 440k ↓ 482k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add rea -- npx -y rea-agents@6.8.0 mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "rea": {
      "command": "npx",
      "args": [
        "-y",
        "rea-agents@6.8.0",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "rea": {
      "command": "npx",
      "args": [
        "-y",
        "rea-agents@6.8.0",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "rea": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "rea-agents@6.8.0",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.rea]
command = "npx"
args = ["-y", "rea-agents@6.8.0", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user rea npx -- -y rea-agents@6.8.0 mcp

Settings 11

REA_ANALYSIS_PROVIDER Optional: Picks the native analysis provider (for example ghidra or kuna) instead of automatic choice. Default auto.
REA_KUNA_COMMAND Optional: Absolute path of the kuna executable you installed. For Kuna analysis.
REA_HOPPER_STARTUP_TIMEOUT_MS Optional: Hopper startup deadline in milliseconds; raise for large binaries. Default 120000. For Hopper analysis.
REA_JEB_MCP_TIMEOUT_MS Optional: Deadline for calls to a running JEB client's MCP endpoint (default address http://127.0.0.1:8425/mcp). For decompile_jeb_item.
REA_IDA_MCP_CONFIG Optional: Absolute path of the IDA MCP bridge configuration. For IDA analysis.
REA_MCP_MAX_RESPONSE_BYTES Optional: Larger maximum response size, for clients with a bigger receive buffer (at least 10485760).
REA_MCP_INPUT_SCHEMA_PROFILE Optional: Set to full to advertise complete tool input schemas instead of the 13 KiB compact ones. Default compact.
REA_MCP_OUTPUT_SCHEMA_PROFILE Optional: Set to off to leave output schemas out of the tool list, for clients that cap its size. Default full.
Set together: ghidra
GHIDRA_INSTALL_DIR Optional: Absolute path of an existing Ghidra 12.1.x installation. For Ghidra analysis.
JAVA_HOME Optional: Absolute path of the JDK for Ghidra, if java is not on PATH. For Ghidra analysis.
REA_GHIDRA_STARTUP_TIMEOUT_MS Optional: Ghidra startup deadline in milliseconds; raise for large binaries. Default 330000. For Ghidra analysis.

What it does

REA (Reverse Engineer Anything) is a local MCP server and command-line tool, published on npm as rea-agents, for working out how existing software behaves when you don't have its source. Point an agent at a native executable, an Electron or JavaScript app, a .NET assembly, an Android APK, a Go or Rust binary, a WebAssembly file, a SQLite database, a firmware image or a live web page. It gets back pseudocode, assembly, strings, symbols, module graphs or network observations, and each finding is tied to recorded evidence and a list of open unknowns.

Native disassembly is handed to a program you already have. That can be Hopper, Ghidra, IDA or the Apache-2.0 Kuna decompiler, which REA calls through a kuna executable you point it at. GNU objdump and Rizin work as offline extras. Other targets need their own helpers, such as JADX for APKs, adb for Android devices, a Chrome-family browser for websites and Binwalk or Unblob for firmware. Some paths need nothing extra: static JavaScript, .NET, Go and Rust inspection, plus readers for PE import tables and Apple .ips crash reports. Linux kernel modules are read the same way.

It can also run and drive targets. You can capture a process in a terminal, record calls under LLDB, debug under GDB or Rizin on Linux, attach Frida with your own scripts, script browser and Electron sessions, and manage apps and files on an attached Android device. Recorded web API traffic can be turned into a replayable practice environment for agent training or evaluation. Evidence is kept per session and can be exported to a file and loaded again later.

The effect audit shipped in the package (dist/contracts/toolEffects.js) lists 230 tools, up from 208 in the previous release. The package also carries a CLI (rea) and a setup command that registers the server with your agents. The project asks that it be used only on software you own or are allowed to examine, and that you hold proper licences for commercial tools such as IDA or JEB.

What it needs

RuntimeNode.js 22.23+
Runs onmacOS, Windows, Linux
Also
  • Hopper, Ghidra 12.1.x with JDK 21+, IDA or a Kuna executable, for native disassembly
  • On Linux, a procps-compatible ps on PATH for Ghidra, JADX, firmware and JavaScript analysis
  • Per-target tools on PATH as needed: JADX, adb, a Chrome-family browser, tshark, Binwalk/Unblob, WABT, pwntools, GDB, Rizin

Node.js 22.x (22.23.4 or later), 24.x (24.22.1 or later) or 26.12.1+, with npm. SQLite inspection needs Node 24.15+ or 26+. Native binary analysis needs Hopper, Ghidra 12.1.x with JDK 21+, IDA, or Kuna installed separately. For Kuna, set REA_KUNA_COMMAND to the absolute path of the kuna executable. On Linux, install your distribution's procps or procps-ng package so a compatible ps is on PATH, or Ghidra, JADX, firmware and JavaScript analysis fail. Frida tools use the optional frida 17.23.2 npm dependency that npm installs alongside. REA installs none of the helper tools and no Frida server on devices.

Limits

  • Platform ELF layout, EVM bytecode and recorded crashes need Linux x64; firmware, packet and signal recordings, GDB and Rizin debugging are Linux only; process capture is Linux or macOS.
  • Early release Ghidra on Windows is an experimental, read-only mode.
  • Platform Kuna does not run on Windows yet and takes only ELF and thin Mach-O files (x86-64, AArch64, ARM); PE and universal Mach-O are refused.
  • Size cap Tool input schemas are compact by default, at most 13 KiB each; REA_MCP_INPUT_SCHEMA_PROFILE=full advertises the complete schemas.
  • Limit REA_MCP_OUTPUT_SCHEMA_PROFILE takes full or off in the published package. The compact value the main README mentions is not yet released.
  • Size cap Responses are bounded by the 10 MiB stdio receive buffer unless REA_MCP_MAX_RESPONSE_BYTES sets a larger budget.
  • Limit Ghidra startup times out after 330 s and Hopper after 120 s by default; large binaries may need the timeout settings raised.
  • Limit Metadata edits made in Ghidra sessions are discarded on close.
  • Limit Running an exported practice environment needs AgentEnv and Docker, which REA does not install.

Many target types are limited to particular hosts: ELF layout, EVM bytecode and recorded crashes need Linux x64; packet and signal recordings, firmware and process capture are Linux or Linux/macOS only. Ghidra on Windows is an experimental, read-only mode. Very large tool catalogs can exceed some providers' schema size caps (kimi-cli is named); a compact schema profile exists for that. Large binaries may need longer provider startup timeouts. Metadata edits made in Ghidra sessions are discarded on close. Features merged after the latest npm release are not yet in the package.

Who it suits

Suits developers and security researchers on Linux or macOS who already have Hopper, Ghidra, IDA or Kuna (or only need the JavaScript, .NET, Go, Rust and APK paths) and want an agent to inspect apps, binaries or web pages locally with the evidence kept alongside each finding. It runs on your machine with no account. It is a heavy install with over 200 tools and many optional external programs, and its debugging and Frida tools run code inside targets. Someone who only needs one disassembler's features may prefer that tool's own integration. REA's docs point to an optional native MCP bridge in IDA and to JEB's own MCP client, which REA can also connect to.

Tools 59 of 230

39 only read, 14 change things, 6 can delete or overwrite.

binary_session
Reports the current target, analysis provider, which tools are usable now and server identity, without starting analysis.
open_binary
Opens a local executable, app bundle, archive, JavaScript file, source map, plist or analysis database as the session target, choosing a disassembler provider.
close_binary deletes
Closes the active target and its provider processes, optionally saving an analysis snapshot first; unsaved session state is dropped.
binary_overview
Gives a native binary's metadata, segments and counts of procedures and strings.
analyze_function
Returns decompiled pseudocode, assembly, calls, references and strings for one native function.
search_procedures
Finds native procedures by name.
list_strings
Lists strings found in the open binary.
find_xrefs_to_name
Finds cross-references to a named symbol.
build_call_path
Works out call paths between functions in a native binary.
read_bytes
Reads raw bytes from mapped memory of the open binary.
annotate_native_function deletes
Renames a function and edits its comments in the analysis session, returning refreshed analysis.
set_addresses_names deletes
Names one or more addresses in the analysis session, reporting success per address.
inspect_binary_layout
Reports ELF sections, segments, symbols, relocations and mitigation candidates offline.
inspect_native_load_image
Measures how a native image maps into memory.
trace_dylib_resolution
Follows how a Mach-O binary's dynamic libraries resolve.
inspect_go_binary
Statically reads Go build and symbol data from an ELF, PE or Mach-O file without a Go install.
inspect_rust_binary
Statically reads Rust build traces from an ELF, PE or Mach-O file.
inspect_pe_imports
Lists a Windows PE file's imported and delay-loaded DLLs, ordinals and IAT addresses, with its import hash.
inspect_apple_ips
Reads an Apple .ips crash report: threads, loaded images, registers and crash class.
inspect_kernel_module
Reads a Linux kernel module's .modinfo keys, symbol version CRCs and signature trailer.
inspect_with_objdump
Runs a caller-installed GNU objdump on a file, for disassembly or DWARF, and keeps the output as evidence.
execute_rizin_command
Runs one Rizin command against a local file and records the output.
start_gdb_session changes
Starts a persistent GDB session on Linux.
gdb_console changes
Sends a command to a running GDB session, which can run and change the debugged program.
instrument_with_frida changes
Attaches Frida to a process and runs caller-written instrumentation.
load_frida_script changes
Loads a JavaScript instrumentation script into a Frida session.
observe_native_calls changes
Launches the open Mach-O under LLDB and records entries into chosen functions or Objective-C methods.
inspect_artifact
Inventories an archive or application package, with file digests and structure.
extract_artifact changes
Extracts selected files from an archive or package into a fresh temporary folder.
project_apple_application_graph
Inventories an IPA, .app, ZIP or DMG's bundles and roles without running anything.
inspect_wasm_artifact
Validates a WebAssembly file and decodes its sections and imports/exports with a caller-supplied WABT.
inspect_sqlite_database
Reads a local SQLite database or WAL snapshot.
analyze_javascript_application
Statically maps modules, imports, source maps, routes, IPC and native add-ons in a JavaScript or Electron app folder or ASAR.
trace_application_feature
Follows a literal value through every reachable part of a JavaScript application graph.
compare_application_versions
Compares two versions of an application and reports what changed.
list_electron_targets
Lists debuggable pages of a running Electron app.
capture_electron_scenario deletes
Runs a scripted scenario against an Electron app and records what happens.
inspect_web_page
Reads a live page's structure and scripts.
analyze_web_bundle
Captures a page's JavaScript and derives its chunk graph, routes, endpoints and vendor fingerprints.
observe_web_session
Records network and script activity on a page for a set time while the user operates it.
inspect_web_network_capture
Reads a saved HAR or SAZ network capture: requests, responses and payloads.
export_environment_bundle changes
Writes a replayable environment folder, built from recorded web API traffic, that an agent can practise tasks in.
discover_webmcp_tools
Lists WebMCP tools a page registers, without calling them.
inspect_managed_artifact
Reads .NET assembly metadata and CIL instructions.
inspect_android_package
Reads an APK's manifest and structure using JADX.
inspect_android_method
Returns a decompiled method from an APK.
search_android_classes
Searches the classes of an APK.
list_adb_devices
Lists Android devices and emulators visible to adb.
install_adb_package changes
Installs an APK on an attached Android device.
uninstall_adb_package deletes
Removes an app from an attached Android device.
push_adb_file changes
Copies a file onto an attached Android device.
start_adb_app changes
Starts an app on an attached Android device.
decompile_jeb_item
Gets pseudo-code for a type or method from a running JEB client.
extract_firmware changes
Extracts a firmware image with Binwalk or Unblob.
inspect_recorded_crash
Reads a recorded Linux crash: threads, registers and signals.
capture_process_scenario changes
Runs a chosen command in a terminal and records its output, interactions and file changes.
record_unknown changes
Records an open question in the session's evidence.
export_evidence_bundle deletes
Writes the session's evidence to a local file.
import_evidence_bundle changes
Loads a saved evidence bundle into the session as data.

Similar servers