Enables LLMs to perform binary analysis using Ghidra in headless mode, extracting functions, pseudocode, structs, and enums from binaries for interactive reverse-engineering.
This project lets you use Ghidra in headless mode to extract rich binary analysis data (functions, pseudocode, structs, enums, etc.) into a JSON file, and expose it to LLMs like Claude via Model Context Protocol (MCP).
It turns Ghidra into an interactive reverse-engineering backend.
ghidra_context.json
list_functions()
, get_pseudocode(name)
list_structures()
, get_structure(name)
list_enums()
, get_enum(name)
list_function_definitions()
, get_function_definition(name)
mcp
CLI (install via pip install mcp
)brew install --cask temurin@21
Then set it:
export JAVA_HOME=$(/usr/libexec/java_home -v 21) echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 21)' >> ~/.zshrc source ~/.zshrc
Check it:
java -version
Should say: openjdk version "21.0.x"...
Download and extract Ghidra 11.3.1
cd ghidra_mcp gcc -Wall crackme.c -o crackme
mcp install main.py
This registers the MCP server so Claude or other clients can access it.
mcp dev main.py
This enables hot reload and developer logs.
Tool | Description |
---|---|
setup_context(...) | Run Ghidra on a binary |
list_functions() | All functions |
get_pseudocode(name) | Decompiled pseudocode |
list_structures() | All structs |
get_structure(name) | Details of a struct |
list_enums() | All enums |
get_enum(name) | Enum values |
list_function_definitions() | All function prototypes |
get_function_definition() | Return type & args |
Analyze the binary file located at using Ghidra installed at . First, set up the analysis context using both paths, then list all functions in the binary. Examine the main entry point function and provide a high-level overview of what the program does.
➡️ Fix: Install Java 21, not 17 or 24:
brew install --cask temurin@21 export JAVA_HOME=$(/usr/libexec/java_home -v 21)
spawn uv ENOENT
(Claude Desktop can't find your UV binary)➡️ Claude can't locate uv
by name. To fix:
which uv
Example output:
/Users/yourname/.cargo/bin/uv
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
{ "mcpServers": { "ghidra": { "command": "/Users/yourname/.cargo/bin/uv", "args": [ "--directory", "/Users/yourname/Documents/ghidra_mcp", "run", "main.py" ] } } }
The operation couldn’t be completed. Unable to locate a Java Runtime.
➡️ Fix: Java not installed or JAVA_HOME
is unset. Follow setup instructions above.
File | Purpose |
---|---|
main.py | MCP server with tools |
export_context.py | Ghidra script that extracts JSON |
crackme.c | Sample C binary |
crackme | Compiled binary to test |
Discover shared experiences
Shared threads will appear here, showcasing real-world applications and insights from the community. Check back soon for updates!