This MCP server enables AI-assisted reverse engineering in IDA Pro by connecting your disassembler to AI assistants through the Model Context Protocol.
To install the IDA Pro MCP server, you need to meet the following prerequisites:
idapyswitch to upgrade if needed)Follow these installation steps:
pip uninstall ida-pro-mcp
pip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip
ida-pro-mcp --install
Important: Completely restart IDA Pro and your MCP client (such as Claude, VSCode, etc.) after installation. If using Claude, remember to quit it from the system tray.
MCP Resources provide read-only access to IDB state through REST-like URI patterns:
ida://idb/metadata - Get IDB file info including path, architecture, base addressida://idb/segments - View memory segments with permissionsida://idb/entrypoints - See all entry points (main, TLS callbacks, etc.)ida://functions - List all functions (paginated, filterable)ida://function/{addr} - View function details at specific addressida://globals - Browse global variablesida://global/{name_or_addr} - View global variable detailsida://strings - View all strings in the binaryida://string/{addr} - Get string details at specific addressida://imports - See imported functionsida://exports - See exported functionsida://types - Browse all local typesida://structs - View all structures/unionsida://struct/{name} - See structure definition with fieldsThe MCP server provides numerous functions to interact with IDA Pro:
idb_meta() - Get IDB metadatalookup_funcs(queries) - Find functions by address or namedecompile(addrs) - Decompile functionsdisasm(addrs) - Disassemble functions with full detailsxrefs_to(addrs) - Get cross-references to addressescallees(addrs) - Find functions called by specific functionscallers(addrs) - Find functions that call specific functionsset_comments(items) - Set comments in disassembly and decompiler viewspatch_asm(items) - Patch assembly instructionsdeclare_type(decls) - Declare C types in the type libraryrename(batch) - Batch rename functions, globals, locals, and stack variablesget_bytes(addrs) - Read raw bytesget_string(addrs) - Read null-terminated stringsget_u8/16/32/64(addrs) - Read integers of various sizesget_global_value(queries) - Read global variable valuesdbg_regs() - Get register valuesdbg_callstack() - Get call stack with module informationdbg_list_bps() - List all breakpointsdbg_start() - Start debuggerdbg_continue() - Continue executiondbg_add_bp(addrs) - Add breakpointsdbg_step_into/over() - Step through codefind_bytes(patterns, limit, offset) - Find byte patternsfind_insns(sequences, limit, offset) - Find instruction sequencessearch(type, targets, limit, offset) - Perform advanced searchesWhen using MCP with AI assistants for reverse engineering, consider the following prompt template:
Your task is to analyze a crackme in IDA Pro. You can use the MCP tools to retrieve information. In general use the following strategy:
- Inspect the decompilation and add comments with your findings
- Rename variables to more sensible names
- Change the variable and argument types if necessary (especially pointer and array types)
- Change function names to be more descriptive
- If more details are necessary, disassemble the function and add comments with your findings
- NEVER convert number bases yourself. Use the `int_convert` MCP tool if needed!
- Do not attempt brute forcing, derive any solutions purely from the disassembly and simple python scripts
- Create a report.md with your findings and steps taken at the end
- When you find a solution, prompt to user for feedback with the password you found
You can run an SSE server to connect to the user interface:
uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse
If you've installed idalib, you can also run a headless SSE server:
uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/executable
For best results when using MCP with AI assistants:
int_convert for mathematical operations, especially for number base conversionsTo add this MCP server to Claude Code, run this command in your terminal:
claude mcp add-json "github-com-mrexodia-ida-pro-mcp" '{"command":"uv","args":["run","ida-pro-mcp","--install-plugin"],"timeout":1800}'
See the official Claude Code MCP documentation for more details.
There are two ways to add an MCP server to Cursor. The most common way is to add the server globally in the ~/.cursor/mcp.json file so that it is available in all of your projects.
If you only need the server in a single project, you can add it to the project instead by creating or adding it to the .cursor/mcp.json file.
To add a global MCP server go to Cursor Settings > Tools & Integrations and click "New MCP Server".
When you click that button the ~/.cursor/mcp.json file will be opened and you can add your server like this:
{
"mcpServers": {
"github.com/mrexodia/ida-pro-mcp": {
"command": "uv",
"args": [
"run",
"ida-pro-mcp",
"--install-plugin"
],
"timeout": 1800
}
}
}
To add an MCP server to a project you can create a new .cursor/mcp.json file or add it to the existing one. This will look exactly the same as the global MCP server example above.
Once the server is installed, you might need to head back to Settings > MCP and click the refresh button.
The Cursor agent will then be able to see the available tools the added MCP server has available and will call them when it needs to.
You can also explicitly ask the agent to use the tool by mentioning the tool name and describing what the function does.
To add this MCP server to Claude Desktop:
1. Find your configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.json2. Add this to your configuration file:
{
"mcpServers": {
"github.com/mrexodia/ida-pro-mcp": {
"command": "uv",
"args": [
"run",
"ida-pro-mcp",
"--install-plugin"
],
"timeout": 1800
}
}
}
3. Restart Claude Desktop for the changes to take effect