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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityAmaintenanceMCP Server for automated reverse engineering with IDA Pro.4311,479MIT
- FlicenseNot gradedqualityCmaintenanceA headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.12
- AlicenseNot gradedqualityDmaintenanceHeadless MCP server for IDA Pro enabling on-demand database loading and programmatic reverse engineering workflows via MCP tools.18MIT
- FlicenseNot gradedqualityBmaintenanceMCP server that enables AI agents to control IDA Pro instances via Unix-socket supervisor, providing tools for decompilation, disassembly, and Python scripting.3
Related MCP Connectors
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
MCP server for ScanMalware.com URL scanning, malware detection, and analysis.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Claude-Reverser/IDA-instances-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server