Skip to main content
Glama

re-lief

MCP server exposing LIEF (Library to Instrument Executable Formats) for cross-format binary analysis. Handles PE, ELF, MachO, COFF, DEX, ART, OAT in a single, normalized API.

Why

LIEF is the Python successor to pefile — same data for PE, plus ELF, MachO, DEX, ART, and OAT. It also handles DWARF/PDB debug info, ObjC metadata, the Dyld Shared Cache, and (optionally) has a built-in disassembler/assembler.

This server is the foundation of the RE-AI plugin: it works without any system tools installed (no rizin, no gdb, no anything), is pure Python, and runs in-process.

Related MCP server: re-rizin

Tools

Tool

What it does

check_lief

Health check — return LIEF version, supported formats

parse_binary

Auto-detect format and return normalized header + high-level structure

get_sections

Section list with permissions (R/W/X), virtual vs raw size, entropy

get_imports_exports

Symbol-level import/export tables (per format)

get_authenticode

PE signature details (Win)

get_overlay

Appended data after the last section

list_dex_classes

Android DEX class list

list_dex_methods

Methods of a DEX class

list_oat_art

Android OAT/ART method list

disasm_capstone

Capstone disassembly (works for any LIEF-parsed binary)

extract_strings

ASCII + UTF-16LE string extraction with section awareness

categorize_strings

ASCII + UTF-16LE string extraction, section-aware, bucketed into keyword categories from data/drm-indicators.yaml::string_categories. Superset of extract_strings.

get_imphash

PE import hash (MD5 of normalized import table)

normalize_for_diff

Produce a structural snapshot suitable for diffing two binaries

Install

This server is part of the RE-AI plugin. The plugin's install.sh / install.bat installs it as part of the standard flow.

To install standalone:

pip install -e ./servers/re-lief

Run

re-lief                          # stdio transport (default for MCP)
python -m re_lief                # equivalent

Format support

LIEF auto-detects the format and exposes a polyglot API. Most tools return results shaped by format:

  • PE (.exe, .dll, .sys): full sections, imports/exports, imphash, Authenticode, resources, exceptions, TLS, debug info (PDB path)

  • ELF (Linux binaries, .so, kernel modules): sections, segments (program headers), dynamic symbols, RELRO, BIND_NOW, NX, PIE, RPATH/RUNPATH, SONAME, dynamic libs

  • MachO (macOS/iOS binaries, .dylib, frameworks): load commands, segments, LC_BUILD_VERSION, code signature, dyld info, ObjC metadata

  • DEX (Android Dalvik): class list with FQN, method list per class, string pool

  • OAT/ART (Android runtime): method list with class/method indices, vdex references

  • COFF (Windows object files, EFI): sections, symbols, relocations

Deprecation of pefile

If you're familiar with the v1 re-ai repo, this server supersedes the old pefile-based code. The string-extraction algorithm (ASCII + UTF-16LE) and imphash logic were ported from backend/analysis/native.py; the rest of the API is LIEF-native and works for all formats.

Categorization vocabulary

categorize_strings reads its 11 keyword categories from data/drm-indicators.yaml::string_categories at MCP-server load time. The anti_debug and hwid categories inherit their keyword lists from drm-indicators.yaml::anti_debug_indicators.checks[].name and hwid_apis.high_signal[].api via a seed_from: YAML pointer — when a future agent adds a new HWID API to hwid_apis.high_signal, the categorizer picks it up automatically on next reload. The other 9 categories have their keyword lists inline in the YAML under string_categories.categories[].keywords.

This makes the categorizer idempotent with the catalog: the YAML is the single source of truth for both the indicator set that re-drm-fingerprint reads and the keyword set that the categorizer reads. Both the static analysis and the string analysis will give consistent answers.

On large binaries (>100 MB, e.g. a Unity IL2CPP GameAssembly.dll wrapped by an encrypted-VM bytecode interpreter), pass skip_sections=[".idata", ".xtls", ".xpdata", ".udata", ".xdata", ".didata", ".ecode", ".00cfg"] to skip the encrypted-VM bytecode regions. Note: on the bundled IL2CPP target sample, the import-table strings live inside those sections, so skipping them blinds the categorizer to the imports. Use skip_sections for memory-bound runs; use the full section walk for completeness.

Available Tools

17 tools
categorize_stringsA

Extract strings from path and bucket them into semantic categories.

The categorization vocabulary is loaded from data/drm-indicators.yaml::string_categories at MCP-server load time. Two categories (anti_debug, hwid) inherit their keyword lists from the existing catalog sections via a seed_from pointer; the rest have inline keyword lists. When a future agent adds a new HWID API to hwid_apis.high_signal, the hwid category picks it up on next MCP-server reload with zero Python change.

The return shape is a strict superset of extract_strings:

::

{
  "path": "...",
  "min_length": 5,
  "totals":   {"ascii_extracted": N, "utf16le_extracted": N,
               "deduplicated": N, "categorized": N},
  "truncated": {"input": bool, "per_category": bool,
                "per_encoding": bool},
  "by_category": {
    "anti_debug": {"count": N, "samples": [{"string":..., "section":...}, ...]},
    "hwid":       {"count": N, "samples": [...]},
    "crypto":     {"count": N, "samples": [...]},
    "network":    {"count": N, "samples": [...]},
    "registry":   {"count": N, "samples": [...]},
    "process":    {"count": N, "samples": [...]},
    "file":       {"count": N, "samples": [...]},
    "fingerprint": {"count": N, "samples": [...]},
    "activation":  {"count": N, "samples": [...]},
    "obfuscation": {"count": N, "samples": [...]},
    "misc":        {"count": N, "samples": [...]}
  },
  "ascii_capped": [...],          # backward-compat with extract_strings
  "utf16le_capped": [...],
  "uncategorized_sample": [...]   # 50 misc strings (helps spot missing categories)
}

On large binaries (e.g. a 500+ MB Unity IL2CPP GameAssembly.dll wrapped by an encrypted-VM bytecode interpreter), pass skip_sections=[".idata", ".xtls", ".xpdata", ".udata", ".xdata", ".didata", ".ecode", ".00cfg"] to skip the encrypted-VM bytecode regions. Those sections contain no readable strings; the categorization result is the same and the memory footprint drops dramatically.

Categories are descriptive — they describe observable string content, not specific commercial products.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
min_lengthNo
categoriesNo
include_miscNo
max_per_categoryNo
samples_per_categoryNo
skip_sectionsNo

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It details the return shape, categorization vocabulary source, and performance considerations (skip sections). It does not cover auth or destructive behavior, but the tool is read-only by nature.

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

Conciseness4/5

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

The description is front-loaded with the main purpose and uses a structured format with a code block for the return shape. Some details (e.g., YAML loading mechanism) are slightly verbose but not wasteful.

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?

Given 7 parameters and no output schema, the description provides a detailed output structure and behavior for some parameters, but fails to document several key parameters. The return shape is well-specified, partially compensating for the lack of output schema.

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. Only `path`, `min_length`, and `skip_sections` are explained; the other 4 parameters (`categories`, `include_misc`, `max_per_category`, `samples_per_category`) are not mentioned, leaving a significant gap.

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?

The description clearly states it extracts strings and buckets them into semantic categories, with a specific verb and resource. It distinguishes itself from sibling tool `extract_strings` by noting it is a strict superset.

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 implies usage by contrasting with `extract_strings` and provides a practical example for large binaries with `skip_sections`. It does not explicitly state when not to use, but the differentiation is clear.

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

check_liefA

Return LIEF version, supported formats, and a green/yellow status.

Returns a JSON-serializable dict suitable for scripts/check_deps.py.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided, so description carries the burden. It states the return type (JSON-serializable dict) but does not disclose potential failures, side effects, or permissions. For a simple read-only check, the information is adequate but minimal.

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 succinct sentences, front-loaded with the essential purpose. No wasted words.

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 tool with no parameters and no output schema, the description covers what it returns and its intended use. It could mention prerequisites (LIEF installation) but is otherwise complete.

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?

No parameters exist, and schema coverage is 100% trivially. The baseline for high coverage is 3, and the description adds no parameter-specific info.

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?

The description clearly states the tool returns LIEF version, supported formats, and status, which is a specific verb and resource. It distinguishes from sibling tools that analyze binaries rather than check the tool itself.

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 description implies usage for checking dependencies via 'scripts/check_deps.py' but provides no explicit when-to-use or alternatives. Siblings are all different, so differentiation is less critical, but lack of explicit context lowers the score.

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

classify_native_protectionA

Classify a native binary's protection class (category-only).

Combines get_sections + get_imports_exports + the vendored native_packer_signatures regex catalog

  • entropy heuristics to label a binary's likely protection class. Returns one of:

  • "plain-pe" — no protection observed.

  • "packer-stub-wrapped" — UPX / ASPack / MPRESS / Petite / kkrunchy style (single non-standard section name).

  • "vm-bytecoded-pe" — single .vmp0 / .vmp1 style section set.

  • "encrypted-vm-bytecode-interpreter" — the proprietary-engine section family (.arch / .xcode / .xtext / .sbss / .link / .xtls / .xpdata).

  • "il2cpp-runtime" — large .idata + tiny .text + GameAssembly.dll sibling.

  • "anti-debug-wrapped" — bare anti-debug surface but no packer.

  • "unpacked-debug-pe" — debug build (PDB section + lots of stdio / conio / assert symbols).

Args: path: file to classify

Returns::

{
  "path": "...",
  "protection_class": "...",
  "evidence": [{"category": "...", "indicator": "...",
                "section": "..."}, ...]
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description fully discloses the tool's behavior: it combines get_sections, get_imports_exports, packer signatures, and entropy heuristics. It also lists all possible output labels and evidence structure. This provides strong transparency, though it does not mention potential side effects or performance considerations.

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

Conciseness4/5

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

The description is well-structured with bullet points for return values and clear section headers. At 18 lines, it is reasonably concise while covering necessary details. A slight reduction in verbosity could improve it, but overall it is effectively organized.

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?

Given the tool's moderate complexity and lack of output schema, the description provides comprehensive context. It explains the underlying analyses, lists all possible return values, and describes the evidence object structure. This fully equips an agent to invoke the tool and interpret its results 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?

The single parameter 'path' is described as 'file to classify', adding minimal meaning beyond its name and type. Since schema description coverage is 0%, the description compensates slightly but not substantially. The parameter is straightforward and requires little additional explanation.

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?

The description clearly states the tool's purpose: classifying a native binary's protection class. It enumerates the possible return values with examples, making the purpose highly specific. It distinguishes itself from sibling tools like get_sections and get_imports_exports by combining multiple analyses into a single classification.

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 description does not explicitly state when to use this tool versus its siblings, such as calling get_sections or get_imports_exports directly. It implies this tool is for a high-level classification, but lacking explicit usage guidance minimizes its helpfulness for an AI agent deciding between tools.

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

disasm_capstoneA

Disassemble size bytes of section section_name starting at offset.

Returns a JSON list of instructions (address, mnemonic, operands, bytes). Truncates to max_insns (default 500) — call again with a different offset to see more.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
section_nameYes
offsetNo
sizeNo
max_insnsNo

TDQS

A4.2/5.0
Behavior3/5

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

Describes output format and truncation behavior, but without annotations, it misses potential error conditions or required permissions.

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 sentences, no filler, front-loaded with core action, efficient and clear.

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?

Adequate for a disassembly tool with no output schema or annotations: explains return type and pagination, but could mention edge cases like invalid section.

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?

With 0% schema coverage, description compensates by explaining size, offset, section_name, and max_insns with defaults, though path parameter is not detailed.

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?

Description clearly states verb 'disassemble' with specific resource ('section_name' in binary) and scoping parameters (size, offset), distinguishing it from sibling analysis tools.

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?

Provides pagination guidance ('call again with a different offset to see more') and default behavior for max_insns, but lacks explicit when-to-use vs alternatives.

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

extract_stringsA

Extract printable ASCII and UTF-16LE strings from path.

Returns {"ascii": [...], "utf16le": [...], "totals": {...}, "truncated": bool}. Each string has string, offset, and section fields.

.. note:: This is the v2.4 shape, kept stable for backward compatibility. New code should call categorize_strings (below), which returns the same ascii / utf16le arrays plus a keyword-bucketed by_category block.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
min_lengthNo

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses return structure (fields, totals, truncated flag) and notes stability for backward compatibility. Lacks mention of side effects or performance, but overall transparent.

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

Conciseness4/5

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

Concise overall, with a clear front-loaded purpose. The note adds value without excessive verbosity. A slight improvement would be integrating parameter info, but structure is good.

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 2 parameters, no output schema, and no annotations, the description covers return structure and sibling context well. The only missing element is the min_length parameter explanation, but otherwise complete.

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%. The description only mentions path implicitly. The min_length parameter is not described, its default or effect is missing, leaving the agent with incomplete information for parameter usage.

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?

The description clearly states the verb 'Extract', the resource 'strings', and specifies the types 'printable ASCII and UTF-16LE'. It also distinguishes from sibling 'categorize_strings' by noting the return shape and backward compatibility.

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?

Explicitly advises new code to use 'categorize_strings' instead, providing clear when-to-use guidance and alternatives, making it straightforward for an AI agent to choose correctly.

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

get_authenticodeC

Return Authenticode signature details for PE binaries.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description bears full responsibility for disclosing behavioral traits. However, it only states the core function, omitting important details such as whether the operation is read-only, any permissions required, potential error states, or side effects.

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

Conciseness4/5

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

The description is a single concise sentence without unnecessary words, effectively communicating the tool's purpose. However, its brevity comes at the cost of missing important contextual details, preventing a higher score.

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

Completeness2/5

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

Given the tool's simplicity (one parameter, no output schema), the description is incomplete. It does not mention the return format, error handling, or what happens if the input is invalid. A complete description would cover these for reliable agent use.

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?

The input schema has 0% description coverage for its single parameter 'path'. The description does not explain what 'path' means or any constraints (e.g., file must exist, must be a PE). While the parameter name is somewhat self-explanatory, the tool description fails to add value beyond the schema.

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?

The description clearly states the tool returns Authenticode signature details for PE binaries, specifying the verb 'Return' and the resource 'Authenticode signature details' for a specific file type (PE binaries). This distinguishes it from sibling tools like get_sections or parse_binary, which address different aspects of binary analysis.

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 provides no guidance on when to use this tool versus alternatives, no prerequisites, and no conditions under which it should or should not be used. Without such context, an agent may misuse it or fail to consider appropriate alternatives.

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

get_debug_directoryA

Return the PE debug directory entries (incl. IMAGE_DEBUG_TYPE_POGO).

The POGO entry (type 10) is the third-party-ATD layer's trigger-arming metadata (per ANTI-TAMPER-TAXONOMY.md Pattern A-DW). Surfaced with kind: "POGO" in the response dict. The CODEVIEW entry (type 2) is the PDB pointer; the canonical vendor-tag signal lives in the RSDS CodeView stream (resolved by re-pdb parse_pdb rather than this read-path).

The skill-side fallback references/pogo_debug_check.py in skills/re-drm-fingerprint/ mirrors this same shape for hosts that don't have the new MCP tool installed.

See See the RE-AI output directory per-target/p3r/stage5-pogo-debug-check.md for the canonical Pattern A-DW detection pattern.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the types of entries returned (POGO, CODEVIEW) and notes that the POGO entry is third-party-ATD trigger-arming metadata. It also indicates it is a read operation. However, it references internal documentation paths, slightly reducing clarity.

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

Conciseness2/5

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

The description is overly long with references to internal docs and fallback scripts that are not essential for tool selection. The first sentence is clear, but subsequent sentences add noise and reduce conciseness.

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 tool with one parameter and no output schema, the description is somewhat complete: it specifies return values (debug directory entries) and mentions output key 'kind'. However, it does not fully describe the response structure or other potential fields, leaving gaps for an agent.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It does not explicitly describe the 'path' parameter—only indirectly as 'PE debug directory'—leaving the agent to infer it is a file path. This is inadequate given the lack of schema documentation.

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?

The description clearly states it returns PE debug directory entries including IMAGE_DEBUG_TYPE_POGO and CODEVIEW. It specifies the resource and what it returns, distinguishing it from sibling tools like get_authenticode or get_sections.

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 explains that the CODEVIEW entry is for PDB pointer and that the canonical vendor-tag signal is resolved by a different tool (re-pdb parse_pdb), implying this tool is not for that purpose. It also mentions a fallback script for hosts without the tool, providing context on when to use this MCP tool.

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

get_imphashA

Return the PE import hash (imphash) for path.

Imphash is the MD5 of the normalized import table — used for malware variant identification. Returns an empty string for non-PE formats.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the return value for non-PE formats (empty string) but does not specify behavior for invalid paths, missing files, or access errors. The safety profile (e.g., read-only) is implied but not explicit.

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 two sentences, front-loaded with the core action, and contains no extraneous information. Every sentence adds value: first states the function, second explains the hash and a key edge case.

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?

Given no output schema or annotations, the description covers the return value and a notable edge case (non-PE). However, it omits expected input constraints (e.g., file existence), error conditions, and whether the tool requires pre-parsed data. Context from siblings like 'parse_binary' is not integrated.

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 schema description coverage is 0%, so the description must compensate. It adds that 'path' is a file path for a PE binary, but does not clarify format (absolute/relative), protocol support, or error handling. This provides some meaning beyond the schema but is not fully informative.

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?

The description clearly states that the tool returns the PE import hash (imphash) for a given path. It uses a specific verb ('Return') and resource ('PE import hash'), and the purpose is distinct from sibling tools like 'extract_strings' or 'get_sections'.

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 description hints at usage for malware variant identification, but does not explicitly state when to use this tool versus alternatives, nor does it provide when-not-to-use guidance. There is no mention of prerequisites or exclusions, leaving the agent to infer context.

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

get_imports_exportsA

Return symbol-level import and export tables for path.

Args: path: PE / ELF / MachO to analyze. max_imports: cap the returned imports list to this many entries. 0 = no cap (the v2.9.0 default). max_exports: same cap for the exports list. library_filter: optional substring filter against the library name (pipe-separated for OR). e.g. "kernel32|user32" to keep only those two.

Added in v2.9.1+ to fix Gap 27 (the response-size ceiling on the 4 large VM-protected targets). The response includes a truncated flag + original_count / returned_count when the caps fire. The v2.9.0 callers (no kwargs) are unaffected.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
max_importsNo
max_exportsNo
library_filterNo

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses that the response includes a 'truncated' flag and original_count/returned_count when caps fire, and that v2.9.0 callers are unaffected. It does not mention side effects, but for a read-only tool this is sufficient.

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

Conciseness4/5

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

The description is well-structured with a purpose sentence, bulleted args, and a note on version. It is not overly verbose, though the version info could be considered extra. The first sentence contains the core purpose.

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?

No output schema, but the description explains the output features (truncated flag, counts). It covers all 4 parameters, version context, and behavioral details. For a tool with 4 params and no output schema, it is very complete.

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

Parameters5/5

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

Description explains each parameter in detail: path, max_imports (with cap default), max_exports, library_filter (with example). Since schema has 0% coverage, the description fully compensates, providing defaults and behavior.

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?

The description clearly states 'Return symbol-level import and export tables for *path*.' It uses a specific verb 'Return' and resource 'symbol-level import and export tables', and distinguishes from sibling tools like get_sections or get_authenticode that deal with different binary aspects.

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 argument usage and mentions the version context (v2.9.1+ to fix Gap 27) and that v2.9.0 callers are unaffected. However, it does not explicitly state when not to use this tool or provide direct alternatives, so it is clear but not exhaustive.

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

get_overlayB

Return appended data after the last section (PE overlay).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided. The description only indicates a read operation, but lacks details on error handling, behavior when no overlay exists, or format of returned data.

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 concise sentence with no redundancy. Key information is front-loaded.

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?

Tool is simple, but no output schema or annotations. Lacks differentiation from siblings. Adequate but not comprehensive.

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?

Single parameter 'path' has no description in schema, and the description does not clarify its meaning (e.g., file path, URL). Schema coverage is 0%, and description adds no value.

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?

The description clearly states the action ('Return') and the specific resource ('appended data after the last section (PE overlay)'), distinguishing it from sibling tools like 'get_sections'.

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

Usage Guidelines3/5

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

No explicit guidance on when to use or alternatives. The description implies usage when overlay data is needed, but does not specify when not to use or mention sibling tools.

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

get_sectionsA

Return section list with permissions, virtual vs raw size, and entropy.

Works for PE (.text/.rdata/.data/.rsrc), ELF (.text/.rodata/.data), and MachO (__TEXT/__DATA/__LINKEDIT).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Despite no annotations, description discloses output fields and supported formats, giving transparency about what to expect. Does not mention side effects or permissions, but 'get' implies read-only.

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 sentences, front-loaded with key purpose, no unnecessary words.

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 covers binary format support, output fields, and typical section names. However, missing parameter documentation reduces completeness.

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 only parameter 'path' is not described in the description. Schema coverage is 0%, and the description adds no meaning beyond the schema, failing to clarify that path is the binary file path.

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?

Clearly states it returns section list with permissions, virtual vs raw size, and entropy. Mentions supported binary formats and typical section names, effectively distinguishing from sibling tools.

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?

Implies usage for getting section details from supported binary types, but no explicit guidance on when to use this vs alternatives like 'parse_binary' or 'check_lief'.

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

list_dex_classesB

List all classes in a Dalvik DEX file.

Returns FQN, access flags, and method/field counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

The description discloses the return format (FQN, access flags, counts) and implies a read operation, but lacks details on error handling, side effects, or authorization needs. Without annotations, it partially fulfills transparency but leaves 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?

Two concise sentences front-load the purpose and output, with no redundant or extraneous content. Every sentence adds value.

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

Completeness2/5

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

Given the lack of annotations, the description should compensate. It misses parameter documentation and usage context, making it incomplete for autonomous agents despite having an output schema.

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 one required parameter 'path' with no description, and the tool description does not clarify its meaning. With 0% schema coverage, this is a critical omission for correct invocation.

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?

The description clearly states the tool lists all classes in a Dalvik DEX file and specifies return data (FQN, access flags, method/field counts). This distinguishes it from siblings like 'list_dex_methods' which lists methods.

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 explicit guidance on when to use this tool versus alternatives, nor any prerequisites or constraints. The description only states what it does, leaving the agent without context for appropriate usage.

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

list_dex_methodsC

List all methods of a DEX class identified by FQN (e.g. Lcom/foo/Bar;).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
class_fqnYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations exist, so the description must carry full burden. It only says 'list all methods' but does not disclose whether inherited methods are included, performance characteristics, or any side effects. The output schema exists but description adds no behavioral context.

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

Conciseness3/5

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

Single sentence is concise, but could be structured with a brief parameter explanation. No waste, but not optimally front-loaded.

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?

Given output schema exists and two params, the description is functionally complete but lacks parameter details and usage guidance. Adequate but not thorough.

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%. The description only mentions FQN with an example for class_fqn, but does not explain path or provide any constraints or formats for parameters. Minimal value added beyond schema.

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?

The description clearly states the action (list) and the resource (methods of a DEX class identified by FQN), with an example format. This distinguishes it from siblings like list_dex_classes.

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 explicit when-to-use or when-not-to-use guidance. No mention of alternatives or prerequisites, though the FQN hint implies context. For a tool with many siblings, this is insufficient.

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

list_oat_artC

List all methods in an OAT/ART Android runtime file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It only states the basic operation without mentioning read-only nature, error handling, performance, or effects. 'List' implies reading but not explicitly.

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

Conciseness3/5

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

The description is a single sentence of 9 words, which is concise but misses important details. It is appropriately short but at the cost of completeness.

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

Completeness2/5

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

Given the tool has a single required parameter and an output schema, the description should at least hint at the output structure. It lacks any mention of what 'all methods' returns (names, objects). Overall incomplete.

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?

The single parameter 'path' has 0% schema description coverage, and the tool description adds no additional meaning. It does not explain what the path should point to (e.g., file path on device, local system) or format.

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?

The description clearly states the action ('list all methods') and the specific resource ('OAT/ART Android runtime file'). It distinguishes from siblings like list_dex_classes and list_dex_methods which operate on DEX files.

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 vs alternatives, prerequisites, or context. The lack of any usage instructions leaves the agent without decision-support.

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

normalize_for_diffA

Return a structural snapshot suitable for diffing two binaries.

Strips variable-length fields (hashes, timestamps) and keeps the parts that should match between two builds of the same source.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that it strips variable-length fields like hashes and timestamps, which are key behavioral traits. It does not mention authorization or side effects, but for a snapshot function this is sufficient.

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 concise sentences with no wasted words. The purpose and behavior are front-loaded and clear.

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?

Given one parameter and no output schema, the description covers the core functionality. However, it does not specify the output format or structure of the snapshot, which would help an agent interpret the result. It is adequate but not comprehensive.

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?

The input schema has one parameter 'path' with 0% description coverage. The description does not explain what 'path' refers to (e.g., file path, binary path) or any constraints. Schema coverage is low, and description should compensate but fails to add meaning.

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?

The description clearly states it returns a structural snapshot for diffing binaries, explaining what it strips (variable-length fields) and what it keeps. This is a specific verb+resource, and it distinguishes from sibling tools like 'get_sections' or 'extract_strings'.

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 implies usage for diffing two binaries by normalizing them. It does not explicitly state when not to use or point to alternatives, but the context of sibling tools makes its use case clear.

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

parse_binaryA

Auto-detect the format of path and return a normalized header dict.

Returns hashes, format name, architecture, entrypoint, and format-specific fields (imphash for PE, PIE/NX/RELRO for ELF, code signature for MachO, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, required permissions, or potential side effects. It only describes the output.

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 concise sentences that front-load the primary action and list key return values without unnecessary 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?

Given the lack of output schema and annotations, the description covers basic functionality and return fields but omits details about the dict structure or usage context among many sibling tools.

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 description explains that 'path' is a file path for auto-detection, adding meaning beyond the schema which only specifies type and requirement. This compensates for the 0% schema coverage.

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?

The description clearly states it auto-detects format and returns a normalized header dict with specific fields listed, distinguishing it from more specialized sibling tools.

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 description implies this is the primary entry point for binary analysis, but does not explicitly state when to use it versus alternatives like get_imphash or get_sections.

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

scan_anti_analysis_primitivesA

Scan a binary for anti-analysis primitives (defender side).

Walks the string table + the IAT + (best-effort) the section table and matches the content against the vendored data/anti-analysis-catalog.json. Returns category-only labels (anti_debug, anti_vm, anti_emulator, anti_sandbox, process_introspection, memory_integrity, code_integrity). Never names a specific commercial product.

The byte-sequence evidence (RDTSC = 0F 31, INT 2D = CD 2D, INT 3 = CC, CPUID = 0F A2) is not checked here — that requires a disasm pass via re-rizin.search_bytes. re-anti-analysis is the cross-tool orchestrator that does both the string-table pass and the disasm pass.

Args: path: file to scan max_per_category: per-category cap (default 100)

Returns::

{
  "path": "...",
  "matches": [{"primitive": "...", "category": "...",
               "evidence_kind": "...", "offset": N,
               "section": "..."}, ...],
  "by_category": {"anti_debug": 4, "anti_vm": 2, ...},
  "truncated": bool
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
max_per_categoryNo

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries full burden. It describes walking the string table, IAT, and section table, matching against a catalog, returning category-only labels without naming commercial products, and explicitly states what it does not check (byte-sequence evidence). This exceeds basic behavioral disclosure.

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

Conciseness4/5

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

The description is moderately concise with a clear structure: purpose, scope, limitations, arguments, and return format. It is front-loaded with the main action. A few extra details (e.g., listing categories) are justified, but it could be slightly more streamlined.

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?

Given no output schema, the description provides a detailed return format including fields like primitive, category, evidence_kind, offset, section, and by_category counts. It also mentions truncated. This covers the return value comprehensively for a tool of moderate complexity.

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

Parameters4/5

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

Schema coverage is 0%, so description must compensate. It explains that max_per_category is a per-category cap with default 100, adding meaning beyond the schema. Path is self-explanatory for a file scan tool. While not exhaustive, it adds sufficient context.

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?

The description clearly states it scans a binary for anti-analysis primitives, lists specific categories, and distinguishes from sibling tools like re-rizin.search_bytes and re-anti-analysis. The verb 'scan' and resource 'binary for anti-analysis primitives' are specific and unambiguous.

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 explains when to use this tool by noting that byte-sequence evidence requires a disasm pass via re-rizin.search_bytes, and that re-anti-analysis is the cross-tool orchestrator. It provides context for alternatives, though it does not explicitly list negative conditions for use.

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. 17 tool updatesv0.1.0
    • First observedcategorize_strings
    • First observedcheck_lief
    • First observedclassify_native_protection
    • First observeddisasm_capstone
    • First observedextract_strings
    • First observedget_authenticode
    • First observedget_debug_directory
    • First observedget_imphash
    • First observedget_imports_exports
    • First observedget_overlay
    • First observedget_sections
    • First observedlist_dex_classes
    • First observedlist_dex_methods
    • First observedlist_oat_art
    • First observednormalize_for_diff
    • First observedparse_binary
    • First observedscan_anti_analysis_primitives

TDQS

A3.7/5.0

Scored across 17 tools

Disambiguation4/5

Most tools have distinct purposes, but there is minor overlap between extract_strings and categorize_strings, as the latter is a superset retained for backward compatibility. Otherwise, each tool targets a specific analysis task.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (e.g., classify_native_protection, get_sections), making them predictable and easy for an agent to understand.

Tool Count5/5

With 17 tools covering binary analysis across multiple formats (PE, ELF, MachO, DEX, OAT), the count is well-scoped for the domain without being excessive or sparse.

Completeness4/5

The tool set covers a wide range of binary analysis operations, including headers, sections, imports/exports, disassembly, strings, and protection classification. Minor gaps exist (e.g., no relocation or resource tools), but core workflows are supported.

Maintenance

ActivityStale
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    A multi-backend MCP server that exposes binary analysis capabilities from IDA Pro and Ghidra, allowing LLMs to directly drive reverse-engineering tools via natural language.
    152
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for reverse engineering Windows executables and related binary formats, offering static analysis, Ghidra-assisted function recovery, plugin-driven tooling, and optional isolated Windows runtime execution.
    3
    241
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for analyzing Android APK, DEX, or JAR files via a headless jadx engine, enabling LLM agents to query decompiled code, symbols, call graphs, and more.
    2
    GPL 3.0