Skip to main content
Glama
Claude-Reverser

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에 대해 안정성을 보강했습니다.

영역

변경 사항

데이터 안전성

부분 데이터베이스 정리는 소유권을 인식합니다. 다른 활성 인스턴스가 소유한 .id0/.id1/.id2/.nam/.til 파일은 절대 삭제하지 않으며, 소유권을 확인할 수 없으면 안전하게 실패합니다.

저장 신뢰성

idb_save는 600초 예산으로 실행됩니다(기존 60초). idb_close는 저장 실패 후 변경 사항을 조용히 버리는 대신 워커 종료를 거부합니다.

동시성

supervisor 잠금이 더 이상 워커 생성(~120초), health 프로브(세션당 ~2.5초), 이전 워커 종료까지 걸리지 않습니다. 하나의 느린 오픈이 모든 세션을 얼려버리지 못합니다.

견고성

stdio로 잘못된 형태의 JSON-RPC가 전달되면 프록시가 크래시하는 대신 -32700/-32600을 반환합니다.

시간 초과

프록시 시간 초과를 30초 → 900초로 높이고 IDA_MCP_PROXY_TIMEOUT로 구성 가능하게 하여, 긴 디컴파일이 서버 쪽에서 실행 중인데도 클라이 개체 쪽에서 증간에 "실패"하지 않게 했습니다.

네트워킹

워커 포트 TOCTAU는 이제 재시도합니다. SSE 쓰기와 정리(teardown)는 잠금으로 보호되고, CORS 정책 읽기는 IDA 메인 스레드 밖에서 캐시됩니다.

리소스 제한

IDB에 저장되는 트레이스 로그를 IDA_MCP_TRACE_MAX_MB 기준 64MB로 제한하고, 과도하게 긴 인자/결과는 잘라냅니다. 플러시 실패 큐에도 상한이 있습니다.

인증

모든 HTTP 요청에 인스턴트 API 키가 필요합니다. GET /key로 정확히 한 번 발급된 후 폐기되며, 키는 디스크에 남아 재시작과 재부팅 이후에도 유지됩니다.

호스팅 엔드포인트

GET /health(인증되지 않은 준비 상태 프로브), GET /sessions(열린 데이터베이스 + 마지막 액세스 시각), POST /upload(크기 상한 있는 직접 바이너리 업로드)

유휴 세션 정리

IDA_MCP_IDLE_TIMEOUT분 동안 접근되지 않은 세션은 자동으로 종료됩니다(먼저 저장).

정상 종료

SIGTERM/SIGINT 수신 시 모든 열린 데이터베이스가 종료 전에 저장됩니다. 이제 pct stop이 발생해도 작업을 잃지 않습니다.

자동 업데이트

시작 시 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는 지원하지 않습니다.

  • uv

  • 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>

키는 절대로 로그에 남지 않습니다.

호스팅 엔드포인트

엔드포인트

인증

목적

GET /health

없음

준비 상태 프로브: {"status":"ok","uptime":N,"sessions":N} — 대기하는 대신 이 프로브를 폴링하세요

GET /sessions

열린 데이터베이스와 마지막 액세스 시각을 반환합니다

POST /upload?filename=NAME

요청 본문의 바이너리를 스트리밍해 IDA_MCP_UPLOAD_DIR로 저장하고 idb_open에 전달할 경로를 반환합니다

# 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 instead

MCP 클라이언트 연결

일반적인 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을 클라이언트에 붙여넣습니다.

구성 (환경 변수)

변수

기본값

의미

IDA_MCP_OPEN_TIMEOUT

1800

오픈 + 자동 분석 과정에서 재리핑되기 전 허용 최대 시간(초) (0 = 무제한)

IDA_MCP_WORKER_CALL_TIMEOUT

900

전달된 도구 호출 하나에 허용되는 최대 시간(초)

IDA_MCP_PROXY_TIMEOUT

900

GUI 프록시 → IDA 업스트림 시간 제한 (0 = 무제한)

IDA_MCP_TRACE_MAX_MB

64

IDB 안에 저장되는 트레이스 로그 상한

IDA_MCP_MAX_WORKERS

4

기본 --max-workers

IDA_MCP_HEALTH_TCP_TIMEOUT / IDA_MCP_HEALTH_RPC_TIMEOUT

2.0 / 10.0

Health 프로브 시간 예산

IDA_MCP_IDLE_TIMEOUT

60

액세스하지 않은 세전이 자동 종료되기까지의 시간(분) (0 = 비활성화)

IDA_MCP_MAX_UPLOAD_MB

100

POST /upload 본문 크기 상한

IDA_MCP_UPLOAD_DIR

~/.idapro/mcp/uploads

업로드가 저장되는 위치

IDA_MCP_API_KEY / IDA_MCP_API_KEY_FILE

– / ~/.idapro/mcp/api_key

인스턴스 키 주입 또는 키 파일 위치 변경

IDA_MCP_SHUTDOWN_SAVE_TIMEOUT / IDA_MCP_SHUTDOWN_SAVE_BUDGET

30 / 120

SIGTERM 시 데이터베이스당 / 전체 저장 예산

IDA_MCP_NO_UPDATE_CHECK

unset

1로 설정하면 GitHub 릴리스 확인을 비활성화합니다

보안 참고 사항: 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 라이선스가 필요합니다.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    A headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.
    12
  • A
    license
    Not graded
    quality
    D
    maintenance
    Headless MCP server for IDA Pro enabling on-demand database loading and programmatic reverse engineering workflows via MCP tools.
    18
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server that enables AI agents to control IDA Pro instances via Unix-socket supervisor, providing tools for decompilation, disassembly, and Python scripting.
    3

View all related MCP servers

Related MCP Connectors

  • MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.

  • MCP server for ScanMalware.com URL scanning, malware detection, and analysis.

  • MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Claude-Reverser/IDA-instances-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server