LabscoMCP early access ↗
mrexodiaMCP SERVER

IDA Pro MCP

Reverse-engineer inside IDA Pro from the conversation — decompile, rename, retype, patch, search patterns and drive the debugger.

by mrexodia ↗Runtime Debugging & Crash AnalysisCommunity

LABSCO SUMMARY

Batch-first and paginated, because a binary will otherwise flood the context window.

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.

What it is

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.

What you get

  • 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

Requirements

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.

Setup effort

Follow the published steps — pip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip