Skip to main content
Glama

rea-light-mcp

Reverse-engineer shipped software with your AI agent โ€” through 4 tiny tools strict models accept, with all 139 REA capabilities behind them.

npm version License: MIT Node.js MCP Tools

Demo: live session through rea-light-mcp

Abstract. Full reverse-engineering servers expose ~139 tools with deeply nested settings (~1.9 MB of schemas, nesting up to depth 14). Strict AI providers (Muse Spark / Gemini / Moonshot enforce a 10-level schema cap; Moonshot additionally caps ~14 KB per schema) reject the entire request when a single tool breaks the limits โ€” even a plain hi. rea-light-mcp is a facade: it shows the model 4 flat tools (~1.5 KB total, depth โ‰ค 2, zero references) and keeps the complete REA catalog server-side behind one persistent REA process. Same server, same validation, same results โ€” no more refusals. If you can ask a question in plain English, you can reverse-engineer with this.

๐ŸŒ Live interactive page + quiz: rea-light-mcp home ยท preview.html ยท docs/preview.html ยท ๐Ÿ“ฆ npm ยท ๐Ÿ’ป GitHub

Contents

Related MCP server: Ghidra Headless MCP

Quick start

Run it right now โ€” no install:

npx -y rea-light-mcp

Point your agent at it (OpenCode ~/.config/opencode/opencode.jsonc):

"rea-light": {
  "type": "local",
  "command": ["npx", "-y", "rea-light-mcp"],
  "enabled": true,
  "timeout": 120000
}

Then ask your agent:

Using rea_investigate, open /usr/bin/ls and tell me what kind of binary it is.

Disable the full rea server in the same file ("enabled": false) โ€” that is the catalog strict models reject. Restart the agent session after editing.

๐ŸŒฑ Beginner guide โ€” read this and you are a professional

1. What is MCP? A standard plug for AI assistants. A "server" is a small program that gives your assistant new skills, called tools. You configure it once; every chat after that can use it.

2. What is reverse engineering? Learning how a finished program works without its source code: what each part does, where data flows, how files are built. Only ever use it on software you own or are allowed to examine.

3. Why does the "light" version exist? The full REA toolset is so large (~139 tools) that strict AI models refuse to talk while it is connected โ€” one oversized tool blocks everything. This package shows the model 4 simple tools and keeps the other 139 behind a curtain. Same power, no refusal.

4. The everyday loop has 3 steps. rea_search finds what REA can do ("decompile", "apk", "firmware") โ†’ rea_describe shows one tool's settings as plain text โ†’ rea_call runs it. Or skip all three: rea_investigate takes a file plus one question and returns the answer with evidence ids.

5. What you get back. Short markdown answers with evidence ids you can follow up on โ€” never a wall of raw data. Deep disassembly needs professional engines (Ghidra, Hopper, IDA) installed separately; opening, fingerprinting and metadata work with nothing extra.

Finish the 8-question quiz on the live page and you will know more than most interview candidates.

Demo

Real session, recorded against the published package:

Demo: live session through rea-light-mcp

Interactive version with screenshots: home ยท preview.html ยท docs/preview.html (screenshot). Package page: npm (screenshot).

Features

  • Passes strict models. 4 advertised tools, ~1.5 KB schemas, depth โ‰ค 2, zero $ref โ€” 9ร— under per-schema size caps, 5ร— under depth caps.

  • Loses nothing. All 139 REA capabilities stay callable with identical arguments, validation and output.

  • The string trick. Complex settings travel as one flat text field (args_json); real checking happens inside, unchanged.

  • Session-preserving. One persistent REA process behind the hub: open โ†’ inspect โ†’ evidence โ†’ close works across calls.

  • Read-only by default. Rename/comment tools stay blocked until you opt in with REA_LIGHT_ALLOW_WRITE=1.

  • Markdown answers. Truncated, evidence-linked output instead of megabyte dumps.

  • Zero new engines. No Ghidra/Hopper/IDA installs, no providers to configure โ€” the hub adds no dependencies beyond REA itself.

  • Two runtime deps only (@modelcontextprotocol/sdk, zod), Node โ‰ฅ 18.

The 4 tools

Tool

Input (all flat)

What

rea_search

query:string, domain?:enum, limit?:1-10

Keyword search over the cached REA catalog, top briefs (name + one line). No heavy schemas.

rea_describe

name:string

One tool's full settings as markdown text (never as a schema, so limits never trigger).

rea_call

name:string, args_json:string

Run any REA tool; complex arguments travel as a string, validated server-side.

rea_investigate

target:string, question:string, depth?:enum

Pinned one-shot entry: open + inspect, final markdown only.

Domains for rea_search: native, managed, js, web, mobile, runtime. Depth for rea_investigate: quick, standard, deep.

How it works

flowchart LR
    A[Your agent<br/>sees 4 tools ยท ~1.5 KB] --> B[rea-light-mcp hub<br/>search ยท describe ยท call]
    B --> C[Full REA process<br/>139 tools ยท same validation]
    C --> B
    B --> A
  1. On first use the hub starts one REA server process and caches its tool list (keyword index, rebuilt if the catalog changes).

  2. rea_search matches names/descriptions (top 5 by default) and returns briefs โ€” full schemas never enter the model's context.

  3. rea_describe renders one tool's schema as text output (providers check input schemas strictly, text leniently).

  4. rea_call(name, args_json) parses the JSON string, validates the shape, forwards to REA, truncates the result to markdown (~6,000 chars) with evidence ids for follow-ups.

  5. rea_investigate runs open โ†’ inspect internally and returns only the final answer โ€” intermediate evidence never crosses the model boundary.

Full REA vs rea-light-mcp

Full REA

rea-light-mcp

Advertised tools

139

4

Catalog size

~1.9 MB

~1.5 KB

Max schema depth

14 (+ recursive refs)

โ‰ค 2, zero refs

Strict models (Spark/Gemini/Moonshot)

rejected on every message

accepted

Capabilities reachable

139

139 (same)

Validation / results

canonical

identical (same server)

Calls per task

1

1โ€“3 (1 via rea_investigate)

Write actions

allowed by engine

blocked by default, opt-in

Configure (OpenCode, Claude, Cursor)

OpenCode ~/.config/opencode/opencode.jsonc:

"rea":       { "type": "local", "command": ["npx", "-y", "rea-agents@6.4.0", "mcp"], "enabled": false },
"rea-light": { "type": "local", "command": ["npx", "-y", "rea-light-mcp"], "enabled": true, "timeout": 120000 }

Claude Code / Cursor / Windsurf (mcp.json-style):

{
  "mcpServers": {
    "rea-light": { "command": "npx", "args": ["-y", "rea-light-mcp"] }
  }
}

Restart the agent session after editing. First run downloads packages โ€” give it a minute.

Environment variables

Variable

Default

Notes

REA_COMMAND

npx -y rea-agents@6.3.0 mcp

Which REA server runs behind the hub (pinned measured 139-tool release).

REA_TIMEOUT_MS

120000

Per-call timeout; stdio serves calls one at a time.

REA_LIGHT_ALLOW_WRITE

unset (read-only)

Set to 1 to allow annotate_* / set_* write-path tools.

Recipes

Fingerprint a binary:

Using rea_investigate, open /usr/bin/ls and tell me format, architecture and sha.

Find how to decompile:

Using rea_search, find decompile capabilities. Then rea_describe analyze_function. Then rea_call it on my opened target.

Check what's available on this machine:

Using rea_call with name binary_session and args_json {}, show me which operations are available and why some are not.

Compare two builds (needs two evidence ids from earlier calls):

Using rea_call compare_functions with both evidence ids, what changed?

Who uses it, for what

  • App developers โ€” "How does this feature work in the app I admire?" Trace it, see the evidence, rebuild it cleanly in your own project.

  • Security learners โ€” Inspect binaries you own; practice reading assembly and metadata with an AI tutor that shows its sources.

  • Students โ€” From "what is a binary?" to reading call graphs; the quiz takes you from zero to pro.

  • Strict-model users โ€” Anyone whose model rejects huge tool catalogs; 4 flat tools pass every known depth/size gate.

  • Agent builders โ€” A stable 4-tool surface that never grows: REA can add 30 tools and your prompts don't change.

For lawful research, education and interoperability on software you own or are authorized to examine.

Troubleshooting

hi fails with "JSON schema exceeds the maximum nesting depth of 10 levels" โ€” the full rea server is still enabled. Set "enabled": false on rea, keep rea-light enabled, restart the session.

First call is slow / times out โ€” npx downloads rea-light-mcp + rea-agents on first run. Re-run; later calls reuse the cache. The 120000 timeout in config covers this.

provider_unavailable / needs Ghidra, Hopper, IDA โ€” deep disassembly needs professional engines you install yourself; this package never installs them. Opening, fingerprinting and metadata need nothing extra.

needs REA_PWNTOOLS_PYTHON ... pwntools โ€” layout inspection needs a caller-supplied Python with pwntools 4.15.0 + pyelftools + Unicorn. Same rule: bring your own engine.

Write tool blocked โ€” set REA_LIGHT_ALLOW_WRITE=1 in the server environment to allow rename/comment tools.

Development

git clone https://github.com/M0-AR/rea-light-mcp.git
cd rea-light-mcp
npm install
npm run build        # tsc -> dist/
npm run typecheck    # strict, must pass
npm run check:schemas # catalog guard: 4 tools, depth โ‰ค 2, < 10 KB total

Verified end-to-end before release: build + typecheck + schema guard + stdio initialize/tools/list + live rea_search/rea_describe/rea_call against real REA + ELF open/evidence/close lifecycle + fault injection (bad JSON, unknown tool, write-block) โ€” 17/17 checks green.

FAQ

Is this a replacement for REA? No โ€” it is REA through a smaller door. Same server, same checks, same results. On models without strict limits, full REA works too.

Why not just 5 flat domain tools? Flat tools re-introduce deep schemas or drop capabilities. The hub keeps all 139+ with constant catalog bytes โ€” the dispatcher + progressive-discovery consensus.

Does it upload my files? No. Everything runs on your machine; the model provider only sees the text you discuss.

Can the catalog grow? REA can add tools freely โ€” the hub's 4-tool surface never changes. Re-run rea_search to discover newcomers.

License

MIT โ€” see LICENSE. Built on REA (MIT), which retains its own notices; professional engines (Ghidra, Hopper, IDA) need their own licenses.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Server that ingests Swagger/OpenAPI specifications and Postman collections, providing just 4 strategic tools that allow AI agents to dynamically discover and interact with APIs instead of generating hundreds of individual tools.
    3
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A headless Ghidra server that enables AI agents to perform deep reverse-engineering tasks such as disassembly, decompilation, and patching via the Model Context Protocol. It supports extensive automation of analysis workflows in sandboxed environments through a catalog of over 200 specialized tools.
    191
    GPL 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 7 reverse-engineering tools (hexdump, disasm, strings, xref, Ghidra decompilation, angr symbolic execution, OLLVM deobfuscation) for LLM agents like hermes-agent and Claude Desktop.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to query a repository's verified semantic model, including capabilities, ownership, contracts, constraints, impact, health, and verification status, without re-deriving project facts. It exposes read-only tools for inspecting, reasoning about, and verifying the provenance-tracked surface.
    2
    Apache 2.0