agentleFS
QiuChenlyQiuChenly/ida-pro-mcp-enhancement/CLAUDE.md

ida-pro-mcp-enhancement

CLAUDE.md554 starsChanged 8 months agoMITView on GitHub

Guidance for working in this repository. IDA Pro MCP Server: exposes IDA Pro / idalib functionality to MCP clients. Main pieces: - src/idapromcp/server.py: MCP server entrypoint - src/idapromcp/idalibserver.py: headless idalib server - src/idapromcp/idamcp/: IDA/plugin-side APIs Important API modules: - apicore.py: IDB metadata, functions, strings, imports - apianalysis.py: decompilation, disassembly, xrefs, paths, pattern search - apimemory.py: bytes/ints/strings, patching - apitypes.py: structs, type inference, type application - apimodify.py: comments, renaming, asm patching - apistack.py: stack frame operations - apisigmaker.py: signature creation, scanning,…

We split this CLAUDE.md into the rules it gives an agent

9 rules. About 0 are common, 6 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    All IDA SDK calls must run on the main thread.

    line 29
  2. Very specific:

    Use full type hints and Annotated[...] descriptions.

    line 44
  3. Very specific:

    Use shared pagination / filtering helpers from utils.py

    line 56
  4. Distinctive:

    Use the headless test runner:

    line 96
  5. Distinctive:

    Prefer semantic assertions, not weak "field exists" checks

    line 123
  6. Distinctive:

    Prefer round-trip tests for mutating APIs

    line 124
  7. Distinctive:

    If tests expose clearly wrong API behavior, fix the API instead of weakening the test

    line 125
  8. Distinctive:

    When adding generic tests, also try a non-fixture binary to avoid ELF-specific assumptions:

    line 130
  9. Very specific:

    If IDA uses the wrong Python, use idapyswitch

    line 158

≈ “Common” is an estimate: at least 1 in 5 of the 25,680 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
CLAUDE.md

CLAUDE.md

Guidance for working in this repository.

What this project is

IDA Pro MCP Server: exposes IDA Pro / idalib functionality to MCP clients.

Main pieces:

  • src/ida_pro_mcp/server.py: MCP server entrypoint
  • src/ida_pro_mcp/idalib_server.py: headless idalib server
  • src/ida_pro_mcp/ida_mcp/: IDA/plugin-side APIs

Important API modules:

  • api_core.py: IDB metadata, functions, strings, imports
  • api_analysis.py: decompilation, disassembly, xrefs, paths, pattern search
  • api_memory.py: bytes/ints/strings, patching
  • api_types.py: structs, type inference, type application
  • api_modify.py: comments, renaming, asm patching
  • api_stack.py: stack frame operations
  • api_sigmaker.py: signature creation, scanning, xref signatures (uses sigmaker.py)
  • api_debug.py: debugger control, unsafe / low priority for tests
  • api_python.py: execute Python in IDA context
  • api_resources.py: ida:// MCP resources

Core implementation rules

IDA thread safety

All IDA SDK calls must run on the main thread. Use:

from .rpc import tool
from .sync import idasync

@tool
@idasync
def my_tool(...):
    ...

API conventions

  • Prefer batch-first APIs.
  • Many functions accept either a comma-separated string or a list.
  • Use full type hints and Annotated[...] descriptions.
  • The function docstring becomes the MCP tool description.

Example:

def my_api(addrs: Annotated[str, "Addresses (0x401000, main) or list"]) -> list[dict]:
    ...

Common helpers

  • Parse addresses with parse_address()
  • Normalize batch input with normalize_list_input() / normalize_dict_list()
  • Use shared pagination / filtering helpers from utils.py

Unsafe operations

Debugger or destructive operations should be marked unsafe:

from .rpc import tool, unsafe

@unsafe
@tool
@idasync
def dangerous_op(...):
    ...

Development commands

Run

uv run ida-pro-mcp
uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse
uv run idalib-mcp --stdio path/to/binary
uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/binary
uv run idalib-mcp --isolated-contexts --host 127.0.0.1 --port 8745 path/to/binary
uv run ida-pro-mcp --unsafe

MCP inspector

uv run mcp dev src/ida_pro_mcp/server.py

Install / uninstall

uv run ida-pro-mcp --install
uv run ida-pro-mcp --uninstall

Testing and coverage

Run tests

Use the headless test runner:

uv run ida-mcp-test tests/crackme03.elf -q
uv run ida-mcp-test tests/typed_fixture.elf -q
uv run ida-mcp-test tests/crackme03.elf -c api_analysis
uv run ida-mcp-test tests/typed_fixture.elf -p "*stack*"

Notes:

  • Use uv run ...
  • Non-interactive output should show failures only plus a summary
  • Binary-specific tests should use @test(binary="...") with the executable basename

Coverage

Measure coverage across both maintained fixtures:

uv run coverage erase
uv run coverage run -m ida_pro_mcp.test tests/crackme03.elf -q
uv run coverage run --append -m ida_pro_mcp.test tests/typed_fixture.elf -q
uv run coverage report --show-missing

Current fixture intent:

  • tests/crackme03.elf: compact general regression fixture
  • tests/typed_fixture.elf: typed globals / structs / locals / stack coverage fixture

Test expectations

  • Prefer semantic assertions, not weak "field exists" checks
  • Prefer round-trip tests for mutating APIs
  • If tests expose clearly wrong API behavior, fix the API instead of weakening the test
  • Focus on IDA-facing modules, not server/config plumbing
  • Expect some IDA / Hex-Rays variance; guarded assertions or runtime skips are acceptable when justified

Generic-test sanity check

When adding generic tests, also try a non-fixture binary to avoid ELF-specific assumptions:

uv run ida-mcp-test "C:\CodeBlocks\x64dbg\bin\x64\x64dbg.dll" -q

Scope priorities

High priority:

  • api_analysis.py
  • api_types.py
  • api_modify.py
  • api_stack.py
  • api_memory.py
  • api_core.py
  • api_resources.py
  • utils.py
  • framework.py

Lower priority:

  • api_debug.py
  • MCP transport / hosting details
  • install / config mutation logic

Practical notes

  • Server/plugin Python: 3.11+
  • IDA Pro 8.3+; 9.0 recommended
  • IDA Free is not supported
  • If IDA uses the wrong Python, use idapyswitch

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.