Skip to main content
Glama
imjdl

ghidra-fleet

by imjdl

ghidra-fleet

一个 MCP 服务器,同时分析任意多个二进制文件,零端口占用。

解决传统 GhidraMCP 的痛点:"1 个二进制 = 1 个 GUI 实例 = 1 个端口 = 1 份 MCP 配置"。 ghidra-fleet 完全无 GUI 运行(headless),AI 配置一次即可批量导入、并行分析、 跨样本交叉查询,分析结果落在标准 Ghidra 项目里,随时可以打开 GUI 人工复核。

MCP 客户端 ──stdio── ghidra-fleet (fastmcp)
                       ├─ core/runtime.py   PyGhidra 内嵌 JVM + 共享 .gpr 项目
                       │                    + 程序句柄懒加载 / LRU 逐出(控内存)
                       ├─ core/analyzer.py  批量分析:线程池并行、sha256 去重复用、
                       │                    后台作业 + 轮询(不受 MCP 30s 超时影响)
                       └─ core/queries.py   反编译/交叉引用/列表/重命名/跨样本搜索

安装

前置:已安装 Ghidra + Python 3.10+。

实测环境:Windows 11 + Ghidra 12.1 + Python 3.14。Linux/macOS 提供了对应的 安装脚本与跨平台测试(测试样本自动按平台选取),但未在 CI 上持续验证。

:: Windows
scripts\setup_env.bat <你的 Ghidra 安装目录>
# Linux / macOS
GHIDRA_INSTALL_DIR=/path/to/ghidra scripts/setup_env.sh

脚本会创建 .venv 并安装:fastmcp(PyPI)+ pyghidra(Ghidra 安装目录自带的 wheel,版本严格匹配)。若自带 jpype1 wheel 不覆盖你的 Python 版本,会自动 改用 PyPI 的兼容版 jpype1。

Related MCP server: Ghidra MCP Server

配置到 MCP 客户端

以 ZCode 为例,~/.zcode/cli/config.json 的 mcp.servers 里加(用户级), 路径换成你自己的:

"ghidra-fleet": {
  "type": "stdio",
  "command": "<repo>\\.venv\\Scripts\\python.exe",
  "args": ["-m", "ghidra_fleet"],
  "cwd": "<repo>",
  "env": {
    "GHIDRA_INSTALL_DIR": "<你的 Ghidra 安装目录>"
  },
  "timeoutMs": 120000
}

Linux/macOS 下 command 用 <repo>/.venv/bin/python。 timeoutMs 建议保留:首次调用要启动 JVM + Ghidra(约 10~30 秒),之后都是毫秒级。 旧的单文件 GUI 版 MCP 无需删除,两者共存。

工具一览(23 个)

所有查询/改名工具的第一个参数都是 binary,接受: 完整 program_name(ab12cd34__sample.exe)/ 原始路径 / 唯一文件名 / sha256 前 8 位。 用 list_binaries 随时查看全部。

类别

工具

说明

舰队

analyze_binaries

批量导入+并行分析(目录也可,单批上限 1000 个文件),立即返回 job_id

analysis_status

轮询作业进度(含每个文件的分析百分比/阶段,已完成的可立刻查询)

list_binaries

所有二进制 + 架构/大小/哈希/状态(missing = 幽灵记录)

delete_binary

删除一个二进制(项目文件 + manifest;也能清理幽灵记录)

find_in_all_binaries

跨全部样本搜同名函数/同字符串(找共享代码/家族特征,最多扫 200 个)

查询

list_functions / list_methods / search_functions_by_name

函数列表/搜索

decompile_function / decompile_functions

反编译 C(单个 / 批量最多 50 个,错误内联)

disassemble_function

反汇编

function_info

签名、参数、调用约定等

get_xrefs_to / get_xrefs_from / get_function_xrefs

交叉引用

list_imports / list_exports / list_segments / list_strings

导入导出/内存段/字符串

修改

rename_function / rename_data / rename_variable

重命名(即时保存)

set_function_prototype / set_local_variable_type

签名/变量类型

set_comment

注释(plate/pre/eol/post/repeatable)

典型工作流

用户: 把 C:\samples\ 下的 20 个样本都分析了,找出它们的共同特征

AI:  1. analyze_binaries(["C:\\samples"], recursive=true)   → job_id
     2. analysis_status(job_id)                              → 轮询到完成(旧样本秒级跳过)
     3. list_binaries()                                      → 拿到全部 program_name
     4. find_in_all_binaries("string", "http://")            → 跨样本特征
        find_in_all_binaries("function", "encrypt")          → 共享函数
     5. decompile_function("ab12cd34__x.exe", "FUN_00401000")
        rename_function("ab12cd34__x.exe", "FUN_00401000", "c2_beacon_decode")

改名/注释/类型修改即时保存进项目;用 Ghidra GUI 打开 <项目目录>/fleet.gpr(File → Open Project)即可看到 AI 的全部标注。

环境变量

变量

默认

说明

GHIDRA_INSTALL_DIR

(必填)

Ghidra 安装目录

GHIDRA_FLEET_PROJECT_DIR

~/.ghidra_fleet/projects

Ghidra 项目目录

GHIDRA_FLEET_PROJECT_NAME

fleet

项目名

GHIDRA_FLEET_MAX_WORKERS

min(4, CPU)

并行分析线程数;遇到分析器并发问题时设 1

GHIDRA_FLEET_MAX_OPEN

6

同时保持打开的程序数(LRU 逐出)

GHIDRA_FLEET_XMX

4G

JVM 堆上限;设空串用 Ghidra 默认

GHIDRA_FLEET_LOG

INFO

日志级别

测试

GHIDRA_INSTALL_DIR=<Ghidra 安装目录> .venv/bin/python tests/smoke_test.py [样本1 样本2 ...]
GHIDRA_INSTALL_DIR=<Ghidra 安装目录> .venv/bin/python tests/stdio_test.py

不传样本时自动挑选 PATH 上的系统小工具(Windows 用 where/robocopy 等, Linux/macOS 用 ls/true 等)。覆盖:并行分析、二次提交缓存跳过、重复内容去重、 各类查询、改名/签名/类型后逐出重开的持久性、跨样本搜索、stdio 协议层。

已知边界

  • 同一项目目录同一时间只允许一个 server 实例(Ghidra 项目锁):开多个 MCP 会话时, 第一个实例占用项目,其余实例会收到明确的锁冲突提示。多会话请错开使用, 或给不同会话配置不同的 GHIDRA_FLEET_PROJECT_DIR。关闭占用方后即可恢复。

  • 不要把 server 的启动脚本放在名为 ghidra 的目录下运行(也不要让 sys.path[0] 指向这种目录):Python 会把它当成 ghidra 命名空间包,与 pyghidra 的 Java 包 导入钩子冲突(递归爆栈)。用 python -m ghidra_fleet 从任意 cwd 启动是安全的。

  • 进程内并行分析在极少数格式上可能触发 Ghidra 分析器并发问题:把 GHIDRA_FLEET_MAX_WORKERS 设为 1 即退化为顺序分析,接口不变。

  • 分析进度按文件粒度上报百分比;部分 Ghidra 分析阶段本身不提供总量, 此时只显示阶段名(progress_pct 为 null)。

Available Tools

23 tools
analysis_statusAnalysis StatusA

查询分析作业进度。不传 job_id 时返回最近的所有作业。

NameRequiredDescriptionDefault
job_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the two distinct behaviors (single-job progress vs. list-all fallback), which is the most important trait here, but says nothing about whether the call is read-only, whether stale/finished jobs are retained or expired, or how many 'recent' jobs are returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the default behavior is front-loaded immediately after the purpose. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the single optional parameter's default is covered. However, for a job-status tool in a suite where jobs originate from analyze_binaries, the missing linkage to where job_id comes from is a real gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain the null/omitted case, but says nothing about the format of job_id or, critically, where an agent obtains one (presumably the response of analyze_binaries). That leaves the only real semantic question an agent has unanswered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: querying analysis job progress. 'Analysis job progress' is distinct from the binary-inspection siblings (decompile_function, list_strings, etc.), so an agent can tell this is the async-status counterpart to analyze_binaries without opening the schema. It doesn't explicitly name that relationship, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives a concrete conditional: omit job_id to get all recent jobs. That is useful branch guidance for the one parameter, but the description never says when to call this tool at all (e.g., after starting an analysis) or what to do if no jobs exist. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_binariesAnalyze BinariesA

批量导入并分析二进制文件(后台并行执行,立即返回 job_id)。

paths: 单个路径或路径列表;目录会展开为其中的文件(recursive=true 时递归展开)。 已分析过(相同 sha256)的文件会自动跳过并标记 cached。 返回后用 analysis_status(job_id) 轮询进度;已完成的二进制可以立刻查询。

NameRequiredDescriptionDefault
pathsYes
recursiveNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses async/background execution, immediate job_id return, sha256-based cache-skip behavior, and directory expansion semantics. It omits auth/rate-limit details, but the core execution model is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the async job_id behavior, then structured notes for paths and follow-up polling. Efficient and scannable, with minimal filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return-value detail isn't needed, and the description covers the async flow, polling follow-up, caching, and input expansion. Sufficient for an agent to invoke and follow up correctly; only advanced concerns like auth or error modes are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does: it explains paths can be a single string or list and that directories expand into contained files, and it explains recursive behavior. This adds real meaning beyond the bare anyOf schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a concrete verb and resource ('批量导入并分析二进制文件') and adds the key behavioral trait that it runs in the background in parallel and immediately returns a job_id. This clearly separates it from list_binaries and the query siblings, though it doesn't explicitly name a 'do not use if' alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent what to do after the call: '返回后用 analysis_status(job_id) 轮询进度'. It also describes input handling (directories expand, recursive=true recurses) and that already-analyzed files are skipped as cached. Clear usage context, just no explicit when-not-use exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

decompile_functionDecompile FunctionB

反编译函数为 C 伪代码。function 接受函数名(支持唯一子串)或入口地址。

NameRequiredDescriptionDefault
binaryYes
functionYes
max_charsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not say whether the binary must first finish analysis (the presence of analysis_status suggests an async pipeline), whether the operation is read-only, or what happens on ambiguity — despite claiming unique-substring matching, it never says how non-unique matches are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste; the core action comes first and the parameter note follows. Nothing is repeated from the schema or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not needed. However, for a 3-parameter tool with 0% schema coverage and no annotations, the description should at least identify the binary target and explain max_chars truncation behavior; those gaps leave it only minimally viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It gives genuinely useful semantics for the 'function' parameter (name with unique-substring support, or an entry address), but leaves 'binary' and 'max_chars' (default 20000, presumably a truncation limit on the returned pseudocode) completely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: decompile a function into C pseudocode. This implicitly contrasts with the sibling disassemble_function (assembly), but that contrast is never made explicit, so differentiation is only inferable from the word 'pseudocode'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given and no alternative is named, despite close siblings like disassemble_function, function_info, and analyze_binaries. The usage is only implied by the purpose statement (want readable C-like output rather than raw assembly).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

disassemble_functionDisassemble FunctionC

反汇编函数(汇编指令列表)。function 接受函数名或入口地址。

NameRequiredDescriptionDefault
binaryYes
functionYes
max_linesNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about prerequisites (analysis state), failure modes for unknown symbols/addresses, or truncation behavior. The only behavioral hint is the output form (instruction list).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight clauses with no waste; the output form is front-loaded. Brevity is appropriate, though the second sentence could have carried a bit more information at little cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be explained, but for a 3-parameter tool with zero schema coverage and no annotations, the description leaves 'binary' and 'max_lines' entirely undefined and omits the key precondition of analysis state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It does add real value by explaining that 'function' accepts either a function name or an entry address, but 'binary' and 'max_lines' remain completely undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('反汇编函数') and clarifies the output form (assembly instruction list), which distinguishes it in spirit from the sibling decompile_function. However, it never names decompile_function explicitly, so the differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to disassemble rather than decompile, and no stated preconditions (e.g., whether the binary must be analyzed/loaded first). The agent must infer the choice from sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_in_all_binariesFind In All BinariesB

跨所有已分析的二进制搜索(旧的单文件 MCP 做不到的核心能力)。

kind: "string" 或 "function"。query 为子串(不区分大小写)。 典型用途:在一批样本中找共同的函数名/字符串特征。最多扫描最近分析的 200 个二进制。

NameRequiredDescriptionDefault
kindYes
queryYes
limit_per_binaryNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose useful traits: case-insensitive substring matching and a scope cap of the 200 most recently analyzed binaries. It omits return format, aggregation behavior, and any permission/error context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in the first clause and stays compact with no wasted sentences. The parenthetical about the old MCP is slightly self-promotional but brief.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, a use case, two params, and the 200-binary scan cap, which is adequate for a 3-param read tool with no annotations or output schema. However, it leaves the limit_per_binary behavior and the shape of returned results unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It usefully defines kind ('string' or 'function') and query (case-insensitive substring), but says nothing about limit_per_binary (default 20), leaving one of three parameters undocumented in both schema and text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: search across all analyzed binaries, and contrasts it with the 'single-file MCP' it supersedes. It does not name the sibling search_functions_by_name, but the cross-binary scope is clearly distinguished.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one typical use case (finding shared function names/string features across a batch of samples), which implies when to reach for it. It never explicitly states when NOT to use it or names the single-binary alternative, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

function_infoFunction InfoB

查看函数详情:签名、入口地址、参数、返回类型、大小、调用约定。function 接受函数名或入口地址。

NameRequiredDescriptionDefault
binaryYes
functionYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It reveals one genuinely behavioral fact — the lookup accepts either a function name or an entry address — but never confirms it is a read-only, side-effect-free lookup, nor says anything about the `binary` target or error behavior when a function is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the purpose and the returned fields, then the argument convention. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema already covers return values, so the description needn't restate them, and for a simple read tool the description is close to sufficient. The remaining gap is the undocumented `binary` parameter and the absence of any fallback behavior guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate and it only does so partially: it explains that `function` takes a name or an entry address, but leaves the required `binary` parameter entirely unexplained. Half the parameters remain undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (查看/view) and resource (函数详情/function details) and enumerates exactly what is returned: signature, entry address, parameters, return type, size, calling convention. This implicitly separates it from list_functions or search_functions_by_name, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this instead of decompile_function, disassemble_function, or list_functions, and no prerequisites or exclusions. The only guidance is the brief note on what the `function` argument accepts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_function_xrefsGet Function XrefsC

查看函数的调用者(谁调用了这个函数)。

NameRequiredDescriptionDefault
binaryYes
functionYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden and discloses almost nothing: not the return shape (call sites, addresses, containing functions), not whether analysis must be complete first (see analysis_status), and not any failure mode for unknown functions or binaries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste and the key concept front-loaded, but the brevity is under-specification rather than efficiency — it omits everything an agent needs to call the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations, no output schema, and 0% parameter coverage, the description should explain input formats and return content. Instead it provides one sentence, leaving the caller to guess both parameter conventions and what the response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters have 0% schema description coverage. The description implies 'function' is the function whose callers are wanted, but never clarifies whether it is a name, address, or ID, and 'binary' is completely unexplained (path, name, or handle). With low coverage the description must compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource in concrete terms: view the callers of a function (who called this function). An agent understands the operation, but the description never distinguishes it from the sibling tools get_xrefs_to and get_xrefs_from, which appear to cover the same ground.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(who called this function)' implies the direction of the query (incoming references), which implicitly separates it from get_xrefs_from. However, no alternative is named and there is no guidance on when to prefer this over get_xrefs_to.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_xrefs_fromGet Xrefs FromC

查看指定地址向外的所有引用(它引用了谁)。

NameRequiredDescriptionDefault
binaryYes
addressYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden and mostly does not. It implies a read-only lookup via '查看' but says nothing about return shape, resolution failures for invalid addresses, whether unanalyzed binaries work, or any limits — real gaps for an xref query whose results depend heavily on prior analysis state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the direction constraint front-loaded and no filler. It is efficient, though its brevity is partly a consequence of under-specification rather than tight editing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and 0% schema description coverage, the description would need to do all the work and instead covers only direction. An agent cannot tell what the results look like or how to supply the binary parameter correctly, which is inadequate for a two-required-parameter address-resolution tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the schema contributes no parameter documentation at all. The description only clarifies that 'address' is the source address whose outbound edges are listed; the required 'binary' parameter is never explained (which binary identifier is expected, and where to obtain it), leaving half the inputs undefined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (view all outbound references from a given address) and parenthetically clarifies directionality ('它引用了谁'). The word '向外' implicitly contrasts with the sibling get_xrefs_to, but the sibling is never named, so the agent must infer the pairing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the direction qualifier suggests this is the tool for caller→callee edges rather than incoming references. There is no explicit statement of when to prefer this over get_xrefs_to or get_function_xrefs, and no prerequisites (e.g., that the binary must already be analyzed) are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_xrefs_toGet Xrefs ToC

查看引用到指定地址的所有交叉引用(谁引用了它)。

NameRequiredDescriptionDefault
binaryYes
addressYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It only says 'view' (查看), implying a read operation, but does not disclose required permissions, whether the binary must be preloaded/analyzed, address format expectations, return shape, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is appropriately sized, though its brevity contributes to the missing behavioral and parameter detail elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two required undocumented parameters, no annotations, and no output schema, the description is materially incomplete. It does not explain how 'binary' and 'address' should be supplied, nor what the tool returns or requires operationally.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate for both required parameters. It mentions the target 'address' but adds no format or meaning details, and it does not explain the required 'binary' parameter at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: viewing cross-references that point to a given address, with the parenthetical '(who references it)' reinforcing direction. It implicitly contrasts with get_xrefs_from by specifying references *to* the address, but it does not name that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose: use this to find who references an address. However, there is no explicit guidance on when to choose this over get_xrefs_from, get_function_xrefs, or other xref-related siblings, and no exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_binariesList BinariesA

列出项目中所有已分析的二进制及其元数据(program_name、架构、大小、sha256、状态)。

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses that only already-analyzed binaries are returned and what metadata accompanies each, but says nothing about ordering, pagination, or behavior on an empty project.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste; the parenthetical field list is compact and informative. It is slightly under-elaborated rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return shapes, and it still enumerates the key fields. For a no-parameter list tool the only real gap is sibling differentiation and pagination/ordering behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description correctly implies no input filtering is required and offers no misleading parameter claims.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('列出...所有已分析的二进制') plus the metadata fields returned (program_name, architecture, size, sha256, status). It does not explicitly contrast with siblings like find_in_all_binaries or analysis_status, but an agent can identify it as a project-wide binary enumerator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the word '所有' (all binaries in the project) — there is no explicit statement of when to prefer this over analysis_status or find_in_all_binaries. The '已分析' qualifier hints at scope but never names an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_exportsList ExportsC

列出导出符号。

NameRequiredDescriptionDefault
limitNo
binaryYes
offsetNo

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and delivers essentially nothing: no statement that this is a read-only operation, no pagination behavior, no indication of what happens with an invalid or missing binary, no return format. The presence of limit/offset in the schema hints at pagination, but the description contributes no behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence is technically waste-free, but here brevity is under-specification rather than conciseness; it is front-loaded with nothing to load. There is no second sentence earning its place because the essential content is absent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter tool with zero annotation coverage, no output schema, and no schema descriptions, the definition leaves the agent without enough information to call it confidently. It doesn't even clarify the required `binary` argument or the paging contract.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and all three parameters (`binary`, `limit`, `offset`) are undocumented. The description adds no meaning to any of them — it does not say that `binary` is a path or identifier, nor clarify the default 100/0 paging semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"列出导出符号" names a verb (list) and a resource (exported symbols), which is more than a tautology of the title. But it never says exported symbols of what (the required `binary` parameter), nor distinguishes it from near-identical siblings such as list_imports, list_functions, or list_strings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of alternatives among the many list_* siblings, and no prerequisites (e.g., that a binary must first be registered via list_binaries/analyze_binaries). The agent must infer everything from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_functionsList FunctionsB

列出二进制中的所有函数(分页)。filter 为函数名子串过滤(不区分大小写)。

NameRequiredDescriptionDefault
limitNo
binaryYes
filterNo
offsetNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose two useful traits (paginated, case-insensitive substring matching), but says nothing about result ordering, pagination termination, or what happens with an invalid/ambiguous binary identifier.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the core action and the most non-obvious parameter constraint front-loaded. Nothing repeats the tool name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description never indicates what a 'function' record contains (name only, address, signature?) or how pagination results signal completion. For a 4-parameter tool with no annotations and no output schema, more disclosure is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain 'filter' precisely (substring, case-insensitive) but leaves 'binary' (name, ID, or path?), 'limit', and 'offset' entirely to the schema's bare types and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('列出二进制中的所有函数') plus the pagination behavior. It does not distinguish itself from the closely overlapping sibling search_functions_by_name, whose job partially duplicates the 'filter' parameter described here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: enumerate all functions in a binary, optionally narrowed by a name substring. It never says when to prefer search_functions_by_name, list_methods, or function_info instead, so the agent must infer routing from the sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_importsList ImportsC

列出导入符号(库!名称)。

NameRequiredDescriptionDefault
limitNo
binaryYes
offsetNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, yet it discloses only that results are rendered as library!name. It does not cover read-only safety, required binary state, error behavior when a binary is unknown, or whether results are truncated by a default limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste, but its terseness comes at the cost of under-specification rather than disciplined economy. The format hint is front-loaded, which is good.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter extraction tool with no annotations and no output schema, the description should explain the binary reference, pagination defaults, and preconditions. None of that is present, so an agent cannot call it confidently without trial and error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters (binary, limit, offset) have 0% schema description coverage, and the description only hints at output formatting rather than explaining parameters. Nothing says whether 'binary' is a path, hash, or ID from list_binaries, nor how limit/offset paginate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('列出导入符号' = list imported symbols) and adds a format hint ('库!名称' = library!name). The import/export and import/function distinctions are inferable from the name, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this versus list_exports, list_functions, or find_in_all_binaries, and no prerequisites such as whether the binary must be loaded or analyzed first. The agent must infer the usage context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_methodsList MethodsD

list_functions 的别名(兼容旧工具名习惯)。

NameRequiredDescriptionDefault
limitNo
binaryYes
filterNo
offsetNo

TDQS

D1.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it discloses nothing: no read-only status, no pagination behavior, no scope or filtering semantics, no error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with no padding, but the brevity is under-specification rather than economy — there is essentially no content to be concise about.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A 4-parameter tool with a required binary path, zero annotation coverage, no output schema, and a large sibling set that includes list_functions — the description gives the agent nothing needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Four parameters (binary, filter, limit, offset) with 0% schema description coverage and the description says nothing about any of them — not what 'binary' accepts, not what 'filter' matches on, not pagination semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description only says it is an alias of list_functions; it never states the verb+resource itself (list methods/functions in a binary). An agent must already know what list_functions does, and list_functions's own description is not available to it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical 'compatibility for legacy tool-name habits' weakly implies this exists only for backward compatibility, but it never says explicitly to prefer list_functions or when this variant should be chosen instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_segmentsList SegmentsB

列出内存段(名称、范围、读写执行权限、大小)。

NameRequiredDescriptionDefault
binaryYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden: the word 'list' implies a read-only operation, and the parenthetical enumerates the returned attributes (name, range, permissions, size), which is genuinely useful behavioral context. However, it says nothing about whether the binary must be pre-analyzed, what happens if it isn't, or whether the result is paginated or truncated for large binaries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence that front-loads the action and spends its remaining words on the most useful detail (the returned fields). Nothing is wasted and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates return fields, which covers the return-value gap. But it omits the meaning/format of the required binary argument and any precondition about prior analysis, so an agent still has to guess how to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single required 'binary' parameter, and the description never mentions it — leaving unclear whether the value is a file path, a display name, or an ID from list_binaries. This is the main gap in the definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list memory segments) and enumerates the fields returned, which distinguishes it clearly from siblings like list_functions or list_strings. It doesn't explicitly contrast with a related sibling, but no sibling covers memory segments, so the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to use this tool versus alternatives, nor any prerequisite such as the binary needing to be analyzed first (analysis_status exists as a sibling). Usage is only inferable from the tool name and the surrounding toolset.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_stringsList StringsC

列出程序中的字符串(分页,filter 子串过滤)。

NameRequiredDescriptionDefault
limitNo
binaryYes
filterNo
offsetNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that results are paginated and filterable, but says nothing about result ordering, what a 'string' means here (ASCII/Unicode, min length), or the shape/size of the response — meaningful gaps for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the core verb and qualifiers front-loaded and no filler. It is efficient, though borderline terse for the schema it fronts.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four undocumented parameters, no annotations, and no output schema, the description should explain the 'binary' identifier, ordering, and return characteristics; it covers only pagination and filtering at a high level, leaving the required-parameter semantics and result format unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all four parameters. The description only loosely glosses pagination (limit/offset) and substring filtering, and never explains the required 'binary' parameter (path? id? name?), which is the most critical input to get right.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb+resource ('list strings in the program') and adds scope details (paginated, substring filtering). It does not distinguish this from sibling tools that also surface strings or search across binaries, so an agent must infer that this operates on a single binary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the mention of 'filter 子串过滤' suggests using it to search strings, but there is no explicit when-to-use, when-not-to-use, or pointer to alternatives such as find_in_all_binaries or list_functions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_dataRename DataC

在指定地址设置/重命名数据标签。

NameRequiredDescriptionDefault
binaryYes
addressYes
new_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, yet it says nothing about whether an existing label is overwritten, whether the address must already have a label, or what errors occur on an invalid address. Mutation semantics and side effects are left entirely undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste, but it is under-specified rather than concise; the brevity reflects missing information rather than disciplined editing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, but for a mutation tool with zero annotation coverage, undocumented parameters, and no usage context, the description is not sufficient to call the tool reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three required parameters, and the description only gestures at 'address' and implicitly the new name. The 'binary' parameter — which binary the address refers to — is never explained, leaving a critical ambiguity unresolved.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a verb (set/rename) and a resource (data label at an address), which distinguishes it somewhat from siblings like rename_function and rename_variable. However, the dual wording "设置/重命名" leaves it ambiguous whether the tool creates a label or renames an existing one, and it never mentions the 'binary' target that scopes the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus rename_function, rename_variable, or set_comment, nor any prerequisite such as the binary needing to be loaded or analyzed first. The agent must infer applicability entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_functionRename FunctionB

重命名函数(立即保存到项目,GUI 打开同一项目可见)。

NameRequiredDescriptionDefault
binaryYes
new_nameYes
old_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden, and it does disclose two useful traits: the change is persisted immediately to the project and is visible to a GUI opened on the same project. It says nothing about whether xrefs/callers are updated, whether the rename can be undone, or what happens if old_name is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact parenthetical sentence, front-loaded with the action. Nothing is wasted, though the brevity is partly under-specification rather than pure efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the persistence note covers the main side-effect question. Gaps remain for a mutation tool with no annotations: parameter meaning and failure modes are undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three required parameters, so the description is the only source of meaning and it adds none: binary, old_name and new_name are only inferable from their names. In particular it does not say whether 'binary' is a path, an index, or a name from list_binaries.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (重命名/rename) and resource (函数/function), which cleanly distinguishes it from rename_data, rename_variable and set_function_prototype among the siblings. It stops short of saying which function lookup key is used, but the action itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool for changing a function's name in a loaded binary. It never says when to prefer it over rename_variable or set_function_prototype, nor what preconditions must hold (e.g. the function must already exist in the listed binary).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_variableRename VariableC

重命名函数内的局部变量/参数。

NameRequiredDescriptionDefault
binaryYes
functionYes
new_nameYes
old_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: it does not say whether the rename updates all references/xrefs, whether it mutates the binary on disk or only the session view, or whether it can fail on non-local or ambiguous names. Only the bare fact of mutation is implied by the verb.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no padding, so nothing needs trimming. However, the brevity is under-specification rather than efficiency – the one clause is front-loaded but leaves the agent with nothing actionable beyond the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, but for a four-required-parameter mutation tool with no annotations and 0% schema coverage the description is far too thin. Key questions an agent needs answered – reference propagation, persistence, failure modes – are left open.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters (binary, function, old_name, new_name) have 0% schema description coverage, so the description must compensate and does not. It never explains the expected format of binary (path vs. identifier), how function is identified, or whether old_name must match exactly or can be qualified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (重命名/rename) and a specific resource (函数内的局部变量/参数 – a local variable or parameter inside a function), which distinguishes it from the sibling rename_function and rename_data by scope. It does not name those siblings explicitly, but the scope wording is enough for an agent to tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this rather than rename_function, rename_data, or set_local_variable_type, and no prerequisites are stated (e.g. whether the function must first be analyzed/decompiled). The agent must infer the usage entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_functions_by_nameSearch Functions By NameC

按名称子串搜索函数(不区分大小写)。

NameRequiredDescriptionDefault
limitNo
queryYes
binaryYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that matching is a case-insensitive substring search, which is useful, but says nothing about the binary scope, result limits, return behavior, or safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no wasted words and the core matching rule is front-loaded. However, it is under-specified rather than optimally concise for a three-parameter search tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given three parameters, no annotations, no output schema, and 0% schema description coverage, the description is too sparse. It covers the query matching rule but omits the role of the binary scope and the result limit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all three parameters. It clarifies the query semantics as a case-insensitive substring, but does not explain the required 'binary' parameter or the 'limit' parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation: search functions by name substring, case-insensitively. It is clear enough to distinguish from generic listing, but it does not explicitly distinguish itself from siblings such as list_functions or find_in_all_binaries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only implies that this tool is used when searching by name substring. It gives no guidance on when to use it instead of list_functions or find_in_all_binaries, and no exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_commentSet CommentC

在指定地址设置注释。kind: plate/pre/eol/post/repeatable(默认 eol)。

NameRequiredDescriptionDefault
kindNoeol
binaryYes
addressYes
commentYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, but it only says 'set' — it never states that this mutates the underlying database, whether the write is persistent/undoable, what permissions or open-file state are required, or what happens if an address already has a comment. 'Set' implies mutation, but no consequence is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the core action front-loaded and the kind enumeration immediately after; nothing is redundant. It is efficient, though brevity here comes partly at the cost of missing information rather than pure economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, but for a 4-parameter mutation tool with zero annotation coverage and 0% schema description coverage, the description is far too thin: address format, binary identifier semantics, and write behavior are all absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 4 parameters, yet the description only explains 'kind' (enumerating plate/pre/eol/post/repeatable and the eol default). It says nothing about the required 'binary', 'address' (format? hex? virtual address vs offset?), or 'comment' parameters, leaving three required inputs undocumented in both schema and prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('设置注释' at a specified address), which clearly distinguishes it from siblings like rename_function or rename_data. It also names the tool-specific concept 'kind' with its allowed values, so an agent knows this is the comment-annotation operation. No explicit sibling differentiation beyond the resource name, keeping it at 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this versus alternatives such as rename_data or rename_variable, nor any preconditions (e.g. that the address must be inside a disassembled function or that the database must be open for writing). The only usage hint is the kind default, which is parameter-level information rather than when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_function_prototypeSet Function PrototypeC

设置函数原型/签名,例如 'int func(char *buf, int len)'。

NameRequiredDescriptionDefault
binaryYes
functionYes
prototypeYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It does not say whether an existing prototype is overwritten, what happens if the signature fails to parse or the function is missing, what permissions or analysis state are required, or whether the change is persisted to the database.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the verb, resource, and a compact example — no filler, front-loaded. The terseness is efficient but borders on under-specification for a three-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, but the gaps are substantial: with zero annotation coverage and 0% schema documentation, the agent still lacks the identifier format for 'binary' and 'function' and has no idea what state the binary must be in for the prototype to apply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so all three required parameters depend on the description. The example implicitly clarifies the 'prototype' parameter's expected C syntax, but 'binary' (path? ID? name?) and 'function' (name? mangled? address?) receive no explanation at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (set a function's prototype/signature) and reinforces it with a concrete C-style example, so an agent knows exactly what changes. It does not explicitly contrast itself with siblings like rename_function or set_local_variable_type, so differentiation is only inferable from context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus rename_function, set_local_variable_type, or decompile_function, nor any stated preconditions (binary must be loaded/analyzed, function must already exist). The example shows the input format but not the usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_local_variable_typeSet Local Variable TypeC

设置函数局部变量/参数的类型,例如 'char *'、'unsigned int'、'struct MY_STRUCT *'。

NameRequiredDescriptionDefault
binaryYes
functionYes
new_typeYes
variable_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It says 'set' and implies mutation, but does not disclose side effects, persistence, permissions, reversibility, or how the change affects analysis state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. The type examples are useful and earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. However, for a mutation tool with no annotations and four undocumented required parameters, the description is too thin on behavioral and parameter context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only indirectly explains new_type through examples such as 'char *' and 'unsigned int'. It does not add meaning for binary, function, or variable_name beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: setting the type of a function's local variable or parameter. It is clearly distinct from rename_variable and set_function_prototype by scope, but it does not explicitly name sibling tools or contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as rename_variable or set_function_prototype, nor any prerequisites or exclusions. Usage is only implied by the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 23 tool updatesv0.1.0
    • First observedanalysis_status
    • First observedanalyze_binaries
    • First observeddecompile_function
    • First observeddisassemble_function
    • First observedfind_in_all_binaries
    • First observedfunction_info
    • First observedget_function_xrefs
    • First observedget_xrefs_from
    • First observedget_xrefs_to
    • First observedlist_binaries
    • First observedlist_exports
    • First observedlist_functions
    • First observedlist_imports
    • First observedlist_methods
    • First observedlist_segments
    • First observedlist_strings
    • First observedrename_data
    • First observedrename_function
    • First observedrename_variable
    • First observedsearch_functions_by_name
    • First observedset_comment
    • First observedset_function_prototype
    • First observedset_local_variable_type

TDQS

C2.7/5.0

Scored across 23 tools

Disambiguation3/5

Several tools overlap: list_methods is an explicit alias of list_functions, search_functions_by_name overlaps with filtered list_functions, and get_function_xrefs overlaps with get_xrefs_to on function entries. find_in_all_binaries is also adjacent to single-binary search tools. Descriptions help clarify intent, but an agent may still hesitate between similar query paths.

Naming Consistency4/5

Most names follow a consistent snake_case verb_noun style such as analyze_binaries, list_functions, decompile_function, and rename_variable. Minor deviations like analysis_status and function_info are noun-first, and list_methods introduces an alternate noun for the same concept, but the overall convention is predictable.

Tool Count3/5

At 23 tools, the surface is at the heavy end for a single MCP server, though the Ghidra reverse-engineering domain is broad. The explicit list_methods alias adds redundancy, and some list/search/xref tools could potentially be consolidated. It is usable but borderline heavy.

Completeness4/5

The surface covers batch analysis, status polling, binary listing, cross-binary search, function listing/search, decompilation, disassembly, xrefs, imports/exports, segments, strings, and several mutation operations. Minor gaps remain around deletion/project lifecycle and listing variables or data beyond rename operations, but core workflows are well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to autonomously reverse engineer binaries using Ghidra's capabilities including decompilation, function analysis, automatic renaming, and BSim integration for function similarity matching.
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables importing and auto-analyzing binaries with Ghidra's headless analyzer, then listing, decompiling, disassembling, cross-referencing, searching, and annotating them — individually or across a whole project — without requiring a running GUI or bridge plugin.
    Apache 2.0
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to import, disassemble, and debug binaries directly so they can perform cross-reference reasoning, rename stripped functions, and recover structure layouts during native reverse-engineering workflows. It integrates with offline ELF reconnaissance output to support symbol and struct recovery without opening the Ghidra GUI.
    -