ghidra mcp
Enables LLMs to perform binary analysis using Ghidra in headless mode, extracting functions, pseudocode, structs, and enums from binaries for interactive reverse-engineering.
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
➡️ 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 |