Standalone MCP server plugin for IDA Pro.
Standalone MCP (Model Context Protocol) server plugin for IDA Pro 9.x that exposes IDA's analysis capabilities to LLM clients like Claude Desktop.

action/format/direction parameters for comments, variables, types, xrefs, bookmarks, and codeexecute_on_main_thread() wrapperIDASSISTMCP_ prefix)hcli plugin install idassistmcp
This automatically installs the plugin and its Python dependencies.
Download the latest release zip from GitHub Releases and extract it into your IDA plugins directory:
Linux / macOS:
unzip IDAssistMCP-*.zip -d ~/.idapro/plugins/
Windows:
Extract the zip into %APPDATA%\Hex-Rays\IDA Pro\plugins\.
Then install dependencies using IDA's bundled Python (not your system Python):
Linux / macOS:
<IDA_INSTALL_DIR>/python3/bin/pip3 install -r ~/.idapro/plugins/IDAssistMCP/requirements.txt
Windows:
"<IDA_INSTALL_DIR>\python3\python.exe" -m pip install -r "%APPDATA%\Hex-Rays\IDA Pro\plugins\IDAssistMCP\requirements.txt"
Replace
<IDA_INSTALL_DIR>with your IDA Pro installation path.Tip: You can also use the
IDAUSRenvironment variable to specify a custom plugins directory.
Add to your Claude Desktop claude_desktop_config.json:
{
"mcpServers": {
"idassistmcp": {
"url": "http://localhost:9080/mcp"
}
}
}
Configure via environment variables with the IDASSISTMCP_ prefix:
| Variable | Default | Description |
|---|---|---|
IDASSISTMCP_SERVER__HOST | localhost | Server bind address |
IDASSISTMCP_SERVER__PORT | 9080 | Server port |
IDASSISTMCP_SERVER__TRANSPORT | streamablehttp | Transport type (sse or streamablehttp) |
IDASSISTMCP_DEBUG | false | Enable debug mode |
IDASSISTMCP_LOG_LEVEL | INFO | Log level |
| Tool | Description |
|---|---|
list_binaries | List the currently loaded binary |
get_binary_info | Detailed binary metadata (arch, hashes, segments) |
| Tool | Description |
|---|---|
get_code | Get function code — format: 'decompile' (pseudo-C) or 'disasm' (assembly) |
analyze_function | Comprehensive analysis: metadata, CFG, callers/callees, decompilation |
get_basic_blocks | CFG basic blocks with successors/predecessors |
get_function_stack_layout | Stack frame layout (locals, args, saved regs) |
| Tool | Actions | Description |
|---|---|---|
xrefs | direction: to/from/both, include_calls: bool | Xrefs and optional callers/callees for an address |
| Tool | Actions | Description |
|---|---|---|
comments | action: get, set, list, remove | Manage comments (regular, repeatable, function) |
| Tool | Actions | Description |
|---|---|---|
variables | action: list, rename | List locals, or rename local/global variables with scope: auto, local, global |
| Tool | Actions / Description |
|---|---|
types | action: list, set, create_struct, create_enum — manage IDB types |
get_classes | List struct/class types from type library |
| Tool | Description |
|---|---|
get_functions | All functions with filtering and pagination |
search_functions_by_name | Search by name pattern and size filters |
get_function_by_name | Exact name lookup |
get_function_by_address | Address lookup |
get_function_statistics | Aggregate statistics (counts, sizes, top-10) |
| Tool | Description |
|---|---|
rename_symbol | Rename any symbol (function or data) |
batch_rename | Batch rename multiple symbols |
| Tool | Description |
|---|---|
get_imports | Import table grouped by module |
get_exports | Export table |
get_strings | String table with pagination |
get_segments | Memory segments with permissions |
get_entry_points | All binary entry points |
| Tool | Description |
|---|---|
read_memory | Read raw bytes at address |
get_data_at | Get typed data at address |
search_bytes | Binary byte pattern search |
search_strings | String search with pagination |
create_data_var | Define data variable at address (byte/word/dword/qword/float/ascii/C type) |
get_data_vars | List defined data variables (non-code items) |
| Tool | Description |
|---|---|
patch_bytes | Patch raw bytes in IDB |
assemble_code | Assemble instruction text at an address and optionally patch it |
export_program | Export the patched binary or IDA database to disk |
| Tool | Description |
|---|---|
navigate_to | Move IDA cursor to address |
bookmarks | Consolidated bookmark management - actions: list, set, remove |
get_current_address | Get address and context at cursor position |
get_current_function | Get function info at cursor position |
| Tool | Description |
|---|---|
start_task | Start async background task |
get_task_status | Check task progress |
cancel_task | Cancel running task |
list_tasks | List all async tasks |
IDAssistMCP/
├── idassistmcp_plugin.py # IDA plugin_t entry point
├── requirements.txt
├── README.md
└── src/
└── idassist_mcp/
├── __init__.py
├── server.py # FastMCP server + transport
├── context.py # Single-binary IDA context
├── tools.py # 41 MCP tools (IDA API)
├── resources.py # 8 MCP resources
├── prompts.py # 7 guided workflow prompts
├── config.py # Pydantic settings
├── cache.py # LRU analysis cache
├── tasks.py # Async task manager
├── logging.py # IDA logging wrapper
├── utils.py # IDA-specific utilities
└── ui/
└── tool_registry.py # Tool catalog for UI
See LICENSE file for details.