DumpAnalysisMCP는 Windows 크래시 덤프(minidump/full dump)를 분석하는 MCP(Model Context Protocol) 서버입니다.
MCP 클라이언트가 stdio 기반으로 덤프 분석, 스레드 조회, 소스 문맥 조회, 안전한 패치/빌드/테스트를 호출할 수 있도록 설계되었습니다.
- 목적: AI Agent가 Windows dump를 구조화된 데이터로 읽고 원인 분석 속도를 높이도록 지원
- 대상: user-mode C++/Unreal Engine 덤프 분석
- 핵심 강점:
- 예외/스택/모듈/심볼 품질 구조화
- 멀티스레드 분석(
threads,crashing_thread,faulting_thread_confidence) source_path_map기반 소스 경로 remap- 정책 기반 안전 실행(
apply_patch,build_project,run_tests)
- dump 세션 등록 및
dump_id발급 analyze_dump정규화 결과 제공- 스레드 목록/스레드별 스택 조회
- 예외/모듈/경고 리소스 조회
- 소스 문맥 조회 및 코드 참조 검색
- 확인 플래그 기반의 안전한 파일 변경/빌드/테스트 실행
- OS: Windows 10/11
- Python: 3.11 이상
- 디버거: WinDbg 또는 Debugging Tools for Windows (
cdb.exe) - 입력 경로:
dump_path: 존재하는 dump 파일(절대 경로)symbol_root: 존재하는 디렉터리(절대 경로)source_root: 존재하는 디렉터리(절대 경로)
project_type:native_cpp또는unreal_engine
환경 변수(선택):
| 변수명 | 기본값 | 설명 |
|---|---|---|
DUMP_MCP_CDB_PATH |
cdb.exe |
cdb.exe 경로. 환경 차이를 줄이려면 절대 경로 권장 |
DUMP_MCP_LOG_LEVEL |
WARNING |
로그 레벨 |
DUMP_MCP_ANALYZE_TIMEOUT_SECONDS |
180 |
dump 분석 타임아웃 |
DUMP_MCP_BUILD_TIMEOUT_SECONDS |
1200 |
빌드 타임아웃 |
DUMP_MCP_TEST_TIMEOUT_SECONDS |
1800 |
테스트 타임아웃 |
DUMP_MCP_MAX_OUTPUT_CHARS |
200000 |
stdout/stderr 최대 보존 길이 |
DUMP_MCP_BUILD_ALLOWLIST |
msbuild,dotnet,cmake,ninja,UnrealBuildTool,RunUAT |
빌드 허용 실행 파일 |
DUMP_MCP_TEST_ALLOWLIST |
ctest,dotnet,pytest,UnrealEditor-Cmd,RunUAT |
테스트 허용 실행 파일 |
기본 설치:
python -m pip install -e .개발 설치(테스트 포함):
python -m pip install -e .[dev]cdb.exe경로 설정(예시)
$env:DUMP_MCP_CDB_PATH="C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2601.12001.0_x64__8wekyb3d8bbwe\amd64\cdb.exe"
$env:DUMP_MCP_LOG_LEVEL="INFO"- MCP 클라이언트 설정(
.vscode/mcp.json등)
servers 형식:
{
"servers": {
"dump-analysis": {
"command": "python",
"args": ["-m", "windows_dump_analysis_mcp"],
"env": {
"DUMP_MCP_CDB_PATH": "<REPLACE_WITH_CDB_ABSOLUTE_PATH>",
"DUMP_MCP_LOG_LEVEL": "INFO"
}
}
}
}mcpServers 형식:
{
"mcpServers": {
"dump-analysis": {
"command": "python",
"args": ["-m", "windows_dump_analysis_mcp"],
"env": {
"DUMP_MCP_CDB_PATH": "<REPLACE_WITH_CDB_ABSOLUTE_PATH>",
"DUMP_MCP_LOG_LEVEL": "INFO"
}
}
}
}기본 분석 흐름:
register_dumpanalyze_dump- 필요 시
get_thread_list,get_thread_stack_trace,get_source_context
register_dump 예시 payload:
{
"dump_path": "C:\\path\\to\\sample.dmp",
"symbol_root": "C:\\path\\to\\symbols",
"source_root": "C:\\path\\to\\source",
"project_type": "native_cpp",
"binary_root": "C:\\path\\to\\bin",
"source_path_map": {
"c:\\original\\source\\root": "C:\\path\\to\\source"
}
}| Tool | 설명 | 주요 인자 |
|---|---|---|
register_dump |
분석 세션 등록 후 dump_id 반환 |
dump_path, symbol_root, source_root, project_type, binary_root?, dump_type_hint?, log_paths?, source_path_map? |
analyze_dump |
dump 분석 실행 및 정규화 결과 반환 | dump_id |
get_exception_info |
예외 요약 조회 | dump_id |
get_stack_trace |
선택 스레드 스택 조회(기본: crashing thread) | dump_id, max_frames?, thread_id? |
get_thread_list |
스레드 목록/충돌 메타데이터 조회 | dump_id |
get_thread_stack_trace |
특정 스레드 스택 조회 | dump_id, thread_id, max_frames? |
get_module_list |
모듈 목록/심볼 품질 조회 | dump_id |
get_source_context |
선택 프레임/스레드 소스 문맥 조회 | dump_id, frame_index?, context_before?, context_after?, thread_id? |
search_code_references |
코드 참조 검색 | query, dump_id?, source_root?, max_results?, ignore_case? |
apply_patch |
파일 변경 preview/apply | changes, dump_id?, source_root?, mode?, user_confirmed? |
build_project |
가드된 빌드 실행 | command, dump_id?, working_directory?, timeout_seconds?, user_confirmed=true |
run_tests |
가드된 테스트 실행 | command, dump_id?, working_directory?, timeout_seconds?, user_confirmed=true |
project://symbols/statusproject://source/rootcrash://{dump_id}/summarycrash://{dump_id}/exceptioncrash://{dump_id}/stackcrash://{dump_id}/threadscrash://{dump_id}/modulescrash://{dump_id}/warningscrash://{dump_id}/source/main-frame
build_project,run_tests:user_confirmed=true필수apply_patch:- 기본은
preview mode=apply는user_confirmed=true필수
- 기본은
- 빌드/테스트 명령은 allowlist 실행 파일만 허용
- 쉘 체이닝(
&&,|,;) 차단
examples/cpp-crash-sample-1examples/cpp-crash-sample-2examples/cpp-crash-sample-3
테스트 실행:
python -m pytest -qConfigured cdb_path must be an absolute path:DUMP_MCP_CDB_PATH를 절대 경로로 설정하세요.
source_root does not exist또는 source mapping 오류:source_root절대 경로와source_path_map매핑을 확인하세요.
- 심볼 품질이 낮거나
WRONG_SYMBOLS경고가 보이는 경우:symbol_root에 올바른 PDB가 있는지 확인하세요.