
로컬 우선, 결정론적 IDA Pro/Home용 MCP 서버: 109개의 엄격한 스키마 기반 리버스 엔지니어링 작업, 증거 기반 발견 사항, 정책 기반 IDB 편집.

IDA Pro MCP는 IDA Pro용 로컬 Model Context Protocol 서버입니다. MCP 클라이언트가 IDB를 검사하고, IDA에 결정론적 분석 결과를 요청하며, 명시적으로 허용된 경우 주석이나 기타 변경 사항을 IDB에 다시 기록할 수 있게 해줍니다. 호스트 프로세스는 IDA 외부에서 실행되며 기본적으로 각 세션마다 별도의 IDA 헤드리스 프로세스를 시작합니다.
tools/list와 ida_help를 통한 실시간 탐색이 가능한 109개의 엄격한 스키마 ida_* 연산.현재 버전은 1.0.0a3입니다. 이는 알파 소프트웨어입니다. 공개 ida_* 연산 이름, 스키마, 워크스페이스 형식은 안정적인 1.0.0 릴리스 전에 변경될 수 있습니다. 기본 클라이언트 표면에는 109개의 정확한 스키마 연산이 포함됩니다. 전체 계약을 확인하려면 실시간 탐색을 사용하세요: 는 모든 연산을 스키마와 함께 열거하고, 는 하나의 연산에 대한 정확한 인수와 예제를 반환합니다.
tools/listida_help(topic="...")필요한 것:
idat/idat64 실행 파일 포함. 저장소의 라이브 테스트 증거는 IDA 9.3과 9.4를 다루며, 9.2가 선언된 호환성 하한입니다.일반적인 분석에는 언어 모델이나 임베딩 모델이 필요하지 않습니다. 선택적 시맨틱 검색 기능은 기본적으로 로컬 모델을 사용하며 모델이 구성되지 않으면 비활성화된 상태로 유지됩니다.
기본 런타임은 idat입니다: 세션당 하나의 헤드리스 IDA 프로세스. idalib 백엔드는 실험적이며, idapro 패키지가 활성화된 IDA 9.3 이상 설치가 필요하고 첫 설치에는 필요하지 않습니다.
설치 프로그램은 설치 루트 아래에 관리형 환경을 생성하고, 체크아웃의 고정된 복사본을 그 안에 설치하며, 지원되는 클라이언트 위치에 대한 클라이언트 구성을 작성합니다. 저장소 루트에서 실행하세요:
python3 install.py
알려진 IDA 설치의 경우 명시적으로 전달하세요:
python3 install.py --ida-dir /path/to/ida-pro-9.3
비대화형 실행의 경우:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
설치 프로그램은 IDADIR, IDA_DIR, PATH에 있는 IDA 실행 파일, 일반적인 설치 디렉터리를 통해서도 IDA를 찾을 수 있습니다. --ida-version은 여러 설치가 있을 때 버전을 선택합니다. --dry-run을 사용하여 계획된 변경 사항을 먼저 검사하세요.
설치 프로그램은 임베딩 모델을 선택하거나 요청하지 않는 한 다운로드하지 않습니다. 내장 클라이언트 맵에 있는 모든 클라이언트 위치에 대한 구성 파일을 생성하거나 업데이트할 수 있으며, 여기에는 머신에 설치되지 않은 클라이언트도 포함됩니다. 설치 루트의 install-report.json을 확인하고 필요하지 않은 항목을 제거하세요. 기존 일반 구성 파일은 변경 전에 백업됩니다. 잘못된 형식, 심볼릭 링크, 비일반 파일은 덮어쓰지 않고 거부됩니다.
설치 후 MCP 클라이언트를 재시작하여 구성을 다시 로드하세요.
에이전트 하네스는 도구 표면을 실시간으로 탐색합니다: tools/list는 모든 연산을 스키마와 함께 열거하고, ida_help(topic="...")는 정확한 인수와 예제를 반환합니다. 정적 스킬 파일은 설치되지 않습니다.
기본 설치 루트:
~/.local/share/ida-pro-mcp%LOCALAPPDATA%/ida-pro-mcp다른 위치를 선택하려면 IDA_PRO_MCP_HOME을 설정하거나 --install-root를 전달하세요.
알파 릴리스는 GitHub Actions로 빌드되며 프리릴리스로 수동 게시됩니다. 릴리스가 제공되면 릴리스 페이지에서 bundle.zip 또는 bundle.tar.gz 아티팩트와 SHA256SUMS 파일을 다운로드하세요. 체크섬을 확인하고, 번들의 압축을 풀고, 최상위 디렉터리에서 설치 프로그램을 실행하세요:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
릴리스에는 스크립트 기반 Python 설치를 위한 wheel과 소스 배포판도 포함됩니다. 번들은 설치 프로그램과 MCP 클라이언트 구성에 필요한 모든 프로젝트 파일을 포함하므로 가장 간단한 경로입니다. 릴리스는 알파 품질입니다. 원본 바이너리와 IDB를 보관하고 업그레이드 전에 릴리스 노트를 읽으세요.
설치 프로그램은 알고 있는 클라이언트 구성 경로에 서버 항목을 작성합니다. Gemini CLI, Antigravity, Antigravity IDE, Antigravity CLI, Claude Code, Codex, Copilot CLI, OpenCode, Claude Desktop, Cursor, VS Code, Windsurf, Cline, Roo Code를 지원합니다. OpenCode와 Copilot 계열 클라이언트는 다른 구성 형태를 사용합니다. 설치 프로그램이 해당 파일을 작성하도록 하거나 OpenCode 설정 가이드를 따르세요.
일반적인 JSON 형식을 사용하는 클라이언트의 경우 항목은 다음과 동일합니다:
{
"mcpServers": {
"ida-pro-mcp": {
"command": "/path/to/ida-pro-mcp/.venv/bin/python",
"args": ["-u", "-m", "ida_pro_mcp.host.server"],
"env": {
"IDA_PRO_MCP_HOME": "/path/to/ida-pro-mcp",
"IDADIR": "/path/to/ida-pro-9.3",
"IDA_MCP_TOOL_SURFACE": "agent"
}
}
}
}
Windows에서는 <install-root>/.venv/Scripts/python.exe에 있는 관리형 인터프리터를 사용하세요. 중요한 세부 사항은 관리형 인터프리터, -u -m ida_pro_mcp.host.server, 선택된 IDA 디렉터리, IDA_MCP_TOOL_SURFACE=agent입니다. 클라이언트를 install.py로 지정하지 마세요. 그 파일은 설치 프로그램이지 MCP 서버가 아닙니다.
클라이언트 구성을 변경한 후 클라이언트를 완전히 재시작하고 사용 가능한 연산에 ida_help가 나타나는지 확인하세요. 클라이언트가 레거시 광범위 tool(action=...) 인터페이스만 표시한다면, 환경이 IDA_MCP_TOOL_SURFACE=legacy가 아닌 기본 agent 표면을 선택하는지 확인하세요.
먼저 테스트 바이너리에 대한 절대 경로를 사용하세요. 바이너리를 여는 것은 일반적으로 IDA의 초기 분석이 끝날 때까지 기다립니다. 큰 바이너리는 시간이 걸릴 수 있습니다.
ida_open_binary(binary_path="/absolute/path/to/sample")
ida_session_status()
ida_overview()
ida_list_imports(limit=30)
ida_list_strings(query="http", limit=30)
ida_find(query="main", limit=20)
ida_decompile(address="<address returned by IDA>")
ida_xrefs_to(address="<same address>")
정확한 인수 스키마가 필요할 때마다 ida_help(topic="ida_decompile")을 사용하세요. 공개 연산 스키마는 엄격합니다: 알 수 없는 인수는 거부됩니다. 주소는 개별 연산 계약에 따라 정수 또는 문자열로 허용될 수 있습니다. 클라이언트에서 해당 연산에 대해 ida_help가 표시하는 형식을 사용하세요.
작은 조사 기록의 경우 워크스페이스 발견 사항 연산은 다음과 같습니다:
ida_write_finding(title="Input reaches parser", address="<address returned by IDA>", kind="finding", status="confirmed", confidence=0.8, evidence=[{"type":"call", "value":"recv", "address":"<evidence address>"}])
ida_analysis_brief()
ida_next_target()
ida_export_findings(format="markdown")
워크스페이스 발견 사항은 IDB 편집과 별도로 유지됩니다. 활성 정책이 워크스페이스 쓰기를 허용하면 ida_write_finding은 발견 사항을 로컬에 기록하고, 그렇지 않으면 서버는 정책 오류를 반환합니다. ida_publish_findings(dry_run=true)는 IDB 변경을 미리 봅니다. 게시, 이름 변경, 패치, 기타 IDB 변경은 정책으로 제한되며, 연산이 승인을 노출하는 경우 해당 연산의 문서화된 승인이 필요합니다.
첫 페이지는 작업 지향적으로 유지되지만, 이 간결한 색인은 공개 표면을 쉽게 훑어볼 수 있게 해줍니다. 아래 각 이름은 호출 시 ida_ 접두사가 붙습니다. 전체 스키마와 예제는 tools/list와 ida_help(topic="...")를 통해 실시간으로 확인할 수 있습니다.
| 그룹 | 연산 |
|---|---|
| 세션 | open_binary, open_background, session_state, session_status, session_health, close_session, session_get, session_list, sso_activate, agent_login, agent_logout, session_switch |
| 탐색 | overview, find, semantic_search, reranker_status, function_families, index_functions, index_status, cancel_index, list_functions, list_strings, list_imports, list_types, list_segments, list_sigs, sreg_get, sreg_list, auto_wait, events, registers, search_data_value, search_query_lang, r2_status, r2_bininfo, r2_load_hints, r2_disassemble_hypothesis, r2_vxrefs, fw_detect_vector_table, fw_detect_load_base, fw_detect_mmio, fw_rtos_scan, fw_carve |
| 코드 | decompile, disassemble, compare_functions, diff_sessions, xrefs_to, callers, callees, read_bytes, get_type, callgraph, emulate |
| 발견 사항 | , , , , , , , , , |
서버의 기본 정책은 assist입니다. 세션은 운영자의 기본 정책을 강화할 수 있지만 완화할 수는 없습니다. 정책은 결정론적입니다. 클라이언트가 요청한다고 해서 위험한 연산이 안전하다고 판단하지 않습니다.
읽기 전용 검사가 일반적인 시작점입니다. 예로는 ida_overview, ida_find, ida_list_functions, ida_list_strings, ida_list_imports, ida_decompile, ida_disassemble, ida_xrefs_to, ida_callers, ida_callees, ida_callgraph, ida_read_bytes, 계산 연산이 있습니다. 이들 역시 로컬 파일과 IDA 리소스를 소비하며, MCP 클라이언트는 그 결과를 받습니다.
다음 작업은 내구성 있는 상태를 변경하거나 코드를 실행하므로 높은 영향으로 취급해야 합니다:
ida_rename, ida_comment, ida_patch_bytes, 함수/타입/세그먼트/데이터 변경, 시그니처 적용, ida_save_idb, 스냅샷, undo/restore 연산은 IDB 또는 관련 상태를 변경할 수 있습니다.ida_publish_findings는 발견 사항을 IDB에 기록합니다. 먼저 dry-run 형식을 실행하세요. 비 dry-run 형식은 제한됩니다.ida_close_session은 라이브 IDA 런타임을 종료하며 세션 관점에서 파괴적입니다.ida_python은 활성 IDA 프로세스에서 임의의 Python을 실행합니다. 안전 모드에서 차단되며 일반 정책에서는 명시적 위험 승인이 필요합니다.ida_emulate는 통제된 검사에 유용하지만, 변경을 수행하는 에뮬레이터 작업은 해당 승인이 필요합니다.ida_til_export와 ida_til_import는 파일시스템에 접근하며 제한됩니다. 파일시스템 경로는 해당 가드가 적용되는 경우 구성된 메모리 루트에 의해 제한됩니다.--disable-policy를 편의 플래그로 사용하지 마세요. 이는 IDA_MCP_POLICY_MODE=off를 설정하고 쓰기 승인 및 기타 워크플로 제어를 포함한 모든 정책 게이트를 비활성화합니다. 호출이 거부되면 해당 연산의 ida_help 항목을 읽고, 해당 연산의 스키마가 지원하는 경우에만 정확한 승인 인수를 제공하세요.
IDA가 아직 초기 분석을 수행하는 동안 안전 모드는 일부 전체 바이너리 분석, 인덱싱, 스크립트 연산을 차단합니다. 이는 초기 세션 호출을 좁게 유지하기 위한 것입니다. 가드를 우회하지 말고 ida_session_status 또는 ida_session_health를 폴링하세요.
브리지는 루프백에서 수신 대기하며 세션별 토큰을 사용합니다. 이는 네트워크 서비스가 아닙니다: 브리지 포트를 신뢰할 수 없는 네트워크에 노출하거나 전달하지 마세요. 가져온 스크립트, 트레이스, 바이너리, 코퍼스 데이터, 클라이언트 요청을 신뢰할 수 없는 입력으로 취급하세요.
일반적인 호스트-IDA 경로는 로컬입니다. 프로젝트는 분석 경로에서 내장 LLM 서비스를 실행하지 않으며, 로컬 임베딩은 선택 사항입니다. 그렇다고 해서 전체 워크플로가 자동으로 오프라인이 되는 것은 아닙니다:
llama-server 다운로드, 선택적 위협 코퍼스 다운로드, 외부 Rizin/radare2 통합은 활성화되면 네트워크 요청을 할 수 있습니다.로컬 전용 설정의 경우 기본 로컬 런타임을 사용하고, Gemini 및 기타 선택적 다운로드를 비활성화하고, 조직의 데이터 정책에 따라 MCP 클라이언트와 그 모델을 구성하세요. "로컬 전용"이라도 클라이언트가 자체 모델 제공자에게 무엇을 전송하는지 확인해야 합니다.
설치 디렉터리를 명시적으로 전달하세요:
python3 install.py --ida-dir /path/to/ida-pro-9.3
IDADIR 또는 IDA_DIR을 설정할 수도 있습니다. 여러 설치가 발견되면 --ida-version 9.3 또는 --no-ida-prompt를 사용하여 선택을 제어하세요. 선택한 디렉터리에 실행 가능한 idat 또는 idat64가 있는지 확인하세요.
클라이언트를 재시작하고 구성 항목을 검사하세요. 명령이 관리형 venv Python과 -u -m ida_pro_mcp.host.server를 사용하는지, env 블록에 올바른 IDADIR이 포함되어 있는지 확인하세요. install-report.json을 검토하세요. 설치 프로그램은 클라이언트 업데이트 실패를 기록하고 수정된 파일 옆에 백업을 보관합니다. OpenCode와 Copilot 계열 구성 형태는 일반적인 JSON 예제와 다릅니다.
일반적인 ida_open_binary 호출은 초기 분석을 기다립니다. ida_session_status와 ida_session_health를 확인하고, 큰 바이너리의 경우 더 많은 시간을 허용하고, 설치/데이터 디렉터리 아래의 세션별 로그를 확인하세요. 백그라운드 열기 연산을 사용할 수 있지만, 비동기 동작과 안전 모드 제한을 이해하는 경우를 위한 것입니다.
이는 일반적으로 정책이 구성대로 작동하는 것입니다. ida_help를 사용하여 연산의 정확한 스키마와 승인 요구 사항을 검사하세요. 임의의 인수를 추가하지 마세요: 스키마는 엄격합니다. 정책을 변경하기 전에 IDA_MCP_POLICY_MODE와 운영자 정책 파일을 검토하세요. 모든 정책 게이트를 비활성화하는 것은 별개의 의도적으로 안전하지 않은 선택입니다.
시맨틱 검색은 선택 사항이며 인덱스와 호환되는 임베딩 백엔드가 필요합니다. 일반적인 목록, 검색, 디컴파일, 상호 참조 작업에는 필요하지 않습니다. 선택적 로컬 경로를 설정하려면 설치 프로그램의 명시적 임베더 옵션을 사용하세요. 예를 들어:
python3 install.py --setup-embedder
설치 프로그램은 --embedder-doctor를 실행하거나, 명시적 모델 경로를 사용하거나, 요청 시 선택한 모델과 llama-server를 다운로드할 수도 있습니다. 모델 라이선스, 디스크 사용, 네트워크 다운로드는 귀하의 책임입니다. 모델이 없으면 서버는 시맨틱 검색이 실행된 것처럼 가장하지 않고 사용할 수 없음으로 보고해야 합니다.
보고된 JSON, JSONC, TOML 구문을 수정하고 설치 프로그램을 다시 실행하세요. 또한 예상치 못한 대상을 덮어쓰지 않도록 심볼릭 링크 및 비일반 구성 경로를 거부합니다. 기존 일반 파일은 백업됩니다. 설치 프로그램의 기본 롤백 동작은 이후 단계가 실패하면 해당 백업을 복원할 수 있습니다.
ida_session_health, 세션 로그, 브리지 로그를 확인하세요. 클라이언트가 설치 프로그램이 기록한 것과 동일한 설치 루트와 IDADIR을 사용하는지 확인하세요. 기본 idat 백엔드는 각 세션에 자체 프로세스를 제공합니다. 기본 설치를 진단하는 동안 실험적 idalib로 전환하지 마세요.
tools/list와 ida_help는 모든 공개 연산, 스키마, 예제를 노출합니다.정확한 연산 이름은 생성된 참조를 사용하거나 실행 중인 서버에 ida_help로 문의하세요. 이전 tool(action=...) 백엔드는 호환성을 위해 계속 사용할 수 있으며 IDA_MCP_TOOL_SURFACE=legacy로 선택됩니다. 새 통합은 정확한 스키마 ida_* 표면을 사용해야 합니다.
write_findingmark_examinedlist_findingssearch_findingsupdate_findingexport_findingspublish_findingsimport_annotationsanalysis_briefnext_target| 편집 | create_function, change_function, rename, comment, patch_bytes, save_idb, make_code, undefine, rename_local, declare_type, apply_type, add_segment, set_segment_attrs, apply_sig, sreg_set, create_data, create_strlit, undo_begin, undo_end, add_entry, idb_snapshot, idb_restore_snapshot, struct_member_add, struct_member_del, struct_member_rename, struct_member_set_type, enum_member_add, enum_member_rename, enum_member_revalue, til_delete, til_export, til_import, mark_dangerous |
| 계산 | calc_eval, calc_offset, calc_convert, calc_resolve, calc_deref, calc_chain, calc_align, calc_bitops |
| 지원 | python, continue, help |
| 워크플로 | batch |