Headless IDA Pro MCP server using idalib
Project description
IDA MCP Server
A headless IDA Pro MCP server built on idalib. Exposes IDA Pro's binary analysis capabilities over the Model Context Protocol (MCP), letting LLMs drive IDA Pro for reverse engineering tasks. Supports multiple simultaneous databases via a supervisor/worker architecture.
Requirements
- IDA Pro 9+ with a valid license (including Hex-Rays decompiler for decompilation tools)
- Python 3.12+
- uv package manager (recommended) or pip
- macOS, Windows, or Linux
Installation
uv tool install ida-mcp
Or with pip:
pip install ida-mcp
The idapro package is loaded at runtime directly from your local IDA Pro installation — no extra setup steps or environment variables are needed if IDA is installed in a standard location.
From source
git clone https://github.com/jtsylve/ida-mcp && cd ida-mcp
uv sync
Finding IDA Pro
At startup, the server looks for your IDA Pro installation in the following order:
IDADIRenvironment variable — checked first; set this if IDA is in a non-standard location.- IDA's own config file —
Paths.ida-install-dirin~/.idapro/ida-config.json(macOS/Linux) or%APPDATA%\Hex-Rays\IDA Pro\ida-config.json(Windows). If theIDAUSRenvironment variable is set, it is used as the config directory instead. This is the same config file IDA itself uses. - Platform-specific default paths:
| Platform | Default search paths |
|---|---|
| macOS | /Applications/IDA Professional *.app/Contents/MacOS |
| Windows | C:\Program Files\IDA Professional 9.3, C:\Program Files\IDA Pro 9.3, and their Program Files (x86) equivalents |
| Linux | /opt/ida-pro-9.3, /opt/idapro-9.3, /opt/ida-9.3, ~/ida-pro-9.3, ~/idapro-9.3 |
If the server can't find IDA, you'll get a clear error message telling you to set IDADIR.
Usage
Stdio transport (default)
uvx ida-mcp
Running without installing
You can run the server without installing it first:
# macOS/Linux
IDADIR=/path/to/ida uvx ida-mcp
# Windows (PowerShell)
$env:IDADIR = "C:\Program Files\IDA Professional 9.3"
uvx ida-mcp
MCP client configuration
Add to your MCP client config (e.g. Claude Desktop claude_desktop_config.json):
{
"mcpServers": {
"ida": {
"command": "uvx",
"args": ["ida-mcp"]
}
}
}
If IDA is not in a default location, add IDADIR via the env key:
{
"mcpServers": {
"ida": {
"command": "uvx",
"args": ["ida-mcp"],
"env": {
"IDADIR": "/path/to/ida"
}
}
}
}
Basic workflow
- Open a binary — call
open_databasewith the path to a binary file - Analyze — use the available tools (list functions, decompile, search strings, read bytes, etc.)
- Close — call
close_databasewhen done (auto-saves by default)
The binary must be in a writable directory since IDA creates a .i64 database file alongside it.
Multi-database mode
Multiple databases can be open at the same time. Pass keep_open=True to open_database to keep previously opened databases open. When multiple databases are open, pass the database parameter to any tool to specify the target. Omit it when only one database is open.
open_database("first.bin") # opens first
open_database("second.bin", keep_open=True) # opens second, keeps first
list_databases() # shows both
decompile_function(address="main", database="first") # targets first
close_database(database="second") # closes second
Environment variables
| Variable | Default | Description |
|---|---|---|
IDADIR |
(auto-detected) | Path to IDA Pro installation directory |
IDA_MCP_MAX_WORKERS |
(no limit) | Maximum simultaneous databases (1-8, unset for unlimited) |
IDA_MCP_IDLE_TIMEOUT |
1800 |
Seconds before an idle database is auto-closed (0 to disable) |
IDA_MCP_ALLOW_SCRIPTS |
(unset) | Set to 1, true, or yes to enable the run_script tool for arbitrary IDAPython execution |
Tools
The server provides tools covering all major areas of IDA Pro's functionality:
- Database — open/close/save/list databases, file region mapping, metadata
- Functions — list, query, decompile, disassemble, rename, prototypes, chunks
- Decompiler — pseudocode variable renaming/retyping, microcode, ctree AST exploration and pattern matching
- Cross-References — xref queries, call graphs, xref creation/deletion
- Search — strings, byte patterns, text in disassembly, immediate values, function name regex
- Types & Structures — local types, structs, enums, type parsing and application
- Instructions & Operands — decode instructions, resolve operand values, change operand display format
- Control Flow — basic blocks, CFG edges, switch/jump tables
- Patching — byte patching, instruction assembly and patching, function/code creation
- Segments — create, modify, rebase segments
- Names & Comments — rename addresses, manage comments (set and append), C++ demangling
- Analysis — auto-analysis, fixups, exception handlers, register tracking
- Signatures — FLIRT signatures, type libraries, IDS modules
- Export — batch decompilation/disassembly, output file generation
- Snapshots — take, list, and restore database snapshots
- Utility — number conversion, IDC evaluation, bookmarks, colors, undo/redo
Mutation tools return old values alongside new values for change tracking.
See docs/tools.md for the complete tools reference.
Resources
The server exposes MCP resources — read-only, cacheable context endpoints that provide structured data without consuming tool calls. Resources are organized in four tiers:
- Core Context — database metadata, paths, processor info, segments, entry points, imports, exports
- Structural Reference — local types, structs, enums, FLIRT signatures, type libraries
- Browsable Collections — strings, functions, names, bookmarks, statistics
- Per-Entity — parameterized resources for individual functions, stack frames, exceptions, variables, and cross-references (e.g.,
ida://functions/{addr})
Prompts
The server provides MCP prompts — guided workflow templates that instruct the LLM to use tools in a structured sequence:
survey_binary— one-call binary triage producing an executive summaryanalyze_function— full single-function analysis with decompilation, data flow, and behavior summarydiff_before_after— preview the effect of renaming/retyping on decompiler outputclassify_functions— categorize functions by behavioral patternfind_crypto_constants— scan for known cryptographic constantsauto_rename_strings— suggest function renames based on string referencesapply_abi— apply known ABI type information to identified functionsexport_idc_script— generate an IDAPython script that reproduces user annotations
Architecture
See docs/architecture.md for detailed architecture documentation.
Development
uv sync # Install dependencies
uv run ruff check src/ # Lint
uv run ruff format src/ # Format
uv run ruff check --fix src/ # Lint with auto-fix
Pre-commit hooks run REUSE compliance checks, ruff lint (with auto-fix), ruff formatting, and pytest on every commit.
License
This project is licensed under the MIT License.
© 2026 Joe T. Sylve, Ph.D.
This project is REUSE compliant.
IDA Pro and Hex-Rays are trademarks of Hex-Rays SA. ida-mcp is an independent project and is not affiliated with or endorsed by Hex-Rays.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ida_mcp-2.0.0.tar.gz.
File metadata
- Download URL: ida_mcp-2.0.0.tar.gz
- Upload date:
- Size: 78.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85ea0643c65f19aa0ef5efd4b838644695f27ef0d45375a4ed91bc150d227bca
|
|
| MD5 |
16604ea060009d65971c25d72f2ccf6e
|
|
| BLAKE2b-256 |
e7f022bb200a811df3633bc31f0889a7f3a0daae337e3af5110daf402df1bbc8
|
Provenance
The following attestation bundles were made for ida_mcp-2.0.0.tar.gz:
Publisher:
publish.yml on jtsylve/ida-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ida_mcp-2.0.0.tar.gz -
Subject digest:
85ea0643c65f19aa0ef5efd4b838644695f27ef0d45375a4ed91bc150d227bca - Sigstore transparency entry: 1180760052
- Sigstore integration time:
-
Permalink:
jtsylve/ida-mcp@312f1d50e814f2fc3e89e2d8ffe1d0f263899d23 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/jtsylve
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@312f1d50e814f2fc3e89e2d8ffe1d0f263899d23 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ida_mcp-2.0.0-py3-none-any.whl.
File metadata
- Download URL: ida_mcp-2.0.0-py3-none-any.whl
- Upload date:
- Size: 113.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da52c5adc1578d305e732def1072ba382bb2f6972560a9b7cda9f1e9bd8e6bb4
|
|
| MD5 |
5065f9d8ba728e457aa13a5fb5ebb7ec
|
|
| BLAKE2b-256 |
12d0be91d8c0e627641769abe2ab4d6e1fea1c2394e77d2d37bef6c8f7b59a8b
|
Provenance
The following attestation bundles were made for ida_mcp-2.0.0-py3-none-any.whl:
Publisher:
publish.yml on jtsylve/ida-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ida_mcp-2.0.0-py3-none-any.whl -
Subject digest:
da52c5adc1578d305e732def1072ba382bb2f6972560a9b7cda9f1e9bd8e6bb4 - Sigstore transparency entry: 1180760075
- Sigstore integration time:
-
Permalink:
jtsylve/ida-mcp@312f1d50e814f2fc3e89e2d8ffe1d0f263899d23 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/jtsylve
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@312f1d50e814f2fc3e89e2d8ffe1d0f263899d23 -
Trigger Event:
release
-
Statement type: