Headless IDA Pro 9.3 MCP server using idalib
Project description
IDA MCP Server
A headless IDA Pro 9.3 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.3 with a valid license (including Hex-Rays decompiler for decompilation tools)
- Python 3.13+
- 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, function/code creation
- Segments — create, modify, rebase segments
- Names & Comments — rename addresses, manage comments, C++ demangling
- Analysis — auto-analysis, fixups, exception handlers, register tracking
- Signatures — FLIRT signatures, type libraries, IDS modules
- Export — batch decompilation/disassembly, output file generation
- Utility — number conversion, IDC evaluation, bookmarks, colors, undo/redo
See docs/tools.md for the complete tools reference.
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.
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.0rc2.tar.gz.
File metadata
- Download URL: ida_mcp-2.0.0rc2.tar.gz
- Upload date:
- Size: 64.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa02f8982e77bcfee5b9b8bf022b1358de30904c30c3d6254be07beefcb55a93
|
|
| MD5 |
2825acb763c6cc157c0645f61db11c2a
|
|
| BLAKE2b-256 |
ff493db53c98849b99af714e82293642ff18c1826dd0e7e344acf708a3fd8289
|
Provenance
The following attestation bundles were made for ida_mcp-2.0.0rc2.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.0rc2.tar.gz -
Subject digest:
fa02f8982e77bcfee5b9b8bf022b1358de30904c30c3d6254be07beefcb55a93 - Sigstore transparency entry: 1175825133
- Sigstore integration time:
-
Permalink:
jtsylve/ida-mcp@aee71884cf5a2f5a1f7f797d3338c91fd26c8fc9 -
Branch / Tag:
refs/tags/v2.0.0rc2 - Owner: https://github.com/jtsylve
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@aee71884cf5a2f5a1f7f797d3338c91fd26c8fc9 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ida_mcp-2.0.0rc2-py3-none-any.whl.
File metadata
- Download URL: ida_mcp-2.0.0rc2-py3-none-any.whl
- Upload date:
- Size: 96.5 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 |
507279348c17a198dc0b5fe5cccba08565b63bbb85279e4474df3f92898fd0f5
|
|
| MD5 |
67765674f7c253eb8d6be16231e75f69
|
|
| BLAKE2b-256 |
0c84187ffaf222af360d7d9f57ad94c3e9027beef6760bda4e5a457319460b30
|
Provenance
The following attestation bundles were made for ida_mcp-2.0.0rc2-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.0rc2-py3-none-any.whl -
Subject digest:
507279348c17a198dc0b5fe5cccba08565b63bbb85279e4474df3f92898fd0f5 - Sigstore transparency entry: 1175825150
- Sigstore integration time:
-
Permalink:
jtsylve/ida-mcp@aee71884cf5a2f5a1f7f797d3338c91fd26c8fc9 -
Branch / Tag:
refs/tags/v2.0.0rc2 - Owner: https://github.com/jtsylve
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@aee71884cf5a2f5a1f7f797d3338c91fd26c8fc9 -
Trigger Event:
release
-
Statement type: