Red Harness
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., "@Red Harnessopen C:\samples\target.exe and decompile main"
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.
Red Harness
An evidence-bound static reverse-engineering harness for binaries you own or are authorized to test.
It is an MCP server (rh mcp, stdio) with 14 tools: static analysis through an IDA or Ghidra engine
(functions, strings, xrefs, decompile, disassemble, raw byte and raw string reading), controlled execution in Windows Sandbox when the
scope manifest allows it, a sandboxed compute tool for the model's own Python, and fix verification. Every claim a
model records has to cite evidence ids, quotes and addresses; a claim verifier (version 17) checks them against the
evidence ledger and rejects or downgrades claims it cannot support. Behavior claims are proven only by a controlled run,
not by a value appearing in code. Whatever was not examined is reported as unknown, never as "clean".
Design notes are in docs/design/, the tool surface is in docs/usage-mcp.md and docs/tool-design.md, and the
privacy rules for tracked files are in docs/privacy-guard.md. Third-party attributions: NOTICE.
Editions
This repository is the Core edition (Apache-2.0). Pro is a separate commercial edition. The MCP tool surface (14 tools) is the same in both; Pro adds capabilities behind the same tools and a few extra commands.
Core (this repo, Apache-2.0) | Pro (commercial) | |
Static MCP tools (functions, strings, xrefs, decompile, disassemble, | yes | yes |
Evidence ledger, claim verifier, report | yes | yes |
Ghidra and IDA engines | yes | yes |
| yes | yes |
Protection diagnosis (including vendor attribution) | yes | yes |
Dynamic observation ( | no | yes |
Job bundle export and import ( | no | yes |
Vendor audit pack (driver facts in | no | yes |
Evaluation and benchmark suite ( | no | yes |
Kernel / Phase 2 lab | no | yes |
Studio UI | no | planned |
In the Core build the Pro-only entry points answer in a fixed way: run_controlled with observe returns
DYNAMIC_BACKEND_UNAVAILABLE ("premium feature not included in this build"), the Pro CLI commands print a premium notice and
exit with status 2, and the driver facts in target_open are {"available": false, "note": "premium feature not included in this build"}.
To ask about Pro: contact: see repository profile.
Related MCP server: Antardrishti
Requirements
Windows 10 or 11, 64-bit (developed and tested on Windows 10 Pro). The server, the engines and every static tool run on any edition.
Python 3.12 (
py -3.12). The only runtime dependency is themcpSDK, pinned and installed by pip.One analysis engine: Ghidra (free) or IDA Pro (see "Engines"). No MCP tool works without an engine, because
target_openopens the target through it.Windows Sandbox, only for the two tools that run code (
run_controlledandcompute). Windows Sandbox is part of Windows 10/11 Pro, Enterprise and Education (not Home); it needs hardware virtualization enabled in the firmware and the optional Windows feature "Windows Sandbox" switched on (restart required). Without it those two tools returnSANDBOX_UNAVAILABLEand everything else keeps working. The sandbox gets 2048 MB of memory by default (RH_SANDBOX_MEMORY_MB, 512 to 16384).computealso needs a pinned embeddable CPython, installed once:rh compute-runtimeprints the download address and the expected SHA-256, thenrh compute-runtime install python-3.12.10-embed-amd64.zip.
Memory: the Ghidra engine runs a JVM with a 4 GB heap (6 GB job limit); the IDA engine is limited to 6 GB as well.
Engines
Every MCP tool needs an analysis engine; choose one with rh mcp --engine ghidra or rh mcp --engine ida. Without the flag
the server starts the IDA engine. A requested engine that is not usable stops the server with the reason on stderr and in the
error answer to the client's initialize request; there is no silent fallback to the other engine.
Ghidra (free).
Ghidra 12.1.3 (the version this project is tested with): download the zip from https://github.com/NationalSecurityAgency/ghidra/releases and extract it anywhere.
A JDK 21 (for example Eclipse Temurin 21), with
javaonPATHorJAVA_HOMEset. Check withjava -versionin a new terminal.Tell the server where Ghidra is: set
RH_GHIDRA_DIR(orGHIDRA_INSTALL_DIR) to the extracted folder, the one that containssupport\analyzeHeadless.bat. Without either variable the server looks forghidra_*on your Desktop, forghidra*in your user folder and in%ProgramFiles%, and forC:\ghidra*(newest name first).Start the server with
rh mcp --engine ghidra. The first open of a target runs Ghidra's full analysis once (minutes for a large binary; about two and a half minutes for a 200 KB system program on a desktop PC); the result is cached under the data root and later opens and queries reuse it.
IDA. IDA 9.x with a licence that includes idalib (IDA's headless library): the Pro editions. IDA Home and Classroom are listed by Hex-Rays as shipping idalib since 9.4; not yet tested by us. The Python package idapro that
talks to it is deliberately not a dependency of this project (its publisher on PyPI is unverified); install it from the wheel in
your IDA installation into the same virtual environment as redharness:
.venv\Scripts\pip install "<IDA>\idalib\python\idapro-0.0.9-py3-none-any.whl"<IDA> is for example C:\Program Files\IDA Professional 9.4. Use the exact file name you find in that folder (dir "<IDA>\idalib\python");
pip does not accept a * wildcard there. Do not run py-activate-idalib.py. The IDA folder is found automatically under
%ProgramFiles%\IDA Professional* or from RH_IDA_DIR / IDADIR. The engine runs IDA in a separate Python process; if that
Python is not the one with idapro, set RH_IDA_PYTHON to it. Without idapro, target_open fails with TOOL_MISSING and
a message that says exactly this.
What works without any engine: none of the 14 MCP tools. The standalone scripts in scripts/ need no engine and execute
nothing (see "Standalone static CLIs"), and so does rh compute-runtime.
Quickstart
This walk-through uses Ghidra and runs the same calls a model makes, from a small Python client that ships with the project.
Use a program you built or are authorized to analyze; below it is C:\path\to\target.exe.
py -3.12 -m venv .venv
.venv\Scripts\pip install -e .
set RH_GHIDRA_DIR=C:\path\to\ghidra_12.1.3_PUBLIC(set is for cmd.exe; in PowerShell use $env:RH_GHIDRA_DIR = "C:\path\to\ghidra_12.1.3_PUBLIC". Skip it if Ghidra sits in one
of the folders listed under "Engines".)
SHA-256 of the target, lowercase (the manifest rejects upper case):
powershell -NoProfile -Command "(Get-FileHash 'C:\path\to\target.exe' -Algorithm SHA256).Hash.ToLower()"Write the scope manifest
scope.jsonnext to it. The hash binds the manifest to this exact file;basisisownerorauthorized-test;allowed_operationslists what the session may do (staticis the minimum;run_controlledandcomputemust be added explicitly); an optional"expires": "2027-12-31"limits its lifetime.{ "schema": "rh.scope/1", "target_sha256": "<the lowercase hash from step 1>", "authorization": { "declared_by": "Your Name / Your Company", "basis": "owner", "statement": "This binary belongs to us; static analysis is authorized." }, "allowed_operations": ["static"] }Run the client (first open: Ghidra analyses the target once):
.venv\Scripts\python scripts\quickstart_client.py C:\path\to\target.exe scope.json --engine ghidraIt starts
rh mcp --engine ghidra, lists the tools and makes five calls:target_open(target_path, manifest_path),strings(limit=20, detail="full"),claim_add(kind="observation", text, evidence_ids, atoms)quoting the first string it got back,coverage()andreport_build(). It ends with the path of the Markdown report, under<data root>\jobs\<job id>\report\. A model client makes exactly these calls with the arguments named above; theclaim_addatoms are{"type":"quote","evidence_id":"ev_...","text":"<string>"}and{"type":"address","evidence_id":"ev_...","value":"0x..."}.
Connect an MCP client
Use absolute paths. The server needs the engine settings in its environment.
Claude Code: copy .mcp.json.example to .mcp.json in your project folder, replace the placeholder paths, start Claude Code and
approve the red-harness server with /mcp.
{
"mcpServers": {
"red-harness": {
"type": "stdio",
"command": "C:\\path\\to\\red-harness\\.venv\\Scripts\\rh.exe",
"args": ["mcp", "--engine", "ghidra"],
"env": {"RH_GHIDRA_DIR": "C:\\path\\to\\ghidra_12.1.3_PUBLIC", "RH_DATA_ROOT": "C:\\path\\to\\RedHarnessData"}
}
}
}OpenAI Codex CLI (~/.codex/config.toml):
[mcp_servers.red-harness]
command = 'C:\path\to\red-harness\.venv\Scripts\rh.exe'
args = ["mcp", "--engine", "ghidra"]
env = { RH_GHIDRA_DIR = 'C:\path\to\ghidra_12.1.3_PUBLIC', RH_DATA_ROOT = 'C:\path\to\RedHarnessData' }Any other stdio MCP client: run the command C:\path\to\red-harness\.venv\Scripts\rh.exe with the arguments mcp --engine ghidra
and the environment variables above. The protocol runs over the process's stdin and stdout (one JSON-RPC message per line), so
nothing else may write to stdout. scripts/quickstart_client.py is a complete example client built on the official mcp SDK.
The server side was verified with that SDK client; the client entries above follow those clients' documented formats.
If a client only says "connection closed", start the same command in a terminal: the reason is printed on stderr.
Development and tests
Install with the test extra and run the default suite (no engine and no Windows Sandbox needed):
py -3.12 -m venv .venv
.venv\Scripts\pip install -e .[dev]
.venv\Scripts\python -m pytest -m "not heavy"heavytests need a real Ghidra/IDA or Windows Sandbox; they are not part of the default run.Unit tests point
RH_DATA_ROOTat a temp directory;RedHarnessDataor any other directory need not exist beforehand.Real Windows Sandbox tests run only with
RH_ALLOW_REAL_SANDBOX=1(otherwise skipped).Engine paths and the
idaproinstall are described under "Engines" above and indocs/usage-mcp.md.
Standalone static CLIs
Read-only helper in scripts/ that needs no engine, no Windows Sandbox and executes nothing: file_strings.py (it prints its usage in its module docstring).
Scope
Use it only on targets you own or are explicitly authorized to test. The scope manifest is required, binds the target
SHA-256 and lists the effects (for example run_controlled, compute) a session may use.
This server cannot be deployed
Maintenance
Related MCP Connectors
Pre-execution governance for AI agents. Deterministic PASS/FAIL/REVIEW verdicts, replayable proof.
Policy-aware AI execution, verification, cost, and trajectory evidence for agents.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
AI agents post reproducible tests, answer questions and verify each other's results.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables agents to reverse-engineer software across native binaries, managed code, Electron apps, websites, and live runtime behavior, returning findings linked to the evidence and limitations behind each conclusion. It also maintains a durable workspace where those behaviors can be inspected, questioned, compared against real execution, and exported as runnable handoffs.415,576 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to locally analyze and reverse engineer binaries through a compact 12-tool MCP interface for triage, function discovery, disassembly/decompilation, cross-references, strings/imports, call graphs, memory reads, annotations, and binary diffs.1MIT
- AlicenseNot gradedqualityNot gradedmaintenanceConnects AI agents to reverse-engineering tools that inspect native binaries, JavaScript/Electron apps, .NET assemblies, websites, and runtime behavior without source code. Returns pseudocode, references, and evidence so agents can explain how a feature works or reimplement it.415,576 npmMIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI agents to inspect and reverse engineer local software targets, including binaries, JavaScript/Electron apps, .NET assemblies, and websites, returning evidence-backed findings for understanding and building similar features.415,576 npmMIT