MCP server for Hopper with indexed state and transaction-safe annotations.
hopper-mcp has 25 tools with mostly complete schemas and descriptions. Naming follows verb_noun patterns (list, search, resolve, procedure, etc.). Descriptions average ~120 chars, meeting the 10-1024 baseline. However, parameter descriptions are sparse or missing for many tools (e.g., 'queue' has 8 params with minimal guidance on 'kind', 'mapping', 'rationale'). Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance or categorization. Some tools conflate concerns (e.g., 'ingest_live_hopper' has 22 parameters controlling analysis, export, and ingestion simultaneously). Tool descriptions lack WHEN/WHY context for selection. Schemas are present but parameter descriptions often omitted.
Return purpose, pseudocode, graph context, evidence anchors, and provenance for a function.
Report backend availability and Hopper wire compatibility details.
Report availability of the configured Hopper backend.
Start a local annotation transaction.
Report static/dynamic adapter capabilities and the list of loaded sessions.
Apply queued local transaction operations.
Compute stable per-function fingerprints from Hopper snapshot evidence.
Output schemas not documented. LLMs cannot predict response structure for any tool. Responses must include typed fields (e.g., 'functions: Function[], total: number') so agents can chain calls and extract data reliably.
'queue' tool has 8 parameters with minimal descriptions. 'kind', 'mapping', 'rationale' lack guidance on valid values, format, and purpose. LLMs cannot construct valid calls without explicit parameter documentation.
'ingest_live_hopper' conflates 22 parameters across analysis, export, and ingestion concerns. Parameters like 'loader_checkboxes', 'parse_objective_c', 'parse_swift' lack descriptions. Should split into separate tools or provide detailed parameter guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2025-06-18+ | v2 |
Find the function body containing an instruction address.
Diff two Hopper snapshots by functions, strings, and imports.
Find functions with similar imports, strings, and graph shape.
Return a bounded caller/callee graph neighborhood around a function.
Ingest the current Hopper document through the configured backend.
Open an executable in Hopper, run the official Python exporter inside Hopper, and ingest the live analyzed document.
Refresh the local snapshot store from Hopper's installed official MCP server.
List procedures, strings, names, segments, imports, exports, or bookmarks.
Call Hopper's installed official MCP server directly. The single passthrough — name + arguments map to the official tool. Write/navigation tools require HOPPER_MCP_ENABLE_OFFICIAL_WRITES=1 and confirm_live_write=true.
Create or replace a session from an already-indexed JSON payload. Pass overwrite=false to fail when a session with the same id already exists.
Preview queued local transaction operations.
Read procedure info, assembly, pseudocode, callers, callees, or comments.
Run a simple predicate query over functions: name, imports, string, addr.
Queue a local transaction operation.
Resolve an address, name, string, or import against the snapshot.
Roll back a local transaction without applying it.
Regex search over Hopper snapshot strings, procedures, or names.
Return snapshot cross-references to/from an address.
No error handling guidance. Tools do not indicate which errors are retryable, user-fixable, or fatal. No recovery suggestions (e.g., 'session not found, call list_sessions() first'). Agents cannot self-correct on failures.
Destructive tools (ingest_live_hopper, commit_transaction, official_hopper_call with confirm_live_write) lack dry-run or confirmation patterns. Agents can accidentally overwrite sessions or execute live writes without safeguards.