Most tools take a list, search results are cursor-paginated with a default limit of 1000 and an enforced maximum of 10000, and errors come back per item rather than failing the batch. That is what makes renaming fifty functions or scanning a large binary practical. Debugger tools are hidden behind an explicit `?ext=dbg` opt-in, and `py_eval` runs arbitrary Python inside IDA — treat both as deliberate grants.
A broad MCP surface over IDA Pro, covering the analyst's workflow rather than a couple of read calls. Its API is batch-first — most operations take a single item or a list — and it can run headless through idalib as well as inside the GUI, with multiple databases open as separate sessions.
- Core analysis: functions and globals looked up and listed, imports enumerated, functions decompiled and disassembled with arguments and stack frame, cross-references and callees resolved — `lookup_funcs`, `list_funcs`, `list_globals`, `imports`, `decompile`, `disasm`, `xrefs_to`, `xrefs_to_field`, `callees`
- Annotation and modification: comments set in both views, bookmarks added, instructions patched, C types declared, functions and code defined or undefined — `set_comments`, `add_bookmark`, `patch_asm`, `declare_type`, `define_func`, `define_code`, `undefine`
- Memory and data reading: raw bytes, typed integers, null-terminated strings and compile-time global values — `get_bytes`, `get_int`, `get_string`, `get_global_value`
- Stack frames and structures: frame variables read, stack variables created and deleted, struct fields read at an address, structures searched by name — `stack_frame`, `declare_stack`, `delete_stack`, `read_struct`, `search_structs`
- Search across the binary: regex over strings, byte patterns like `48 8B ?? ??`, instruction sequences, and immediates or references — `find_regex`, `find_bytes`, `find_insns`, `find`
- Types and control flow: types applied or inferred, basic blocks with successors and predecessors, call graphs from chosen roots, and function export as json, c_header or prototypes — `set_type`, `infer_types`, `basic_blocks`, `callgraph`, `export_funcs`
- Batch operations built in: unified renaming of functions, globals, locals and stack variables in one call, multi-patch, and bulk integer writes — `rename`, `patch`, `put_int`
- A debugger extension, hidden until you add `?ext=dbg` to the URL: start and step, breakpoints, registers per thread, stack traces, and reading or writing process memory — `dbg_start`, `dbg_run_to`, `dbg_step_over`, `dbg_add_bp`, `dbg_regs`, `dbg_stacktrace`, `dbg_read`, `dbg_write`
- Session management for several binaries at once, plus resources for browsing state such as `ida://idb/metadata`, `ida://idb/segments`, `ida://structs` and `ida://xrefs/from/{addr}` — `idb_open`, `idb_list`, `idb_close`, `idb_save`
- Arbitrary Python evaluated in the IDA context when nothing else fits — `py_eval`
IDA Pro 8.3 or higher, 9 recommended — IDA Free is not supported. Python 3.11 or higher, switched with `idapyswitch`. Headless use needs idalib activated globally and uv installed. Installs as a Claude Code plugin, or via `ida-pro-mcp --config` to print the JSON for any other client. Worker limits are set with `--max-workers`, default 4, or `IDA_MCP_MAX_WORKERS`. Version 2.0.0.
One command — pip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip
