From d60b2cab65c3c9119b25ede4d2b99928ff815fbf Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Tue, 27 Oct 2026 06:38:51 +0800 Subject: [PATCH] docs(ida): document migration from legacy attached registrations Describe the native plugin setup, identity and capability differences, verification, and rollback. Link the migration from the packaged skill source. --- .../skills/reverse-engineer-anything/SKILL.md | 5 ++ docs/ida-provider.md | 65 +++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/.agents/skills/reverse-engineer-anything/SKILL.md b/.agents/skills/reverse-engineer-anything/SKILL.md index d173763599..2032717a40 100644 --- a/.agents/skills/reverse-engineer-anything/SKILL.md +++ b/.agents/skills/reverse-engineer-anything/SKILL.md @@ -344,6 +344,11 @@ leaves its database open. The modern headless profile creates and closes an owned private database without saving. Installation and registration reuse [mrexodia/ida-pro-mcp](https://github.com/mrexodia/ida-pro-mcp); see the [IDA provider guide](https://github.com/morluto/rea/blob/main/docs/ida-provider.md). +For migration to the separate native IDA MCP plugin, follow the guide's +[legacy attached migration](https://github.com/morluto/rea/blob/main/docs/ida-provider.md#migrate-a-legacy-attached-registration). +Replace the upstream registration explicitly; modern mrexodia tools are not the +native profile. Native attachment preserves the database but does not provide +direct callers; check session availability and the guide's verification limits. Proceed directly to `analyze_function`, pseudocode, or function/string searches after opening; IDA does not supply `binary_overview`. Consult session availability when composing broader workflows. Modern direct callers and unsupported dossier diff --git a/docs/ida-provider.md b/docs/ida-provider.md index bdc036930b..491a0d67e5 100644 --- a/docs/ida-provider.md +++ b/docs/ida-provider.md @@ -80,6 +80,71 @@ Native MCP 1.1.2 can navigate in the previously focused pseudocode tab when swit Native tool observations retain actual tool names and complete JSON text. Upstream `structuredContent` can be a shortened preview even while text contains the full result. REA reads the full native representation and rejects missing/malformed text instead of treating previews as complete observations. +### Migrate a legacy attached registration + +Both attached profiles remain supported. Migrating replaces the upstream server; +adding `"protocol": "native"` to a legacy Python proxy registration is insufficient. +The native plugin is separate from mrexodia/ida-pro-mcp, and upgrading mrexodia to +its modern tool catalog does not select this profile. + +1. Back up the working registration file. Install and start the native plugin + using its [upstream instructions](https://github.com/0xshlomil/ida-free-mcp). + IDA and the plugin are bring-your-own; REA does not install or build them. + Use a build with the navigation correction described above, and restrict its + listener to loopback or apply the documented host firewall restriction. + Stop the legacy endpoint first if both servers would use the same port. +2. Open the same original input binary in IDA and wait for analysis. Keep that + file readable by REA. The native metadata resource must report its recorded + input SHA-256; the resource's `path` identifies the database, not an input + file to substitute. Universal Mach-O inputs still require a thin extraction. +3. Replace the registration, using the native plugin's actual local endpoint. + For example, this legacy registration: + + ```json + { + "mode": "attached", + "command": "python", + "args": [ + "/absolute/path/to/ida_pro_mcp/server.py", + "--ida-rpc", + "http://127.0.0.1:13337" + ] + } + ``` + + becomes: + + ```json + { + "mode": "attached", + "protocol": "native", + "url": "http://127.0.0.1:13337/mcp" + } + ``` + + Keep `REA_IDA_MCP_CONFIG` pointing at the replacement file and close/reopen + the REA binary session to connect with it. If changing the environment's + configuration path, restart the MCP server as described above. Do not reuse + the legacy RPC URL as an MCP HTTP endpoint. + +4. Check `binary_session` availability before resuming workflows. Direct + `procedure_callers` becomes unavailable and dossier callers remain unknown; + incoming address xrefs do not establish direct call edges. Native strings + use C-string rendering. Assembly and instruction reads no longer navigate + the GUI; native pseudocode still changes focus and closes existing + pseudocode tabs. IDA Free decompilation may require cloud access and consent. +5. Run the [real-provider verification](#verification) with two distinct + functions and the required second-function marker. Supply independently + known string and xref oracles for those checks. Existing Windows evidence + covers IDA Pro 9.3 with the documented source build and listener change; + it does not establish stock-plugin, Windows Free, or native macOS behavior. + A valid registration or successful doctor check alone does not verify the + connection, target identity, or function switching. + +REA continues to verify identity and image base around requests and closes only +its connection, preserving the attached database. Restore the backed-up legacy +registration and its upstream endpoint to return to the legacy profile. + The legacy producer moves the active GUI as a side effect: assembly and raw function instructions jump to the function, and successful pseudocode opens or reuses a pseudocode view. A function dossier does both. Native GUI decompilation also changes the active view. `binary_session` reports these operations with `effects.may_show_ui: true`; headless operations and the other attached operations report `false`. ## Give REA a target for headless analysis