ida api mcp
ida-api-mcp 是一个MCP服务器,通过检索来帮助代理编写正确的IDA Pro脚本 API调用序列 来自真实的IDA SDK源代码和IDAPython示例。
当前状态:在IDA Pro 8.4 SDK和相应的IDAPython版本上进行了测试。由于解析器后端基于C++的树形图和Python的内置 ast 对于IDAPython的模块,需要稍作调整以支持解析其他版本的SDK示例。示例用例
当为Claude Code等代理启用MCP服务器时,您可以询问:
在examples/dir下,编写一个列出所有函数的IDAPython脚本\ 在.text部分中,然后在控制台中打印出来。将脚本命名为“list_all_text_funcs.py”。
然后,代理可以查询此工具集以找到完成此任务的正确工作流(API调用序列),并检索API文档以了解如何正确使用每个函数。最后,代理可以生成一个完整的脚本,该脚本遵循API调用的正确顺序,并具有正确的参数和数据流。
问题陈述
LLM经常得到错误的IDA SDK API调用序列。列出交叉引用不是一个单独的API调用,它需要调用 get_screen_ea(),获得a func_t* 随着 get_func(),迭代 xrefblk_t::first_to() / xrefblk_t::next_to(),并使用格式化输出 get_name() 和 msg()。错过任何一步,脚本都会悄无声息地失败。
此工具自动从IDA自己的SDK示例(C++插件、处理器模块、加载器)中提取这些工作流模式 和 IDAPython示例脚本,对其进行索引,并通过MCP提供服务,以便任何LLM都可以查询它们。
特性
- 双语支持:从C++SDK示例和IDAPython脚本中提取工作流
- SWIG存根解析:从中获取丰富的文档字符串
ida_*.py存根(@param,@return,签名) - 数据流跟踪:遵循API调用之间的变量分配,以显示输出如何输入
- 信任排名结果:官方SDK示例首先出现,模块和加载器其次
- 语义搜索:与工作流描述和API简介匹配的自然语言查询
- 多版本支持:并排索引多个SDK版本,在查询时切换
MCP工具
| 工具 | 目的 | 输入 |
|---|---|---|
get_workflows | 查找任务的API调用序列 | 自然语言任务描述 |
get_api_doc | 查找函数、结构或类(模糊匹配) | 函数/类型名称或关键字 |
list_related_apis | 查找同时出现的API | 函数或类型名称 |
get_index_info | 显示索引版本元数据和记录计数 | -- |
clear_index | 删除一个版本的索引数据 | 可选版本字符串 |
initialize_index | 从SDK路径(和可选的IDAPython路径) | SDK_path、version、可选的python_path构建索引 |
get_versions | 列出所有已索引的SDK版本 | -- |
select_version | 切换活动SDK版本 | 版本字符串(例如。, "84") |
示例
get_workflows("get the function at an address and print its name")退货:
=== Result 1 (trust: highest) ===
Workflow: run
Source: plugins/vcsample/vcsample.cpp
1. get_screen_ea(...)
2. get_func(...) [uses ea from step 1]
3. get_func_name(...) [uses pfn from step 2]
4. msg(...)
Source code:
ea_t ea = get_screen_ea();
func_t *pfn = get_func(ea);
qstring name = get_func_name(ea);
msg("Function: %s\n", name.c_str());随着 --python-path,Python结果与C++一起显示:
=== Result 2 (trust: highest) ===
Workflow:
Source: python/examples/core/dump_flowchart.py
1. ida_kernwin.get_screen_ea(...)
2. ida_funcs.get_func(...) [uses ea from step 1]
3. ida_gdl.FlowChart(...) [uses func from step 2]安装
运行时间(推荐)
# Install from PyPI into uv's tool environment
uv tool install ida-api-mcp开发设置
# Clone and install (dev only)
git clone https://github.com/ruotoy/IDA-Sdk-Workflow-MCP.git
cd IDA-Sdk-Workflow-MCP
python3.10 -m venv .venv
.venv/bin/pip install -e ".[dev]"备注:需要Python 3.10-- tree-sitter-languages 不提供3.13+的车轮。用法
1.建立索引
仅限C++(IDA SDK)
ida-api-mcp-admin build-index \
--sdk-path /path/to/idasdk_pro84 \
--version 84C++Python(IDA SDK+IDAPython)
ida-api-mcp-admin build-index \
--sdk-path /path/to/idasdk_pro84 \
--python-path /path/to/idapro-8.4/python \
--version 84这 --python-path 应该指向 python/ IDA Pro安装中的目录。它预计:
3/ida_*.py-SWIG生成的API存根3/idautils.py,3/idc.py--高级实用模块examples/--IDAPython官方示例脚本
选项
| 选项 | 描述 |
|---|---|
--sdk-path | (必填) IDA SDK目录的路径(例如。, idasdk_pro84/) |
--python-path | IDAPython目录的路径(例如。, idapro-8.4/python/) |
--version | (必填) SDK版本字符串(例如。, 84 IDA 8.4) |
--db-path | ChromaDB存储的基本路径(默认: data/chroma_db) |
--max-files | 限制要处理的源文件数量(用于测试) |
2.测试查询
ida-api-mcp-admin inspect workflows "decompile a function"
ida-api-mcp-admin inspect workflows "cross references to an address"
ida-api-mcp-admin inspect workflows "list all functions in a segment"
ida-api-mcp-admin inspect workflows "enumerate file imports"
# Inspect metadata and API docs from CLI:
ida-api-mcp-admin inspect info --version 84
ida-api-mcp-admin inspect api-doc get_func --version 84
ida-api-mcp-admin inspect related get_func --version 84
# Clear one indexed version:
ida-api-mcp-admin clear-index --version 843.添加为MCP服务器
克劳德代码
claude mcp add ida-api-mcp -- uvx --python python3.10 ida-api-mcp或全局(用户范围)
# user-wide (global)
claude mcp add -s user ida-api-mcp -- uvx --python python3.10 ida-api-mcp或者创建一个 .mcp.json 项目根目录中的文件:
{
"mcpServers": {
"ida-api-mcp": {
"command": "uvx",
"args": ["--python", "python3.10", "ida-api-mcp"]
}
}
}克劳德桌面版
增添 ~/.config/Claude/claude_desktop_config.json (Linux), ~/Library/Application Support/Claude/claude_desktop_config.json (macOS),或 %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"ida-api-mcp": {
"command": "uvx",
"args": ["--python", "python3.10", "ida-api-mcp"]
}
}
}运作原理
[1. Collect] Enumerate source files from IDA SDK (C++) and IDAPython (Python)
| C++: plugins/, module/, ldr/, dbg/
| Python: python/examples/core/, hexrays/, analysis/, ...
↓
[2. Parse] C++: tree-sitter C++ → AST
Python: ast module → AST
Stubs: ast module → API docs from ida_*.py SWIG docstrings
↓
[3. Extract] Identify IDA API calls per function
C++: idaman/ida_export patterns, member calls, qualified calls
Python: module-qualified calls (ida_funcs.get_func),
direct imports (from ida_funcs import get_func)
Track variable assignments to build data-flow edges
↓
[4. Index] Store call chains + source snippets in ChromaDB
Embed with semantic vectors for natural-language search
Tag with language metadata (cpp / python)
↓
[5. Serve] MCP server retrieves relevant workflows at query time
Results ranked by trust level, then similarity按信任级别划分的数据源
| 信任 | C++源代码 | Python源代码 |
|---|---|---|
| 最高 | plugins/ --官方SDK示例插件 | python/examples/ --IDAPython官方示例 |
| 高 | module/, ldr/, dbg/ --处理器模块、加载器、调试器 | -- |
| 中等 | include/ --标头声明 | -- |
构建统计数据(SDK 8.4)
| 度量 | C++ | Python | 组合 |
|---|---|---|---|
| 源文件 | 356 | 89个示例 | 445 |
| 提取的工作流 | 921 | 112 | 1033 |
| 捕获API调用 | - | 505 | - |
| 数据流边 | -- | 143 | -- |
| API单据分录 | 1443(来自表头) | 8060(来自存根) | 8491(已合并) |
Python提取覆盖率
89个IDAPython示例脚本中有63个(71%)至少生成一个工作流。其余26个细分为:
| 类别 | 计数 | 注释 |
|---|---|---|
| 根本没有IDA API调用 | 10 | 钩子骨架、配置文件、纯样板文件 |
| 单个API调用(低于min-2阈值) | 8 | 琐碎的一句话,没有有意义的工作流程 |
| 2个调用分布在单独的类方法中 | 6 | 每个方法只有1个调用;没有一个函数达到阈值 |
| 非标准导入模式 | 2 | 例如。, from Choose import Choose --不是A ida_* 模块 |
项目结构
src/ida_api_mcp/
├── server.py # MCP server (FastMCP, stdio transport)
├── cli.py # CLI: build-index, inspect, list-versions, serve
├── config.py # Configuration dataclass
├── version_manager.py # Multi-version index management
├── collector/
│ ├── sdk_source.py # Enumerate C++ files, build API names from headers
│ ├── python_source.py # Enumerate Python examples, collect stub docs
│ └── doc_source.py # Collect API docs from C++ headers
├── parser/
│ ├── cpp_parser.py # tree-sitter C++ parsing
│ ├── python_parser.py # ast-based Python parsing (imports, functions, metadata)
│ ├── html_parser.py # Doxygen comment extraction from C++ headers
│ └── stub_parser.py # SWIG stub parsing (ida_*.py → HeaderApiDoc)
├── extractor/
│ ├── models.py # Core data models (Workflow, ApiCall, DataFlowEdge, etc.)
│ ├── call_chain.py # C++ workflow extraction (tree-sitter AST)
│ └── python_call_chain.py # Python workflow extraction (ast module)
└── indexer/
├── store.py # ChromaDB ingestion (workflows + API docs)
└── search.py # Semantic search interface发展
# Run tests
.venv/bin/pytest -v
# Lint
.venv/bin/ruff check src/ tests/许可证
麻省理工学院
