MCP server that exposes Hopper disassembler capabilities to LLMs via Claude Code (or any MCP client).
Claude/LLM <--stdio--> MCP Server <--file bridge--> Hopper Loader Script
(external) (runs inside Hopper)
The MCP server communicates with Hopper through JSON files in ~/.hopper_mcp/. No SIP disabling or special permissions needed.
cd hopper_mcp
pip install -e .Add to ~/.claude/claude_code_config.json:
{
"mcpServers": {
"hopper": {
"command": "hopper-mcp"
}
}
}- Open a binary in Hopper Disassembler
- Open Script Editor (Shift+Cmd+S)
- Load or paste
hopper_scripts/hopper_mcp_loader.py - Click Run
The loader will poll for commands. If Hopper supports addTimer(), it runs non-blocking. Otherwise it runs a blocking loop.
get_document_info— Document name, entry point, segment countlist_segments— All segments with addresses and sizeslist_procedures— All functions (optionally filtered by segment)get_disassembly— Disassembly at an addressget_decompilation— Pseudo-code for a functionread_bytes— Raw bytes at addressget_xrefs— Cross-references to/from an addresssearch_strings— Search string literalsget_current_selection— Currently selected address in Hopper UI
rename_symbol— Rename a label at an addressadd_comment— Add inline commentset_type— Set data type at address
- Timeout errors: Make sure the loader script is running inside Hopper
- "No document open": Open a binary in Hopper before running the loader
- Check
~/.hopper_mcp/commands/for stale command files (delete them if stuck)