Skip to main content
Glama

License GitHub release (latest by date) GitHub stars GitHub forks GitHub contributors Follow @lauriewired

ghidra_MCP_logo

ghidraMCP

ghidraMCP is an Model Context Protocol server for allowing LLMs to autonomously reverse engineer applications. It exposes numerous tools from core Ghidra functionality to MCP clients.

https://github.com/user-attachments/assets/36080514-f227-44bd-af84-78e29ee1d7f9

Features

MCP Server + Ghidra Plugin

  • Decompile and analyze binaries in Ghidra

  • Automatically rename methods and data

  • List methods, classes, imports, and exports

Installation

Prerequisites

  • Install Ghidra 12.1.4

  • Install uv (or Python 3.10+ with pip install git+https://github.com/LaurieWired/GhidraMCP, then use ghidra-mcp as the command below)

Related MCP server: GhidraMCP

Ghidra

First, download the latest release from this repository. This contains the Ghidra plugin and Python MCP client. Then, you can directly import the plugin into Ghidra.

  1. Run Ghidra

  2. Select File -> Install Extensions

  3. Click the + button

  4. Select the ghidra_12.1.4_PUBLIC_<date>_GhidraMCP.zip from the downloaded release

  5. Restart Ghidra

  6. Make sure the GhidraMCPPlugin is enabled in File -> Configure -> Developer

  7. Optional: Configure the port in Ghidra with Edit -> Tool Options -> GhidraMCP HTTP Server

Video Installation Guide:

https://github.com/user-attachments/assets/75f0c176-6da1-48dc-ad96-c182eb4648c3

MCP Clients

Theoretically, any MCP client should work with ghidraMCP. Most clients accept a JSON config like the following:

{
  "mcpServers": {
    "ghidra": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/LaurieWired/GhidraMCP",
        "ghidra-mcp",
        "--ghidra-server",
        "http://127.0.0.1:8080/"
      ]
    }
  }
}

The server IP and port are configurable and should be set to point to the target Ghidra instance. If not set, both will default to localhost:8080.

For clients that connect to a URL instead of launching a command, first run the MCP server yourself:

uvx --from git+https://github.com/LaurieWired/GhidraMCP ghidra-mcp --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081 --ghidra-server http://127.0.0.1:8080/

Then add http://127.0.0.1:8081/mcp as a remote server in your client.

Example 1: VS Code

Run MCP: Add Server from the Command Palette, or add the following to .vscode/mcp.json in your workspace:

{
  "servers": {
    "ghidra": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/LaurieWired/GhidraMCP",
        "ghidra-mcp",
        "--ghidra-server",
        "http://127.0.0.1:8080/"
      ]
    }
  }
}

Example 2: Claude Code

Run the following command:

claude mcp add ghidra -- uvx --from git+https://github.com/LaurieWired/GhidraMCP ghidra-mcp --ghidra-server http://127.0.0.1:8080/

Headless (no Ghidra GUI)

ghidra-mcp can also import and analyze a binary itself using PyGhidra, with no Ghidra GUI running. This needs Python 3.10–3.13, the GhidraMCP extension installed in Ghidra (or --extension-jar /path/to/GhidraMCP.jar), and GHIDRA_INSTALL_DIR set to your Ghidra 12.1.4 directory:

uvx --python 3.13 --from "ghidra-mcp[headless] @ git+https://github.com/LaurieWired/GhidraMCP" ghidra-mcp --headless --binary /path/to/target

Use the same command and arguments in any of the client configs above. Add --project DIR to keep the Ghidra project (and save changes) between runs. On macOS, build Ghidra's decompiler once with support/gradle/gradlew buildNatives from the Ghidra directory.

Building from Source

  1. Set GHIDRA_INSTALL_DIR to your Ghidra 12.1.4 directory

  2. Build the extension with Gradle (Java 21) by running:

cd extension && $GHIDRA_INSTALL_DIR/support/gradle/gradlew buildExtension

The generated zip file in extension/dist/ includes the built Ghidra plugin and its resources. These files are required for Ghidra to recognize the new extension.

  • lib/GhidraMCP.jar

  • extension.properties

  • Module.manifest

The Python MCP server can be run from a checkout with uv run ghidra-mcp, and tested with uv run pytest.

Available Tools

30 tools
decompile_functionA

Decompile a function by name and return C pseudocode. Fails if the name is ambiguous; use decompile_function_by_address in that case.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses a failure mode (ambiguous names fail rather than guess), which is real behavioral context. It says nothing about permissions, performance, or read-only nature, though for a decompile operation those are lower-stakes.

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

Conciseness5/5

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

Two tight sentences, front-loaded with purpose and followed by the failure/alternative clause. Every sentence earns its place with zero padding.

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

Completeness4/5

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

An output schema exists, so return values needn't be described. For a simple one-parameter read tool, the description covers what it does, what it returns, and how it fails — only the general name-vs-address selection heuristic is missing.

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

Parameters3/5

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

The single 'name' parameter has 0% schema description coverage, but the description implies its meaning ('decompile a function by name') and its constraint (must be unambiguous). That compensates partially, though it doesn't say whether the name is fully qualified, case-sensitive, or namespace-aware.

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

Purpose5/5

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

States a specific verb (decompile), resource (function), input selector (by name) and output format (C pseudocode). It also names the sibling it is not — decompile_function_by_address — so an agent can distinguish it without opening schemas.

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

Usage Guidelines4/5

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

Explicitly covers the when-not case and the alternative: 'Fails if the name is ambiguous; use decompile_function_by_address in that case.' Clear context is given, but it doesn't state the general condition for preferring name-based lookup (e.g. when you already have a symbol) versus address-based lookup.

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

decompile_function_by_addressB

Decompile the function at or containing an address and return C pseudocode.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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 largely fails: it discloses the return format (C pseudocode), but says nothing about prerequisites (must the binary be loaded/analyzed?), behavior when the address is not inside any function, failure modes for invalid addresses, or cost of decompilation.

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

Conciseness5/5

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

A single front-loaded sentence that states action, target, and result with zero filler. Nothing to trim and nothing buried.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and the one-parameter surface is small. Still missing usage routing and any behavioral caveats (invalid address, unanalyzed binary), leaving the definition only minimally complete for a decompiler call.

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

Parameters3/5

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

One parameter with 0% schema description coverage, so the description must compensate. It does add real meaning by clarifying that the address may point either at the function entry or merely inside it, but it gives no format hints (hex string, absolute vs relative) for the required address value.

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

Purpose4/5

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

Names a specific verb (Decompile) and resource (function at or containing an address), and the qualifier 'at or containing' distinguishes it from a by-name variant. It does not explicitly name the sibling decompile_function, so an agent must infer the address-vs-name distinction from the tool name itself.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no exclusions, and never mentions the alternatives decompile_function, disassemble_function, or get_function_by_address. The agent must decide between them without help.

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

disassemble_functionC

Disassemble the instructions in a function's body (address, bytes, instruction, end-of-line comment).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden, yet it discloses nothing about read-only safety, required permissions, or pagination behavior for limit/offset. The only behavioral hint is the parenthetical output listing, which is largely redundant given an output schema exists.

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

Conciseness4/5

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

A single efficiently worded sentence with the resource and output shape front-loaded. No filler, though it is arguably too terse given the parameter gaps.

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

Completeness2/5

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

For a 3-param tool with 0% schema coverage and no annotations, the description is too thin: it omits the pagination parameters, usage context, and alternatives. The output schema covers return values, but the invocation side is under-specified.

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

Parameters2/5

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

Schema description coverage is 0% and the description only implicitly clarifies that 'address' is a function address ('a function's body'). The limit and offset parameters are completely unexplained, leaving pagination semantics ambiguous.

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

Purpose4/5

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

States a specific verb and resource: disassembling a function's body, and enumerates the output columns (address, bytes, instruction, comment). It is clear what the tool does, though it does not explicitly differentiate itself from the many sibling decompile_* tools.

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

Usage Guidelines2/5

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

No guidance on when to use this versus decompile_function, decompile_function_by_address, or read_memory. The agent must infer that this is the low-level instruction view while the decompile siblings are the high-level view.

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

get_current_addressA

Get the address currently selected in the Ghidra GUI listing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does usefully disclose the data source (the live GUI selection state) and implicitly signals a read-only getter, but it omits what happens when the listing has no active selection or when no GUI session exists.

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

Conciseness5/5

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

A single front-loaded sentence with no filler. The resource and its scope are stated immediately and nothing is wasted.

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

Completeness4/5

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

With an output schema present, the return value needs no explanation, and with zero parameters there is little surface area to cover. The only meaningful gap is the undefined behavior when no address is selected in the GUI.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the schema or description to disambiguate. The baseline of 4 applies; no parameter-level meaning is missing.

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

Purpose4/5

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

The description states a specific verb and resource: retrieving the address currently selected in the Ghidra GUI listing. This clearly separates it from siblings like get_current_function or get_function_by_address, 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.

Usage Guidelines3/5

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

Usage is only implied: the phrase 'currently selected in the Ghidra GUI listing' tells the agent this is relevant when a selection exists, but there is no when-to-use/when-not guidance, no mention of what to do if nothing is selected, and no routing to alternatives.

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

get_current_functionA

Get the function containing the address currently selected in the Ghidra GUI.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It indicates a read-like operation and the source of the input (current GUI selection), but it does not state what happens if no address is selected, whether it can fail, or any other operational behavior beyond the basic retrieval.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler. Every word contributes to identifying the operation and its input source.

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

Completeness4/5

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

Given the tool's simplicity, zero parameters, and an output schema covering return values, the description is nearly sufficient. It could be more complete by mentioning error behavior when no function is selected, but that is a minor gap for a straightforward GUI getter.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the schema to document and no parameter semantics needed in the description. Baseline 4 applies for a parameterless tool.

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

Purpose5/5

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

States a specific verb and resource ('Get the function') and identifies the exact scope ('containing the address currently selected in the Ghidra GUI'). This clearly distinguishes it from siblings like get_function_by_address and get_current_address, which operate on explicit addresses rather than the current GUI selection.

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

Usage Guidelines4/5

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

The description gives a clear condition for use: the address must be currently selected in the Ghidra GUI. It does not explicitly name alternatives such as get_function_by_address or state when not to use this tool, but the GUI-selection scope is enough for an agent to infer the correct context.

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

get_function_by_addressA

Get the function at or containing an address: name, signature, body range, calling convention.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the returned attributes (name, signature, body range, calling convention), which conveys useful behavior, but it says nothing about read-only nature, permissions, or failure modes. For a lookup on a non-entry address, it doesn't explain what happens if no function contains the address.

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

Conciseness5/5

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

A single compact sentence that front-loads the action and then lists the return payload. No filler, no redundancy with the title.

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

Completeness4/5

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

With an output schema present, the description need not explain return values, and the input surface is a single parameter. It covers purpose and resolution behavior adequately; only the address format and the no-match case are left implicit, which is minor.

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

Parameters3/5

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

Schema description coverage is 0% for the single 'address' parameter, so the description must compensate. The wording 'at or containing' is genuinely useful semantics, signaling that any interior address resolves to its enclosing function, not just entry points. However, it doesn't specify the address format (hex string, integer), leaving a real gap.

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

Purpose4/5

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

States a specific verb and resource ('Get the function') qualified by location ('at or containing an address') and enumerates the returned fields. It is clearly distinguishable from get_current_function, which operates on the cursor rather than an address. It does not explicitly name siblings or clarify against decompile_function_by_address, 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.

Usage Guidelines3/5

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

The phrase 'at or containing an address' implies the usage context (you have an address inside or at the start of a function), but it never says when to prefer this over get_current_function, list_functions, or decompile_function_by_address. Usage is implied rather than stated.

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

get_function_callsA

Function-level call graph, one level deep. Callers are call sites that reach this function; callees are calls made from anywhere in its body, including indirect calls (direct=false). offset/limit apply to each list separately.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
addressYes
directionNoboth

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden and does disclose several non-obvious traits: the traversal is exactly one level deep (not recursive), indirect calls are included and flagged via direct=false, and offset/limit are applied per list rather than across the whole result. It does not state that this is a pure read with no side effects, but the added depth/indirection/pagination context is genuinely valuable.

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

Conciseness5/5

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

Two tight sentences with zero filler. The core identity ('function-level call graph, one level deep') is front-loaded, followed by the definitions and the pagination caveat in descending order of importance.

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

Completeness5/5

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

An output schema exists, so return values need no explanation, and the description covers the aspects an agent actually needs to invoke it correctly: traversal depth, indirect-call handling, direction semantics, and per-list pagination. Nothing material is missing for a read-only graph query.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does add real meaning: it explains the direction semantics via the callers/callees definitions, clarifies that indirect calls surface as direct=false, and specifies that 'offset/limit apply to each list separately' – a behavioral detail the bare integer schema cannot convey. The address parameter is left implicit, which is the only notable gap.

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

Purpose4/5

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

The description gives a specific verb+resource (function-level call graph) and precisely defines the two result sets: 'callers are call sites that reach this function' and 'callees are calls made from anywhere in its body'. This is clear enough that an agent understands what it retrieves, though it never explicitly distinguishes itself from the many sibling xref tools (get_xrefs_to, get_function_xrefs), 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.

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no alternative is named despite several overlapping siblings (get_xrefs_to, get_xrefs_from, get_function_xrefs) that an agent could easily confuse with this one. Usage is only implied by the callers/callees semantics, leaving the selection decision to inference.

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

get_function_xrefsB

List references to a function's entry point, by name or (preferably) address.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
limitNo
offsetNo
addressNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not state that this is a read-only listing, does not mention pagination despite limit/offset params, and gives no sense of the result volume or semantics of a cross-reference.

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

Conciseness4/5

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

A single tight sentence with the resource front-loaded and the input guidance appended. Efficient, though barely more than a name restatement plus one hint.

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

Completeness3/5

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

An output schema exists so return values need not be described, but with no annotations and 0% schema coverage the description should say more about read-only behavior and the limit/offset pagination it exposes. Adequate but with clear gaps.

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

Parameters3/5

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

Schema coverage is 0%, so the schema provides no help. The description clarifies the name-vs-address choice and expresses a preference for address, covering 2 of 4 parameters, but leaves limit and offset completely unexplained in both schema and description.

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

Purpose4/5

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

States a specific verb+resource: 'List references to a function's entry point.' The phrase 'entry point' and 'xrefs' is fairly specific, but it does not differentiate itself from siblings like get_xrefs_to or get_function_calls, so an agent must infer the distinction.

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

Usage Guidelines3/5

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

The parenthetical '(preferably) address' hints at input preference, which is genuine guidance, but there is no statement of when to use this versus get_xrefs_to or get_xrefs_from. Usage is implied rather than explicit.

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

get_program_infoA

Identify the target program: name, format, language/architecture, compiler spec, image base, address range, size, entry points, and hashes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It implies a non-mutating read ('Identify') and enumerates the returned metadata, but says nothing about cost, permissions, or whether the analysis is cached/expensive. For a parameterless read with an output schema, this is adequate but thin.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. The enumerated field list partially duplicates what the output schema already declares, which keeps it just below a 5, but nothing is wasted.

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

Completeness4/5

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

For a zero-parameter tool with a full output schema and no annotations, the description covers purpose and return scope sufficiently; an agent need not be told the return shape. The only gap is the absence of any usage/routing context.

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

Parameters4/5

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

Zero parameters, so there is nothing to disambiguate and the baseline is 4. The field list in the description describes outputs rather than inputs, so it adds no parameter meaning (none is needed).

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

Purpose4/5

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

States a specific verb ('Identify') and resource ('the target program') and enumerates the metadata returned, which is clearly distinct from per-item siblings like list_functions and list_imports. It stops short of naming a sibling or explicitly contrasting its scope, so it lands at 4 rather than 5.

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

Usage Guidelines3/5

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

There is no explicit when-to-use, when-not-to-use, or alternative routing. Usage is only implied: an agent infers this is the program-level metadata call, used before drilling into functions/segments. No prerequisites or ordering guidance are given.

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

get_xrefs_fromB

List references from a single instruction or data address.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing beyond the purpose. It does not state that the operation is read-only, how results are ordered, what happens for an address with no references, or how pagination (limit/offset) behaves.

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

Conciseness5/5

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

A single front-loaded sentence with no wasted words; the verb and scoping constraint appear immediately.

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

Completeness3/5

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

An output schema exists so return values need not be described, and the tool is a simple query. Still, with no annotations and no pagination or direction-vs-sibling explanation, the definition is only minimally complete for the agent to invoke it confidently.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema titles ('Limit', 'Offset', 'Address') add little. The description clarifies that the address may be an instruction or data address, which is useful, but it says nothing about the limit/offset pagination parameters.

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

Purpose4/5

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

States a specific verb ('List') and resource ('references from a single instruction or data address') with clear scope. It is distinguishably about outgoing references, though it does not explicitly name the sibling get_xrefs_to to sharpen the direction contrast.

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

Usage Guidelines3/5

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

The word 'from' implicitly contrasts with the sibling get_xrefs_to, so the usage direction is inferable. However, there is no explicit when-to-use guidance, no mention of when to prefer get_function_xrefs, and no prerequisites for the address argument.

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

get_xrefs_toB

List references to an address, with the function each reference comes from.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses that the result is a list of references and that each reference includes its originating function, which is useful. However, it does not state that the operation is read-only, does not describe pagination behavior via limit/offset, or mention any 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.

Conciseness5/5

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

The description is a single front-loaded sentence with no wasted words. It states the core action and the key output detail immediately.

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

Completeness3/5

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

An output schema exists, so return values need not be fully described. Still, for a tool with 0% schema description coverage and no annotations, the description omits parameter semantics and alternative-tool guidance. It is adequate but leaves notable gaps for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate. It implies the address parameter but says nothing about the limit or offset parameters, their defaults, or pagination semantics. Two of the three parameters are effectively undocumented.

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

Purpose4/5

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

The description states a specific verb and resource: listing references to an address. It also clarifies the output includes the function each reference comes from, which distinguishes it from a generic listing. However, it does not explicitly name the inverse sibling get_xrefs_from, so an agent must infer the distinction from the name.

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

Usage Guidelines3/5

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

Usage is implied: use this when you need incoming references to a given address. There is no explicit guidance on when to prefer this over get_xrefs_from, get_function_xrefs, or other sibling tools, and no exclusions or prerequisites are given.

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

list_classesC

List class namespaces (fully qualified names).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full behavioral burden, yet it only restates the resource. It says nothing about pagination behavior, default limits, ordering, or whether the listing is scoped to the current binary/address context.

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

Conciseness3/5

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

It is a single short sentence and front-loaded, so there is no wasted text. But at this length it is under-specified rather than concise — the parenthetical is the only substantive content, and it does not compensate for the missing usage and parameter guidance.

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

Completeness2/5

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

An output schema exists, so return values need not be explained. Still, for a tool with two undocumented pagination parameters, no annotations, and an ambiguous sibling, the description leaves too much unspecified to invoke it confidently.

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

Parameters2/5

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

Schema description coverage is 0% for both limit and offset, and the description adds no meaning for either parameter — no default values or units (full list vs. page). The schema names alone do not convey whether these are required or how they interact.

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

Purpose3/5

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

The description states a verb (list) and a resource (class namespaces), and the parenthetical clarifies the output form (fully qualified names). However, it does not distinguish itself from the close sibling 'list_namespaces', leaving the agent unsure which of the two namespace-listing tools to choose.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of the pagination model (limit/offset), and no routing advice against adjacent siblings such as list_namespaces or list_functions. The agent must infer the use case entirely.

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

list_data_itemsC

List defined data with address, label, type, and value.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. 'List' implies a read-only operation, but it says nothing about scope (entire program vs. current function), ordering, or pagination behavior despite limit/offset parameters. It adds little beyond restating the return fields, which the output schema already covers.

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

Conciseness4/5

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

A single efficient sentence with the resource front-loaded and zero filler. It is arguably too terse for a paginated tool with no annotations, but there is no wasted text.

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

Completeness2/5

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

The output schema covers return values, so those need not be explained. However, for a paginated listing tool with no annotations and zero parameter coverage, the description omits scope, ordering, and pagination behavior, leaving meaningful gaps.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions the limit or offset parameters. Since the tool is paginated, the description should explain pagination semantics but instead leaves both parameters entirely undocumented.

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

Purpose4/5

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

States a specific verb and resource ('List defined data') and enumerates the returned fields (address, label, type, value), which helps distinguish it from siblings like list_strings or list_imports. However, it never explicitly differentiates itself from those siblings or clarifies what 'defined data' means in this program-analysis context.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus the many sibling list_* tools, and no preconditions or exclusions stated. The agent must infer usage purely 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.

list_exportsC

List exported symbols / entry points.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no mention of read-only nature, ordering, pagination behavior, or what a call returns. The only behavioral hint comes from the schema's limit/offset fields rather than the text.

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

Conciseness4/5

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

A single short, front-loaded sentence with no filler or redundancy. It is efficient, though its brevity borders on under-specification rather than true conciseness.

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

Completeness2/5

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

With an output schema present, return values need not be explained, but the description still omits any pagination behavior, ordering, and usage context for a 2-parameter listing tool with zero annotation coverage. It leaves notable 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.

Parameters2/5

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

Schema description coverage is 0% and the description says nothing about the two parameters. Even though limit/offset are conventional pagination fields, the description does not explain their semantics (e.g., default page size of 100, whether offset is item- or page-based), so it fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb (List) and resource (exported symbols / entry points), which is clear and unambiguous. It does not distinguish itself from the plausible sibling list_imports or explain the exports/entry-points relationship, 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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as list_imports, list_functions, or list_names. The agent must infer usage purely 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_functionsB

List functions (name and entry address), optionally filtered by a case-insensitive substring of the name.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
filterNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses the return payload (name and entry address) and the case-insensitive filter semantics, but says nothing about pagination/ordering behavior despite limit/offset parameters, and never confirms the operation is a safe read.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the scope and return fields come first. It is efficient, though its brevity comes at the cost of the missing guidance noted elsewhere.

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

Completeness3/5

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

An output schema exists, so return values need not be re-explained, and the description does state the fields returned. However, for a paginated list tool it omits pagination semantics and gives no routing versus the overlapping search_functions_by_name sibling.

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

Parameters2/5

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

Schema description coverage is 0% and there are 3 parameters, so the description must compensate. It explains only 'filter' (case-insensitive substring of the name) and leaves 'limit' and 'offset' completely undocumented, so two of three parameters carry no semantics anywhere.

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

Purpose4/5

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

The description gives a specific verb and resource ('List functions') and even names the returned fields (name and entry address). It does not, however, distinguish itself from the near-identical sibling search_functions_by_name, which also filters functions by name.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. The stated 'filter by name substring' behavior overlaps heavily with the sibling search_functions_by_name, and the description never resolves which one an agent should pick.

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

list_importsC

List imported (external) symbols and their libraries.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only operation through the verb 'List' but does not state whether the operation is safe, how pagination works (limit/offset are present in schema), or what the return format contains, leaving significant gaps.

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

Conciseness5/5

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

The description is a single, well-formed sentence that front-loads the core action and resource. It contains no filler or redundant phrasing, making it maximally efficient for its length.

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

Completeness2/5

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

An output schema exists, so return values need not be explained. However, the description provides no parameter semantics, no usage context, and no behavioral details, which is inadequate for a tool with undocumented inputs and no annotations.

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

Parameters1/5

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

The input schema has zero description coverage for its two parameters (limit and offset), and the description adds no meaning for either. The agent must guess the purpose and expected values of limit and offset from their names alone, which is insufficient.

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

Purpose4/5

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

The description states a specific verb ('List') and resource ('imported (external) symbols and their libraries'), which clearly distinguishes it from sibling tools like list_exports or list_functions. However, it stops short of explicitly naming alternatives or the context in which imports appear, leaving the agent to infer the distinction from the word 'imported'.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as list_exports or list_data_items. No prerequisites (e.g., requires a loaded binary) or exclusions are mentioned, so the agent must infer usage entirely from the tool name.

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

list_methodsA

Deprecated: use list_functions. Lists function names only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the disclosure burden, but an output schema exists so the return shape is already documented. It does add the important behavioral fact that the tool is deprecated and returns names only, yet says nothing about pagination behavior, permissions, or why it was superseded.

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

Conciseness5/5

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

One short sentence, front-loaded with the deprecation warning, then the sole functional fact. Every clause earns its place with no filler.

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

Completeness4/5

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

For a deprecated listing tool with an output schema, the essentials are covered: that it is deprecated, the replacement, and the scope of what it returns. Missing pagination semantics is a minor gap given the tool is discouraged anyway.

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

Parameters2/5

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

Schema description coverage is 0% for both parameters, and the description offers no guidance on limit/offset meaning, defaults, or pagination. With two undocumented parameters and no compensating text, the description leaves the schema to speak for itself.

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

Purpose4/5

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

States a specific verb and resource ('Lists function names only'), and the word 'only' hints at a narrower return than a full function listing. It does not explicitly define what a 'method' is versus a function in this domain, but an agent can grasp the operation.

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

Usage Guidelines4/5

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

Explicitly marks itself deprecated and names the replacement, list_functions, which is clear routing guidance. It stops short of a full when/when-not statement because, being deprecated, there is realistically no condition under which it should be chosen.

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

list_namespacesC

List all non-global namespaces (fully qualified names).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about pagination (despite limit/offset defaults of 100/0), result ordering, or whether global namespaces are excluded intentionally. The 'non-global' scoping is the only behavioral hint offered.

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

Conciseness4/5

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

A single tight sentence with the scoping constraint front-loaded. Efficient, though the brevity here reflects thin content rather than disciplined editing.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and this is a simple two-parameter read tool. Still, the pagination behavior and the exact definition of 'namespace' in this domain are left implicit.

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

Parameters2/5

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

Schema description coverage is 0%, so neither the schema nor the description explains limit or offset. The description contributes no parameter information at all, leaving the pagination contract unstated.

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

Purpose4/5

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

States a specific verb and resource ('List all non-global namespaces') and clarifies the returned form ('fully qualified names'). The resource is distinct from the sibling listing tools (functions, classes, segments, imports), though the description never explicitly contrasts with them.

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

Usage Guidelines2/5

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

No when-to-use guidance and no mention of alternatives among the many list_* siblings. The agent must infer that this is the namespace-enumeration entry point.

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

list_segmentsB

List memory blocks with address range, size, and permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. 'List' strongly implies a read-only operation and it discloses what each entry contains (range, size, permissions), but it says nothing about pagination (limit/offset), ordering, or scale despite the schema exposing paging parameters.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; every clause conveys actionable content (verb, resource, returned attributes).

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

Completeness3/5

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

An output schema exists, so return-value explanation is unnecessary and the parenthetical field list is a bonus. However, the undocumented pagination parameters and the total absence of usage/behavioral context leave meaningful gaps for an agent listing segments.

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

Parameters2/5

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

Schema description coverage is 0% for both parameters, so the description must compensate but mentions neither limit nor offset. Because these are two undocumented params rather than zero, the baseline-4 exemption does not apply, and no pagination semantics are added.

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

Purpose4/5

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

Specific verb 'List' plus a concrete resource ('memory blocks') and an explicit enumeration of the returned fields (address range, size, permissions), which separates it from siblings like list_strings or list_imports. It does not explicitly name a sibling or clarify the name/description terminology mismatch ('segments' vs 'memory blocks').

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

Usage Guidelines2/5

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

No guidance on when to reach for this tool versus the many other list_* siblings, and no statement of prerequisites or context. The agent is left to infer usage purely from the resource noun.

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

list_stringsB

List defined strings with their addresses, optionally filtered by a case-insensitive substring of the content.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
filterNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioural load; it does disclose that matching is a case-insensitive substring and that results include addresses, which implies a read-only listing. It omits pagination behaviour (the 200/0 defaults), result ordering, and whether the limit silently truncates, which matter for an unhinted tool.

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

Conciseness5/5

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

A single front-loaded sentence with no filler: the resource, the returned data, and the filter behaviour all appear before any optional detail.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and this is a simple list tool. Still, for an unannotated tool with three undocumented parameters, the description should say at least that results are paginated and whether the limit is a cap, which it does not.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain all three parameters, yet it only clarifies 'filter' (case-insensitive substring of content). 'limit' and 'offset' are never mentioned, leaving their paging semantics and default cap entirely to inference from bare schema defaults.

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

Purpose4/5

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

The description states a specific verb and resource ('List defined strings') and adds what the result contains ('with their addresses'), which is enough to distinguish it from list_functions, list_data_items, and list_imports. It does not explicitly name a sibling or contrast with them, 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.

Usage Guidelines3/5

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

The phrase 'optionally filtered by a case-insensitive substring of the content' implies when the filter is useful, but there is no explicit when-to-use/when-not guidance and no mention of how to page through results or when to prefer a name/address-based sibling such as list_data_items.

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

read_memoryB

Read up to 4096 bytes of program memory as hex and ASCII. Unmapped or uninitialized bytes are shown as '??' and listed in gaps.

ParametersJSON Schema
NameRequiredDescriptionDefault
lengthNo
addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden but does add real behavior: the 4096-byte cap and the treatment of unmapped/uninitialized bytes as '??' reported in `gaps`. It omits any note on permissions, whether reads can fail on invalid addresses, or error behavior.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the capability and its bound. Every clause earns its place — no filler or redundancy.

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

Completeness3/5

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

Since an output schema exists, return-value explanation is not required, and the gap/hex behavior is a useful bonus. However, the key operational detail for correct invocation — the address format expected by the required parameter — is missing, and no usage context is given for a tool with many read-oriented siblings.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only implicitly constrains `length` via the 4096-byte cap, and says nothing about the `address` parameter's required format (string pointer? symbol name? hex literal?), which is the sole required parameter.

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

Purpose4/5

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

States a specific verb and resource ('Read ... program memory') plus the scope (up to 4096 bytes) and output format (hex and ASCII). It is clearly distinguishable in intent from sibling tools like decompile_function or disassemble_function, though it never names an alternative to contrast against.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus related siblings (disassemble_function, decompile_function_by_address), no stated prerequisites, and no exclusions. The description only describes the mechanism, leaving the agent to infer usage context.

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

rename_dataC

Rename the label of defined data (or an existing symbol) at an address.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYes
new_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a mutation (renaming a symbol in the program database) but says nothing about whether the change is reversible, what error conditions arise (e.g. address not pointing at defined data), or what happens to existing symbols of the same name.

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

Conciseness5/5

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

A single front-loaded sentence with the action and target stated first and no filler. It is appropriately sized for a two-parameter tool.

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

Completeness2/5

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

An output schema exists so return values need not be explained, but the absence of annotations on a mutation tool leaves important behavioral context missing. Combined with 0% parameter coverage and no usage guidance, the definition is under-specified for its complexity.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It conceptually maps both parameters ('at an address' for address, 'rename the label' for new_name) but gives no format guidance such as whether the address is hexadecimal or what constraints apply to the new label.

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

Purpose4/5

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

The description states a specific verb (rename) and resource (data label / symbol) and identifies the target (an address), which is enough to distinguish it from rename_function and rename_variable siblings. It is clear but does not explicitly name or contrast those siblings.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no mention of alternatives like rename_variable or set_disassembly_comment. The intended use is only weakly implied by the phrase 'defined data', so an agent has to infer routing on its own.

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

rename_functionA

Rename a function by its current name. Fails if the name is ambiguous; prefer rename_function_by_address.

ParametersJSON Schema
NameRequiredDescriptionDefault
new_nameYes
old_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the ambiguity failure mode, but says nothing about permissions/editing requirements, whether cross-references or decompiler caches are updated, or reversibility of the rename.

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

Conciseness5/5

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

Two tight sentences with no filler, and the core action is front-loaded before the failure condition and alternative.

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

Completeness3/5

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

An output schema exists, so return values need no explanation. However, for a mutation tool with zero annotations, the description omits permission requirements and side effects (xref updates, ambiguity handling scope), leaving gaps an agent might need.

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

Parameters3/5

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

Schema coverage is 0% for two parameters (old_name, new_name), so the description must compensate. 'By its current name' clarifies that old_name is the existing symbol name, but new_name's format and constraints are left entirely to the schema's bare titles.

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

Purpose5/5

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

States a specific verb and resource ('Rename a function'), plus the scoping detail 'by its current name'. It also explicitly distinguishes itself from the sibling rename_function_by_address, so an agent can choose between the two without opening either schema.

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

Usage Guidelines5/5

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

Gives an explicit failure condition ('Fails if the name is ambiguous') and routes the agent to the named alternative ('prefer rename_function_by_address'). This is a clear when/when-not/alternative pattern, not implied usage.

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

rename_function_by_addressB

Rename the function at or containing an address.

ParametersJSON Schema
NameRequiredDescriptionDefault
new_nameYes
function_addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden for a mutating tool. It does add one genuinely useful behavioral detail — that addresses pointing inside a function body resolve to the containing function — but says nothing about permissions, reversibility, or naming constraints. Output schema covers return values, so that gap is excused.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or repetition. It is efficient, though its brevity is part of why parameter and usage gaps exist.

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

Completeness3/5

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

For a simple two-parameter tool with an output schema, the description is minimally adequate: the core action and the address-resolution nuance are covered. It falls short on address/new-name format expectations and on routing between this and rename_function.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions either parameter by name. It implies function_address is a function address but gives no format (hex string?), and new_name is entirely unexplained, including whether it must be a valid identifier.

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

Purpose4/5

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

States a specific verb (rename) and resource (the function at or containing an address). The phrase 'at or containing an address' implicitly distinguishes it from the sibling rename_function, which operates by name, though the distinction is not called out explicitly.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this versus rename_function, nor any prerequisites. The only selection cue is the implied 'you have an address, not a name' framing, which the agent must infer.

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

rename_variableA

Rename a local variable or parameter as shown in the decompiler. Identify the function by function_address (preferred) or function_name.

ParametersJSON Schema
NameRequiredDescriptionDefault
new_nameYes
old_nameYes
function_nameNo
function_addressNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a mutation but never states whether the rename persists to the IDA database, whether the decompiler/function context is required, or what happens if the variable is not found. For a zero-annotation mutation tool this is a significant gap.

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

Conciseness5/5

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

Two tight sentences with the core action front-loaded and the function-identification hint immediately after. No filler or redundancy.

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

Completeness3/5

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

An output schema exists, so return values need not be described. With no annotations and 0% parameter coverage, the description should at least note prerequisites (e.g., decompilation must be available) and failure behavior; those are missing, leaving it only partially complete for a mutation tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does add real value by specifying the preferred identifier (function_address) over the fallback (function_name), but old_name and new_name receive no semantic detail (e.g., must the old_name match the decompiler's current output exactly).

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

Purpose5/5

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

States a specific verb (rename) and resource (local variable or parameter) scoped to the decompiler view. This clearly distinguishes it from sibling renamers like rename_function, rename_data, and rename_function_by_address, which target different symbol classes.

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

Usage Guidelines4/5

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

The description gives explicit precedence guidance for identifying the owning function: 'function_address (preferred) or function_name'. However, it offers no when-to-use/when-not framing relative to the sibling rename tools, so the routing is only partially covered.

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

search_functions_by_nameC

Search for functions whose name contains the given substring (case-insensitive).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that matching is substring-based and case-insensitive, but says nothing about pagination via limit/offset, result ordering, or bounded result counts, which matters for a search tool.

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

Conciseness5/5

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

A single, front-loaded sentence that defines the matching semantics with no filler. Every clause earns its place.

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

Completeness3/5

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

The output schema covers return values, so that need not be explained. However, with three undocumented parameters and no usage context, the definition is only minimally sufficient for invoking the tool correctly.

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

Parameters2/5

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

Schema description coverage is 0% and the description only indirectly implies what 'query' is (the substring). The limit and offset parameters receive no explanation in either the description or the schema, so an agent cannot tell how paging behaves.

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

Purpose4/5

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

States a specific verb (search) and resource (functions) with the matching rule (substring, case-insensitive), which clearly distinguishes it from the sibling list_functions. It stops short of naming that sibling or contrasting itself explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of alternatives such as list_functions or get_function_by_address, and no indication of when a term-based search is preferable to browsing a full listing. The agent must infer the context entirely.

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

set_decompiler_commentB

Set the pre-comment at an address (shown in the decompiler). An empty comment clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYes
commentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden, and it does disclose one meaningful trait: an empty string clears the comment. However, it says nothing about persistence, whether it requires a loaded program or valid address, or what the mutation affects on re-decompile, leaving a real gap for a write tool.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and location, followed by the clearing behavior. Every sentence carries information; nothing is padded.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, which lightens the burden. Still, for an unannotated mutation tool with 0% parameter coverage, the description omits address format, error behavior, and the sibling relationship, leaving it adequate but incomplete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for both parameters. It usefully clarifies that the second parameter is the comment text and that an empty value clears the comment, but gives no hint on address format or syntax, which the schema also omits.

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

Purpose4/5

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

States a specific verb (set) plus resource (pre-comment) and location (at an address), and 'shown in the decompiler' distinguishes it in kind from a disassembly-level comment. It does not name its closest sibling set_disassembly_comment, so sibling disambiguation relies on the parenthetical.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance and never references the obvious alternative set_disassembly_comment, so an agent has to infer which comment layer to target. Only implicit context ('shown in the decompiler') hints at the intended use case.

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

set_disassembly_commentB

Set the end-of-line comment at an address (shown in the disassembly). An empty comment clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYes
commentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose a meaningful trait — an empty comment clears the existing comment — which is beyond a bare restatement. But it omits permissions/auth needs, and doesn't clarify that this is a write to the disassembly view rather than the decompiler.

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

Conciseness5/5

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

Two tight sentences with the core action front-loaded and the clear-behavior secondary. No wasted words.

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

Completeness3/5

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

An output schema exists so return values needn't be explained, and the tool is a simple 2-param mutation. Still, for an unannotated write tool it leaves the sibling distinction and address format unaddressed, which an agent needs to call it correctly.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It explains the comment parameter's clearing semantics well, but gives no information about the address parameter's expected format (raw address, symbol, hex). Partial compensation for the coverage gap.

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

Purpose4/5

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

States a specific verb (Set) and resource (end-of-line comment at an address), and the parenthetical '(shown in the disassembly)' hints at the disassembly view. However, it never names or contrasts with the obvious sibling set_decompiler_comment, so the agent must infer which view this targets.

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

Usage Guidelines2/5

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

No when-to-use guidance and no reference to alternatives, despite set_decompiler_comment being a near-identical sibling. The only contextual hint is that an empty comment clears the comment, which is a behavior, not usage routing.

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

set_function_prototypeC

Set a function's signature from a C prototype, e.g. "int foo(char *buf, int len)".

ParametersJSON Schema
NameRequiredDescriptionDefault
prototypeYes
function_addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. 'Set' implies a mutation, but it never states whether an existing signature is overwritten, whether the function must already exist, what effect it has on decompilation output, or any permission requirements. Only the input format 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.

Conciseness5/5

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

A single front-loaded sentence that states the action and immediately grounds it with a concrete example. No filler, and the example is the most information-dense part of the definition.

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

Completeness2/5

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

An output schema exists, so return values need not be described, but for a mutation tool with no annotations and zero parameter documentation the definition is still thin. It omits overwrite behavior, prerequisites, and any effect on downstream analysis, which an agent needs before invoking it.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. The C prototype example does clarify the expected format of the 'prototype' parameter beyond the bare 'string' type, but 'function_address' is left entirely unexplained (format, expected address form, whether it accepts a name).

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

Purpose4/5

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

The description states a specific verb and resource ('Set a function's signature') and the concrete C example 'int foo(char *buf, int len)' makes the operation unambiguous, distinguishing it in spirit from rename_function or set_local_variable_type. It stops short of naming an alternative sibling, so it earns a 4 rather than a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives like rename_function or set_local_variable_type, nor any prerequisites (e.g. the function must exist, existing signature gets overwritten). The example clarifies the input format but not the usage context.

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

set_local_variable_typeC

Set the data type of a decompiler variable, e.g. "char *", "DWORD", "MY_STRUCT *".

ParametersJSON Schema
NameRequiredDescriptionDefault
new_typeYes
variable_nameYes
function_addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not disclose that this mutates decompiler variable state, whether the change persists or only affects decompiler output, whether the original binary is untouched, or any permission requirements.

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

Conciseness4/5

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

A single efficient sentence with the core action front-loaded and the type examples placed where they help most. No filler, though it is arguably too terse given the parameter gaps.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and this is a simple 3-parameter mutation. However, with zero annotation and zero schema parameter coverage, the description should have covered address format and variable naming to be truly callable without guesswork.

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

Parameters2/5

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

Schema description coverage is 0%, so all three parameters are undocumented in the schema. The description clarifies only new_type via examples; the expected format of function_address (raw hex? 0x-prefixed?) and variable_name is left entirely unstated.

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

Purpose4/5

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

States a specific verb (set) and resource (data type of a decompiler variable) and gives concrete type examples like "char *" and "MY_STRUCT *". It is clear enough to distinguish from rename_variable or set_function_prototype, but no sibling is named explicitly.

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

Usage Guidelines2/5

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

The description only says what the tool does; it gives no when-to-use guidance, no prerequisites, and no mention of the closely related rename_variable / set_function_prototype alternatives. Usage is only implied by the decompiler context.

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

Tool Schema Changelog

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

  1. 30 tool updatesv2.0.0
    • First observeddecompile_function
    • First observeddecompile_function_by_address
    • First observeddisassemble_function
    • First observedget_current_address
    • First observedget_current_function
    • First observedget_function_by_address
    • First observedget_function_calls
    • First observedget_function_xrefs
    • First observedget_program_info
    • First observedget_xrefs_from
    • First observedget_xrefs_to
    • First observedlist_classes
    • First observedlist_data_items
    • First observedlist_exports
    • First observedlist_functions
    • First observedlist_imports
    • First observedlist_methods
    • First observedlist_namespaces
    • First observedlist_segments
    • First observedlist_strings
    • First observedread_memory
    • First observedrename_data
    • First observedrename_function
    • First observedrename_function_by_address
    • First observedrename_variable
    • First observedsearch_functions_by_name
    • First observedset_decompiler_comment
    • First observedset_disassembly_comment
    • First observedset_function_prototype
    • First observedset_local_variable_type

TDQS

B3.2/5.0

Scored across 30 tools

Disambiguation4/5

Most tools target distinct resources/actions (list vs get vs rename vs set), and the descriptions proactively resolve ambiguity (e.g. decompile_function vs decompile_function_by_address, 'prefer rename_function_by_address'). Minor overlap exists in the xref trio (get_xrefs_to, get_xrefs_from, get_function_xrefs) and between list_functions / search_functions_by_name / deprecated list_methods, but directionality and filters make each usable.

Naming Consistency5/5

Consistent snake_case verb_noun pattern throughout, using a small predictable verb set (list_, get_, decompile_, disassemble_, rename_, set_). Variants like get_function_by_address and decompile_function_by_address follow the same convention, so nothing surprises the agent.

Tool Count3/5

30 tools is heavy and pushes past the comfortable range for a single server. Reverse-engineering genuinely needs many read/analyze/write operations, but the deprecated list_methods is dead weight and several near-duplicate pairs (function vs by_address) inflate the surface.

Completeness4/5

Strong lifecycle coverage for an analysis server: discovery (imports, exports, functions, strings, data, segments), analysis (decompile, disassemble, xrefs, call graph), and modification (renames, prototypes, types, comments), plus raw memory reads. Gaps remain for active patching/writing memory, creating/undefining functions, or searching by bytes, but core workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables LLMs to autonomously reverse engineer applications through Cutter, allowing them to decompile binaries, analyze code, and rename methods programmatically.
    34
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that allows LLMs to autonomously reverse engineer applications by exposing Ghidra's functionality, including decompiling binaries, analyzing code, and renaming methods and data.
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    An Model Context Protocol server that enables LLMs to autonomously reverse engineer applications by exposing Ghidra's decompilation and analysis tools. It allows AI agents to list code structures, rename methods, and analyze binaries directly through MCP-compatible clients.
    Apache 2.0
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server that allows LLMs to autonomously reverse engineer applications using Ghidra, exposing tools like decompilation, renaming, and listing methods.
    27
    Apache 2.0