rea-light-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rea-light-mcpopen /usr/bin/ls and tell me what kind of binary it is"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.

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: Enlace
Quick start
Run it right now β no install:
npx -y rea-light-mcpPoint 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:

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 |
|
| Keyword search over the cached REA catalog, top briefs (name + one line). No heavy schemas. |
|
| One tool's full settings as markdown text (never as a schema, so limits never trigger). |
|
| Run any REA tool; complex arguments travel as a string, validated server-side. |
|
| 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 --> AOn first use the hub starts one REA server process and caches its tool list (keyword index, rebuilt if the catalog changes).
rea_searchmatches names/descriptions (top 5 by default) and returns briefs β full schemas never enter the model's context.rea_describerenders one tool's schema as text output (providers check input schemas strictly, text leniently).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.rea_investigateruns 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 |
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 |
|
| Which REA server runs behind the hub (pinned measured 139-tool release). |
|
| Per-call timeout; stdio serves calls one at a time. |
| unset (read-only) | Set to |
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 totalVerified 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.
Available Tools
4 toolsrea_callA
Run any REA tool by name. Pass arguments as a JSON object string. Example args_json: {"document":"main","address":"0x1000"}. Get the schema via rea_describe first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact REA tool name from rea_search | |
| args_json | Yes | JSON object string with the tool arguments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the disclosure burden. It conveys the key mechanic (arbitrary tool invocation with opaque JSON args) but never warns that it can trigger mutation/destructive underlying tools, nor how errors from the wrapped tool surface. That's a meaningful gap for a proxy that can invoke anything.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the calling convention, then the prerequisite. The example JSON is concrete and earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what a call returns, but it never says the response is the wrapped tool's output or how failures are reported. For a two-required-param dispatcher this is adequate but leaves the agent guessing on result handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents both parameters, including that 'name' comes from rea_search. The inline example of args_json is a small value-add but adds no syntax rules, quoting caveats, or nesting guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run any REA tool by name') and immediately clarifies the calling convention, which distinguishes it from the lookup siblings rea_search and rea_describe. An agent knows this is the generic dispatcher without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the workflow: fetch the schema via rea_describe first, and the schema names rea_search as the source of valid tool names. It doesn't say when NOT to use this (e.g. prefer a direct tool if available), so it falls short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rea_describeA
Get one REA tool's full input schema and example as markdown text. Use after rea_search, before rea_call.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact REA tool name from rea_search |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the output is markdown containing a full input schema and example, which implies a read-only retrieval, but it does not explicitly state read-only behavior, error handling, or any other operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and output, followed by precise workflow placement. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one fully documented parameter and no output schema, the description adequately explains what is returned: the full input schema and example as markdown text. Minor gaps include failure behavior when the tool name is not found, but the core context is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter is already documented as 'Exact REA tool name from rea_search.' The description adds no parameter-specific meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get one REA tool's full input schema and example as markdown text.' It clearly distinguishes the deliverable from search or call operations, though it does not explicitly differentiate from rea_investigate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit sequencing: 'Use after rea_search, before rea_call.' This tells the agent exactly where the tool fits in the workflow and when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rea_investigateA
Investigate a target with one question (e.g. how does search work). Opens the target, runs the right REA inspection, returns markdown summary with evidence ids. Prefer this over manual rea_search for first contact.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Effort level (default standard) | |
| target | Yes | Absolute local path to binary, app dir, asar, apk, or capture | |
| question | Yes | One question, e.g. how does clipboard sync work |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose the return shape (markdown summary with evidence ids) and that the tool autonomously picks an inspection routine, but it says nothing about side effects of "opens the target" (does it launch/execute a binary?), cost or latency of the depth levels, or whether any state is written. Those gaps matter for a tool whose input is a local executable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and ending with the selection rule. The inline question example duplicates the schema's example, a small redundancy, but there is no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description does the right work: it explains the return value (markdown plus evidence ids) and the first-contact positioning. Remaining gaps around side effects of opening a target and depth tradeoffs are the only things an agent might still need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents target, question, and depth (including its enum and default). The description only reinforces the single-question framing; it adds no guidance on choosing quick vs standard vs deep in terms of cost or output depth, so it sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Investigate a target with one question") and then spells out the mechanism: opens the target, runs the appropriate REA inspection, returns a markdown summary with evidence ids. It explicitly distinguishes itself from the sibling rea_search, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Prefer this over manual rea_search for first contact" gives an explicit alternative and the condition that selects it. It does not cover when to prefer rea_describe or rea_call instead, so the routing guidance is clear but incomplete across the full sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rea_searchA
Search REA capabilities by keyword. Returns top matching tool names with one-line descriptions (no full schemas). Call rea_describe for one tool, then rea_call to run it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results 1-10 (default 5) | |
| query | Yes | Keyword query, e.g. decompile, apk, electron, tracing | |
| domain | No | Optional domain filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the important behavioral trait that results are summary-level only ("no full schemas"), which prevents an agent from assuming it can invoke directly from search output. However, it says nothing about result ordering, truncation, or what happens when nothing matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each doing distinct work: what it searches, what it returns (and notably what it does not), and where to go next. Purpose is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain returns, and it does so concisely. Combined with full schema coverage on the three parameters and the stated follow-up path, an agent has what it needs to call this correctly; only empty-result behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: query, limit (1-10, default 5) and the six-value domain enum are all documented in the schema itself. The description adds no extra meaning about query syntax or domain semantics beyond the schema's own examples, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search REA capabilities by keyword") and immediately defines the return shape: tool names plus one-line descriptions, explicitly without full schemas. That return-shape clause separates it cleanly from rea_describe and rea_call without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call rea_describe for one tool, then rea_call to run it" makes this the entry point of an explicit discovery chain and names both alternatives. It stops short of stating a negative condition (e.g., skip this if you already know the exact tool name), which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
rea_call - First observed
rea_describe - First observed
rea_investigate - First observed
rea_search
TDQS
Scored across 4 tools
The three pipeline tools (search β describe β call) have clearly distinct roles, and descriptions state the ordering explicitly. The only real overlap is rea_investigate versus the manual pipeline, but the descriptions resolve it by declaring investigate the preferred first-contact path.
All four tools share a uniform `rea_` prefix followed by a single verb (search, describe, call, investigate). Predictable and immediately readable as a family.
Four tools is slightly thin in absolute terms, but for a gateway/meta-server that delegates the real surface to wrapped REA tools this is the right shape β each tool earns its place in the search-describe-call loop plus one shortcut.
Discovery, schema introspection, execution, and a one-shot investigation path are all covered, with no dead ends in the core workflow. Minor gap: there is no browse/list-all operation, so an agent without a good keyword cannot enumerate the catalogue.
Related MCP Connectors
Read-only search of 2,189 AI agent tools (MCP servers, x402 APIs) with daily automated trust scores.
A read-only verified record of agent-operable GTM tools: search, fetch, compare, track changes.
A registry of AI agent tools β MCP servers, APIs, CLIs, SDKs β kept current by automated ingestion.
Browser-local and CLI static evidence for deployed AI model artifacts.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceExposes read-only local analysis tools for source auditing, web traffic review, binary reverse engineering, exploit scaffolding, OSINT, and reporting via JSON-RPC over stdio, enabling LLMs to orchestrate evidence-based security workflows without executing targets or sending network requests.1MIT
- AlicenseNot gradedqualityCmaintenanceExposes four stdio tools that let an agent research an application's documented interface, produce a validated single-use plan, and execute read-only operations against public HTTP JSON APIs, static HTML/JSON/text sources, and host-configured CLIs. Runs in-process with no listening port, accounts, or model dependency, returning bounded results while keeping inputs and outputs inside a host-enforced research-plan-execute lifecycle.MIT
- AlicenseNot gradedqualityCmaintenanceExposes every command of the rea-agents CLI as dynamically generated, schema-driven MCP tools, letting clients reverse engineer binaries, JavaScript/Electron apps, .NET, WASM, EVM, SQLite and Android artifacts through natural language. Tool names and JSON Schemas are derived automatically from the CLI, so new rea releases add capabilities without code changes.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI coding agents to inspect and reverse-engineer large binaries through bounded stdio JSON-RPC 2.0 tools for graph queries, SSA facts, path solving, runtime grounding, and mod scaffolding.1AGPL 3.0