IDA-instances-MCP
IDA-instances-MCP
基于 ida-proxy-mcp 的自定义构建:一个 MCP 服务器,让 MCP 客户端可以驱动 IDA Pro——经过稳定性加固改造,旨在支持多个无头 idalib 实例(即 Ida-Instances 方案)。
这是 mrexodia 的 ida-proxy-mcp(MIT)的一个 fork。所有上游原版功劳归为 Duncan Ogilvie 及各位贡献者;本仓库负责维护下述自定义改动。
What's custom
在上游 v2.0.0 的基础上进行稳定性加固:
领域 | 改动 |
数据安全 | 数据库部分清理具备所有权感知:从不删除其他活跃运行中的实例所持有的 |
保存可靠性 |
|
并发安全 | Supervisor 锁不再覆盖 worker 启动(约 120 秒)、健康探测(每会话约 2.5 秒)或过期 worker 终止——一次较慢的打开不会拖垮所有会话 |
健壮性 | 通过 stdio 接收的畸形 JSON-RPC 现在会返回 |
超时设置 | 代理超时从 30 秒提升到 900 秒,并可通过 |
网络层 | worker 端口的 TOCTOU 问题现在会重试;SSE 写入和销毁流程由锁保护;从 IDA 主线程移出 CORS 策略的读取 |
资源限制 | IDB 中的 trace 日志上限为 |
身份验证 | 每个 HTTP 请求都需要实例 API 密钥;密钥通过 |
托管端点 |
|
空闲回收 | 超过 |
优雅停机 | 收到 |
自更新 | 启动时检查 GitHub Releases;交互式会话提供一键自动更新 |
托管默认值 | 无头 supervisor 默认监听 0.0.0.0:9999;GUI 插件同样绑定 0.0.0.0,并且现在也要求相同的 API 密钥 |
Related MCP server: idalib-mcp-headless
系统要求
Linux、macOS 或 Windows
Python 3.11+(在 IDA 中使用
idapyswitch来匹配版本)IDA Pro 8.3+(建议 9.x)。不支持 IDA Free
一个 MCP 客户端(Claude Code、Cursor、Codex、Opencode、VS Code 等)
配置
为 uv 环境启用 idalib:
# linux (server deployment)
uv run "/opt/idapro-9.x/idalib/python/py-activate-idalib.py"
# macos
uv run "/Applications/IDA Professional 9.x.app/Contents/MacOS/idalib/python/py-activate-idalib.py"
# windows
uv run "C:\Program Files\IDA Professional 9.x\idalib\python\py-activate-idalib.py"无头运行模式还需要将 IDA 安装目录放到 IDADIR 环境变量中。
运行无头 supervisor(托管模式)
uv run idalib-mcp # serves http://0.0.0.0:9999/mcp (new default)启动时会生成(或从磁盘加载)一个 API 密钥,任何未携带该密钥的请求都会得到 401 Unauthorized——没有例外。
在拥有该安全密钥的机器上,只取一次密钥:
curl http://your-host:9999/key
# {"key": "3f2b..."} <- save it; this endpoint is now burned until restart密钥持久化保存在
~/.idapro/mcp/api_key(文件权限0600)中,重启后依然有效;GET /key仅在每次服务启动时签发一次可用
KMPE_API_KEY覆盖默认值(或通过IDA_MCP_API_KEY_FILE修改存储位置)其他所有端点都会在每次调用中要求此密钥:
Authorization: Bearer <key>
# or equivalently
X-API-Key: <key>· 密钥绝不会被写入日志。
托管端点
端点 | 认证 | 用途 |
| 无 | 就绪探针: |
| 密钥 | 查看已打开数据库及最后访问时间 |
| 密钥 | 原始请求体二进制上传,流式保存到 |
# provisioning flow
while ! curl -sf http://10.0.0.4:9999/health >/dev/null; do sleep 1; done
KEY=$(curl -s http://10.0.0.4:9999/key | jq -r .key)
curl -H "Authorization: Bearer $KEY" --data-binary @sample.elf \
"http://10.0.0.4:9999/upload?filename=sample.elf"常用命令:
uv run idalib-mcp --host 127.0.0.1 --port 9999 # override bind address
uv run idalib-mcp --max-workers 8 # concurrent databases (default 4, 0 = unlimited)
uv run idalib-mcp --unsafe # enable destructive/debugger tools (DANGEROUS)
uv run idalib-mcp --profile tools.txt # restrict worker tools to a profile file
uv run idalib-mcp --stdio # stdio transport instead of HTTP
uv run idalib-mcp path/to/binary # open a binary at startup会话生命周期工具:idb_open、idb_list、idb_close——每个会话打开一个数据库;每个会话有自己的独立 worker 进程。
运行 GUI 代理组件(交互式 IDA)
在 IDA 中启动插件(Edit -> Plugins -> MCP,或 Ctrl+Alt+M),然后:
uv run ida-pro-mcp # stdio proxy, auto-discovers IDA
uv run ida-pro-mcp --transport http://127.0.0.1:9999 # serve HTTP instead连接 MCP 客户端
通用 JSON 配置(HTTP 传输):
{
"mcpServers": {
"ida-instances": {
"url": "http://your-host:9999/mcp",
"headers": {
"Authorization": "Bearer <key-from-/key>"
}
}
}
}Claude Code:
claude mcp add --transport http ida-instances http://your-host:9999/mcp \
--header "Authorization: Bearer <key-from-/key>"对于通过 stdio 运行的 GUI 代理,请执行 uv run ida-proxy-mcp --config,并把 JSON 粘贴到你的客户端。
配置(环境变量)
变量 | 默认值 | 含义 |
|
|
|
|
| 每次转发工具调用的兜底超时 |
|
| GUI 代理 → IDA 上游超时( |
|
| 存储在 IDB 中的 trace 日志上限(MB) |
|
| 默认的 |
|
| 健康探针的预算时间 |
|
| 会话闲置超过该分钟数后自动关闭( |
|
|
|
|
| 上传文件的保存目录 |
| – / | 注入或重定向实例 API 密钥的位置 |
|
| 每个数据库 / 总体的 |
| 未设置 | 设为 |
安全说明: API 密钥会保护两个服务(supervisor 和 GUI 插件)的每个 HTTP 端点,且 GUI 插件可以通过
py_eval执行任意代码,所以即使在回环地址上同样要求密钥。它是构成 bearer token(即“持令牌即可访问”)——一旦有人获得该密钥,他就可以完整操作该实例;如果它要离开你的可信网络,请再套一层 TLS 反向代理。浏览器访问. http://...时也可以把 key 放在 URL 中,形式为?key=<key>(主要用于/config.html这类页面)。
测试
IDADIR=/path/to/ida uv run ida-mcp-test tests/crackme03.elf -q
IDADIR=/path/to/ida uv run ida-mcp-test tests/typed_fixture.elf -q
IDADIR=/path/to/ida uv run ida-mcp-test tests/crackme03.elf -c api_analysis # one category
IDADIR=/path/to/ida uv run coverage run -m ida_pro_mcp.test tests/crackme03.elf -qLicense
MIT 许可——继承上游 ida-proxy-mcp。上游产品名称(IDA Pro、Hex-Rays)均为 Hex-Rays SA 的商标;本项目需要你持有自己的 IDA Pro 许可证。
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for the Seline Analytics API
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Hosted MCP server for task-first delegation to remote workstations and workers.
Related MCP Servers
- AlicenseCqualityAmaintenanceMCP Server for automated reverse engineering with IDA Pro.431,602 PyPI12,620MIT
- FlicenseNot gradedqualityDmaintenanceA headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.22-
- AlicenseNot gradedqualityDmaintenanceHeadless MCP server for IDA Pro enabling on-demand database loading and programmatic reverse engineering workflows via MCP tools.18MIT
- AlicenseNot gradedqualityAmaintenanceHeadless reverse engineering MCP server integrating IDA Pro for static analysis and x64dbg for dynamic debugging via controlled MCP tools.4GPL 3.0