Token导航 LogoToken导航

MCP Server · AI代理

Binary Ninja Headless MCP

一个无界面的Binary Ninja服务器,通过MCP协议为AI代理提供深度逆向工程功能,包括反汇编、中间语言分析、补丁应用等,适用于容器化环境中的自动化逆向工程任务。

stdio官方级别未说明来源级核验工具 181
逆向工程PythonClaude容器化部署

快速开始

作者 / 组织
mrphrazer
提供方
mrphrazer

工具数量

181

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

204

仓库热度

收录来源

1 个

MCP World

选型结论

Binary Ninja Headless MCP 属于AI代理类 MCP Server,公开资料标注 181 个工具,通过stdio 本地进程接入,适配 Claude,有可以直接复制的安装命令;接入前要先准备 会话凭据。

分类

AI代理

传输方式

stdio

认证方式

会话凭据

部署方式

公开资料未说明

安装与配置

安装命令

pip install .

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    准备运行环境

    stdio 服务在本地起进程,需要先装好 对应的运行时,再按安装命令拉取依赖。

  2. 2

    安装服务

    复制下面的安装命令执行;命令里带占位符的位置换成自己的密钥或路径。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 181 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

详细介绍

二进制忍者无头MCP

无头 二进制忍者 说话的服务器 主控程序 (模型上下文协议),使AI代理能够完全访问深度逆向工程工作流程——拆卸、IL、修补、类型、外部参照等——而无需GUI。

设计为在与代理运行时相同的Docker容器中运行。没有侧车,没有额外服务。

整个项目——代码、测试和文档——都是100%vibe编码的。

为什么

现有的Binary Ninja MCP服务器要么是GUI绑定的,要么暴露了有限的工具界面。此服务器仅为无头服务器,专为沙盒VM/容器环境中的代理驱动工作流而设计:代理可以完全控制分析系统,在您交互式讨论和指导过程的同时自动化大部分逆向工程。

目标是一个界面,代理可以在这个界面上随着时间的推移检查、改进和扩展分析——更新类型、符号和元数据,逐步改进分析数据库,应用补丁,使用撤销/重做安全迭代,并在工作流需要定制时运行自定义脚本。

特性

  • 181工具 跨36个功能组:分析、反汇编、IL、修补、撤消/重做、类型、工作流、内存、搜索、外部参照、脚本等。
  • 默认情况下为只读 具有安全的变异工作流程(撤消/重做、事务)。
  • 脚本访问 通过 binja.eval 和 binja.call 对于工具目录未涵盖的任何内容。
  • 标准和TCP传输。
  • 零运行时依赖关系 除了Binary Ninja本身。
  • 假冒后端模式 用于CI和开发,无需Binary Ninja许可证。

先决条件

  • python 3.11+
  • A. 二进制忍者 使用无头许可证进行安装 binaryninja Python模块可在运行时导入(用于实际分析)
  • 对于没有Binary Ninja的CI/CD开发,使用伪后端模式

安装

git clone https://github.com/mrphrazer/binary-ninja-headless-mcp.git
cd binary-ninja-headless-mcp
pip install .

或者直接从repo根目录安装,无需克隆:

pip install git+https://github.com/mrphrazer/binary-ninja-headless-mcp.git

快速开始

标准传输(默认):

python3 binary_ninja_headless_mcp.py

TCP传输:

python3 binary_ninja_headless_mcp.py --transport tcp --host 127.0.0.1 --port 8765

伪后端模式(不需要二进制Ninja):

python3 binary_ninja_headless_mcp.py --fake-backend

与AI代理一起使用

此服务器通过标准MCP进行通信 stdio (默认)或 tcp,因此任何支持MCP的代理主机都可以使用它。

克劳德代码

claude mcp add binary_ninja_headless_mcp -- python3 /path/to/binary-ninja-headless-mcp/binary_ninja_headless_mcp.py

或者将其添加到您的项目中 .mcp.json:

{
  "mcpServers": {
    "binary_ninja_headless_mcp": {
      "command": "python3",
      "args": ["binary_ninja_headless_mcp.py"],
      "cwd": "/path/to/binary-ninja-headless-mcp"
    }
  }
}

法典

codex mcp add binary_ninja_headless_mcp -- python3 binary_ninja_headless_mcp.py

通用MCP主机

  • 注册名为的服务器 binary_ninja_headless_mcp.
  • 使用命令 python3 带args ["binary_ninja_headless_mcp.py"] 当 cwd 是repo根目录,或在中使用绝对脚本路径 args.
  • 集 cwd 如果你想要相对路径,比如 samples/ls 正确解决。
  • 除非您的主机需要TCP,否则请使用stdio传输。
  • 对于伪模式(未安装Binary Ninja),附加 --fake-backend.
  • 通过呼叫验证连接 health.ping那么 session.open.

Docker协同定位模式

推荐的部署模型:在同一容器映像中运行代理进程和此MCP服务器。

基线示例:

FROM python:3.11-slim
WORKDIR /app
COPY . /app
RUN python -m pip install --upgrade pip && pip install ruff pytest
CMD ["python3", "binary_ninja_headless_mcp.py"]

如果您需要在容器中进行真正的Binary Ninja分析,请在同一映像中添加您的Binary忍者运行时+许可证设置,并在配置了此MCP服务器的情况下启动代理。

MCP方法

  • initialize
  • ping
  • tools/list
  • tools/call
  • shutdown

tools/list 行为:

  • 如果没有明确的分页参数,则返回完整的工具目录。
  • 如果 offset 或 limit 提供,使用分页输出(offset=0, limit=50 分页模式下的默认值)。
  • 支持通过以下方式进行过滤:

- prefix (例如 binary.) - query (子字符串与工具名称/描述匹配)

  • 返回分页元数据: offset, limit, total, has_more.
  • 当页面被截断时(has_more=true),包括 next_offset 和一个 notice 提示。

工具调用响应行为:

  • structuredContent 是规范的完整有效载荷。
  • content[0].text 是一个紧凑的摘要字符串(不是完整的JSON复制)。
  • 这种拆分是为了保持上下文使用量较小,同时仍然暴露完整的机器可读数据。

质量和测试

这个存储库经过了很好的测试,并实施了质量门。

  • 测试套件:运行 pytest --collect-only -q 用于当前收集的测试计数。
  • CI工作流强制执行:

- ruff format --check . - ruff check . - pytest

  • CI使用 BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 因此,检查运行时不需要安装Binary Ninja。
  • 额外的结构测试验证了工具注册表的一致性和后端可达性。

上下文控制

  • 只读模式是打开会话的默认模式(read_only=true).
  • binary.basic_blocks_at 和 function.basic_blocks 已分页(offset/limit).
  • memory.read 具有硬响应上限: length <= 65536.

局限性

  • 企业API目前尚未涵盖。
  • 调试器API目前尚未涵盖。

安全模型

  • MCP通信(stdio/tcp)默认情况下未经身份验证。
  • 服务器通过以下方式公开任意脚本 binja.eval 和广泛的API访问 binja.call.
  • 这是为可信的容器化代理环境设计的。
  • 不要将此服务器直接暴露给不受信任的用户或网络。

本地开发工作流

ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q

功能引信

使用内置的MCP特征模糊器来练习宽阔的工具表面 samples/ls.

真正的二进制Ninja后端:

python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337

虚假后端冒烟运行:

python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --fake-backend --iterations 20

编写JSON覆盖率报告:

python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --report-json /tmp/mcp-fuzzer-report.json

有用的标志:

  • --min-success-tools N:如果小于,则退出非零 N 工具成功了。
  • --verbose:在模糊测试时打印每个工具调用。
  • --update-analysis:打开种子会话 update_analysis=true.

功能目录

服务器当前公开 181 工具横跨 36 特征组。

分析

  • analysis.status:获取分析状态。
  • analysis.progress:获取分析进度快照。
  • analysis.update:触发异步分析更新。
  • analysis.update_and_wait:运行分析更新并等待完成。
  • analysis.abort:中止分析。
  • analysis.set_hold:保留/释放分析队列。

注释

  • annotation.rename_function:重命名函数。
  • annotation.rename_symbol:重命名地址处的符号。
  • annotation.undefine_symbol:在地址处取消定义用户符号。
  • annotation.define_symbol:在地址处定义符号。
  • annotation.rename_data_var:重命名数据变量。
  • annotation.define_data_var:定义数据变量。
  • annotation.undefine_data_var:取消定义数据变量。
  • annotation.set_comment:在地址处设置注释。
  • annotation.get_comment:在地址获取评论。
  • annotation.add_tag:在地址处添加用户数据标签。
  • annotation.get_tags:在地址处获取标签。

拱

  • arch.info:获取架构和平台元数据。
  • arch.disasm_bytes:使用所选架构分解字节。
  • arch.assemble:使用选定的架构组装说明文本。

基址

  • baseaddr.detect:运行基址检测。
  • baseaddr.reasons:获取基址检测原因。
  • baseaddr.abort:中止基址检测。

二进制

  • binary.summary:获取二进制/会话摘要。
  • binary.save:将当前二进制视图保存到文件路径。
  • binary.functions:带分页的列表函数。
  • binary.strings:列出已发现的带分页的字符串。
  • binary.search_text:在会话中搜索原始文本/字节。
  • binary.sections:列出带分页的部分。
  • binary.segments:列出带分页的段。
  • binary.symbols:列出带分页的符号。
  • binary.data_vars:列出带分页的数据变量。
  • binary.get_function_at:按地址查找函数。
  • binary.get_function_disassembly_at:获取包含地址的函数的完整反汇编。
  • binary.get_function_il_at:获取包含地址的函数的完整IL。
  • binary.functions_at:列出地址处的函数。
  • binary.basic_blocks_at:按分页方式列出地址处的基本块。

比尼亚

  • binja.info:返回二进制Ninja版本/安装信息。
  • binja.call:通用API桥:调用 bn.* 或 bv.* 目标路径。
  • binja.eval:使用以下命令评估Python代码 bn, sessions,可选 bv.

数据

  • data.typed_at:获取地址处的类型化数据变量。

数据库

  • database.create_bndb:从会话创建.bndb。
  • database.save_auto_snapshot:保存自动快照。
  • database.info:获取会话的数据库状态。
  • database.snapshots:列出数据库快照。
  • database.read_global:读取数据库全局字符串键。
  • database.write_global:写入数据库全局字符串键。

调试

  • debug.parsers:列出对此视图有效的调试信息解析器。
  • debug.parse_and_apply:解析调试信息并将其应用于视图。

反汇编

  • disasm.linear:获得线性拆卸线。
  • disasm.function:获取包含地址的函数的完整反汇编。
  • disasm.range:地址范围反汇编行。

外部

  • external.library_add:添加外部库。
  • external.library_list:列出外部库。
  • external.library_remove:删除外部库。
  • external.location_add:添加外部位置映射。
  • external.location_get:获取外部位置映射。
  • external.location_remove:删除外部位置映射。

函数

  • function.basic_blocks:使用分页列出函数中的基本块。
  • function.callers:函数的调用者。
  • function.callees:函数的调用者。
  • function.variables:列出函数变量。
  • function.var_refs:列出MLIL/HLIL中的变量引用。
  • function.var_refs_from:列出源自地址的变量引用。
  • function.ssa_var_def_use:获取SSA变量定义和用法。
  • function.ssa_memory_def_use:按内存版本获取SSA内存定义和使用情况。
  • function.metadata_store:按键存储函数元数据。
  • function.metadata_query:按键查询函数元数据。
  • function.metadata_remove:按键删除函数元数据。

健康

  • health.ping:健康检查。

他

  • il.function:IL功能列表。
  • il.instruction_by_addr:通过源地址获取IL指令。
  • il.address_to_index:将地址映射到IL索引。
  • il.index_to_address:将IL索引映射到源地址。
  • il.rewrite.capabilities:列出一个函数和IL级别的IL重写支持。
  • il.rewrite.noop_replace:不进行op IL表达置换。
  • il.rewrite.translate_identity:使用身份映射回调转换IL。

加载器

  • loader.rebase:重新建立BinaryView的基础。
  • loader.load_settings_types:列出加载程序设置类型名称。
  • loader.load_settings_get:获取加载器设置值。
  • loader.load_settings_set:设置一个加载器设置值。

记忆

  • memory.read:从视图中读取字节(length <= 65536).
  • memory.write:将字节(十六进制)写入视图。
  • memory.insert:在视图中插入字节(十六进制)。
  • memory.remove:从视图中删除字节。
  • memory.reader_read:通过BinaryReader读取整数值。
  • memory.writer_write:通过BinaryWriter写入整数值。

主控程序

  • mcp.response_format:解释工具结果字段(structuredContent 满载, content[0].text 摘要)。

元数据

  • metadata.store:按键存储元数据。
  • metadata.query:按键查询元数据。
  • metadata.remove:按键删除元数据。

补丁

  • patch.assemble:在地址处组装和修补指令字节。
  • patch.status:检查地址处的补丁可用性。
  • patch.convert_to_nop:支持时向NOP发送补丁指令。
  • patch.always_branch:修补条件分支,使其在支持时始终分支。
  • patch.never_branch:修补条件分支,使其在支持时从不分支。
  • patch.invert_branch:在支持的情况下,通过反转来修补条件分支。
  • patch.skip_and_return_value:补丁指令,在支持时跳过并返回值。

插件

  • plugin.valid_commands:列出上下文有效的插件命令。
  • plugin.execute:执行上下文有效的插件命令。

插件_repo

  • plugin_repo.status:列出插件存储库和插件状态。
  • plugin_repo.check_updates:检查插件存储库更新。
  • plugin_repo.plugin_action:在存储库插件上运行install/uninstall/enable/disable操作。

项目

  • project.create:创建项目。
  • project.open:打开项目。
  • project.close:关闭跟踪项目。
  • project.list:列出项目文件夹/文件。
  • project.create_folder:创建项目文件夹。
  • project.create_file:从base64数据创建项目文件。
  • project.metadata_store:存储项目元数据。
  • project.metadata_query:查询项目元数据。
  • project.metadata_remove:删除项目元数据。

搜索

  • search.data:搜索原始字节模式(十六进制字符串)。
  • search.next_text:查找下一个文本匹配项。
  • search.all_text:查找范围内的所有文本匹配项(正则表达式可选)。
  • search.next_data:查找下一个数据/字节模式匹配。
  • search.all_data:查找范围内的所有数据/字节模式匹配项。
  • search.next_constant:查找下一个常量。
  • search.all_constant:查找范围内的所有常量。

部分

  • section.add_user:添加用户部分。
  • section.remove_user:删除用户部分。

段

  • segment.add_user:添加用户段。
  • segment.remove_user:删除用户段。

会话

  • session.open:打开二进制文件并创建会话。
  • session.open_bytes:从base64编码的字节打开二进制会话。
  • session.open_existing:从现有会话的文件中打开另一个会话。
  • session.close:结束一个公开会议。
  • session.list:列出开放会话。
  • session.mode:获取会话安全/确定性模式。
  • session.set_mode:更新会话安全/确定性模式。

任务

  • task.analysis_update:启动异步分析更新任务。
  • task.search_text:启动异步搜索任务。
  • task.status:获取任务状态。
  • task.result:获取任务结果。
  • task.cancel:取消任务(尽最大努力)。

变换

  • transform.inspect:检查/处理转换提取管道。

类型

  • type.parse_string:解析单个类型字符串。
  • type.parse_declarations:解析类型/变量/函数的C声明。
  • type.define_user:从类型源定义用户类型。
  • type.rename:重命名类型。
  • type.undefine_user:取消定义用户类型。
  • type.import_library_type:从类型库导入类型。
  • type.import_library_object:从类型库导入对象类型。
  • type.export_to_library:将类型导出到类型库中。

类型_档案

  • type_archive.create:创建并可选择附加类型存档。
  • type_archive.open:打开并可选择附加类型存档。
  • type_archive.list:列出所附类型档案。
  • type_archive.get:获取一个跟踪类型存档。
  • type_archive.pull:从类型存档中提取类型。
  • type_archive.push:将类型推送到类型存档。
  • type_archive.references:查询一种类型的存档传入/传出引用。

类型库

  • type_library.create:创建并可选地附加类型库。
  • type_library.load:加载并可选地附加类型库。
  • type_library.list:列出附加到视图的类型库。
  • type_library.get:获取一个跟踪类型库。

uidf

  • uidf.parse_possible_value:解析用户通知的可能值集字符串。
  • uidf.set_user_var_value:设置函数用户变量值。
  • uidf.clear_user_var_value:清除函数用户变量值。
  • uidf.list_user_var_values:列出函数的所有用户变量值。

撤销

  • undo.begin:开始撤消事务。
  • undo.commit:提交撤消事务。
  • undo.revert:还原撤消事务。
  • undo.undo:执行撤消操作。
  • undo.redo:执行重做。

价值

  • value.reg:获取地址处/地址后的寄存器值。
  • value.stack:获取地址处/后面的堆栈内容。
  • value.possible:获取地址处设置的IL可能值。
  • value.flags_at:在某个地址获取解除的IL标志读/写状态。

工作流

  • workflow.list:列出已注册的工作流。
  • workflow.describe:描述工作流拓扑和设置。
  • workflow.clone:克隆工作流。
  • workflow.insert:在活动前插入活动。
  • workflow.insert_after:在活动后插入活动。
  • workflow.remove:删除工作流活动。
  • workflow.graph:总结工作流程图。
  • workflow.machine.status:获取工作流机器状态。
  • workflow.machine.control:控制工作流机器运行时间。

交叉引用

  • xref.code_refs_to:对地址的代码引用。
  • xref.code_refs_from:地址中的代码引用。
  • xref.data_refs_to:对地址的数据引用。
  • xref.data_refs_from:来自地址的数据引用。

联系

如需更多信息,请联系Tim Blazytko(@mr_phrazer).

工具与能力

工具数量

181

资源数量

0

提示词数量

0

能力标签

逆向工程Python本地部署二进制分析AI代理无界面服务容器化部署

支持客户端

Claude

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

多步任务编排

把拆解、检索、执行串成一条链,模型按步骤调用工具。

长期上下文

把会话、笔记和知识放到外部存储,换个会话还能接着做。

接自有流程

把内部系统和模型连起来,让助手调用已有的工作流。

选择建议

值得选的地方

  • 工具数量 181 个,一次接入能覆盖的操作比单点工具更全。
  • 有现成的安装命令,不用自己找入口,照着跑就能起服务。
  • 公开说明写得比较完整,接入前能看清能力边界。

先想清楚的地方

  • stdio 方式要求本地装好 运行环境,换机器要重新装一遍。
  • 需要自备会话凭据,没有凭据没法直接试。
  • 第三方目录整理,版本更新和行为细节以官方仓库为准。

更适合

  • 需要在AI代理场景里让模型直接调用外部能力的人。
  • 已经在用 Claude 的用户,接入路径最短。
  • 想先快速试一下、能接受在本地跑服务的人。

不太适合

  • 完全不想在本地装环境的人。
  • 暂时拿不到会话凭据的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
Binary Ninja Headless MCP

MCP World · 本页

181stdio有1 个2026-05-17
Everything Claude Code

MCP World

0stdio有1 个2026-05-17
Filesystem 560c4363

MCP World

13未说明未标注2 个2026-05-17
Time 7365cb6d

MCP.so

2SSE有2 个2026-05-17
Server Everything (everything)

MCP World

11stdio有1 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

Binary Ninja Headless MCP 怎么安装?

公开资料给出的安装命令是 pip install .,运行环境为 未标注。装完后按客户端要求写进 MCP 配置,重启客户端生效。

Binary Ninja Headless MCP 怎么在 Claude Desktop、Cursor 里配置?

它是stdio 本地进程,客户端配置里要写启动命令和参数,运行环境是 未标注;保存后完全退出客户端再打开,配置才会生效。

Binary Ninja Headless MCP 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

Binary Ninja Headless MCP 需要 API Key 吗?

公开资料标注的认证方式是会话凭据,也就是要先拿到凭据才能连上;凭据只填在自己本地的配置里,不要写进公开仓库。

Binary Ninja Headless MCP 支持哪些客户端?

公开资料标注支持 Claude;其他客户端只要能配置 MCP Server,也能用同样的命令或地址接入。

来源信息

继续浏览同类 MCP