IDA-MCP 服务器(Rust 实现)

使用说明(Markdown 格式)

  • 项目简介
    • 这是一个用 Rust 实现的 MCP 服务器,用于在无图形界面的 IDA Pro 环境中提供面向 LLM/AI 客户端的上下文服务。服务器暴露一组工具接口,支持打开数据库、查询函数、反汇编、去编译等功能,并通过 MCP 协议与客户端通信。
    • 服务器底层通过一个专门的 IDA 工作线程来执行所有 IDA 相关操作,确保 IDA 的要求(如必须在主线程)得到满足,同时在后台运行异步的 MCP 服务以响应客户端请求。
  • 主要功能点
    • 资源与工具管理:提供对 IDA 数据库的访问、加载外部调试信息、自动分析状态查询、打开/关闭数据库等能力,以及工具目录与单个工具的文档查询。
    • 远程执行工具:支持打开数据库、列出函数、查找/解析函数、反汇编、去编译、读取内存/字符串、读取结构体等一系列分析工具。
    • 背景任务与流式传输:支持在背景中执行长时任务(例如 DSC 加载模块),并通过任务系统轮询任务状态;提供两种传输模式(标准输入输出,和基于 SSE 的 HTTP 流传输)。
    • 安全与会话:实现多传输模式、对打开的数据库进行锁文件管理,避免并发访问冲突,提供 close_token 机制(在 HTTP/SSE 模式下用于关闭会话)。
  • 安装步骤
    • 先确保系统中已安装 IDA Pro 9.3+(或 9.2),并具备有效许可证。
    • 构建方式(从源码编译)
      • 使用 Rust 的构建工具编译整个项目(Cargo 会自动处理依赖)。
    • 运行方式(三种模式之一):
      • 服务模式(默认):直接启动 MCP 服务器,使用标准输入输出进行 MCP 通信。
        • 典型命令:ida-mcp
      • 基于流的 HTTP (SSE) 模式:提供更贴近网页/云端客户端的接入方式。
        • 启动命令示例(需要配置入口参数):ida-mcp serve-http --bind 0.0.0.0:8765
        • 参数包括绑定地址、SSE 保活、允许来源等。
      • 诊断/探测模式:probe,用于在主线程中对库进行基本测试和演示用的快速探测。
    • 服务器配置(客户端常用,只需提供启动信息即可连接服务器)
      • 说明:MCP 客户端要连接服务器,需要一个包含服务器名称、启动命令和参数的 JSON 配置。以下信息仅作示例,实际请按你的部署环境填写。
      • 示例 JSON(请替换成实际服务器信息并仅作参考,不作为代码提交) { "server_name": "ida", "command": "ida-mcp", "args": [ "serve" ], "transport": "stdio", "notes": "默认使用 STDIO 传输。若需通过浏览器或其他客户端使用 SSE,请改用 serve-http 模式并配置相应传输选项。" }
  • 基本使用方法
    • 连接并初始化
      • 启动服务器后,客户端通过 MCP JSON-RPC 交互,与 IDA 数据库建立会话。
    • 常用操作流程
      • 打开一个数据库或原始二进制文件:使用 open_idb 工具,提供数据库路径及选项,服务器会返回数据库元信息。
      • 查询可用工具:tool_catalog,获取符合任务的工具列表及简要描述。
      • 获取工具细节:tool_help,通过工具名称获取完整参数及示例。
      • 执行分析任务:调用具体工具,如 list_functions、disasm_by_name、decompile 等,获取结果。
      • 管理会话:如需在 HTTP/SSE 模式下共享会话,请使用 close_idb 提前关闭数据库,或在会话结束时进行清理。
    • 进阶用法
      • 如需在背景中加载 Apple 的 dyld_shared_cache 模块等耗时任务,服务器会返回任务 ID,后续可以通过 task_status 获取进度和结果。
  • 注意事项
    • 依赖与许可:IDA 运行在主线程,且需要正确的许可证。请确保在实际部署环境中符合 IDA 的使用条款。
    • 安全性:HTTP/SSE 模式下,服务器支持 Origin 过滤,确保只有信任的来源可以建立连接。
    • 兼容性:服务器实现了工具目录、工具帮助、以及任务系统等,以便与常见的 MCP 客户端配合使用。

服务器信息