The search tools scan the binary and the IDA database for byte patterns, instruction sequences, string contents, and cross-references to specific values or addresses. All search tools return aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/mrexodia/ida-pro-mcp/llms.txt
Use this file to discover all available pages before exploring further.
cursor field that lets you page through large result sets without re-running the scan from the beginning.
Pagination model
Every search result includes acursor field:
{"next": N}— more results exist. Passoffset=Non the next call to resume.{"done": true}— you have received all results.
find_regex
Searches IDA’s string cache for strings matching a case-insensitive regular expression. The cache must be built before use — call server_warmup with build_caches=True at the start of a session.
Python-compatible regular expression to match against string contents.
Maximum matches to return. Hard-capped at 500.
Skip the first N matches (pagination).
FindRegexResult
Number of matches returned in this page.
List of
{addr, string} records.{"next": N} or {"done": true}.Present when the search fails (e.g. invalid regex).
find_regex searches only the pre-built strings cache. It does not scan raw bytes. Use find with type="string" for a raw byte search.find_bytes
Searches the entire binary for byte patterns using ?? as a wildcard for any single byte. Results are paginated by offset.
Byte pattern(s) to search for. Space-separate bytes in hex; use
?? for wildcard bytes (e.g. "48 8B ?? ??", "E8 ?? ?? ?? ??").Maximum matches per pattern. Hard-capped at 10 000.
Skip the first N matches (pagination).
list[FindBytesResult] — one result per input pattern.
The input pattern.
List of hex addresses where the pattern was found.
Number of matches returned.
{"next": N} or {"done": true}.Present when the pattern is invalid or the search fails.
insn_query
Queries instructions by mnemonic and/or operand values, with scoped scanning restricted to a function, segment, or address range. This is more precise than find_bytes because it operates on decoded instructions, not raw bytes.
One or more instruction patterns.
list[InsnQueryResult] — each result has query (summary), ranges (scanned ranges), matches, count, cursor, scanned, truncated, next_start, and optional error.
Always specify a scope (
func, segment, start/end) when searching for common mnemonics. Without a scope, allow_broad must be True and the scan may be slow on large binaries.find
Advanced search for four types of targets: raw string bytes, immediate values in instructions, data references, and code references. All types share the same pagination model.
Search type:
"string", "immediate", "data_ref", or "code_ref".One or more search targets:
"string"— UTF-8 substrings to search for as raw bytes."immediate"— integer values (in executable segments only)."data_ref"/"code_ref"— addresses to find data or code references to.
Maximum matches per target. Hard-capped at 10 000.
Pagination offset.
list[FindResult] — one result per target, each with query, matches (list of hex addresses), count, cursor, and optional error.
search_text
Searches the IDA rendered listing (disassembly view) using IDA’s native fast text search. Unlike find_regex, this searches disassembly text and comments, not just string data.
Text to search for. Treated as a literal substring by default.
Maximum hits per page. Hard-capped at 500.
Resume cursor: hex address or symbol to start from. Leave empty to scan from the first segment.
Treat
pattern as a regular expression.Case-sensitive match.
Which listing lines to include:
"disasm", "comments", or "all".Restrict search to executable segments only.
SearchTextResult
Number of hits in this page.
List of
SearchTextHit records. Each has addr, optional function and segment names, and matches (list of {kind, text} where kind is "disasm" or "comment").{"next": "0xNNNN"} (hex address string) or {"done": true}.Present when the pattern is invalid or search fails.
The
search_text cursor is an address string (e.g. "0x401234"), not an integer offset. Pass it directly to the start parameter on the next call.