{"owner":"mrexodia","repo":"ida-pro-mcp","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nGuidance for working in this repository.\n\n## What this project is\n\nIDA Pro MCP Server: exposes IDA Pro / idalib functionality to MCP clients.\n\nMain pieces:\n- `src/ida_pro_mcp/server.py`: MCP server entrypoint\n- `src/ida_pro_mcp/idalib_server.py`: headless idalib server\n- `src/ida_pro_mcp/ida_mcp/`: IDA/plugin-side APIs\n\nImportant API modules:\n- `api_core.py`: IDB metadata, functions, strings, imports\n- `api_analysis.py`: decompilation, disassembly, xrefs, paths, pattern search\n- `api_memory.py`: bytes/ints/strings, patching\n- `api_types.py`: structs, type inference, type application\n- `api_modify.py`: comments, renaming, asm patching\n- `api_stack.py`: stack frame operations\n- `api_sigmaker.py`: signature creation, scanning, xref signatures (uses sigmaker.py)\n- `api_debug.py`: debugger control, unsafe / low priority for tests\n- `api_python.py`: execute Python in IDA context\n- `api_resources.py`: `ida://` MCP resources\n\n## Core implementation rules\n\n### IDA thread safety\nAll IDA SDK calls must run on the main thread.\nUse:\n```python\nfrom .rpc import tool\nfrom .sync import idasync\n\n@tool\n@idasync\ndef my_tool(...):\n    ...\n```\n\n### API conventions\n- Prefer batch-first APIs.\n- Many functions accept either a comma-separated string or a list.\n- Use full type hints and `Annotated[...]` descriptions.\n- The function docstring becomes the MCP tool description.\n\nExample:\n```python\ndef my_api(addrs: Annotated[str, \"Addresses (0x401000, main) or list\"]) -> list[dict]:\n    ...\n```\n\n### Common helpers\n- Parse addresses with `parse_address()`\n- Normalize batch input with `normalize_list_input()` / `normalize_dict_list()`\n- Use shared pagination / filtering helpers from `utils.py`\n\n### Unsafe operations\nDebugger or destructive operations should be marked unsafe:\n```python\nfrom .rpc import tool, unsafe\n\n@unsafe\n@tool\n@idasync\ndef dangerous_op(...):\n    ...\n```\n\n## Development commands\n\n### Run\n```bash\nuv run ida-pro-mcp\nuv run ida-pro-mcp --transport http://127.0.0.1:8744/sse\nuv run idalib-mcp --stdio path/to/binary\nuv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/binary\nuv run ida-pro-mcp --unsafe\n```\n\n### MCP inspector\n```bash\nuv run mcp dev src/ida_pro_mcp/server.py\n```\n\n### Install / uninstall\n```bash\nuv run ida-pro-mcp --install\nuv run ida-pro-mcp --uninstall\n```\n\n## Testing and coverage\n\n### Run tests\nUse the headless test runner:\n```bash\nuv run ida-mcp-test tests/crackme03.elf -q\nuv run ida-mcp-test tests/typed_fixture.elf -q\nuv run ida-mcp-test tests/crackme03.elf -c api_analysis\nuv run ida-mcp-test tests/typed_fixture.elf -p \"*stack*\"\n```\n\nNotes:\n- Use `uv run ...`\n- Non-interactive output should show failures only plus a summary\n- Binary-specific tests should use `@test(binary=\"...\")` with the executable basename\n\n### Coverage\nMeasure coverage across both maintained fixtures:\n```bash\nuv run coverage erase\nuv run coverage run -m ida_pro_mcp.test tests/crackme03.elf -q\nuv run coverage run --append -m ida_pro_mcp.test tests/typed_fixture.elf -q\nuv run coverage report --show-missing\n```\n\nCurrent fixture intent:\n- `tests/crackme03.elf`: compact general regression fixture\n- `tests/typed_fixture.elf`: typed globals / structs / locals / stack coverage fixture\n\n### Test expectations\n- Prefer semantic assertions, not weak \"field exists\" checks\n- Prefer round-trip tests for mutating APIs\n- If tests expose clearly wrong API behavior, fix the API instead of weakening the test\n- Focus on IDA-facing modules, not server/config plumbing\n- Expect some IDA / Hex-Rays variance; guarded assertions or runtime skips are acceptable when justified\n\n### Generic-test sanity check\nWhen adding generic tests, also try a non-fixture binary to avoid ELF-specific assumptions:\n```bash\nuv run ida-mcp-test \"C:\\CodeBlocks\\x64dbg\\bin\\x64\\x64dbg.dll\" -q\n```\n\n## Scope priorities\n\nHigh priority:\n- `api_analysis.py`\n- `api_types.py`\n- `api_modify.py`\n- `api_stack.py`\n- `api_memory.py`\n- `api_core.py`\n- `api_resources.py`\n- `utils.py`\n- `framework.py`\n\nLower priority:\n- `api_debug.py`\n- MCP transport / hosting details\n- install / config mutation logic\n\n## Practical notes\n\n- Server/plugin Python: 3.11+\n- IDA Pro 8.3+; 9.0 recommended\n- IDA Free is not supported\n- If IDA uses the wrong Python, use `idapyswitch`\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nGuidance for working in this repository.\n\n## What this project is\n\nIDA Pro MCP Server: exposes IDA Pro / idalib functionality to MCP clients.\n\nMain pieces:\n- `src/ida_pro_mcp/server.py`: MCP server entrypoint\n- `src/ida_pro_mcp/idalib_server.py`: headless idalib server\n- `src/ida_pro_mcp/ida_mcp/`: IDA/plugin-side APIs\n\nImportant API modules:\n- `api_core.py`: IDB metadata, functions, strings, imports\n- `api_analysis.py`: decompilation, disassembly, xrefs, paths, pattern search\n- `api_memory.py`: bytes/ints/strings, patching\n- `api_types.py`: structs, type inference, type application\n- `api_modify.py`: comments, renaming, asm patching\n- `api_stack.py`: stack frame operations\n- `api_sigmaker.py`: signature creation, scanning, xref signatures (uses sigmaker.py)\n- `api_debug.py`: debugger control, unsafe / low priority for tests\n- `api_python.py`: execute Python in IDA context\n- `api_resources.py`: `ida://` MCP resources\n\n## Core implementation rules\n\n### IDA thread safety\nAll IDA SDK calls must run on the main thread.\nUse:\n```python\nfrom .rpc import tool\nfrom .sync import idasync\n\n@tool\n@idasync\ndef my_tool(...):\n    ...\n```\n\n### API conventions\n- Prefer batch-first APIs.\n- Many functions accept either a comma-separated string or a list.\n- Use full type hints and `Annotated[...]` descriptions.\n- The function docstring becomes the MCP tool description.\n\nExample:\n```python\ndef my_api(addrs: Annotated[str, \"Addresses (0x401000, main) or list\"]) -> list[dict]:\n    ...\n```\n\n### Common helpers\n- Parse addresses with `parse_address()`\n- Normalize batch input with `normalize_list_input()` / `normalize_dict_list()`\n- Use shared pagination / filtering helpers from `utils.py`\n\n### Unsafe operations\nDebugger or destructive operations should be marked unsafe:\n```python\nfrom .rpc import tool, unsafe\n\n@unsafe\n@tool\n@idasync\ndef dangerous_op(...):\n    ...\n```\n\n## Development commands\n\n### Run\n```bash\nuv run ida-pro-mcp\nuv run ida-pro-mcp --transport http://127.0.0.1:8744/sse\nuv run idalib-mcp --stdio path/to/binary\nuv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/binary\nuv run ida-pro-mcp --unsafe\n```\n\n### MCP inspector\n```bash\nuv run mcp dev src/ida_pro_mcp/server.py\n```\n\n### Install / uninstall\n```bash\nuv run ida-pro-mcp --install\nuv run ida-pro-mcp --uninstall\n```\n\n## Testing and coverage\n\n### Run tests\nUse the headless test runner:\n```bash\nuv run ida-mcp-test tests/crackme03.elf -q\nuv run ida-mcp-test tests/typed_fixture.elf -q\nuv run ida-mcp-test tests/crackme03.elf -c api_analysis\nuv run ida-mcp-test tests/typed_fixture.elf -p \"*stack*\"\n```\n\nNotes:\n- Use `uv run ...`\n- Non-interactive output should show failures only plus a summary\n- Binary-specific tests should use `@test(binary=\"...\")` with the executable basename\n\n### Coverage\nMeasure coverage across both maintained fixtures:\n```bash\nuv run coverage erase\nuv run coverage run -m ida_pro_mcp.test tests/crackme03.elf -q\nuv run coverage run --append -m ida_pro_mcp.test tests/typed_fixture.elf -q\nuv run coverage report --show-missing\n```\n\nCurrent fixture intent:\n- `tests/crackme03.elf`: compact general regression fixture\n- `tests/typed_fixture.elf`: typed globals / structs / locals / stack coverage fixture\n\n### Test expectations\n- Prefer semantic assertions, not weak \"field exists\" checks\n- Prefer round-trip tests for mutating APIs\n- If tests expose clearly wrong API behavior, fix the API instead of weakening the test\n- Focus on IDA-facing modules, not server/config plumbing\n- Expect some IDA / Hex-Rays variance; guarded assertions or runtime skips are acceptable when justified\n\n### Generic-test sanity check\nWhen adding generic tests, also try a non-fixture binary to avoid ELF-specific assumptions:\n```bash\nuv run ida-mcp-test \"C:\\CodeBlocks\\x64dbg\\bin\\x64\\x64dbg.dll\" -q\n```\n\n## Scope priorities\n\nHigh priority:\n- `api_analysis.py`\n- `api_types.py`\n- `api_modify.py`\n- `api_stack.py`\n- `api_memory.py`\n- `api_core.py`\n- `api_resources.py`\n- `utils.py`\n- `framework.py`\n\nLower priority:\n- `api_debug.py`\n- MCP transport / hosting details\n- install / config mutation logic\n\n## Practical notes\n\n- Server/plugin Python: 3.11+\n- IDA Pro 8.3+; 9.0 recommended\n- IDA Free is not supported\n- If IDA uses the wrong Python, use `idapyswitch`\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# CLAUDE.md\n\nGuidance for working in this repository.\n\n## What this project is\n\nIDA Pro MCP Server: exposes IDA Pro / idalib functionality to MCP clients.\n\nMain pieces:\n- `src/ida_pro_mcp/server.py`: MCP server entrypoint\n- `src/ida_pro_mcp/idalib_server.py`: headless idalib server\n- `src/ida_pro_mcp/ida_mcp/`: IDA/plugin-side APIs\n\nImportant API modules:\n- `api_core.py`: IDB metadata, functions, strings, imports\n- `api_analysis.py`: decompilation, disassembly, xrefs, paths, pattern search\n- `api_memory.py`: bytes/ints/strings, patching\n- `api_types.py`: structs, type inference, type application\n- `api_modify.py`: comments, renaming, asm patching\n- `api_stack.py`: stack frame operations\n- `api_sigmaker.py`: signature creation, scanning, xref signatures (uses sigmaker.py)\n- `api_debug.py`: debugger control, unsafe / low priority for tests\n- `api_python.py`: execute Python in IDA context\n- `api_resources.py`: `ida://` MCP resources\n\n## Core implementation rules\n\n### IDA thread safety\nAll IDA SDK calls must run on the main thread.\nUse:\n```python\nfrom .rpc import tool\nfrom .sync import idasync\n\n@tool\n@idasync\ndef my_tool(...):\n    ...\n```\n\n### API conventions\n- Prefer batch-first APIs.\n- Many functions accept either a comma-separated string or a list.\n- Use full type hints and `Annotated[...]` descriptions.\n- The function docstring becomes the MCP tool description.\n\nExample:\n```python\ndef my_api(addrs: Annotated[str, \"Addresses (0x401000, main) or list\"]) -> list[dict]:\n    ...\n```\n\n### Common helpers\n- Parse addresses with `parse_address()`\n- Normalize batch input with `normalize_list_input()` / `normalize_dict_list()`\n- Use shared pagination / filtering helpers from `utils.py`\n\n### Unsafe operations\nDebugger or destructive operations should be marked unsafe:\n```python\nfrom .rpc import tool, unsafe\n\n@unsafe\n@tool\n@idasync\ndef dangerous_op(...):\n    ...\n```\n\n## Development commands\n\n### Run\n```bash\nuv run ida-pro-mcp\nuv run ida-pro-mcp --transport http://127.0.0.1:8744/sse\nuv run idalib-mcp --stdio path/to/binary\nuv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/binary\nuv run ida-pro-mcp --unsafe\n```\n\n### MCP inspector\n```bash\nuv run mcp dev src/ida_pro_mcp/server.py\n```\n\n### Install / uninstall\n```bash\nuv run ida-pro-mcp --install\nuv run ida-pro-mcp --uninstall\n```\n\n## Testing and coverage\n\n### Run tests\nUse the headless test runner:\n```bash\nuv run ida-mcp-test tests/crackme03.elf -q\nuv run ida-mcp-test tests/typed_fixture.elf -q\nuv run ida-mcp-test tests/crackme03.elf -c api_analysis\nuv run ida-mcp-test tests/typed_fixture.elf -p \"*stack*\"\n```\n\nNotes:\n- Use `uv run ...`\n- Non-interactive output should show failures only plus a summary\n- Binary-specific tests should use `@test(binary=\"...\")` with the executable basename\n\n### Coverage\nMeasure coverage across both maintained fixtures:\n```bash\nuv run coverage erase\nuv run coverage run -m ida_pro_mcp.test tests/crackme03.elf -q\nuv run coverage run --append -m ida_pro_mcp.test tests/typed_fixture.elf -q\nuv run coverage report --show-missing\n```\n\nCurrent fixture intent:\n- `tests/crackme03.elf`: compact general regression fixture\n- `tests/typed_fixture.elf`: typed globals / structs / locals / stack coverage fixture\n\n### Test expectations\n- Prefer semantic assertions, not weak \"field exists\" checks\n- Prefer round-trip tests for mutating APIs\n- If tests expose clearly wrong API behavior, fix the API instead of weakening the test\n- Focus on IDA-facing modules, not server/config plumbing\n- Expect some IDA / Hex-Rays variance; guarded assertions or runtime skips are acceptable when justified\n\n### Generic-test sanity check\nWhen adding generic tests, also try a non-fixture binary to avoid ELF-specific assumptions:\n```bash\nuv run ida-mcp-test \"C:\\CodeBlocks\\x64dbg\\bin\\x64\\x64dbg.dll\" -q\n```\n\n## Scope priorities\n\nHigh priority:\n- `api_analysis.py`\n- `api_types.py`\n- `api_modify.py`\n- `api_stack.py`\n- `api_memory.py`\n- `api_core.py`\n- `api_resources.py`\n- `utils.py`\n- `framework.py`\n\nLower priority:\n- `api_debug.py`\n- MCP transport / hosting details\n- install / config mutation logic\n\n## Practical notes\n\n- Server/plugin Python: 3.11+\n- IDA Pro 8.3+; 9.0 recommended\n- IDA Free is not supported\n- If IDA uses the wrong Python, use `idapyswitch`\n","category":"root","tokens":1064}]}