hexmux
Click on "Install 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., "@hexmuxdecompile function at 0x140001000"
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.
Hexmux
Hexmux runs task-specific IDAPython scripts in a selected IDA Pro database. It has three parts:
hexmux, an external command-line client;hexmux_plugin.py, a pure-Python IDA plugin that listens on one private Unix socket per IDA process.hexmux.domain_worker, a headless worker that owns an officialida_domain.Databasecontext.
There is no supervisor, background daemon, native helper, MCP server, TCP port, or UDP port. Hexmux currently supports macOS and Linux. Windows is not supported.
Install from a checkout
Install the CLI as an isolated uv tool:
uv tool install --editable .Install the IDA-side plugin with HCLI:
hcli plugin lint ./plugin
hcli plugin install ./pluginHCLI copies plugin/ida-plugin.json and plugin/hexmux_plugin.py into $IDAUSR/plugins/hexmux. It does not install the external hexmux command, which is why the uv and HCLI installation commands are separate. Restart IDA after installing the plugin.
For development without HCLI, copy both files in plugin/ into a hexmux directory below the active IDA user plugin directory. Typical locations are:
Linux: ~/.idapro/plugins/hexmux/
macOS: ~/Library/Application Support/IDA Pro/plugins/hexmux/If IDAUSR is set, use its plugins/ directory instead.
Related MCP server: IDA Pro MCP
Discover IDA processes
Once IDA loads the plugin, it creates a socket named with its process ID:
macOS: /private/tmp/hexmux-<uid>/<pid>
Linux: ${XDG_RUNTIME_DIR:-/run/user/<uid>}/hexmux/<pid>The containing directory has mode 0700 and each socket has mode 0600. HEXMUX_RUNTIME_DIR overrides the containing directory for both the CLI and plugin.
List live instances by querying every digit-named socket in that directory:
hexmux ps
hexmux ps --jsonhexmux list is an alias for hexmux ps. Stale or unrelated directory entries that do not answer a valid info request are ignored.
Open a headless IDA database
For a new input, Hexmux launches a Python worker and opens IDA in official library mode through ida-domain:
hexmux open firmware.bin
hexmux open firmware.bin --output /tmp/firmware.i64 --wait 120 --jsonThe idapro runtime normally discovers IDA through the configuration written by HCLI or IDA's py-activate-idalib.py. Use --ida-dir to override the installation for one worker process.
Hexmux always supplies an explicit output database path, so the source may reside on a read-only filesystem. --output selects the path directly. Without it, Hexmux derives a stable .i64 from the canonical source path under:
macOS: ~/Library/Caches/hexmux/databases/
Linux: ${XDG_CACHE_HOME:-~/.cache}/hexmux/databases/HEXMUX_DATABASE_DIR overrides the generated-output directory. Opening the same canonical source path again reuses its live Domain worker, or reopens the same cached IDB after that worker exits. Use --new-instance to create an independent IDB and worker intentionally:
hexmux open firmware.bin --new-instanceHexmux serializes concurrent launches with a file lock. The Domain worker also holds an exclusive ownership lock for the IDB throughout its lifetime, so two workers cannot open the same writable database.
Domain workers form a bounded local session pool. By default, a worker closes and saves its database after 30 minutes without an exec request, and at most four workers remain live. Discovery (ps/info) does not refresh activity. Workers publish private sidecar state so a busy IDA process still counts toward the limit while it cannot answer its socket. When opening a fifth source, Hexmux gracefully closes the least-recently-used idle worker before starting the new one; it never evicts a busy worker. Configure the policy per launch:
hexmux open firmware.bin --idle-timeout 900 --max-sessions 2The worker owns an ida_domain.Database context and runs the request loop synchronously on the same thread. The normal GUI plugin is suppressed inside this process so only the worker owns its PID socket. The socket is published after auto-analysis completes and metadata is available. The worker remains alive after the launching CLI exits; SIGINT or SIGTERM exits the database context and saves the database.
Run IDAPython
Save a script such as functions.py:
import idautils
import ida_name
result = [
{"ea": hex(ea), "name": ida_name.get_name(ea)}
for ea in list(idautils.Functions())[:20]
]Run it using the exact PID or a unique PID prefix printed by hexmux ps:
hexmux run 1234 functions.py
hexmux run 1234 --timeout 120 functions.pyIf the script argument is omitted or is -, Hexmux reads the script from standard input:
hexmux run 1234 --json < functions.py
hexmux run 1234 - < functions.pyScripts execute in a fresh namespace on IDA's main thread: through execute_sync in a GUI instance and directly in the single-threaded Domain worker. A trailing expression is returned automatically, or a script can assign its return value to the global result. JSON-compatible values are returned directly; other Python objects are represented by their repr and type name.
Without --json, Hexmux prints captured stdout, stderr, tracebacks, and the result. With --json, it prints the complete response envelope, including ok, success, result, stdout, stderr, traceback, and elapsed_ms.
Only one script runs in an IDA process at a time. A concurrent request receives a busy error. A client timeout stops waiting but cannot preempt Python already executing on IDA's main thread.
HCLI releases
The plugin/ directory is already a complete HCLI pure-Python plugin package. Its manifest declares Linux x86-64 and macOS x86-64/arm64 and deliberately excludes Windows. A release archive needs only:
hexmux/
├── ida-plugin.json
└── hexmux_plugin.pyNo IDA-plugin pythonDependencies, native executable, service registration, or post-install action is required. The external CLI depends on ida-domain for headless databases and is published separately as a Python package or source checkout.
Fetch IDAPython reference stubs
Fetch a pinned source-form documentation snapshot without retaining the SDK checkout:
python3 scripts/fetch_idapython_reference.py \
--ref v9.3.0-release \
--output references/9.3This copies curated apidoc/*.py files as .pyi documentation stubs, plus the qualified-symbol inventory and examples index. These stubs are useful but are not a complete substitute for runtime-generated IDAPython documentation.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI assistants to interact with IDA Pro for reverse engineering and binary analysis tasks.Last updated12100MIT
- AlicenseCqualityAmaintenanceMCP Server for automated reverse engineering with IDA Pro.Last updated4310,958MIT
- AlicenseBqualityFmaintenanceMCP server for reverse engineering that enables interaction with IDA Pro for analysis tasks such as decompilation, disassembly, and memory engagement reports.Last updated2446MIT
- Flicense-qualityCmaintenanceA headless IDA Pro MCP server that enables AI agents to automatically open, analyze, and query multiple binary files simultaneously without manual GUI interaction. It provides 36 tools for tasks like decompilation, disassembly, and cross-reference analysis through IDA's idalib library.Last updated9
Related MCP Connectors
MCP server for AI dialogue using various LLM models via AceDataCloud
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server exposing the Backtest360 engine API as tools for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ChiChou/hexmux'
If you have feedback or need assistance with the MCP directory API, please join our Discord server