Skip to main content
Glama
waterofriver

ghidriff-mcp

by waterofriver

ghidriff_start_diff

Launch a background binary diff between old and new binaries, returning a job ID for immediate tracking. Configure diff engine, BSIM correlation, and analysis options.

Instructions

Start a binary diff in the background and return a job id immediately.

Raw engine pass-through arguments are deliberately not accepted here: the agent decides what to diff, the operator decides how the engine runs, through GHIDRIFF_MCP_EXTRA_ARGS.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bsimNoEnable Ghidra BSIM function correlation (default: upstream default, on).
engineNoDiff engine: VersionTrackingDiff (default), SimpleDiff or StructualGraphDiff.VersionTrackingDiff
summaryNoAlso diff the oldest against the newest binary (only useful with 3+ binaries).
bsim_fullNoSlower but higher-quality BSIM matching.
timeout_sNoKill the run after this many seconds (default: server setting, 3600).
force_diffNoDiff even when architecture or symbols do not match.
no_symbolsNoTurn symbols off for analysis. Use it for offline/air-gapped work: ghidriff otherwise queries PDB symbol servers such as Microsoft's.
old_binaryYesPath to the older binary (relative paths resolve against the workspace).
output_dirNoWhere to write the report and pdiff JSON. Defaults to <run_dir>/ghidriff.
project_dirNoGhidra project location. Must not contain a path element starting with '.'.
base_addressNoBase address for both programs, e.g. '0x2000'.
min_func_lenNoMinimum function length considered for diffing.
new_binariesYesOne or more newer binaries, oldest first. Several entries produce chained diffs.
side_by_sideNoAlso emit side-by-side HTML code diffs (more disk, slower).
force_analysisNoRe-analyse every binary instead of reusing the Ghidra project (very slow).
max_section_funcsNoCap on functions rendered per report section.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

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 must disclose behavior. It reveals that the tool runs asynchronously and returns a job id, which is crucial. However, it does not mention error handling, whether the job runs in the same process, or dependencies like Ghidra being available. It could be more transparent about 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.

Conciseness5/5

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

The description is exceptionally concise, with only three sentences. The key point (start a diff in background, return job id) is front-loaded, and the additional explanation about argument handling earns its place by preventing misuse.

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 16 parameters, the description's high-level guidance is sufficient because the schema covers parameters. The behavior of returning a job id is clear, and the output schema likely covers the return structure. However, it doesn't mention how to check job status or retrieve results, but sibling tools exist for that. Missing some edge cases like timeout defaults.

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 100%, so the schema already explains each parameter. The description adds no additional parameter details. It only mentions the two required parameters (old_binary, new_binaries) implicitly via 'what to diff', which is minimal. The baseline is 3 given high 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 the tool's purpose: start a binary diff in the background and return a job id immediately. It uses specific verbs and resources, and the contrast with the sibling 'ghidriff_run_diff' (likely synchronous) is implied by emphasizing 'background' and 'immediate'.

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?

The description explicitly explains the division of responsibility: the agent decides what to diff, the operator decides how the engine runs via GHIDRIFF_MCP_EXTRA_ARGS. This clarifies when to use this tool versus ghidriff_run_diff, and warns against passing raw engine arguments.

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