IDA-instances-MCP
IDA-instances-MCP
ida-pro-mcp의 커스텀 빌드입니다. MCP 클라이언트가 IDA Pro를 구동할 수 있게 해주는 MCP Server이며, 여러 독립 idalib 인스턴스를 호스팅하는 것을 목표로 안정성 보강 작업을 적용한 버전입니다(Ida-Instances 구성).
이 저장소는 mrexodia의 ida-pro-mcp(MIT)를 포크한 것입니다. 모든 업스트림 크레딧은 Duncan Ogilvie와 기여자들에게 있으며, 아래의 커스텀 변경 사항은 이 저장소에서 관리됩니다.
커스텀 변경 사항
업스트림 v2.0.0에 대해 안정성을 보강했습니다.
영역 | 변경 사항 |
데이터 안전성 | 부분 데이터베이스 정리는 소유권을 인식합니다. 다른 활성 인스턴스가 소유한 |
저장 신뢰성 |
|
동시성 | supervisor 잠금이 더 이상 워커 생성(~120초), health 프로브(세션당 ~2.5초), 이전 워커 종료까지 걸리지 않습니다. 하나의 느린 오픈이 모든 세션을 얼려버리지 못합니다. |
견고성 | stdio로 잘못된 형태의 JSON-RPC가 전달되면 프록시가 크래시하는 대신 |
시간 초과 | 프록시 시간 초과를 30초 → 900초로 높이고 |
네트워킹 | 워커 포트 TOCTAU는 이제 재시도합니다. SSE 쓰기와 정리(teardown)는 잠금으로 보호되고, CORS 정책 읽기는 IDA 메인 스레드 밖에서 캐시됩니다. |
리소스 제한 | IDB에 저장되는 트레이스 로그를 |
인증 | 모든 HTTP 요청에 인스턴트 API 키가 필요합니다. |
호스팅 엔드포인트 |
|
유휴 세션 정리 |
|
정상 종료 |
|
자동 업데이트 | 시작 시 GitHub 릴리스를 확인합니다. 대화형 세션은 키 하나로 자동 업데이트를 진행할 수 있습니다. |
호스팅 기본값 | 헤드리스 supervisor는 0.0.0.0:9999에서 수신하고, GUI 플러그인도 0.0.0.0에 바인딩되며 동일한 API 키가 필요합니다. |
Related MCP server: idalib-mcp-headless
요구 사항
Linux, macOS 또는 Windows
Python 3.11+(IDA 안의
idapyswitch를 사용하여 버전을 맞추세요)IDA Pro 8.3+(9.x 권장). IDA Free는 지원하지 않습니다.
MCP 클라이언트(Claude Code, Cursor, Codex, Opencode, VS Code, ...)
설치
uv 환경에서 idalib을 활성화합니다.
# linux (server deployment)
uv run "/opt/idapro-9.x/idalib/python/py-activate-idalib.py"
# macos
uv run "/Applications/IDA Professional 9.x.app/Contents/MacOS/idalib/python/py-activate-idalib.py"
# windows
uv run "C:\Program Files\IDA Professional 9.x\idalib\python\py-activate-idalib.py"헤드리스 실행에는 IDA 설치 디렉터리가 IDADIR에 필요합니다.
헤드리스 슈퍼바이저 실행 (호스팅 모드)
uv run idalib-mcp # serves http://0.0.0.0:9999/mcp (new default)시작 시 API 키가 생성(또는 디스크에서 로드)되며, 이 키 없이 보낸 모든 요청은 예외 없이 401 Unauthorized 응답을 받습니다.
인스턴스를 소유한 시스템/네트워크에서 키를 한 번만 가져옵니다.
curl http://your-host:9999/key
# {"key": "3f2b..."} <- save it; this endpoint is now burned until restart키는
~/.idapro/mcp/api_key(모드0600)에 유지되며 재부팅 후에도 남아 있습니다.GET /key는 서버 시작당 한 번만 키를 다시 발급합니다.IDA_MCP_API_KEY로 재정의하거나IDA_MCP_API_KEY_FILE로 위치를 바꿀 수 있습니다.다른 모든 엔드포인트는 호출마다 키가 필요합니다.
Authorization: Bearer <key>
# or equivalently
X-API-Key: <key>키는 절대로 로그에 남지 않습니다.
호스팅 엔드포인트
엔드포인트 | 인증 | 목적 |
| 없음 | 준비 상태 프로브: |
| 키 | 열린 데이터베이스와 마지막 액세스 시각을 반환합니다 |
| 키 | 요청 본문의 바이너리를 스트리밍해 |
# provisioning flow
while ! curl -sf http://10.0.0.4:9999/health >/dev/null; do sleep 1; done
KEY=$(curl -s http://10.0.0.4:9999/key | jq -r .key)
curl -H "Authorization: Bearer $KEY" --data-binary @sample.elf \
"http://10.0.0.4:9999/upload?filename=sample.elf"유용한 플래그:
uv run idalib-mcp --host 127.0.0.1 --port 9999 # override bind address
uv run idalib-mcp --max-workers 8 # concurrent databases (default 4, 0 = unlimited)
uv run idalib-mcp --unsafe # enable destructive/debugger tools (DANGEROUS)
uv run idalib-mcp --profile tools.txt # restrict worker tools to a profile file
uv run idalib-mcp --stdio # stdio transport instead of HTTP
uv run idalib-mcp path/to/binary # open a binary at startup세션 수명 주기 도구: idb_open, idb_list, idb_close — 세승집당 데이터베이스 하나를 열 수 있습니다. 각 세션에는 독립된 워커 프로세스가 할당됩니다.
GUI 프록시 실행 (대화형 IDA)
IDA 내부에서 플러그인을 실행합니다(Edit -> Plugins -> MCP 또는 Ctrl+Alt+M). 그런 다음:
uv run ida-pro-mcp # stdio proxy, auto-discovers IDA
uv run ida-pro-mcp --transport http://127.0.0.1:9999 # serve HTTP insteadMCP 클라이언트 연결
일반적인 JSON 설정(HTTP 전송):
{
"mcpServers": {
"ida-instances": {
"url": "http://your-host:9999/mcp",
"headers": {
"Authorization": "Bearer <key-from-/key>"
}
}
}
}Claude Code:
claude mcp add --transport http ida-instances http://your-host:9999/mcp \
--header "Authorization: Bearer <key-from-/key>"stdio로 GUI 프록시를 사용하려면, uv run ida-pro-mcp --config를 실행한 후 그 JSON을 클라이언트에 붙여넣습니다.
구성 (환경 변수)
변수 | 기본값 | 의미 |
|
| 오픈 + 자동 분석 과정에서 재리핑되기 전 허용 최대 시간(초) ( |
|
| 전달된 도구 호출 하나에 허용되는 최대 시간(초) |
|
| GUI 프록시 → IDA 업스트림 시간 제한 ( |
|
| IDB 안에 저장되는 트레이스 로그 상한 |
|
| 기본 |
|
| Health 프로브 시간 예산 |
|
| 액세스하지 않은 세전이 자동 종료되기까지의 시간(분) ( |
|
|
|
|
| 업로드가 저장되는 위치 |
| – / | 인스턴스 키 주입 또는 키 파일 위치 변경 |
|
|
|
|
|
|
보안 참고 사항: API 키는 supervisor와 GUI 플러그인 모두의 모든 HTTP 엔드포인트를 보호합니다. 플러그인은
py_eval로 임의 코드를 실행할 수 있으므로 루트백에서도 키가 필알쉽니다. 이 키는 bearer 토큰입니다 — 키를 가진 사람은 누구나 인스턴스를 소유할 수 있습니다. 신뢰되지 않는 네트워에 넘 이라면 TLS 리버스 프록시를 추가하세요. 브라우저에서는?key=<key>로 키를 넘길 수 있습니다(/config.html에 유용).
테스트
IDADIR=/path/to/ida uv run ida-mcp-test tests/crackme03.elf -q
IDADIR=/path/to/ida uv run ida-mcp-test tests/typed_fixture.elf -q
IDADIR=/path/to/ida uv run ida-mcp-test tests/crackme03.elf -c api_analysis # one category
IDADIR=/path/to/ida uv run coverage run -m ida_pro_mcp.test tests/crackme03.elf -q라이선스
MIT — 상위 저장소인 ida-pro-mcp에서 이어받았습니다. 상위 프로젝트에 이름(IDA Pro, Hex-Rays)은 Hex-Rays SA의 상표이며, 이 프로젝트를 사용하려면 사용자의 유효한 IDA Pro 라이선스가 필요합니다.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for the Seline Analytics API
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Hosted MCP server for task-first delegation to remote workstations and workers.
Related MCP Servers
- AlicenseCqualityAmaintenanceMCP Server for automated reverse engineering with IDA Pro.431,602 PyPI12,620MIT
- FlicenseNot gradedqualityDmaintenanceA headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.22-
- AlicenseNot gradedqualityDmaintenanceHeadless MCP server for IDA Pro enabling on-demand database loading and programmatic reverse engineering workflows via MCP tools.18MIT
- AlicenseNot gradedqualityAmaintenanceHeadless reverse engineering MCP server integrating IDA Pro for static analysis and x64dbg for dynamic debugging via controlled MCP tools.4GPL 3.0