IDA-MCP
IDA-MCP is an MCP server for headless/attached IDA database lifecycle management and full reverse-engineering, modification, debugging, and IDAPython documentation lookup over stdio.
Open/attach binaries or .i64/.idb databases, list/select/save/close instances, health-check, and wait for auto-analysis.
Inspect metadata, segments, functions, globals, imports/exports, strings, structs, local types, entry points, basic blocks, and stack frames.
Disassemble, decompile, search bytes/instructions/text/symbols, query xrefs, callers/callees, call graph, and data flow.
Rename functions/globals/locals, set comments/bookmarks, create/delete functions/segments/code/data/strings, declare types/enums/structs/typedefs/stack vars, patch bytes/asm, and export patched files.
Use debugger tools for breakpoints, stepping, continue/run-to, registers, memory read/write, callstack, thread registers, status, and debugger start/exit.
Run Python in IDA context or script files, generate signatures, diff decompilation before/after modifications, and force Hex-Rays recompilation.
Search official IDAPython API docs with BM25, optionally filtered by module.
Provides Python-based tools for interacting with IDA Pro instances, enabling programmatic access to reverse engineering functions, binary analysis, and disassembly operations through IDA's Python API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@IDA-MCPlist all functions in the current binary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
IDA-MCP-Hub
IDA Pro 的 MCP(Model Context Protocol)服务器:stdio 传输、无头 idalib worker、 多实例生命周期管理与官方 IDAPython 文档查询。工具目录为本项目自有的 反汇编/反编译/修改/调试全量 API(90 个工具)。纯 idalib 架构:无 GUI 插件、 无 IDA 可执行文件路径依赖。
MCP 客户端 ──stdio──▶ idamcp-hub 独立进程
│ ├─ 实例发现:<IDAUSR>/ida-mcp/instances.json
│ └─ 直连各 worker 进程内的 JSON-RPC 桥(无网关、无端口注册转发)
▼
无头 idalib worker ×N(自动创建/分析 .i64,含调试器)核心特性
stdio 唯一传输(
uvx idamcp-hub stdio)。HTTP/网关/端口注册转发机制已删除。open_database:附加已存在的同文件 worker,或启动无头 idalib worker (自动创建并分析 .i64)。
多实例(无状态路由):
list_databases / save_database / close_database, 以 instance_id 标识各数据库;无select_database默认选中——每次调用显式传instance_id,省略时仅在恰好一个活跃实例时隐式路由,多实例并存时省略即报错 (多 agent 并发不会互相改道)。无头 worker 随最后一个使用者关闭(默认先保存)。官方 IDAPython 文档:
ida_python_reference(query)基于当前 IDA 运行时构建 BM25 索引(约 2 万条 API 签名 + 文档字符串),版本永远匹配。worker 进程内零第三方依赖:桥为纯标准库实现。
调试器无头可用:
dbg_start自动加载本机调试器(linux/win32/macos,可传debugger="gdb"走远程),IDA 9 删除官方调用栈 API 后由帧指针链自动重建。
Related MCP server: ida-pro-mcp-plus
安装
前置:IDA Pro 9.0+(含 idalib)。推荐 HCLI 一条龙(无需手填任何路径):
hcli ida install --download-id ida-pro:latest --set-default --accept-eula --yes1. 配置无头 worker 解释器(可选——运行时也会自动探测)
python scripts/hcli_install.py # 探测能 import idapro 的解释器(通常即
# IDA 自带 ida-python 运行时)并缓存 ida_python2. 独立 MCP 服务器
# 无需克隆,直接从 GitHub 运行(也可换成任意 ref / 本地路径):
uvx idamcp-hub stdio
# 指定仓库/分支(未发布新版时):
uvx --from git+https://github.com/Captain-AI-Hub/IDA-MCP idamcp-hub stdio
# 或从源码:
python -m ida_mcp stdioPyPI 包名 idamcp-hub,已发布,uvx idamcp-hub stdio 即开即用。
发布方式:推送 v* tag 触发 .github/workflows/pypi-publish.yml
(优先用仓库 secret PYPI_API_TOKEN,未设置时走 trusted publisher)。
MCP 客户端配置(HCLI/安装器安装完成后打印同款,可直接复制):
{
"mcpServers": {
"ida-mcp": { "command": "uvx", "args": ["idamcp-hub", "stdio"] }
}
}3. 无头 worker 的 Python(idalib)
无头 open_database 需要一个 import idapro 可用 的 Python。检测顺序:
配置
idalib_python配置/检测的
ida_python~/.idapro/ida-config.json中ida-install-dir下的ida-python(自编译运行时)<state>/idalib-venv与~/.idapro/venv
首次探测成功会写入用户级配置 ~/.idapro/ida-mcp/config.conf 缓存。
若还没有激活的运行时:pip install <IDA>/idalib/python/idapro-*.whl 后运行
python <IDA>/py-activate-idalib.py。
CLI
idamcp-hub # = idamcp-hub stdio
idamcp-hub instances list # 列出活跃 worker 实例
idamcp-hub open <path> # 无头打开(自动创建/分析 .i64)
idamcp-hub close [--id ID] [--terminate]
idamcp-hub save [--id ID]
idamcp-hub tool call <name> --params '{"addr":"main"}'
idamcp-hub reference "decompile function" [--module ida_funcs]
idamcp-hub config show配置
ida_mcp/config.conf(包内)与 ~/.idapro/ida-mcp/config.conf(用户级,优先生效),
仅 3 个键:ida_python(能 import idapro 的解释器,通常为 IDA 自带
ida-python 运行时;留空则按 用户配置 → IDA 安装目录自带 → 托管 venv 探测并
缓存)、request_timeout、debug。scripts/hcli_install.py 可一次性写入;
日常无需手工配置。实例桥固定 127.0.0.1:13337+,无需配置。
环境变量覆盖:IDA_MCP_CONFIG_<KEY>。
工具面
生命周期:
open_database、list_databases、save_database、close_database、check_connection文档:
ida_python_reference(query, module=None)后端目录(90 个,每个都可带
instance_id指定目标实例;多实例并存时必传): 反编译/反汇编/xref/搜索/重命名/注释/patch/类型/结构体/栈帧/内存/py_eval/dbg_*等全量开放,见 API.md。
运行时边界
IDA 运行时:所有 SDK 调用经 worker 主线程队列串行执行(idalib 单线程约束)。
独立进程:任何 Python ≥3.11;fastmcp 4.x;不接触 IDA SDK。
测试:
pytest——无可用 IDA/idalib 时后端测试自动跳过;本机有 idalib 时会 无头启动test/samples/complex.exe实例实测(--ida-open-timeout可调)。
布局
IDA-MCP/
├── ida_mcp/
│ ├── bridge_server.py # worker 内 JSON-RPC 桥(纯标准库)
│ ├── worker.py # 无头 idalib worker 进程
│ ├── mcp_server.py # 独立 stdio MCP 服务器
│ ├── instances.py # 共享 JSON 实例清单
│ ├── lifecycle.py # open/close/save/attach 生命周期
│ ├── bridge_client.py # 桥 HTTP 客户端
│ ├── idapython_docs.py # 官方 IDAPython 文档索引(BM25)
│ ├── api_*.py # 工具目录(反汇编/反编译/修改/调试…)
│ └── sync.py / rpc.py # 工具注册与调用标记
├── scripts/hcli_install.py # idalib 解释器探测/配置
├── test/ # pytest 套件(单元 + 无头真机含调试器)
└── API.md / project.md / roadmap.mdAvailable Tools
91 toolsadd_segmentAdd SegmentC
Add a new memory segment to the IDB.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Segment name (e.g. '.text', 'my_seg') | |
| perm | No | Permission string: combination of r/w/x (e.g. 'rwx', 'r-x') | rw- |
| size | Yes | Segment size in bytes | |
| bitness | No | Address size: 16, 32, or 64 | |
| timeout | No | Timeout in seconds | |
| start_ea | Yes | Segment start address (hex string, e.g. '0x401000') | |
| seg_class | No | Segment class (e.g. 'CODE', 'DATA', 'BSS') | DATA |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for a mutation tool and adds nothing: no mention of permission requirements, what happens if the range overlaps existing segments, whether the segment is persisted, or error behavior. Only the bare action 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and wastes no words, but brevity here reflects under-specification rather than disciplined editing for an 8-parameter mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with 8 parameters, no annotations, and no output schema, the definition leaves out preconditions, side effects, and failure modes. The strong schema offsets some of this, but the description itself is far from complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including examples for name, perm, start_ea, bitness, and the multi-instance rule for instance_id, so the schema already documents every parameter. The description adds no syntax, ordering, or constraint detail beyond it, which matches the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a new memory segment to the IDB'), which is clearly distinct from delete_segment and list_segments. It does not explicitly name siblings or scope the tool's role in a workflow, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to create a segment versus using make_data, list_segments first to check for overlaps, or whether the database must be saved afterwards. The agent must infer all preconditions from the schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_patchApply PatchC
Apply IDB byte patches to a copied input file and export it.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| overwrite | No | Overwrite output_path if it already exists | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| output_path | No | Output file path. Defaults to '<input>.patched<ext>'; relative paths are resolved next to the input file. |
TDQS
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 usefully notes that the original input file is copied rather than modified in place, but it never says where the patches come from (the open instance's in-memory edits?), what happens if no patches exist, whether the output is verified, or whether the export requires the database to be saved first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the outcome front-loaded and no filler. The brevity is appropriate, though it comes at the cost of the missing context noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation/export tool with no annotations and no output schema, the description leaves the central operand undefined: there is no patch-set parameter and no explanation that the patches are the pending in-memory byte edits of the open instance. An agent can read the schema and still not know what will actually be written to the output file.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains instance_id, output_path defaults, overwrite and timeout in detail. The description adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb (apply) and a concrete outcome (a patched copy of the input file is exported), which is more than a restatement of the name. But 'IDB byte patches' is unexplained jargon, and the definition never distinguishes this from the sibling write tools patch_bytes and patch_asm, so an agent cannot tell which one to reach for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus patch_bytes, patch_asm, save_database or save_idb, and no prerequisites (e.g., an open database with pending byte edits) are given. The only implicit guidance is that it is an export-style operation on a copy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
callgraphCallgraphC
Build a call graph by walking call references from the root function(s).
| Name | Required | Description | Default |
|---|---|---|---|
| roots | Yes | Root function name(s) or address(es) (comma-separated ok) | |
| timeout | No | Timeout in seconds | |
| max_depth | No | Maximum call depth from the roots | |
| max_nodes | No | Maximum functions to include | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls short. It says nothing about what happens at unresolved/external/imported calls, whether the walk is breadth- or depth-first, whether output is a tree/edge list, or what cost a large graph incurs — the depth/node caps live only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the outcome and the traversal mechanism, no filler. It is efficient but so terse that it borders on under-specification rather than tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 5-parameter traversal tool with no annotations and no output schema, so the description must explain traversal semantics and result shape — and it does not. Given the richness of the sibling set (get_callees, get_callers, trace_data_flow, xrefs_from/to), the missing differentiation and return-format detail is a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the unusual instance_id rule and the anyOf forms for roots, so the schema does the heavy lifting. The description adds nothing about parameter behavior beyond restating 'root function(s)', which warrants only the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Build a call graph') and the mechanism ('walking call references from the root function(s)'), so an agent knows this is a recursive traversal rather than a lookup. However, it never distinguishes itself from siblings like get_callees/get_callers (direct neighbors) or trace_data_flow, which is the main ambiguity an agent faces here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. 'Walking' implies transitive/recursive expansion versus get_callees' single-hop listing, but that distinction is left to inference rather than stated, and no alternative tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_connectionCheck ConnectionA
Health check. Returns {ok, instance_id, pid, input_file, ...} for the resolved IDA instance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 the return payload fields, but does not state side effects, failure behavior, or what 'resolved' means for instance selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the health-check purpose and then the return payload. No wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter health check, the description is nearly sufficient: it explains the purpose and lists key return fields. It could say more about error/negative results, but no output schema exists and the core call is understandable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document; the baseline for zero-parameter tools is a 4. The description appropriately does not fabricate parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation (health check) and identifies the target resource (the resolved IDA instance), with concrete return fields. It does not explicitly differentiate itself from nearby diagnostic tools such as dbg_status or get_metadata, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The health-check framing implies when the tool is useful, but it gives no explicit guidance on when to prefer it over siblings or when not to use it. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_databaseClose DatabaseA
Release an IDA database worker: saved and shut down when the last user detaches; terminate=true forces shutdown. Use when its analysis is finished or no longer needed — the other instances are unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | Save the database before closing | |
| terminate | No | Force shutdown even while other agents still hold leases on this worker | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses meaningful behavior: deferred shutdown on last detach, forced termination override, and lack of impact on other instances. It does not describe return values or whether unsaved changes are handled when save=false, but the lifecycle semantics are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences, front-loaded with the core operation and followed by usage and safety context. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter lifecycle tool with fully documented schema and no output schema, the description covers purpose, timing, and key safety behavior sufficiently. Minor gaps remain around return values and unsaved-change behavior when save=false, but those are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The description reinforces terminate=true behavior but adds little beyond that, which is appropriate given the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource combination ('Release an IDA database worker') and explains the core lifecycle behavior: saved and shut down on last detach, or forced shutdown with terminate=true. It is clearly distinguishable from siblings like save_database and open_database.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to use the tool: 'when its analysis is finished or no longer needed.' It also notes that other instances are unaffected, helping avoid misuse. No explicit alternative tool is named, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_numberConvert NumberB
Convert number to hex/unsigned/signed representations.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Bit width: 8, 16, 32, or 64 | |
| text | Yes | Numeric text (decimal, 0x, 0b, trailing h) | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. 'Convert' implies a pure, non-destructive computation, but the description never confirms this is side-effect free, never describes what output forms are returned for a given input, and never notes error behavior for malformed numeric text. It gives the essentials for a low-risk utility but leaves real gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler and the verb leading. It is efficiently sized, though its brevity is partly what leaves the gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place to learn return shape, and it only gestures at it via 'hex/unsigned/signed representations'. It also omits the notable instance_id dependency (required when multiple databases are open), which the schema carries but which an agent could easily miss when composing calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with 'size' enumerating bit widths and 'text' enumerating accepted numeric formats, so the schema already does the heavy lifting. The description adds nothing about the parameters (e.g., how 'text' format interacts with 'size'), making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (convert) and resource (number) plus the target forms (hex/unsigned/signed), so an agent knows exactly what the tool computes. It does not distinguish itself from the closest sibling, read_scalar, which also surfaces numeric values from a database, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus alternatives, and no mention that it is a pure in-memory conversion needing no open database context (unlike read_scalar, which reads from an IDB). 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.
create_functionCreate FunctionC
Create a function at an address.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Optional function end address (exclusive) | |
| address | Yes | Function start address (hex or decimal) | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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, yet it says nothing about mutation side effects, failure modes (overlapping/undefined code), permission or instance requirements, or whether the operation is reversible. 'Create' implies a write, but nothing else 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the action and resource, with no filler. It is efficient, though its brevity edges into under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description should explain failure behavior, preconditions, and what is produced, none of which is present. The rich schema partly compensates on parameters, but behavioral completeness is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents address, end, timeout, and instance_id (including hex/decimal formats and the multi-instance requirement). The description only echoes 'at an address' and adds no syntax or constraint detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Create a function') plus the anchor ('at an address'), so an agent immediately knows the operation. It does not, however, distinguish this from siblings that also materialize code/functions such as make_code, patch_asm, or make_signature_for_function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this over make_code, what happens if a function already exists at that address, or what preconditions (open database, analysis complete) are needed. The agent must infer all of this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_add_bpDbg Add BpC
Add breakpoint(s) at address(es).
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Address(es) for breakpoint - single or comma-separated | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 does not meet it: it does not say whether the debugger must be running, whether the breakpoint persists in the saved database, or whether software vs hardware breakpoints are used. The mutation intent is only implied by 'Add'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is good — but here brevity comes from under-specification rather than tight framing of necessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a debugger-state-dependent mutation tool with no annotations and no output schema, the description omits the session preconditions, what gets created (and whether it can be removed with dbg_delete_bp), and any return information. The schema covers parameters fully, but everything else is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains the single-or-comma-separated address form, the timeout, and the critical instance_id multi-database rule. The description's 'address(es)' adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource pairing ('add breakpoint') is clear and, combined with the name, tells an agent this creates a breakpoint at an address while siblings dbg_delete_bp and dbg_enable_bp do something else. However, it is essentially a restatement of the tool name with no further scoping, so it sits at minimum-viable rather than adding distinguishing detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when this tool should be used versus alternatives, nor of prerequisites such as a debugger being started (dbg_start) or a database being open. An agent must infer the whole workflow from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_callstackDbg CallstackB
Get current call stack (requires active debugger).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses only the active-debugger prerequisite and omits important details such as whether the tool is read-only, whether execution must be paused, whether it targets the current thread, and what the call stack output contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It communicates the core action and the key prerequisite immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description should explain the return value and key runtime behavior. It does not describe the call stack result format, thread scope, or whether the debugger must be paused, leaving significant gaps for a debugger inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already explains both timeout and instance_id, including the detailed instance_id requirement. The description adds no additional parameter meaning beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get current call stack'. This clearly distinguishes it from sibling debugger tools like dbg_regs or dbg_status, though it does not explicitly name alternatives. The parenthetical prerequisite adds useful scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It includes the prerequisite 'requires active debugger', which gives clear context for use. However, it does not state when to use this tool versus alternatives such as dbg_regs, dbg_thread_regs, or dbg_status, leaving usage guidance implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_continueDbg ContinueC
Continue execution.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 nothing. It does not say whether the call blocks until the next breakpoint/exit, how the timeout parameter changes that behavior, what happens if the process is already running or dead, or what state it returns in.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words, front-loaded, with zero waste — but the brevity stems from under-specification rather than disciplined editing. There is no structure to speak of because there is no content to structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a debugger control-flow tool with no annotations and no output schema, the agent needs to know blocking/concurrency semantics and post-call state; none of that is present. The well-documented parameters partially compensate but do not cover the execution behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both timeout and the multi-instance constraint on instance_id are fully documented in the schema. The description adds no meaning beyond the schema, so the baseline 3 applies rather than a penalty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Continue execution." essentially restates the name and title (dbg_continue / Dbg Continue) without specifying what execution is resumed or in what state the debuggee must be. It does not distinguish this from nearby siblings like dbg_step_over, dbg_run_to, or dbg_start.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus dbg_step_into, dbg_step_over, dbg_run_to, or dbg_exit. Only a weak implied usage: 'continue' conventionally means resume a paused debuggee, which an agent must already know from general debugging vocabulary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_delete_bpDbg Delete BpC
Delete breakpoint(s) at address(es).
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Address(es) - single or comma-separated | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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, yet it only states the operation. It does not explain deletion semantics, idempotency, error behavior for missing addresses, or the multi-instance requirement beyond what the schema already says.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is exactly as long as the stated purpose requires, though that is also why it omits useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is under-specified. It omits behavioral context an agent would need, such as whether deleting a nonexistent breakpoint errors and how instance_id affects the operation across multiple open databases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents addr, timeout, and instance_id, including that addr can be comma-separated. The description adds no syntax or meaning beyond restating that addresses are involved, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: deleting breakpoint(s) at address(es). It is clearly distinct from the add/enable/list breakpoint siblings, though it does not explicitly name or differentiate against those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no explicit when-to-use guidance, exclusions, or alternatives. An agent must infer that this is the removal operation versus disabling a breakpoint with dbg_enable_bp or inspecting with dbg_list_bps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_enable_bpDbg Enable BpC
Enable or disable breakpoint(s).
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of {address, enable: bool} | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 almost nothing. It does not say whether the debugger must be running (dbg_start), whether addresses must already correspond to existing breakpoints, what happens on an unknown address, whether the change persists, or what is returned. Only the mutation nature of the call is inferable from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with zero padding and the action front-loaded. It is efficient, though its brevity comes at the cost of substance rather than being a model of tight writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a state-mutating debugger tool with a required array-of-objects parameter, a session-scoping parameter, a timeout, and no annotations or output schema. Three words cannot cover the preconditions (active debug session, valid breakpoint addresses) or the effect of the call, so the definition is incomplete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the schema already documents the items array shape ({address, enable: bool}), timeout in seconds, and the instance_id requirement when multiple databases are open. The description adds nothing beyond this, which is the baseline expectation when the schema is fully documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource pair ('enable or disable' + 'breakpoint(s)') is specific and identifies the action, but it does not distinguish this tool from siblings dbg_add_bp, dbg_delete_bp, or dbg_list_bps. An agent cannot tell from the text whether this mutates existing breakpoints or creates new ones, nor what 'disable' means (removal vs. suppression).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus dbg_add_bp (which likely has an enable flag) or dbg_delete_bp. The only implied context is that a debug session exists, and that is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_exitDbg ExitC
Exit debugger.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet it says nothing about what exiting does to the debuggee process, whether state is saved or lost, whether the session must be active, or whether the call is reversible. Two words do not disclose the behavior of a session-terminating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words, front-loaded, with zero waste. It is efficient, though the extreme brevity is more under-specification than genuine conciseness, which caps it below a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-changing session-termination tool with no annotations and no output schema, the description omits critical context: required session state, effect on the debuggee, and what the result means. The rich schema mitigates parameter confusion but not behavioral risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the timeout and the important instance_id disambiguation rule are already fully documented in the schema. The description adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Exit debugger' states a specific verb (exit) and resource (the debugger session), which is unambiguous and distinguishes it from siblings like dbg_start, dbg_continue, and dbg_status. It falls short of a 5 only because it doesn't clarify scope, e.g. whether it ends the debuggee or just detaches the session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to call this versus alternatives (e.g. dbg_continue, close_database, or simply leaving the session running), and no prerequisites such as requiring an active debug session. The agent must infer all of this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_list_bpsDbg List BpsA
List all breakpoints (works without active debugger).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 one important behavioral trait — the tool works without an active debugger — but it omits whether the tool is read-only, what the return format looks like, whether disabled breakpoints are included, or whether any permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. Both the primary action and the useful parenthetical caveat earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple list tool whose parameters are fully documented in the schema, and it correctly flags the no-debugger behavior. However, with no annotations and no output schema, it should say more about what is returned (e.g., breakpoint fields, ordering, inclusion of disabled breakpoints) to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents both timeout and instance_id in detail, including the conditional requirement for instance_id. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('List all breakpoints') that clearly identifies the operation. The parenthetical 'works without active debugger' distinguishes it from debugger-dependent siblings like dbg_step_into or dbg_regs, though it does not distinguish it from dbg_status or other listing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by noting the tool works without an active debugger, which is a useful context clue. However, it does not explicitly say when to prefer this over dbg_status or other sibling tools, nor does it state any exclusions or prerequisites beyond that note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_read_memDbg Read MemC
Read memory from debugged process.
| Name | Required | Description | Default |
|---|---|---|---|
| regions | Yes | List of {address, size} | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a read-only operation and references a debugged process, but does not state whether the process must be running or suspended, what happens on invalid regions, how timeouts behave, or what the return format is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 concise, though its brevity contributes to other gaps rather than being a structural flaw.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a debugger memory-read tool with no annotations and no output schema, the description is too sparse. It does not explain debugger-state requirements, expected return shape, error conditions for unreadable regions, or timeout behavior, leaving the agent with important operational gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema, including the list-of-{address, size} format and the instance_id requirement. The description adds no parameter semantics beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb and resource: read memory from a debugged process. It is more specific than the title, but it does not distinguish this from sibling tools like get_bytes, read_scalar, or dbg_write_mem, leaving ambiguity about which memory-reading tool to select.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 prerequisites such as an active or paused debugger session, and no routing to alternatives. The agent must infer from the name and schema alone that this is for debuggee memory rather than static binary bytes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_regsDbg RegsB
Get all debugger registers (requires active debugger).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 one meaningful trait: an active debugger is required. It says nothing about whether the call is read-only, what happens on failure when no debugger is attached, or what the register set contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the precondition front-loaded in parentheses. Nothing is wasted, though the brevity leaves gaps that the rest of the dimensions penalize.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-output-schema read tool the definition is minimally viable: parameters are covered by the schema and the precondition is stated. It is missing the sibling disambiguation against dbg_thread_regs and any sense of what the returned register data looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (timeout, instance_id) are well documented in the schema, including the multi-instance requirement. The description adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: get all debugger registers. The agent can tell this is a register read from the debugger session. However, it does not distinguish itself from the sibling dbg_thread_regs, leaving ambiguous which register scope this covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'requires active debugger' gives a real prerequisite, which implies the tool is only usable mid-session. But there is no guidance on when to prefer this over dbg_thread_regs or what to do if no debugger is active.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_run_toDbg Run ToC
Run debugger to specific address.
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Target address to run to | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but discloses nothing behavioral: it does not say whether execution blocks until the address is reached, what happens on timeout, whether breakpoints encountered en route stop execution, or what state is left behind. For a tool that resumes process execution this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Its brevity is not padded, though it borders on under-specification rather than deliberate economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A debugger-control tool with execution side effects, three parameters, no annotations, and no output schema requires more than one sentence. Missing: session prerequisites, blocking/timeout semantics, return value (final stop reason or location), and interaction with existing breakpoints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – addr, timeout, and instance_id are all documented in the schema, including the important multi-instance rule for instance_id. The description adds nothing beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('run debugger to specific address'), which is clear enough to identify the operation. It stops short of distinguishing it from siblings such as dbg_continue or dbg_step_over, which an agent must infer from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus dbg_continue, dbg_step_over, or dbg_start, and no preconditions (e.g. that a debug session must already be started and stopped at a breakpoint). The agent gets no routing guidance from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_startDbg StartC
Start the debugger on the current input file. The local debugger is
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| debugger | No | Debugger module name; default is the local debugger for this platform ('linux'/'win32'/'macos'). Pass e.g. 'gdb' for remote debugging. | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 nothing about behavior beyond the bare action: not whether an existing session is replaced or errors, whether the call blocks until the debugger attaches, or what happens on attach failure. The sentence fragment at the end suggests missing context about local vs. remote debugger selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key action is front-loaded, which is good, but the text terminates mid-sentence with 'The local debugger is', making the description structurally incomplete rather than merely short. Brevity here is a defect, not conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter session-initiator with a fully documented schema and no output schema, the essentials are roughly covered by the schema, but with no annotations and a truncated description, an agent still lacks guidance on session-state preconditions and failure behavior. Adequate at minimum, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains timeout, debugger module selection (including remote cases like 'gdb'), and the instance_id multi-database rule in more detail than the description. The description adds no parameter meaning beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource: 'Start the debugger on the current input file,' which is distinguishable from stepping siblings like dbg_step_over or dbg_continue. However, the second sentence is cut off mid-clause ('The local debugger is'), leaving the scope statement unfinished, and there is no explicit differentiation from adjacent session tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus dbg_run_to, dbg_continue, or dbg_status, nor any prerequisite such as 'must be called before other dbg_* tools.' The verb 'start' only weakly implies it is the session-entry point, and the truncated sentence removes whatever guidance was intended.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_statusDbg StatusB
Get debugger status: state, pid, threads, current instruction pointer.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 almost nothing beyond the fact that it reads. It does not say what happens if no debugger session is running, whether it blocks or errors, or whether it has any side effects on the target.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the verb and followed by a compact enumeration of returned fields. Nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The enumerated return fields partially compensate for the absence of an output schema, and the schema fully covers the inputs. What is missing is state-dependency information — an agent cannot tell from the description whether this requires dbg_start to have been called first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (timeout, instance_id) are documented in-schema, including the important multi-database constraint on instance_id. The description adds no parameter meaning of its own, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Get debugger status') and enumerates exactly what is returned: state, pid, threads, and instruction pointer. That field list usefully distinguishes it from narrower reads like dbg_regs or dbg_callstack, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus dbg_regs, dbg_callstack, or the other dbg_* tools, and no mention of prerequisites such as an active debug session. The only conditional guidance in the definition lives in the schema's instance_id field, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_step_intoDbg Step IntoC
Step into instruction.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet says nothing about side effects: that it mutates the suspended process's execution position, that it requires an active debug session stopped at an instruction, or how it behaves at function boundaries or when the target is a library call. Only the title/name conveys any behavioral hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single three-word phrase with zero waste, but this is under-specification rather than conciseness — the brevity removes information an agent needs rather than compressing it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a stateful debugger control tool with no annotations and no output schema, the description leaves critical gaps: session preconditions, whether it may block under the timeout, and what state changes on return. The rich instance_id schema text partly compensates, but the description itself is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the instance_id description is notably rich, explaining the multi-database requirement and referencing open_database/list_databases. The description adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a recognizable debugger verb+resource ("step into instruction"), which is enough for an agent familiar with debugger semantics to know it advances execution into a called function. However, it never distinguishes this from the adjacent dbg_step_over or dbg_continue siblings, which is exactly where confusion is most likely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 dbg_step_over, dbg_continue, or dbg_run_to, and no stated preconditions such as a started, paused debug session. The agent must infer everything 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.
dbg_step_overDbg Step OverC
Step over instruction.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden, and it does not state that a debug session must be active and paused, whether the call blocks until the step completes, or how the timeout parameter affects behavior. The only behavioral signal is the implied step-over semantics embedded in the phrase itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no filler, though the brevity leaves key context out rather than front-loading it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a debugger state-mutating tool with no annotations and no output schema, the description omits prerequisites (active paused session), post-condition (where execution stops), and what, if anything, is returned. Schema coverage for the two parameters is complete, but the behavioral context an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the instance_id description already spells out the multi-database requirement, so the description adds nothing beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific debugger action ('step over instruction'), which goes slightly beyond restating the name and conveys the standard step-over semantic of executing an instruction without entering calls. However, it does not distinguish the tool from its closest sibling dbg_step_into, so an agent must already know debugger conventions to pick correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus dbg_step_into, dbg_continue, or dbg_run_to, nor any prerequisite such as the debug session being paused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_thread_regsDbg Thread RegsA
Read registers of one or more debug threads (temporarily selects each thread, then restores).
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | Comma-separated register names to read; omit for all registers | |
| timeout | No | Timeout in seconds | |
| thread_ids | No | Thread ID(s) in decimal (comma-separated ok); omit for all threads | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 the key non-obvious trait: each thread is temporarily selected and then restored, which tells the agent about the side effect on debugger state. It stops short of stating that a live debug session is required or what happens for invalid/terminated thread IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the operation stated first and the side-effect caveat in a tight parenthetical. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a 4-param read tool with full schema coverage and no output schema, since return format need not be explained. The remaining gap is sibling routing: the agent gets no explicit rule for choosing between dbg_thread_regs and dbg_regs, nor any stated debugger-session prerequisite.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with names, timeout, thread_ids, and the instance_id multi-database rule all documented in-schema. The description adds no format or default guidance beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Read registers of one or more debug threads") with a scope qualifier that implicitly separates it from dbg_regs (current-thread registers). However, it never names dbg_regs, so the agent must infer the distinction from the phrase "one or more debug threads".
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the "one or more debug threads" phrasing suggests use when you need registers from threads other than the selected one. There is no explicit when-to-use, no named alternative (dbg_regs), and no stated prerequisite such as an active debug session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dbg_write_memDbg Write MemC
Write memory to debugged process.
| Name | Required | Description | Default |
|---|---|---|---|
| regions | Yes | List of {address, bytes: [int,...]} | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for a mutating operation. It does not say whether the process must be stopped, whether writes are atomic across regions, what happens on partial failure, or what the tool returns, leaving a destructive-ish write effectively opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero waste and the action front-loaded, but it is terse to the point of under-specification given the payload is a structured array of address/bytes pairs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a memory-mutating debugger operation with no annotations and no output schema, the description should at least cover return values or session requirements. As written, key operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the region format, timeout, and instance_id disambiguation are all documented in the schema itself. The description adds nothing beyond that, which is the baseline expectation rather than a strength.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('write memory') plus a target ('debugged process'), which cleanly separates it from the sibling dbg_read_mem. It stops short of differentiating it from patch_bytes, patch_asm, or save_database, which all also mutate bytes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to prefer this over patch_bytes or dbg_read_mem, and no prerequisites such as needing an active debug session or a paused/suspended target. The agent must infer all of that 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.
declare_enumDeclare EnumC
Declare or update an enum in the local type library.
| Name | Required | Description | Default |
|---|---|---|---|
| decl | Yes | Enum declaration text (e.g. 'enum Name { ... };') | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and falls short: it does not say whether an existing enum is overwritten or rejected, whether the change persists without save_database, or what happens on malformed input. Only the vague 'or update' implies upsert semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the action and scope front-loaded and no filler. It is arguably too terse rather than padded, but structurally sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no annotations and no output schema, the description omits persistence behavior, return values, and error conditions. The schema covers the parameters fully, but the behavioral surface is left undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the instance_id field is documented in detail (including the multi-database requirement), so the schema does the heavy lifting. The description adds no parameter-level meaning beyond what the schema already states; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb pair (declare/update) and resource (enum) scoped to the local type library. The resource word 'enum' implicitly distinguishes it from siblings like declare_struct, declare_typedef, and declare_stack, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., declare_struct/declare_typedef for other type kinds), and no prerequisites. 'Declare or update' hints that it is an upsert, but nothing tells the agent which situation selects this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
declare_stackDeclare StackC
Create stack variable(s) at specified offset(s).
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of {function_address, offset, name, type?, size?} | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 falls well short. It does not say what happens if a variable already exists at the given offset (overwrite, error, or merge), whether the operation is reversible, whether it needs prior analysis or a decompiler, or whether it persists to the IDB. 'Create' signals a mutation but nothing else.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. Its brevity is appropriate structurally, though it borders on under-specification rather than tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated mutation tool with no output schema, the description omits what an agent most needs: conflict/overwrite behavior at an occupied offset, whether the created variable is returned, and any analysis prerequisite. The rich schema for items and instance_id covers parameter shape but not tool behavior, leaving the definition thin for a state-changing operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: items enumerates {function_address, offset, name, type?, size?} and instance_id documents its multi-database requirement. The description's phrase 'at specified offset(s)' merely echoes the offset field and adds no semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (stack variable(s)) with the scoping detail of specified offset(s), which is enough to know it declares stack-frame variables rather than editing code or data. It does not distinguish itself from nearby siblings like delete_stack, stack_frame, set_local_variable_type, or rename_local_variable, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus delete_stack (removal), stack_frame (inspection), or set_local_variable_type (retyping an existing variable). No prerequisites, no mention that a database must be open or a function analyzed. The agent gets no routing guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
declare_structDeclare StructC
Declare or update a struct in the local type library.
| Name | Required | Description | Default |
|---|---|---|---|
| decl | Yes | Struct declaration text (e.g. 'struct Name { ... };') | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Declare or update' hints at a mutation to the local type library, but nothing is said about whether the change persists without save_database, whether an existing struct is silently overwritten, or whether conflicts produce an error — all critical for an IDA type-library write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with zero waste and the verb-resource pair front-loaded. It is efficient but so short that conciseness comes at the cost of the missing behavioral detail noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description should explain persistence, conflict/overwrite behavior and the result of a failed parse. For a type-definition mutation tool in a family of similar declare_* siblings, the single sentence leaves significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so decl, timeout and instance_id are already documented, including the important multi-instance rule for instance_id. The description adds nothing further, which meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Declare or update a struct in the local type library.' The word 'struct' implicitly separates it from declare_enum, declare_typedef and declare_stack, but the description never states that distinction explicitly, so an agent comparing those four siblings gets no direct disambiguation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 declare_typedef/declare_enum/declare_stack, no prerequisites, and no mention of what condition (e.g. a pre-existing type name) should route the agent elsewhere. Usage must be inferred 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.
declare_typedefDeclare TypedefC
Declare or update a typedef in the local type library.
| Name | Required | Description | Default |
|---|---|---|---|
| decl | Yes | Typedef declaration text (e.g. 'typedef unsigned int NAME;') | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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. 'Declare or update' implies mutation but the description never states whether the typedef persists to the IDB or requires a save, what happens to an existing typedef of the same name, or what errors arise from an invalid declaration — only the phrase 'local type library' hints at scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the resource/scope front-loaded. It is efficient, though its brevity contributes to the gaps noted in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description omits persistence behavior, conflict/error semantics, and any relationship to save_database. The rich schema helps parameters, but the behavioral surface is largely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the decl format and the multi-instance rule for instance_id fully documented in the schema, so baseline 3 applies. The description adds no parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('declare or update a typedef') and scopes it to the 'local type library', which distinguishes it from the sibling declare_enum/declare_struct/declare_stack tools by resource type. It does not explicitly name those alternatives, keeping it just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 declare_struct/declare_enum, no prerequisites, and no indication of what happens on duplicate or conflicting declarations. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decompileDecompileB
Decompile function(s) at given address(es). Requires Hex-Rays.
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Function address or name (single or comma-separated) | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses the Hex-Rays plugin dependency, but says nothing about the return (pseudocode text), error behavior when Hex-Rays is unavailable, cost/latency, or whether decompilation mutates 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the core action front-loaded and the prerequisite trailing. No filler; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is too thin: it does not explain what comes back (decompiled pseudocode), what happens on bad/ambiguous addresses, or how multi-address requests are handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The description's 'function(s) at given address(es)' only echoes the `addr` parameter and adds no semantics for `timeout` or `instance_id`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Decompile function(s) at given address(es).' The decompile-vs-disasm distinction from the sibling tool `disasm` is inherently clear from the wording, but the description never names or explicitly contrasts that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Requires Hex-Rays' is a genuine usability condition that helps route an agent (no Hex-Rays plugin → fall back to `disasm`), but there is no explicit when-to-use / when-not guidance nor a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_functionDelete FunctionC
Delete an existing function.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Function start or internal address (hex or decimal) | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 deletion is reversible, what happens to xrefs/callers, whether the change persists to the IDB without save_database, or what happens if the address isn't a function start — all critical for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste, but its brevity reflects under-specification rather than efficiency. There is room for a short clause on irreversibility or instance requirements without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-annotation, no-output-schema operation, the definition leaves too much unstated: reversibility, persistence, error conditions, and the multi-instance requirement buried only in the schema. An agent could call it correctly by name but not confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the important instance_id constraint, so the schema does the heavy lifting. The description adds nothing about how 'address' resolves (start vs. internal) or timeout behavior, which is acceptable at full coverage but not value-adding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Delete') plus resource ('an existing function'), so an agent immediately knows the operation. However, it does not distinguish itself from sibling tools like create_function, undefine_items, or delete_segment, which could plausibly overlap in intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool versus alternatives such as undefine_items, nor any prerequisites (e.g., analysis completed, correct database instance open). The agent is left to infer everything from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_segmentDelete SegmentC
Delete a memory segment from the IDB.
| Name | Required | Description | Default |
|---|---|---|---|
| flags | No | Deletion flags (0=normal, 1=SEGMOD_KILL: disable addresses) | |
| address | Yes | Any address within the segment to delete (hex string) | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 says only 'delete' and does not disclose whether the deletion is reversible, whether the IDB must be saved, what happens to contained addresses/functions, or permission requirements. The schema's flags parameter hints at kill-mode behavior, but the description itself adds 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no wasted words. However, for a destructive operation the brevity becomes under-specification rather than efficient conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive mutation with no annotations and no output schema. The description does not explain data-loss implications, save requirements, or error conditions, leaving the agent with insufficient context to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, including the flags enum and instance_id requirement. The description adds no meaning beyond the schema, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a memory segment') within the IDB, which clearly distinguishes it from add_segment and other segment tools. It does not explicitly name siblings, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives like undefine_items or add_segment, and no prerequisites or cautions. The agent is left to infer that this permanently removes a segment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_stackDelete StackC
Delete stack variable(s) by name.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of {function_address, name} | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 for a destructive mutation. It doesn't say whether deletion is persistent in the IDB, whether it can be undone, what happens to references to the deleted variable, or anything about failure modes with the timeout.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the verb and resource, with no filler. It is efficient but under-specified rather than genuinely tight, since the brevity leaves real gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no annotations and no output schema, the definition should explain scope of deletion, persistence, and the multi-instance rule. Instead it is a one-line fragment that leaves the agent guessing about side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents items, timeout, and the instance_id scoping rule. The description's only added claim ('by name') actually conflicts slightly with the required function_address element, adding noise rather than meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource (delete stack variables), so the gist is clear. But 'by name' misdescribes the actual key: the schema requires a list of {function_address, name} pairs, so the tool is keyed by function address plus name. It also doesn't distinguish itself from nearby siblings like undefine_items or delete_function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of undefine_items, delete_function, or renaming via rename_local_variable. No prerequisites (open database, analysis complete) or warning that the IDB should be saved first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_before_afterDiff Before AfterB
Snapshot a function's decompilation, run a modification tool, return the unified diff.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Name of the modification tool to invoke | |
| address | Yes | Function name or address to snapshot | |
| timeout | No | Timeout in seconds | |
| action_args | No | Arguments passed to the action tool | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden, and it does disclose the internal sequence (snapshot → dispatch action → diff), which is the key non-obvious trait. However, it never says whether the action's changes are persisted, what happens if the action fails or times out, or whether the diff reflects only changed lines or full function text — critical facts for a mutation-performing wrapper.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the outcome ('return the unified diff') is stated up front rather than buried. Its brevity borders on under-specification for a five-parameter composite tool, but there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a wrapper that mutates database state, with no annotations and no output schema, the description mentions the return value ('unified diff') but omits failure/timeout behavior, persistence semantics, and typical action names. Combined with a well-documented schema, it is barely adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains address, action, action_args, timeout, and the multi-instance rule for instance_id. The description only hints that action refers to another modification tool and address is the snapshot target, adding little beyond structured data — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete three-step behavior — snapshot decompilation, invoke a modification tool, return a unified diff — which is specific enough to distinguish this wrapper from sibling tools like decompile, apply_patch, or patch_bytes. It stops short of naming which modification tools are valid targets, but the verb+resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 wrapper versus calling decompile and a patch tool directly, nor on preconditions (e.g., analysis must be complete, database open). The phrase 'run a modification tool' only implies the wrapping use case rather than stating it as a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disasmDisasmB
Disassemble function(s) into listing lines (hex addresses, no color tags).
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Function address(es) - single or comma-separated | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose the output format (hex addresses, no color tags). It says nothing about read-only safety, whether analysis must have completed, behavior on invalid/unknown addresses, or truncation/size limits, which are the relevant traits for a read-heavy disassembly call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the parenthetical output note is earned because it tells the agent what to expect. Minor detail like 'no color tags' is a formatting nicety rather than critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with a fully documented schema, the essentials are present, but the description never positions this against decompile/linear_disasm and gives no hint about ordering, pagination, or what happens when the target isn't a function. Enough to call, not enough to call correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including instance_id's important multi-database requirement and addr's comma-separated form, so the baseline is 3. The description only repeats 'function(s)' and adds no semantics for timeout or instance_id beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (disassemble) and resource (function(s)) plus the output shape (listing lines with hex addresses). It does not, however, differentiate itself from close siblings such as decompile or linear_disasm, so an agent can't be fully sure which of the three to pick from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of the obvious alternatives (decompile for pseudo-code, linear_disasm for range-based disassembly). The usage is only inferable from the verb, leaving the agent to guess at routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_bytesFind BytesC
Search for byte pattern with wildcards (?? for any byte).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End address (default: max_ea) | |
| limit | No | Max results (1..1000) | |
| start | No | Start address (default: min_ea) | |
| pattern | Yes | Byte pattern with wildcards (e.g. '48 8B ?? ?? 48 89') | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 does not state that this is a read-only search, what the results look like, whether results are capped by default, or that instance_id may be required when multiple databases are open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 efficiently sized for the amount of information it chooses to convey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter search tool with no output schema and no annotations, the description is too sparse. It omits the return behavior, default result limits, address-range defaults, and multi-database instance requirements that an agent would need to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters, including wildcard syntax, address defaults, limit, timeout, and instance_id. The description adds no parameter meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: searching for byte patterns, with wildcard support. It is clear what the tool does, but it does not distinguish itself from siblings such as get_bytes, find_regex, or find_instructions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like get_bytes for reading bytes, find_regex for textual/regex searches, or find_instructions for instruction searches. Usage is only implied by the verb 'Search'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_instructionsFind InstructionsC
Find instructions by mnemonic and/or a regex over the instruction text.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matches to return | |
| pattern | No | Optional regex matched against the full instruction text | |
| timeout | No | Timeout in seconds | |
| mnemonic | No | Mnemonic filter (case-insensitive substring, e.g. 'call'); empty matches all | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it says nothing about cost of regex scanning, default limit of 100 or truncation behavior, timeout handling, or the multi-instance requirement. An agent learns only the matching surface, not the operational characteristics of a potentially expensive search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the matching axes come first. It is perhaps too terse rather than bloated, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Five parameters, no annotations, and no output schema: the description never indicates what a hit looks like (address, mnemonic, text?) or whether results are paginated or ordered. For a search tool whose return shape is undocumented elsewhere, this leaves a substantial gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in-schema. The description only echoes mnemonic and regex filtering and adds no format, syntax, or precedence detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (find) and resource (instructions) and the two matching axes (mnemonic, regex). However, it does not distinguish this tool from close siblings such as find_regex, search_text, or find_bytes, so an agent cannot tell from the description which search surface applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states what can be filtered but gives no guidance on when to use this instead of find_regex or search_text, and no exclusions or prerequisites. The one crucial call prerequisite — needing instance_id when multiple databases are open — appears only in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_regexFind RegexB
Search symbol names (functions, globals, labels) with a regular expression.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matches to return | |
| offset | No | Number of matches to skip | |
| pattern | Yes | Regular expression matched against symbol names | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 disclose regex flavor, case sensitivity, pagination behavior (limit/offset), timeout semantics, or the multi-database requirement for instance_id, all of which matter for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource and matching mechanism front-loaded. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter search tool with no annotations and no output schema, the description leaves the return shape and pagination expectations unexplained. The rich schema compensates for parameter documentation, but the agent still lacks behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents pattern, limit, offset, timeout, and instance_id thoroughly. The description adds mild value by clarifying that the pattern matches functions, globals, and labels, but no syntax or matching-behavior detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (symbol names) and enumerates the kinds of symbols covered (functions, globals, labels). It is distinguishable from search_text and find_bytes by scope, though it does not explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use regex symbol search versus list_functions, list_globals, or search_text. No prerequisites or exclusions are given, leaving the agent to 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_xref_signaturesFind Xref SignaturesC
Find signatures for code locations that reference an address. For each
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Number of shortest signatures to return per address (default: 5) | |
| addrs | Yes | Address(es) or name(s) to find XREF signatures for (e.g. a data address referenced by code) | |
| format | No | Output format: 'ida' (default), 'x64dbg', 'mask', or 'bitmask' | ida |
| timeout | No | Timeout in seconds | |
| max_length | No | Maximum signature length in bytes (default: 250) | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 only states the lookup intent and then cuts off, disclosing nothing about how paths are enumerated, cost (search over referencing code sites), or output content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, one of which is an unfinished fragment ('For each'). This is under-specification, not conciseness; the core value of the description appears to have been lost mid-write, leaving it feeling incomplete rather than lean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, completeness depends heavily on the description. It should explain what is returned (per-address signature sets, bounded by top) and any prerequisites, e.g. that the database should be analyzed first; it instead stops mid-sentence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters including format enum values, top, max_length, and the instance_id requirement are documented in the schema. The description adds nothing beyond that, which merits the baseline 3, not more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a clear verb and resource (find signatures for code locations referencing an address), which is specific enough to distinguish it from generic signature makers. However, the description is truncated mid-sentence ('For each'), so the stated purpose is only partially delivered.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no mention of alternatives. Several siblings overlap conceptually (make_signature, make_signature_for_function, make_signature_for_range), and the description gives no criteria for choosing among them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
force_recompileForce RecompileA
Invalidate cached Hex-Rays decompilations so they are regenerated.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| addresses | No | Function name(s)/address(es) to invalidate (comma-separated ok); omit to clear all cached decompilations | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 correctly implies a state-mutating cache operation and that regeneration follows, but it does not say whether invalidation is eager or lazy, whether it touches the IDB or requires a save, or what it costs on a large database.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the verb and resource with zero filler. Nothing to trim and nothing awkwardly deferred.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter maintenance tool whose schema is fully documented, this is close to sufficient, but with no annotations and no output schema the description should still state whether the call recompiles immediately or merely marks entries stale, which matters for an agent sequencing it before `decompile`.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the crucial detail that omitting `addresses` clears ALL cached decompilations and the multi-instance `instance_id` requirement, so the schema already does the heavy lifting. The description adds no semantics beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (invalidate) on a specific resource (cached Hex-Rays decompilations) and its effect (they are regenerated). It is distinguishable from the sibling `decompile` by making clear this manipulates the cache rather than producing output, though it never names 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.
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 for stale or inconsistent decompiler output, but the description gives no explicit trigger conditions, no prerequisites, and no guidance on when `decompile` should be called instead. Nothing is misleading, but nothing routes the agent either.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_basic_blocksGet Basic BlocksC
Get basic blocks with control flow information.
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Function address or name | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state that this is a read-only operation, whether analysis must be complete first, what form 'control flow information' takes, or whether results are paginated or error-prone. This is a significant gap 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, which is appropriately concise. It could be slightly more informative without becoming bloated, but it avoids waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, no output schema, and no annotations, the description should do more to explain what a 'basic block' result looks like and how it relates to analysis state. It omits any mention of return format, ordering, or the need for completed analysis, leaving meaningful gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents addr, timeout, and instance_id in detail. The description adds no parameter meaning beyond what the schema provides, which matches the baseline of 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('basic blocks') and adds a qualifier about control flow information, so an agent can tell roughly what it does. It does not distinguish this tool from siblings such as disasm, linear_disasm, or callgraph, which also deal with code structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when this tool should be used instead of alternatives like disasm, linear_disasm, or callgraph, nor does it mention prerequisites such as requiring prior analysis. An agent has to infer usage 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.
get_bytesGet BytesC
Read raw bytes at address(es).
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Address(es) to read from - single or comma-separated | |
| size | No | Number of bytes to read (1..4096) | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 only says 'read raw bytes'. It omits that instance_id is mandatory when multiple databases are open, that addr accepts comma-separated values, and what the response looks like when multiple addresses are requested (no output schema exists). Only the implied non-mutating nature of 'read' is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb and resource front-loaded and no wasted words. It is arguably too terse given the tool's options, but it is structurally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description does not explain the return shape for multi-address reads, the instance_id prerequisite, or error behavior. The schema covers parameters well, but the description leaves behavioral gaps an agent must guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters, including the size range 1..4096 and the instance_id rule, are already documented in the schema. The description adds no syntax or format detail beyond the schema, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read raw bytes at address(es)'), which distinguishes it from get_string or read_scalar by returning untransformed bytes. It does not, however, differentiate itself from near-siblings like dbg_read_mem or disasm, so an agent cannot resolve the choice from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 prerequisites such as an open database or an active debugger session, and no reference to alternatives like dbg_read_mem. Usage is only inferable from the tool's name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calleesGet CalleesC
Get callees grouped by target function and call sites.
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Function address or name | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It hints at output grouping but does not state that this is a read-only operation, whether analysis must be complete, how timeout behaves, or what the return structure looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no redundant or filler content. It is front-loaded with the core action and groups the key output characterization immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read tool whose parameters are fully described in the schema, the description is minimally sufficient. However, without annotations or an output schema, it leaves gaps around prerequisites (such as an open database) and the exact shape of the returned callee grouping.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, which is the baseline expectation when coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Get callees") and mentions grouping by target function and call sites. However, it does not clarify whether it returns only immediate callees or recursive ones, nor does it explicitly distinguish the tool from siblings like get_callers or callgraph.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 get_callers, xrefs_from, or callgraph. The agent must infer the use case from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_callersGet CallersC
Get callers grouped by calling function and call sites.
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Function address or name | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, yet it discloses nothing about read-only safety, whether analysis must be complete first, or how it behaves for an address with no callers. The only behavioral detail is the grouping of output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no filler, and the core action is front-loaded. It is compact to a fault rather than bloated, which is the right failure mode for this dimension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter read tool with no output schema and no annotations, the description should say more about the returned structure and required preconditions. It partially covers the return shape via 'grouped by calling function and call sites' but leaves the calling context thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents addr, timeout, and the multi-database rule for instance_id in detail. The description adds nothing beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get callers') and even hints at the result shape ('grouped by calling function and call sites'). It does not, however, differentiate itself from close siblings like get_callees, xrefs_to, or callgraph, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 get_callees (forward call graph), xrefs_to (all cross-references), or callgraph (full graph). No prerequisites such as requiring an open database or completed analysis are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cursorGet CursorC
Get current cursor position and context in IDA.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. 'Get' implies a read, but it doesn't state whether it requires an active database, how it behaves with multiple instances open (the schema covers instance_id but the description doesn't reinforce it), or what the return shape is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the core action, no filler. It is efficient, though efficiency partly comes from under-specification rather than tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 2-param read tool with no output schema and no annotations should explain what 'context' means and what the caller gets back. The description leaves the return values and multi-instance behavior entirely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both timeout and instance_id are documented in the schema itself. The description adds no parameter meaning beyond that; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get current cursor position'), so the core action is clear. However, 'and context in IDA' is vague — it doesn't say what context is returned, and gives no differentiation from the many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this tool, no prerequisites, no alternatives. An agent is left to infer that it's a read of UI cursor state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entry_pointsGet Entry PointsC
Get all program entry points.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. 'Get' implies a read, but it says nothing about requiring an open database, what the result contains, or how it behaves with multiple instances open — the only hint lives in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste and the resource front-loaded. It is efficient, though its brevity borders on under-specification rather than polished concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description needs to explain prerequisites and the shape of returned entry points, and it does neither. For a read tool gated on an open database, that leaves real gaps an agent must guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents timeout and the instance_id requirement in detail. The description adds nothing about either parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (program entry points), which is precise in the IDA/disassembly domain and distinct from siblings like list_functions or list_exports. It does not, however, differentiate itself explicitly from those neighbors or define what counts as an entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 prerequisites (an open database), and no reference to alternatives such as list_exports or list_functions. 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.
get_function_signatureGet Function SignatureC
Get the best available function signature string.
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Function address or name | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 beyond an implied read-only 'get'. It does not explain what 'best available' means, whether the function must be analyzed first, what the returned string format looks like, or how instance_id requirements affect behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no waste, but it is under-specified rather than effectively concise. The most important qualifier, 'best available', is left unexplained, so brevity comes at the cost of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with no annotations and no output schema, the description is too thin. It does not explain the return value format, what 'best available' resolution means, or how this differs from the signature-making tools, leaving meaningful gaps for an agent to navigate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema itself contains useful parameter descriptions, including a substantial note on when instance_id is required. The tool description adds no parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Get ... function signature string'), so the basic purpose is clear. However, 'best available' is vague about where the signature comes from (debug info, type inference, name only), and it does not distinguish this from siblings like make_signature, make_signature_for_function, or make_signature_for_range.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 retrieval tool versus the signature-making siblings, nor any mention of prerequisites or error conditions. The agent is left to infer usage 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.
get_metadataGet MetadataB
Get IDB metadata (input_file, arch, bits, endian, hash).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; "Get" implies a read-only operation, which covers the safety profile. However it omits a non-obvious operational constraint: an open database is required, and instance_id becomes mandatory when multiple databases are live. It does at least disclose the returned data shape (input_file, arch, bits, endian, hash).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with zero filler, and the key information (what it returns) is front-loaded rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the returned fields, which is exactly what an agent needs. With only two parameters and full schema coverage, the remaining gap is the missing precondition that a database must be open.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with timeout and instance_id fully documented in the schema, including the required-when-multiple-databases rule. The description adds no parameter detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource ("Get IDB metadata") with the returned fields enumerated in parentheses, so an agent knows exactly what comes back. It does not explicitly differentiate from the closest sibling, survey_binary, but the metadata framing is distinct enough to be recognizable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives such as survey_binary or list_segments, and no prerequisites are given. Usage is only implied by the word "metadata".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stringGet StringC
Read null-terminated string(s).
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Address(es) - single or comma-separated | |
| max_len | No | Maximum string length | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden and delivers almost nothing: no mention of what happens on unmapped/invalid addresses, how truncation at max_len is reported, whether partial reads or errors are returned, or what the response looks like (raw string vs. list).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler, but it is terse to the point of under-specification for a tool with four parameters and no annotations. Concise without being informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must cover return shape and edge-case behavior, and it does neither. An agent cannot tell whether multiple addresses yield a map, a list, or concatenated text, nor how failures are surfaced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with per-parameter docs including the multi-address comma syntax and the instance_id precondition, so the schema does the heavy lifting. The description adds no meaning beyond it, which is the baseline 3 for a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ("Read null-terminated string(s)") that an agent can act on. It does not distinguish this from nearby siblings like list_strings, search_text, or get_bytes, so an agent must infer that this reads a string at a specific address rather than enumerating or searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no exclusions. With siblings such as list_strings (enumerate strings), search_text (find text), and get_bytes (raw memory), the description never says which one to pick or when this is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_struct_infoGet Struct InfoB
Get detailed structure/union definition with fields.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Structure/union name | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 nothing about whether this is a pure read (implied by 'Get' but never stated), what happens on an unknown name, or whether the instance_id requirement matters here. Only the phrase 'with fields' hints at the returned content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler. It is efficient, though the terseness edges toward under-specification rather than tight completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only type-lookup tool with no output schema, the description should say something about the returned definition (field names, offsets, sizes) and failure behavior. The schema covers the inputs well, but the description leaves the agent guessing about what 'detailed' actually returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself documents all three parameters, including the important instance_id multi-database rule. The description adds no syntax, format, or naming-convention detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get detailed structure/union definition with fields'. This clearly distinguishes it from the sibling list_structs (which enumerates rather than details). However, it never explicitly names list_structs or xrefs_to_field as related tools, so differentiation is implied 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer you call this after list_structs to get one type's full layout. There is no explicit when-to-use, no prerequisite chain (e.g., database must be open), and no statement of what to do if the name doesn't exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ida_python_referenceIda Python ReferenceA
Search the official IDAPython API documentation (from the attached IDA runtime). Returns signatures + docstrings; pass 'modules' as query to list modules.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entries returned (default 20) | |
| query | Yes | Class, function, or concept to look up in the official IDAPython docs of the attached IDA runtime, e.g. 'decompile', 'xrefs to', 'ida_funcs', 'rename local variable'. Use 'modules' to list modules. | |
| module | No | Restrict the search to one module, e.g. ida_funcs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the return content (signatures + docstrings) and the precondition that a runtime must be attached, but says nothing about search matching behavior, result ranking, truncation beyond the schema's limit, or failure when no runtime is attached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with purpose and followed immediately by the return content and the special query value. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup tool with a fully documented schema and no output schema, the description covers purpose, return shape, and the module-listing entry point adequately. Only minor gaps remain around how matching works and what happens without an attached runtime.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents query, module, and limit with examples. The description's only parameter-related content ('pass modules as query') merely restates what the schema already states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (official IDAPython API documentation from the attached IDA runtime), and notes the return payload (signatures + docstrings). It is clearly distinguishable from code-execution siblings like py_eval or py_exec_file, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Search the official IDAPython API documentation', and there is one concrete hint ('pass modules as query to list modules'). However there is no guidance on when to reach for this versus the sibling code tools or other search tools, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infer_typesInfer TypesC
Guess the type at each address with IDA's type inference and apply it as a guessed type.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| addresses | Yes | Address(es) or symbol name(s) to guess and apply types for (comma-separated ok) | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 largely drops it. It is a mutating operation ('apply it as a guessed type') but says nothing about whether existing user-defined types are overwritten, whether it fails per-address or aborts, or whether it requires prior analysis.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its brevity is partly the source of the missing behavioral detail rather than a sign of density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description leaves key gaps: what the result looks like, whether types are applied atomically, and how failures on some addresses are reported. The schema covers its side, but the description does not compensate for the absent annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, including the instance_id multicloud requirement. The description only echoes 'each address' and adds no syntax or behavior detail beyond the schema, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb pair ('guess the type ... apply it') plus the resource (addresses) and the mechanism (IDA's type inference). It distinguishes itself adequately from manual setters like set_global_variable_type or set_local_variable_type by naming inference as the source of the type, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative is given. An agent cannot tell from this text whether to prefer this over set_global_variable_type, set_local_variable_type, or declare_struct, nor what prerequisite state (analysis complete) is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linear_disasmLinear DisasmB
Linear disassemble from arbitrary address (not limited to functions).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max number of instructions (1..64) | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| start_address | Yes | Starting address |
TDQS
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 this is a read-only operation, whether it can fail on unmapped/invalid addresses, or what form the output takes. It also omits interaction with the `instance_id`/`timeout` behavior that a multi-database session implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler, and the differentiating qualifier is placed immediately after the verb phrase. It is efficient, though arguably under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter read tool with a fully documented schema and no output schema, the description covers the address-scope question but leaves the agent guessing about return shape (instruction list? text?), read-only safety, and failure modes on bad addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the crucial `instance_id` requirement note, so the schema does the heavy lifting. The description adds only the notion that `start_address` may be arbitrary rather than function-bounded, which is a small but real contribution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Linear disassemble') plus the qualifier 'from arbitrary address (not limited to functions)' which implicitly separates it from the sibling `disasm`. It doesn't name the sibling, but the scope contrast is explicit 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'not limited to functions' implies when this is preferred over function-scoped disassembly, but it never names `disasm` or states an explicit rule such as 'use disasm when inside a known function'. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_databasesList DatabasesA
List all live IDA databases/instances ({instance_id, pid, headless, input_file}); pass one as instance_id on every tool call while several are live.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 returned fields ({instance_id, pid, headless, input_file}) and the key operational constraint of passing instance_id when multiple instances are live. It does not explicitly state that the call is read-only, though 'List' implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single, front-loaded sentence with no wasted words. The return fields and usage requirement are packed efficiently into one line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description usefully lists the returned fields and explains the instance_id workflow. It is nearly complete for a zero-parameter list tool, though a brief note that it is a safe read-only call would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain; the baseline for a parameterless tool is 4. The description appropriately does not invent parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('List all live IDA databases/instances') and even names the returned fields. It is unambiguous, but it does not explicitly differentiate itself from siblings such as open_database or check_connection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational guidance: use the returned instance as instance_id on every tool call when several databases are live. This implies when to use it, but there is no explicit mention of when not to use it or of alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_exportsList ExportsC
List exported functions/symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items (1..1000) | |
| offset | No | Pagination offset (>=0) | |
| pattern | No | Optional name filter | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it adds almost nothing beyond the action name. It does not disclose permissions, output ordering, pagination behavior, or how the required instance_id affects execution when multiple databases are open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no wasted words, but it is arguably under-specified rather than genuinely concise for a five-parameter tool. It lacks the structural cues an agent needs to select it confidently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter listing tool with no annotations and no output schema, the description is too thin. The schema documents parameters well, but the description omits scope, selection guidance, and the instance_id prerequisite, leaving important context outside the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so count, offset, pattern, timeout, and instance_id are already well documented in the schema. The description adds no parameter semantics beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (list exported functions/symbols), so the basic action is clear. However, it does not distinguish this tool from siblings such as list_functions, list_globals, or list_imports, which an agent could easily confuse with exports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 rather than list_functions, list_imports, or other listing tools. It also does not say whether exports are scoped to the currently open database or when instance_id becomes mandatory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_functionsList FunctionsC
List functions with pagination and optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items (1..1000) | |
| offset | No | Pagination offset (>=0) | |
| pattern | No | Optional name filter pattern | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full behavioral burden. It states pagination and filtering exist but does not disclose whether this is a safe read-only operation, what pattern matching semantics apply, how pagination results behave, or what happens with the timeout parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of waste, but its brevity reflects under-specification rather than efficient communication. It omits context an agent would need for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no annotations and no output schema, the description is too thin. It fails to explain return shape, pagination behavior, filtering semantics, or the conditional instance_id requirement, leaving the schema to compensate for most of the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema. The description adds only a general reference to pagination and filtering, which maps to count/offset and pattern but provides no additional semantics beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ("List functions") and mentions pagination/filtering, so the basic operation is identifiable. However, it does not differentiate from siblings such as list_globals, list_imports, or get_entry_points, and it does not clarify what constitutes a "function" in this context beyond the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, no prerequisites, and no mention of the critical instance_id requirement when multiple databases are open. The agent is left to infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_globalsList GlobalsC
List global (non-function) symbols with pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items (1..1000) | |
| offset | No | Pagination offset (>=0) | |
| pattern | No | Optional name filter | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 mentions pagination but not defaults (100), maximum page size (1000), whether the call is read-only, or the critical rule that instance_id is required when multiple databases are open – a behavior only hinted at inside the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It is appropriately brief, though brevity tips into under-specification for a tool with a multi-instance requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 five parameters, the description is too thin. It omits what a returned 'global symbol' contains, pagination semantics beyond the word itself, and the instance_id prerequisite that matters operationally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema with defaults and constraints. The description only echoes pagination, adding no syntax, filter semantics, or instance_id guidance beyond the structured fields. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (global, non-function symbols), and the parenthetical 'non-function' implicitly separates it from list_functions. It doesn't explicitly name a sibling alternative, but the scope is clear enough to select the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 list_functions, list_local_types, or list_structs, and no mention of the multi-instance prerequisite that the instance_id parameter encodes. The agent must infer usage 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.
list_importsList ImportsB
List imported functions with module names.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items (1..1000) | |
| offset | No | Pagination offset (>=0) | |
| pattern | No | Optional name filter | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It makes clear this is a read/list operation and indicates that module names are returned, but it does not describe pagination behavior, timeout semantics, or the multi-database instance requirement beyond what the schema states. For a read-only list tool, this is minimally adequate rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted wording. It is efficient, though it is so terse that it leaves important context to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema is rich, with full parameter descriptions, which reduces the burden on the description. However, no output schema is provided and the description only partially explains the return shape, pagination, or multi-database instance handling. It is adequate to support a basic call but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are fully documented in the input schema. The description adds no parameter-specific semantics beyond what the schema already provides, which meets the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list imported functions. It also adds that module names are included, which clarifies the returned content. It does not explicitly distinguish itself from siblings such as list_exports or list_functions, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 list_exports, list_functions, or search_text. It also does not state preconditions or when-not-to-use conditions. The intended use 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.
list_local_typesList Local TypesB
List all local types defined in the database.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 does not disclose that the operation is read-only, that it requires an open database (implied by the instance_id parameter but not stated in the description), or what the return format looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero waste. It efficiently conveys the tool's purpose without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and the fully documented parameters, the description is minimally adequate. However, it lacks context about return values and prerequisites, which is more noticeable in the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (timeout and instance_id) documented in the schema. The description adds no additional parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (List) and resource (local types) within the database scope. It does not differentiate from sibling tools like list_structs or list_globals, but 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.
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, nor any prerequisites or exclusions. The implied usage is straightforward but left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_segmentsList SegmentsC
List memory segments with permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It implies a read-only listing but does not state whether an open database is required, what permissions mean, whether results are paginated, or what the return shape is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 concise, though its brevity contributes to gaps handled in other dimensions rather than being a conciseness flaw.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter listing tool with fully documented schema parameters, the description is minimally adequate. However, with no output schema and no annotations, it should do more to explain the returned segment data and the instance_id dependency beyond what the schema states.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself fully documents timeout and the instance_id requirement, so the baseline is 3. The description adds no additional parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "List memory segments." It is clearly distinct from add_segment and delete_segment by name, though the added phrase "with permissions" is vague and not explained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no guidance on when to use this tool versus alternatives, nor any prerequisites. The list verb implies usage, but no explicit context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stringsList StringsC
List extracted strings with pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items (1..1000) | |
| regex | No | Treat pattern as a regular expression | |
| offset | No | Pagination offset (>=0) | |
| pattern | No | Optional content filter | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet it only notes pagination. It does not describe return shape, ordering, whether results are a snapshot, or the multi-database instance_id requirement (which lives only in the schema). That is thin for a 6-param read tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient but errs toward under-specification, leaving useful space unused rather than adding value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a permissive, no-output-schema, no-annotation list tool, the description is barely adequate: it omits how 'extracted strings' are produced and how it relates to get_string. The schema fills the parameter gap, but the behavioral framing remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so count/offset/regex/pattern/timeout/instance_id are already documented. The description only echoes pagination and adds no syntax or format meaning beyond the schema, making 3 the correct baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (extracted strings), so an agent can tell it enumerates strings. However, it does not differentiate from siblings like get_string, search_text, or find_regex, which all touch strings, so the reader must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only contextual hint is 'with pagination'; there is no statement of when to use this over get_string (single-string retrieval), search_text, or find_regex. No prerequisites or exclusions are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_structsList StructsB
List all structures/unions defined in the database.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | Optional name filter | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 indicates a read-only listing by saying "List all," but does not disclose ordering, output format, pagination, or whether local and global structures are both included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with zero wasted words. It states the verb and resource immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with full schema coverage, the description identifies the resource adequately. However, it does not clarify how results differ from sibling listing/detail tools, and with no output schema it leaves return contents unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds no parameter-level meaning beyond the schema, which is acceptable at baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("List") and resource ("structures/unions defined in the database"), making the tool's purpose clear. It does not explicitly distinguish itself from siblings like get_struct_info or list_local_types, but the scope is still understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no guidance on when to use this tool versus alternatives such as get_struct_info for a single structure or list_local_types. The intended usage is only implied by the listing action, with no exclusions or conditions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_codeMake CodeC
Convert bytes at an address into code.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Address to convert into code | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet it doesn't say this mutates the database/IDB, whether the change is reversible (undefine_items), whether the target must be undefined bytes first, or whether analysis must have completed. Only the bare transformation is stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no wasted words. The brevity is efficient, though it shades into under-specification rather than redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated database-mutating tool with no output schema in a large sibling set, the description is too thin: it omits the mutation effect, preconditions (open database, analysis state), and the relation to make_data/undefine_items.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents address, timeout, and the non-obvious instance_id constraint. The description adds nothing beyond repeating 'address', so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Convert bytes at an address into code" gives a clear verb and object, but 'code' is ambiguous in an IDA context (define instructions? create a function? decode?). It never distinguishes itself from close siblings like make_data, make_string, or undefine_items, which also transform bytes at an address.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of make_data, linear_disasm, create_function, or undefine_items (the inverse). The agent must infer the situation from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_dataMake DataC
Create typed data items at an address.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items to create | |
| address | Yes | Address to convert into typed data | |
| timeout | No | Timeout in seconds | |
| data_type | Yes | Data type: byte, word, dword, qword, oword, float, double, pointer | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 only that typed data items are created, without explaining whether it overwrites existing definitions, what permissions are needed, how it affects disassembly, or the role of instance_id in mutation semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is concise, though arguably too terse for a mutation tool with five parameters and no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool mutates database contents and has no annotations or output schema, so the description should explain side effects and constraints. Instead, it provides only a bare purpose statement, leaving significant behavioral context to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, including data_type values and instance_id requirements. The description adds no parameter-specific meaning beyond restating that typed data is created at an address.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: create typed data items at an address. It is clear enough to distinguish from make_code and make_string, which deal with code and strings respectively, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, prerequisites, or alternatives. An agent must infer that this is the correct tool for defining typed data rather than code, strings, or bytes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_signatureMake SignatureC
Create unique byte signatures for addresses. Generates the shortest
| Name | Required | Description | Default |
|---|---|---|---|
| addrs | Yes | Address(es) or name(s) to create unique signatures for (e.g. '0x401000', 'main', or ['0x401000', 'sub_402000']) | |
| format | No | Output format: 'ida' (default), 'x64dbg', 'mask', or 'bitmask' | ida |
| timeout | No | Timeout in seconds | |
| max_length | No | Maximum signature length in bytes before giving up (default: 1000) | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| wildcard_operands | No | Wildcard instruction operands for relocatable signatures (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses almost nothing: not whether the tool is read-only, whether it requires the database to be analyzed, what happens when no unique signature is found within max_length, or what the result looks like. The second sentence is truncated ('Generates the shortest'), leaving even the one behavioral hint incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Brevity here is under-specification rather than economy: the second sentence is cut off mid-thought, so the description is not merely short but structurally broken. Nothing is front-loaded beyond the one-line purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Six parameters, no annotations, and no output schema mean the description should explain what a signature is and how it is returned, which it does not. The schema does compensate by documenting all six parameters, and the format enum values are listed there, but the return shape and multi-instance behavior remain unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including format, max_length, wildcard_operands, and the instance_id requirement is already documented in the schema. The description adds no format or wildcard semantics beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Create unique byte signatures for addresses'), which is clear on its own. However, it never distinguishes this tool from the closely named siblings make_signature_for_function, make_signature_for_range, and find_xref_signatures, so the agent must infer that this one operates on arbitrary addresses rather than functions or ranges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to use this versus make_signature_for_function or make_signature_for_range, nor any prerequisites (e.g., an analyzed database, an open instance). The word 'addresses' faintly implies the contrast, but that is inference rather than guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_signature_for_functionMake Signature For FunctionC
Create unique byte signatures for function entry points. Resolves each
| Name | Required | Description | Default |
|---|---|---|---|
| addrs | Yes | Function address(es) or name(s) to create signatures for (e.g. 'main', '0x401000', or ['main', 'sub_402000']) | |
| format | No | Output format: 'ida' (default), 'x64dbg', 'mask', or 'bitmask' | ida |
| timeout | No | Timeout in seconds | |
| max_length | No | Maximum signature length in bytes before giving up (default: 1000) | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| wildcard_operands | No | Wildcard instruction operands for relocatable signatures (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden, but it discloses almost nothing about behavior — the second sentence is truncated at 'Resolves each', losing whatever it meant to say about resolution or failure. Nothing is said about whether the operation is read-only, what happens when a function can't resolve, or how format/max_length affect output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but not by design — it ends mid-sentence ('Resolves each'), indicating truncation rather than economy. What remains is front-loaded, but an incomplete fragment does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, no output schema, and no annotations, the description needs to carry weight it does not. It omits any explanation of the 'ida'/'x64dbg'/'mask'/'bitmask' formats, wildcard_operands semantics, or what a returned signature looks like, leaving the agent dependent on the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all six parameters documented including format values, timeout, and the multi-instance requirement for instance_id. The description adds no parameter meaning beyond that, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Create unique byte signatures for function entry points'), which reads clearly against siblings like make_signature_for_range. However, the description never names those siblings, and the trailing fragment 'Resolves each' is cut off mid-thought, so the purpose statement is clear but incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 make_signature or make_signature_for_range, nor any mention of prerequisites such as an analyzed function or an open database. The agent must infer the use case from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_signature_for_rangeMake Signature For RangeC
Create a byte signature for a specific address range (e.g. a selected
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End address or name (exclusive, e.g. '0x401020') | |
| start | Yes | Start address or name (e.g. '0x401000') | |
| format | No | Output format: 'ida' (default), 'x64dbg', 'mask', or 'bitmask' | ida |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| wildcard_operands | No | Wildcard instruction operands for relocatable signatures (default: true) |
TDQS
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 never states what the returned signature is suitable for (pattern scanning vs. patching), how wildcards/relocation affect output, or whether a live database/instance is needed — all of which matter for a signature-generation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Brevity here reflects truncation rather than discipline — the single sentence ends mid-thought, leaving the parenthetical example unclosed and the scope undefined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Six parameters, no annotations, no output schema, and two close siblings in the toolset that the description does not differentiate. An agent cannot confidently choose this tool over make_signature or make_signature_for_function from this text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: start/end exclusivity, format enum values, wildcard_operands default, and instance_id requirements are all documented in the schema. The description adds nothing beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource ('Create a byte signature') is identifiable, but the sentence is cut off mid-clause ('e.g. a selected') and never completes the scope. It also fails to distinguish this from sibling tools make_signature and make_signature_for_function, which an agent would reasonably confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this over make_signature (whole-function) or make_signature_for_function. The agent is left to infer the choice purely from tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_stringMake StringC
Create a string literal at an address.
| Name | Required | Description | Default |
|---|---|---|---|
| length | No | Optional length override (0 or omitted lets IDA infer) | |
| address | Yes | Address to convert into a string literal | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| string_type | No | String type: c, c16, c32, pascal, len2, len4, ... | c |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Create' implies a mutation, but the description does not say whether it overwrites existing data, requires an open database, persists changes, or what side effects occur. This is a significant gap for a mutation 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. However, its extreme terseness leaves important context unstated, which is a completeness issue rather than a conciseness failure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is under-specified. It does not mention prerequisites, effects on existing data, or whether the operation is reversible, leaving the agent to infer behavior from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, including length, string_type, and instance_id requirements. The description adds no parameter semantics beyond the schema, which is the baseline expectation when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Create a string literal at an address.' An agent can understand the core action without opening the schema. It does not explicitly differentiate this from siblings like make_data, make_code, or get_string, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 tool versus alternatives such as make_data or get_string. It also omits prerequisites, like whether a database must be open or how instance_id affects invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_databaseOpen DatabaseA
Open a binary or .i64 database in a headless idalib worker (creates/analyzes the .i64). Call this first. Record the returned instance.instance_id — every subsequent tool call must carry it while multiple databases are open.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to a local executable or .i64/.idb database. A live worker with this file is attached when present; otherwise a headless idalib worker opens/creates/analyzes it. | |
| timeout | No | Open/analysis wait timeout in seconds (default 300) | |
| wait_for_analysis | No | Wait for IDA auto-analysis to finish (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and discloses useful context: a headless idalib worker is used, the .i64 is created/analyzed, and the returned instance_id is required for later calls. It still omits some side-effect details, such as overwrite behavior and what happens if analysis times out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the main action comes first, followed by the critical sequencing instruction and the instance_id requirement. Every sentence contributes to correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an open/create-and-analyze operation with a rich input schema and no output schema, the description covers the essential workflow and the key returned value, instance.instance_id. It is slightly incomplete because it does not fully describe the return shape or all side effects, but it is sufficient for correct tool selection and use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents path, timeout, and wait_for_analysis in detail. The description adds no parameter-specific meaning beyond saying the path is a binary or .i64 database, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: open a binary or .i64 database in a headless idalib worker, with clarification that it creates/analyzes the .i64. The phrase 'Call this first' also situates it relative to the many sibling tools that require an already-open database.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational guidance: call this first, and record the returned instance.instance_id because every subsequent call must carry it while multiple databases are open. It does not explicitly compare against alternatives such as check_connection or list_databases, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_asmPatch AsmB
Assemble instruction text and patch it at address(es). Requires processor assembler support (e.g. x86).
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of {address, asm} objects | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the assembler dependency but says nothing about mutation semantics: whether the patch is applied to the live database or the file, whether it can be undone, or how partial failures across the item list 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded and the prerequisite second. Zero waste, though the second sentence could be tightened into the first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch mutation tool with no annotations and no output schema, the definition covers the action, the input shape via schema, and the key environmental prerequisite. The main remaining gap is failure/atomicity semantics across the item list, which matters for a batch patch but is a secondary concern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema describes all three parameters, including the conditional instance_id requirement. The description adds nothing about the {address, asm} item shape, so it neither adds nor detracts from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb chain and resource: assemble instruction text and patch it at address(es), which implicitly distinguishes it from patch_bytes (raw bytes) and apply_patch. It does not name any sibling explicitly, so an agent must infer the distinction rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a useful precondition (assembler must be available for the target processor, e.g. x86), which tells the agent when the tool will fail. However it never says when to prefer this over patch_bytes or apply_patch, or what to do when assembler support is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_bytesPatch BytesC
Patch bytes at address(es). Each item: {address, bytes}.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of {address, bytes: [int,...] or hex_string} | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 for a mutation tool. It does not disclose whether the patch persists to the IDB, is reversible/undoable, whether analysis must be re-run afterward, or what permissions/state are required — all material for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded and no filler. It is lean, though the second sentence largely duplicates the schema's items description rather than adding value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no annotations and no output schema, the description is thin: it omits persistence semantics, relationship to patch_asm, and any outcome/error behavior. The instance_id requirement is only captured in the schema, not reinforced in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters, including the richer 'int list or hex string' detail for bytes. The description's 'Each item: {address, bytes}' merely restates a subset of what the schema provides, adding no meaning beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Patch bytes at address(es)'), so the agent knows this writes raw bytes into the binary database. However, it does not differentiate from close siblings like patch_asm (assembly-level patching) or apply_patch, leaving ambiguity about which patching tool to choose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this versus patch_asm, apply_patch, or dbg_write_mem. There are no stated prerequisites such as needing the database open or the file writable, so the agent must infer selection from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
py_evalPy EvalC
Execute Python code in IDA context.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Python code to execute in IDA context | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 does not disclose that arbitrary code runs with database access, what side effects or persistence occur, whether timeouts abort execution cleanly, or what is returned. For an arbitrary-code-execution tool this is a major disclosure gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words, but it is under-specified rather than deliberately concise. Front-loading is fine but the brevity reflects missing content, not efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-risk arbitrary code execution tool with no annotations and no output schema. The description omits safety, side effects, error behavior, and any routing to sibling tools, leaving it far short of what an agent needs to invoke it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents code, timeout, and instance_id (including the multi-database requirement). The description adds nothing further, which meets the baseline 3 but no more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Execute Python code") with a scoping clause ("in IDA context"). However, it does nothing to distinguish this from sibling tools like py_exec_file or ida_python_reference, so an agent cannot tell which execution entry point to choose from the text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 py_exec_file, ida_python_reference, or the many dedicated IDA tools. The description provides no context, exclusions, or prerequisites, leaving the agent to infer everything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
py_exec_filePy Exec FileC
Execute a Python script file in IDA context and capture output.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| file_path | Yes | Absolute path to a Python script to execute | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 output is captured and that execution happens in IDA context, but it does not disclose that this runs arbitrary code with IDA's privileges, whether the script can mutate the database, how timeouts behave, or that a script could hang the session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though its brevity contributes to the missing behavioral detail rather than being a virtue in itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 an instance_id parameter that requires situational awareness, the description is too thin. It does not explain the output capture format, instance selection expectations, or the risks of executing arbitrary scripts, all of which an agent needs before calling this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents file_path, timeout, and instance_id thoroughly. The description adds no parameter meaning beyond that, which is the baseline-3 case when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — execute a Python script file in IDA context — which is clearer than a tautology. However, it does not distinguish the tool from the sibling py_eval, which is the obvious alternative for running Python in this environment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus py_eval, nor any mention of prerequisites such as needing an open database. The intended usage (script file instead of inline expression) is only implied by the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_scalarRead ScalarC
Read scalar integer(s) with explicit width.
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Address(es) - single or comma-separated | |
| width | No | Scalar width in bytes: 1, 2, 4, or 8 | |
| signed | No | Whether to decode as signed integer | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 state that this is a read-only operation, what happens on unmapped/invalid addresses, how multiple comma-separated addresses are returned, or whether reads require an open database or debugger session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the key qualifier ('explicit width') front-loaded and no filler. Brevity is appropriate, though the terseness borders on under-specification rather than pure economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter read tool with no annotations and no output schema, the description is thin. It omits the return shape—especially important because addr accepts comma-separated multiple addresses—and does not clarify the database/debugger context required to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter including width values, signedness, timeout, and the instance_id requirement. The description only restates 'explicit width' and adds nothing about multi-address addressing behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read scalar integers) plus the distinguishing trait of explicit width. It is clear enough to separate from get_bytes, but it does not name or contrast with the nearest sibling (dbg_read_mem) that also reads memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over get_bytes, dbg_read_mem, or linear_disasm. Nothing says whether this reads from an IDB-backed view or a live debug target, which is the key selection question among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_functionRename FunctionC
Rename function. Accepts function name or address.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Function name or address (hex/decimal) | |
| timeout | No | Timeout in seconds | |
| new_name | Yes | New function name (valid C identifier) | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full disclosure burden. It does not explain that this mutates the IDA database, what happens on duplicate names, whether existing references are updated, or how instance_id affects behavior. The only behavioral hint is implicit in the verb 'rename'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core operation. The second sentence is largely redundant with the schema, but the overall definition is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is too thin. It omits rename semantics, failure modes, instance selection implications, and any indication of what the operation changes in the database.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters including instance_id and timeout are already documented in the schema. The description's 'Accepts function name or address' restates the schema's address description and adds no syntax, format, or validation detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Rename function'), so an agent can tell it is a mutation tool for function names. It does not distinguish itself from nearby siblings like rename_local_variable or set_function_prototype, but the resource is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says only that it accepts a function name or address. It gives no guidance on when to use this instead of create_function, set_function_prototype, or the local/global rename tools, and no prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_global_variableRename Global VariableD
Rename global variable.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| new_name | Yes | New name (valid C identifier) | |
| old_name | Yes | Existing global symbol name (exact match) | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 the rename is reversible, what happens to references/xrefs, permission or instance requirements, or the response shape. For a mutation tool with zero annotation coverage, this is a serious gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no wasted words, but this reflects under-specification rather than conciseness. There is no front-loaded scope, constraint, or routing information to orient the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 4-parameter mutation tool with no annotations and no output schema, and the description omits instance scoping, effects on references, and return behavior entirely. Nothing an agent needs in order to call it safely is supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents all four parameters including the important instance_id multi-database rule and C-identifier constraint. The description adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "Rename global variable" merely restates the tool name and title, adding no verb+resource specificity. It does not distinguish this from sibling operations such as rename_function or rename_local_variable beyond what the name already conveys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance at all on when to use this tool versus rename_local_variable or rename_function, nor any mention of prerequisites such as the database instance requirement. The agent must infer everything from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_local_variableRename Local VariableC
Rename local variable (Hex-Rays).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| new_name | Yes | New variable name (valid C identifier) | |
| old_name | Yes | Old local variable name (exact match) | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| function_address | Yes | Function start or internal address (hex or decimal) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only implies a mutation operation and mentions Hex-Rays, but does not explain side effects, required permissions, error conditions (e.g., invalid or conflicting name), or whether changes are reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and front-loaded with no wasted words. Its brevity is efficient, though it borders on under-specification rather than being a model of concise completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with no annotations and no output schema, yet the description omits important context such as the need for an active Hex-Rays decompilation, expected failure modes, and effects on the decompiler view. The full schema coverage helps with parameters but not with behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the five parameters are already well documented in the schema. The description adds no parameter-level meaning beyond what is structurally provided, which fits the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Rename local variable') and the '(Hex-Rays)' qualifier identifies the decompiler context. However, it largely restates the tool name and does not explicitly differentiate itself from sibling renaming tools such as rename_global_variable or rename_function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, nor any prerequisites such as requiring an active decompilation or open database. The name implies the operation, but the description offers no contextual selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_databaseSave DatabaseB
Save the current (or specified) IDA database to disk (.i64).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 states that the tool writes to disk, but does not explain overwrite behavior, permissions, failure modes, whether it blocks, or what is returned. For a mutation/persistence operation with no annotation coverage, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 compact and immediately states the action and target format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple two-parameter save operation with full schema coverage and no output schema, the description is minimally adequate. However, the lack of annotations and the unresolved overlap with save_idb leave an agent without enough context to choose confidently between the two or anticipate save-specific behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented clearly. The description's phrase 'current (or specified)' adds a small amount of context about instance selection, but the schema does the substantive work, including the multi-instance requirement for instance_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: saving an IDA database to disk in .i64 format. It is easy to understand, but it does not distinguish this tool from the sibling save_idb, which appears to serve a closely related or identical purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 save_database instead of save_idb, nor does it explain preconditions such as whether analysis must be complete. It also does not say when not to use it or what happens with multiple open databases beyond the schema's instance_id note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_idbSave IdbC
Save the current IDA database to disk.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Target .i64/.idb path; empty keeps the current database path | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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, yet it says nothing about overwrite behavior, whether saving to a new path performs a 'save as' that changes the active database path, blocking duration, or failure modes during analysis/debugging. One sentence of intent is not enough for a mutation tool with zero structured behavioral coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It is efficient, though its brevity is part of the under-specification problem rather than a virtue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should disclose what happens on success or failure and the side effects of supplying a new path. The schema documents the parameters well, but the behavioral picture an agent needs before committing a save is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the path, timeout, and instance_id parameters all clearly documented in the schema itself. The description adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: saving the current IDA database to disk. However, it does not distinguish itself from the sibling tool save_database, which an agent could easily confuse with this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus save_database or close_database, and no mention of prerequisites such as an open database or an active debug session. The agent must infer usage 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.
search_textSearch TextB
Search disassembly listing text (instructions, comments) across the database.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matches to return | |
| query | Yes | Substring (default) or regular expression matched against disassembly lines and comments | |
| regex | No | Treat query as a regular expression | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 scope ('across the database') and which text is matched (instructions, comments), but says nothing about read-only semantics, result ordering, pagination behavior, or how the regex/timeout options affect execution cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the resource and scope appear immediately. It is efficient but borders on under-specification for a five-parameter search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, no annotations, no output schema, and several overlapping siblings (find_regex, find_instructions, list_strings), the description does not do enough: it omits result shape, matching semantics beyond the schema, and the critical routing information that would let an agent pick this over find_regex.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema, making 3 the baseline. The description adds only the parenthetical '(instructions, comments)', which lightly clarifies what the query string is matched against but does not materially extend the schema's meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (disassembly listing text, i.e. instructions and comments) with the scope 'across the database'. It does not, however, distinguish itself from nearby siblings like find_regex or find_instructions, which an agent could easily confuse with this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 find_regex, find_instructions, or list_strings, and no stated preconditions. The agent must infer usage purely from the name and the one-line scope statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_commentSet CommentC
Set comments at address(es). Each item: {address, comment}.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of {address, comment} objects | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 states that comments are written but not whether existing comments are overwritten or appended, what happens with invalid addresses, or whether the change must be saved separately. This is a mutation tool with essentially no behavioral disclosure beyond the verb 'Set'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation and followed by the required item shape; nothing is padded. It is perhaps too terse given the missing behavioral context, but the prose itself is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description omits overwrite semantics, address formatting, database-open requirements, and return behavior. The schema covers parameters, but an agent still lacks what it needs to call this correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description merely restates the schema's 'list of {address, comment} objects'. It adds no detail about the address format (hex string vs. integer) or whether 'comment' replaces prior text, which the loosely typed nested object leaves open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Set comments at address(es)') and the item shape, so an agent knows it writes comments to addresses. It does not distinguish among comment kinds used in this domain (e.g., regular vs. repeatable, anterior vs. posterior), but no sibling tool does comments, so ambiguity risk is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, no prerequisites (e.g., a database must be open), and no alternatives or exclusions. The agent must infer all usage conditions from the wider toolset.
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
Set function prototype (type signature).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| prototype | Yes | Full C function declaration | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| function_address | Yes | Function start or internal address (hex or decimal) |
TDQS
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 implies a mutation ('Set') but does not disclose permissions, effects on decompilation, what happens to existing analysis, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no waste, but the parenthetical is redundant and the extreme brevity leaves no actionable structure. It is concise but under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complex reverse-engineering mutation tool with no annotations and no output schema, the description is far too thin. The schema documents parameters, but the description does not explain behavioral impact, safety, or expected outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are well documented in the schema. The description adds no additional meaning beyond what the schema already provides, meeting the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Set function prototype (type signature)' essentially restates the tool name and title. The parenthetical '(type signature)' adds a synonym but does not clarify the scope, effects, or distinguish it from siblings like make_signature_for_function or set_local_variable_type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or exclusions. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_global_variable_typeSet Global Variable TypeC
Set global variable type.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| new_type | Yes | C type fragment | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| variable_name | Yes | Global symbol name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden, yet it discloses nothing about preconditions (an open database), whether the change persists until save_database, or side effects on downstream type inference. For a mutation tool with zero annotation coverage, this is a serious gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is technically concise with no waste, but this is under-specification rather than effective brevity. There is nothing front-loaded beyond a restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 4-parameter mutation tool with no annotations and no output schema, the description should explain preconditions and consequences. It conveys none of this, leaving the agent dependent entirely on the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (variable_name, new_type, instance_id, timeout) are already documented in the schema. The description adds no extra meaning, which is acceptable at baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a tautology that restates the tool name and title verbatim without adding detail about what setting the type actually entails. It does not distinguish this from the sibling set_local_variable_type, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 set_local_variable_type, rename_global_variable, infer_types, or declare_struct. The only usage signal comes from the schema's instance_id description, not the tool description itself.
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 TypeB
Set local variable type (Hex-Rays).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| new_type | Yes | C type fragment (e.g. int, char *, MyStruct *) | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| variable_name | Yes | Local variable name (exact match) | |
| function_address | Yes | Function start or internal address (hex or decimal) |
TDQS
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 adds almost nothing. It does not say that the operation mutates the decompiler's variable mapping, whether it may fail on locked/optimized variables, whether the change persists to the database, or that it can affect subsequent decompilation output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence fragment with zero waste and the key qualifier up front. It is efficient, though its brevity borders on under-specification rather than tight scoping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no annotations and no output schema, the description covers only the name-level identity. An agent gets no information on failure modes, persistence, or the interaction with decompiler state, all of which matter before invoking a type-changing write.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including format hints for new_type and instance_id's multi-database requirement, so the structured fields do the heavy lifting. The description adds no parameter meaning beyond the schema, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set local variable type') and the '(Hex-Rays)' qualifier ties it to the decompiler, which distinguishes it from set_global_variable_type by name alone. It stops short of explicitly contrasting with the sibling, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent infers this applies to Hex-Rays local variables rather than globals or stack declarations. There is no statement of prerequisites (decompiler must be available, function must be decompilable) or of when to prefer infer_types or set_global_variable_type instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_op_typeSet Op TypeB
Set the display type of an instruction operand (hex/dec/oct/bin/char/stkvar).
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of {address, type, operand?} objects; type: hex|dec|oct|bin|char|stkvar | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and doesn't. It doesn't say this is a mutating operation, whether the change is persistent/saved with the database, that 'items' is a batch of edits applied together, or that it needs a live instance. The schema note about instance_id being required with multiple databases is the only behavioral hint, and it lives in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no waste. It's efficient but so terse that brevity shades into under-specification rather than optimal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated mutation tool with no output schema, the description omits batch semantics, persistence of the change, and any precondition like an open database—information an agent needs to call it safely. The 100% schema coverage covers parameter shapes but not behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents items, timeout, and the instance_id requirement, and the description only repeats the type enum. Baseline 3 applies since the description adds no param meaning beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (set the display type of an instruction operand) and enumerates the allowed type values, so an agent can tell what it does and that it's distinct from renaming/typing siblings like set_local_variable_type. It stops short of naming which sibling handles related-but-different tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the type list hints at formatting operands, but there's no explicit 'use when you want operands shown as hex/char/etc.' nor any exclusions or prerequisites (e.g., a loaded database, a valid address). An agent must infer the when-to-use from the title and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stack_frameStack FrameC
Get stack frame variables for function(s).
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Function address(es) - single or comma-separated | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 doesn't state that this is a read-only query, what the return looks like, what happens if multiple instance databases are open (that constraint lives only in the schema), or how it behaves for a non-existent address.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste, but it is terse to the point of under-specification for a tool returning a structured variable list, so it earns adequacy rather than praise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a reverse-engineering query tool with no annotations and no output schema, the description should explain return shape, scoping, and multi-instance behavior. It covers none of these, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents addr, timeout, and instance_id thoroughly. The description adds no syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (stack frame variables) scoped to functions. It is clear enough to know roughly what it returns, but it offers no differentiation from nearby siblings that also touch stack/local variable data (e.g., declare_stack, delete_stack, list_local_types).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, no when-not-to, and no named alternative. An agent gets no signal about choosing this over list_local_types or decompile for inspecting a function's frame.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
survey_binarySurvey BinaryC
High-level binary overview: metadata, entity counts, segments, entry points.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses almost nothing: it does not say the operation is read-only, that it requires an open database, whether it triggers analysis, or how large/expensive the response is. Only the schema's instance_id text hints at the single-instance precondition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Its brevity is somewhat at the expense of usefulness, but structurally it is clean and waste-free.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An aggregating survey tool with no output schema needs to say roughly what comes back and how it relates to the narrower list/get tools. The description leaves an agent unable to judge payload size, cost, or whether calling it subsumes several sibling calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; timeout and instance_id are both documented in the schema, including the multi-database rule. The description adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource: a high-level overview of the loaded binary, and enumerates what it covers (metadata, entity counts, segments, entry points). It is clear on its own, but it does not distinguish itself from siblings such as get_metadata, list_segments, get_entry_points, or list_functions, which cover the same ground individually.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this instead of the focused tools it duplicates (get_metadata, list_segments, get_entry_points). No prerequisites, no notes on cost or when a broad survey is preferable to targeted queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_data_flowTrace Data FlowC
Trace data references (reads/writes/offsets) to and from an address.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Start address or symbol name | |
| timeout | No | Timeout in seconds | |
| direction | No | to | from | both | both |
| max_depth | No | Maximum xref hops | |
| max_nodes | No | Maximum nodes to include | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 implies a potentially expensive multi-hop traversal but never says it is read-only, that results can be truncated (max_nodes default 200), that traversal depth is bounded, or that it may be slow enough to need a timeout.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. However, for a six-parameter graph-traversal tool with no annotations, that brevity edges into under-specification rather than tight conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should explain the shape of the returned traversal (nodes/edges, hops, truncation behavior) and read-only safety. For a parameterized multi-database traversal tool it leaves too much for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters including direction, max_depth, and instance_id. The description only loosely reinforces 'to and from' versus the direction parameter and adds no syntax, symbol-name handling, or truncation semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (trace) and resource (data references: reads/writes/offsets) with scope ('to and from an address'). It is clearer than a tautology, but it does not distinguish itself from overlapping siblings such as xrefs_to, xrefs_from, and xrefs_to_field, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus the multiple xref tools in the sibling set, nor any prerequisite or exclusion. The usage is only inferable from the verb, which is insufficient in a crowded xref-tool cluster.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undefine_itemsUndefine ItemsD
Undefine items in a range.
| Name | Required | Description | Default |
|---|---|---|---|
| size | Yes | Number of bytes to undefine | |
| address | Yes | Start address of the range to undefine | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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. It is a destructive mutation (removing code/data definitions in the database) and the description does not say whether changes are undoable, whether analysis is lost, or whether it requires a loaded database.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, so nothing is wasted. However, the brevity reflects under-specification rather than tight, information-dense writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-annotation, no-output-schema mutation tool, the description leaves out the effect on existing analysis, the multi-instance constraint, and any relation to sibling mutation tools. It is not sufficient on its own to call the tool safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the non-obvious instance_id requirement and the address accepting int-or-string. The description adds nothing beyond the schema, which is acceptable at full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description essentially restates the tool name with only a minor scope hint ('in a range'). It never says what 'undefine' actually does operationally (e.g. convert code/data bytes back to undefined raw bytes), so an agent must already know IDA semantics to understand the effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus related mutation tools like make_code, make_data, make_string, or patch_bytes. The only implicit context is that it operates on a range rather than a single item.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_analysisWait For AnalysisA
Block until IDA auto-analysis (functions, xrefs, strings) completes.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
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 the single most important trait: the call blocks. However, it says nothing about what happens when the timeout elapses (return vs. error), whether blocking consumes the caller's time budget, or whether the call is safe to repeat. For a potentially long-blocking tool with zero annotation coverage, these omissions matter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded clause with a useful parenthetical listing what analysis produces. No filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Short description, but the tool is simple (2 optional params, no nested objects, no output schema) and the schema already documents the multi-instance constraint. The main residual gap is the absence of any statement about the return value or timeout behavior, which no structured field covers since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including a detailed note that instance_id is required whenever more than one database is open, so the schema does the heavy lifting. The description adds no meaning about timeout semantics (default null = wait indefinitely? bounded?) beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('block until') plus a specific resource ('IDA auto-analysis'), with the analysis outputs enumerated (functions, xrefs, strings) so an agent knows what state is being waited on. It is not explicitly differentiated from siblings like check_connection or survey_binary, but the blocking semantics are distinctive enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer this should be called after open_database and before analysis-dependent tools such as list_functions or xrefs_to. There is no explicit when/when-not guidance, no mention of the alternative (e.g. check_connection, survey_binary), and no note on whether calling it on an already-analyzed IDB is a no-op.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xrefs_fromXrefs FromC
Get all cross-references from address(es).
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Source address(es) - single or comma-separated | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses almost nothing: not that it is a read-only query, not what kinds of references are returned (code, data, string), not whether results include the referencing instruction, and not the critical multi-database constraint on instance_id. Only the trivial implication of a non-mutating lookup can be inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. It is efficient, though efficiency here edges toward under-specification rather than precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is the only place an agent could learn what a 'cross-reference' record contains and how to interpret the result — and it says nothing. The multi-database instance_id requirement is also left solely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including comma-separated multi-address handling and the instance_id multi-database requirement, so the schema does the heavy lifting. The description's 'address(es)' is consistent with that but adds no meaning beyond it; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: retrieves cross-references originating at the given address(es). The preposition 'from' implicitly distinguishes it from the sibling xrefs_to, but the description never names that sibling or states direction explicitly, so an 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus xrefs_to, get_callers, get_callees, or trace_data_flow. The only guidance is the implicit 'from' in the name/sentence; nothing tells the agent when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xrefs_toXrefs ToB
Get all cross-references to address(es).
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | Target address(es) - single or comma-separated | |
| timeout | No | Timeout in seconds | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state that this is a read-only operation, whether analysis must be complete, what the return shape is, or how timeout behaves; it only says 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every word contributes to identifying the operation and target.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents all three parameters, so an agent can construct a call. However, with no annotations and no output schema, the description should ideally clarify return format and prerequisites such as database/analysis state; it leaves those gaps unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter meanings are already fully documented in the schema. The description's 'address(es)' mirrors the addr parameter but adds no extra semantics for addr, timeout, or instance_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get all cross-references to address(es).' The word 'to' implicitly distinguishes it from xrefs_from, but it does not explicitly name sibling alternatives such as xrefs_from or xrefs_to_field.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like xrefs_from, get_callers, or xrefs_to_field. The intended use is only inferable from the tool name and the phrase 'to address(es)'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xrefs_to_fieldXrefs To FieldC
Search struct field references. Heuristic by default (name/offset text
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matches to return (1..500) | |
| strict | No | Only report type-confirmed accesses (operand typed as the struct) | |
| timeout | No | Timeout in seconds | |
| field_name | Yes | Field name | |
| instance_id | No | REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live. | |
| struct_name | Yes | Struct name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it is truncated mid-sentence ('...name/offset text') and never explains what heuristic matching means, what strict mode changes, or what the results represent. It gives only a faint signal about default behavior and leaves the agent without enough context for a search tool with meaningful false-positive risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two fragments and is visibly incomplete, ending with an unclosed parenthesis. Brevity is not the issue; the text is under-specified and fails to form a coherent, front-loaded statement of what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter xref search with no annotations and no output schema, the description leaves out the heuristic/strict tradeoff, result format, and the crucial instance_id requirement that the schema itself notes. The schema fills many parameter gaps, but the description does not complete the behavioral picture an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already documented in structured form. The description adds 'Heuristic by default,' which relates loosely to the strict parameter, but it does not elaborate on the heuristic-vs-strict distinction beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search struct field references.' That distinguishes it from generic siblings like xrefs_to and xrefs_from. The trailing fragment weakens it, but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this instead of xrefs_to or xrefs_from, nor any prerequisites or exclusions. 'Heuristic by default' hints at an alternative mode but does not explain when the strict mode should be chosen.
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.
90 tool updates
v1.0.1- Removed
add_bookmark - Changed
add_segment1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
apply_patch1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
callgraph1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
close_database2 fields changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id; defaults to the current target"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live." - changed
Input schema / properties / terminate / descriptionPrevious value: -"Also close GUI instances; headless workers are always shut down (saved first) when their last user detaches"New value: +"Force shutdown even while other agents still hold leases on this worker"
- Changed
convert_number1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
create_function1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_add_bp1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_callstack1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_continue1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_delete_bp1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_enable_bp1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_exit1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_list_bps1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_read_mem1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_regs1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_run_to1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_start2 fields changed- added
Input schema / properties / debuggerAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Debugger module name; default is the local debugger for this platform ('linux'/'win32'/'macos'). Pass e.g. 'gdb' for remote debugging." +} - changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_status1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_step_into1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_step_over1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_thread_regs1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
dbg_write_mem1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
declare_enum1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
declare_stack1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
declare_struct1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
declare_typedef1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
decompile1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
delete_function1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
delete_segment1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
delete_stack1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
diff_before_after1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
disasm1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
find_bytes1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
find_instructions1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
find_regex1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
find_xref_signatures1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
force_recompile1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_basic_blocks1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_bytes1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_callees1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_callers1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_cursor1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_entry_points1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_function_signature1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_metadata1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_string1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
get_struct_info1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
infer_types1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
linear_disasm1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
list_exports1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
list_functions1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
list_globals1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
list_imports1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
list_local_types1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
list_segments1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
list_strings1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
list_structs1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
make_code1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
make_data1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
make_signature1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
make_signature_for_function1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
make_signature_for_range1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
make_string1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
open_database4 fields changed- removed
Input schema / properties / extra_argsRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Extra IDA CLI args for GUI launches" -} - removed
Input schema / properties / headlessRemoved value: -{ - "default": "auto", - "description": "\"auto\" (default: attach, else headless worker), \"headless\"/\"true\" (force idalib worker), \"gui\"/\"false\" (launch the IDA GUI)", - "type": "string" -} - changed
Input schema / properties / path / descriptionPrevious value: -"Path to a local executable or .i64/.idb database. A live instance with this file is attached when present; otherwise a headless idalib worker opens/creates/analyzes it."New value: +"Path to a local executable or .i64/.idb database. A live worker with this file is attached when present; otherwise a headless idalib worker opens/creates/analyzes it." - removed
Input schema / properties / set_currentRemoved value: -{ - "default": true, - "description": "Make this database the default target (default true)", - "type": "boolean" -}
- Changed
patch_asm1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
patch_bytes1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
py_eval1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
py_exec_file1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
read_scalar1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
rename_function1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
rename_global_variable1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
rename_local_variable1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
save_database1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id; defaults to the current target"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
save_idb1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
search_text1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Removed
select_database - Changed
set_comment1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
set_function_prototype1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
set_global_variable_type1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
set_local_variable_type1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
set_op_type1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
stack_frame1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
survey_binary1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
trace_data_flow1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
undefine_items1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
wait_for_analysis1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
xrefs_from1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
xrefs_to1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
- Changed
xrefs_to_field1 field changed- changed
Input schema / properties / instance_id / descriptionPrevious value: -"Instance id override"New value: +"REQUIRED whenever more than one database is open (from open_database's result or list_databases()); optional only while exactly one instance is live."
93 tool updates
v0.9.7- First observed
add_bookmark - First observed
add_segment - First observed
apply_patch - First observed
callgraph - First observed
check_connection - First observed
close_database - First observed
convert_number - First observed
create_function - First observed
dbg_add_bp - First observed
dbg_callstack - First observed
dbg_continue - First observed
dbg_delete_bp - First observed
dbg_enable_bp - First observed
dbg_exit - First observed
dbg_list_bps - First observed
dbg_read_mem - First observed
dbg_regs - First observed
dbg_run_to - First observed
dbg_start - First observed
dbg_status - First observed
dbg_step_into - First observed
dbg_step_over - First observed
dbg_thread_regs - First observed
dbg_write_mem - First observed
declare_enum - First observed
declare_stack - First observed
declare_struct - First observed
declare_typedef - First observed
decompile - First observed
delete_function - First observed
delete_segment - First observed
delete_stack - First observed
diff_before_after - First observed
disasm - First observed
find_bytes - First observed
find_instructions - First observed
find_regex - First observed
find_xref_signatures - First observed
force_recompile - First observed
get_basic_blocks - First observed
get_bytes - First observed
get_callees - First observed
get_callers - First observed
get_cursor - First observed
get_entry_points - First observed
get_function_signature - First observed
get_metadata - First observed
get_string - First observed
get_struct_info - First observed
ida_python_reference - First observed
infer_types - First observed
linear_disasm - First observed
list_databases - First observed
list_exports - First observed
list_functions - First observed
list_globals - First observed
list_imports - First observed
list_local_types - First observed
list_segments - First observed
list_strings - First observed
list_structs - First observed
make_code - First observed
make_data - First observed
make_signature - First observed
make_signature_for_function - First observed
make_signature_for_range - First observed
make_string - First observed
open_database - First observed
patch_asm - First observed
patch_bytes - First observed
py_eval - First observed
py_exec_file - First observed
read_scalar - First observed
rename_function - First observed
rename_global_variable - First observed
rename_local_variable - First observed
save_database - First observed
save_idb - First observed
search_text - First observed
select_database - First observed
set_comment - First observed
set_function_prototype - First observed
set_global_variable_type - First observed
set_local_variable_type - First observed
set_op_type - First observed
stack_frame - First observed
survey_binary - First observed
trace_data_flow - First observed
undefine_items - First observed
wait_for_analysis - First observed
xrefs_from - First observed
xrefs_to - First observed
xrefs_to_field
TDQS
Scored across 91 tools
Most tools target clearly distinct IDA operations, especially with separate namespaces for database lifecycle, analysis, xrefs, types, patching, and debugging. However, save_database and save_idb are exact duplicates, dbg_regs/dbg_thread_regs overlap, and the signature-creation family plus apply_patch/patch_bytes require careful reading to choose correctly.
All names are snake_case, which helps, but the naming style is mixed: many verb_noun names, many bare verbs like disasm/decompile, noun names like callgraph/stack_frame/survey_binary, a dbg_ prefix for debugger tools, and xrefs_to/xrefs_from directional names. The set is readable but does not follow one predictable pattern.
With 91 tools, the surface is far beyond a reasonably scoped server and imposes high selection burden on an agent. Even though many tools are useful, the count is extreme for the apparent domain and includes duplicates and fine-grained variants that could be consolidated.
The surface is very comprehensive for IDA reverse engineering: database management, analysis, disassembly/decompilation, xrefs, functions, types, segments, strings, patching, signatures, debugging, and Python execution are all covered. Minor gaps exist around local-type deletion and richer per-function detail aggregation, but core workflows are well supported.
Maintenance
Related MCP Connectors
2,000+ MCP servers read at source level. Know what one does before you connect. Free, no key.
MCP registry & directory: search, find & install 31k+ MCP servers & tools. Catalog and marketplace.
MCP gateway and cloud hosting for MCP servers, agents and apps like RAG, managed from your agent.
518.PLUS: MCP tool marketplace. Run tools on files, text or JSON, share results, publish your own.
Related MCP Servers
- AlicenseBqualityFmaintenanceMCP server for reverse engineering that enables interaction with IDA Pro for analysis tasks such as decompilation, disassembly, and memory engagement reports.2446MIT
- AlicenseNot gradedqualityDmaintenanceAn enhanced MCP server for IDA Pro that integrates bulk binary export, multi-instance management via Broker mode, and 80+ analysis tools for AI-assisted reverse engineering.6MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to drive IDA Pro through a stability-hardened server that hosts multiple headless idalib instances, with per-session isolation, configurable HTTP/stdio transports, and API-key authentication.186MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI-powered reverse engineering in IDA Pro by letting MCP clients inspect decompilation and disassembly, rename symbols, convert integers, and otherwise interact with the database through natural language.1MIT