renderdoc-mcp
renderdoc-mcp
$\Large\color{#ff69b4}{\textsf{이것은 개인 }}$ $\Large\color{#ff69b4}{\mathtt{✨ vibe\text{-}coding ✨}}$ $\Large\color{#ff69b4}{\textsf{프로젝트입니다 —}}$ $\Large\color{#ff69b4}{\textsf{재미로 만든 것이지, 프로덕션용이 아닙니다.}}$
$\small\color{gray}{\textsf{왜 이 저장소에 별이 이렇게 많은지 저도 모르겠습니다...}}$
RenderDoc용 MCP 서버 — AI 어시스턴트가 GPU 프레임 캡처(.rdc 파일)를 분석하여 그래픽 디버깅 및 성능 분석을 수행할 수 있게 해줍니다.
Model Context Protocol 기반으로 구축되었으며, Claude Desktop, Claude Code 및 모든 MCP 호환 클라이언트에서 작동합니다.
기능
42개 도구 — RenderDoc 분석 워크플로우 전체를 포괄
10개 고수준 도구 — 원콜 분석(드로우 콜 상태, 프레임 개요, 비교, 일괄 내보내기, 픽셀 영역 샘플링 등)
3개 내장 프롬프트 — 가이드 디버깅용
사람이 읽을 수 있는 출력 — 블렌드 모드, 깊이 함수, 토폴로지를 숫자가 아닌 이름으로 표시
GPU 특이사항 감지 — 드라이버 이름에서 Adreno/Mali/PowerVR/Apple 특유의 함정 자동 식별
헤드리스 — GUI 불필요, RenderDoc의 Python 리플레이 API로만 동작
순수 Python —
pip install한 번이면 끝, 빌드 단계 없음D3D11, D3D12, OpenGL, Vulkan, OpenGL ES 캡처 지원
빠른 시작
1. 사전 요구사항
Python 3.10+
RenderDoc 설치 (다운로드)
renderdoc.pyd(Windows) 또는renderdoc.so(Linux) Python 모듈 필요모든 RenderDoc 설치본에 포함되어 있습니다
2. 설치
git clone https://github.com/Linkingooo/renderdoc-mcp.git
cd renderdoc-mcp
pip install -e .3. renderdoc.pyd 경로 찾기
Python 모듈은 RenderDoc 설치 디렉터리에 있습니다:
플랫폼 | 일반적인 경로 |
Windows |
|
Linux |
|
이 파일이 들어 있는 디렉터리가 필요합니다.
4. MCP 클라이언트 구성
claude_desktop_config.json 편집 (Settings → Developer → Edit Config):
{
"mcpServers": {
"renderdoc": {
"command": "python",
"args": ["-m", "renderdoc_mcp"],
"env": {
"RENDERDOC_MODULE_PATH": "C:\\Program Files\\RenderDoc"
}
}
}
}.claude/settings.json에 추가:
{
"mcpServers": {
"renderdoc": {
"command": "python",
"args": ["-m", "renderdoc_mcp"],
"env": {
"RENDERDOC_MODULE_PATH": "C:\\Program Files\\RenderDoc"
}
}
}
}# Set the module path
export RENDERDOC_MODULE_PATH="/path/to/renderdoc" # Linux/macOS
set RENDERDOC_MODULE_PATH=C:\Program Files\RenderDoc # Windows
# Run
python -m renderdoc_mcp사용 예시
구성이 끝나면 AI 어시스턴트에게 말만 하면 됩니다:
"
frame.rdc를 열고 프레임에서 무슨 일이 일어나고 있는지 보여줘"
"캐릭터 모델을 렌더링하는 드로우 콜을 찾아서 파이프라인 상태를 확인해줘"
"내 섀도우 맵이 왜 검게 렌더링되지? 깊이 패스를 확인해줘"
"성능을 분석해줘 — 중복 드로우 콜이 있나?"
일반적인 도구 흐름
open_capture("frame.rdc") # Load the capture
├── get_capture_info() # API, GPU, known_gpu_quirks
├── get_frame_overview() # Frame-level stats and render passes
├── get_draw_call_state(142) # Complete draw call state in one call
├── diff_draw_calls(140, 142) # Compare two draw calls (with implications)
├── export_draw_textures(142, "./tex/") # Batch export all bound textures
├── save_render_target(142, "./rt.png") # Save render target snapshot
├── analyze_render_passes() # Auto-detect render pass boundaries
├── find_draws(blend=True, min_vertices=1000) # Search by rendering state
├── sample_pixel_region(rt_id, 0,0,512,512) # Scan RT region for NaN/Inf/negatives
├── pixel_history(id, 512, 384) # Debug a specific pixel
├── export_mesh(142, "./mesh.obj") # Export mesh as OBJ
└── close_capture() # Clean up성능 및 진단 분석용:
get_pass_timing(granularity="pass") # Find most expensive render passes
analyze_overdraw() # Fill-rate pressure estimate
analyze_bandwidth() # Memory bandwidth estimate
analyze_state_changes() # Batching opportunities
diagnose_negative_values() # Find NaN/Inf/negative color values (爆闪)
diagnose_precision_issues() # R11G11B10, D16, SRGB mismatches
diagnose_reflection_mismatch() # Reflection artifact diagnosis
diagnose_mobile_risks() # Comprehensive mobile GPU risk check더 낮은 수준의 검사가 필요하면, 모든 세부 도구를 계속 사용할 수 있습니다:
set_event(142) # Navigate to a draw call
├── get_pipeline_state() # Inspect rasterizer/blend/depth
├── get_shader_bindings("pixel") # Check what textures/buffers are bound
├── get_cbuffer_contents("pixel", 0, filter="ibl") # Read shader constants (filterable)
├── disassemble_shader("pixel", search="SampleSH") # Shader code with context search
└── save_texture(id, "rt.png") # Export a specific texture도구
세션 관리 (4)
도구 | 설명 |
|
|
| 현재 캡처 닫고 리소스 해제 |
| 캡처 메타데이터: API, 액션 수, 해상도, known_gpu_quirks (Adreno/Mali/PowerVR/Apple) |
| 프레임 수준 통계: 유형별 액션 수, 텍스처/버퍼 메모리, 렌더 타겟, 해상도 |
이벤트 탐색 (5)
도구 | 설명 |
| 드로우 콜 / 액션 트리 나열 — |
| 단일 액션의 전체 상세 정보 |
| 이벤트로 이동 (파이프라인 조회 전 필수) |
| 이름 패턴 및/또는 액션 플래그로 검색 |
| 렌더링 상태로 드로우 콜 검색: 블렌드, 최소 정점 수, 텍스처/셰이더/RT 바인딩 |
파이프라인 검사 (4)
도구 | 설명 |
| 전체 상태: 토폴로지, 뷰포트, 래스터라이저, 블렌드, 깊이, 스텐실 (사람이 읽을 수 있는 열거형) |
| 셰이더 스테이지의 상수 버퍼, SRV, UAV, 샘플러 |
| 정점 속성, 정점/인덱스 버퍼 바인딩 |
| 원콜 드로우 분석: 액션 정보, 블렌드 공식, 깊이, 스텐실, 래스터라이저, 크기 포함 텍스처, RT, 셰이더 |
리소스 분석 (4)
도구 | 설명 |
| 모든 텍스처 (포맷, 최소 너비로 필터 가능) |
| 모든 버퍼 (최소 크기로 필터 가능) |
| 모든 명명된 리소스 (유형, 이름 패턴으로 필터 가능) |
| 리소스를 읽거나 쓰는 이벤트 |
데이터 추출 (8)
도구 | 설명 |
| PNG, JPG, BMP, TGA, HDR, EXR 또는 DDS로 내보내기 |
| 버퍼 바이트 읽기 (hex 덤프 또는 float32 배열) |
| 좌표의 RGBA 값 |
| 채널별 min/max/avg 및 이상치 감지 (NaN/Inf/음수); 큐브맵용 |
| 픽셀의 사각 영역 읽기 (최대 64×64) — 픽셀별 이상치 플래그 포함 |
| 일괄 내보내기 — 드로우 콜에 바인딩된 모든 텍스처 (자동 이름 지정, 플레이스홀더 건너뜀) |
| 이벤트 시점의 RT 스냅샷 저장 (컬러 + 선택적 깊이) |
| 메시를 OBJ로 내보내기 — VS 이후 데이터의 위치, 법선, UV 포함 |
셰이더 분석 (3)
도구 | 설명 |
| 셰이더 디스어셈블리 — 자동 폴백 체인 포함; |
| 입출력 시그니처, 리소스 바인딩 레이아웃 |
| 실제 상수 버퍼 변수 값; |
고급 (6)
도구 | 설명 |
| 모든 이벤트에 걸친 전체 픽셀 수정 이력 |
| 변환 후 정점 데이터 (VS 출력 / GS 출력) |
| 두 드로우 콜 비교 — 사람이 읽을 수 있는 의미와 함께 상태 차이 표시 |
| Clear/RT 전환으로 렌더 패스 경계 자동 감지, 각 패스 요약 |
| RT 영역의 균일 그리드 스캔 — NaN/Inf/음수/과노출 핫스팟 감지 |
| 픽셀별 셰이더 디버그 — 변수 추적 또는 픽셀 값 + 셰이더 정보를 폴백으로 반환 |
성능 분석 (4)
도구 | 설명 |
| 가장 비용이 큰 렌더 패스 — GPU 카운터 사용 가능 시 사용, 그 외에는 삼각형 수 휴리스틱으로 폴백 |
| 렌더 타겟 그룹별 오버드로우 추정 |
| 렌더 타겟별 쓰기/읽기 대역폭 추정 |
| 중복 상태 변경 패턴 및 배칭 기회 탐지 |
진단 (4)
도구 | 설명 |
| 모든 float RT에서 음수/NaN/Inf 스캔 — 이를 처음 유발한 이벤트 탐지, TAA 누적 감지 |
| R11G11B10 부호 비트 손실, 얕은 깊이 버퍼, SRGB/선형 불일치 확인 |
| 리플렉션 패스를 메인 씬 드로우와 비교 — 셰이더/블렌드/포맷 원인 탐지 |
| 정밀도 / 성능 / 호환성 / GPU별 위험 범주에 걸친 종합 검사 |
프롬프트
일반적인 워크플로우에서 AI를 안내하는 내장 프롬프트 템플릿:
프롬프트 | 설명 |
| 단일 드로우 콜 심층 분석: 파이프라인 → 셰이더 → cbuffer → 출력 |
| 문제 설명에서 체계적 진단 수행 |
| 프레임 전체 성능 분석: 패스 타이밍, 오버드로우, 대역폭, 상태 변경 |
작동 방식
AI Assistant ←—MCP—→ renderdoc-mcp server ←—Python API—→ renderdoc.pyd ←→ GPU replay서버는 RenderDoc의 헤드리스 리플레이 API(renderdoc.pyd)를 사용하여:
GUI 없이
.rdc캡처 파일 열기프레임 리플레이 및 임의 이벤트에서 파이프라인 상태 조회
텍스처, 버퍼, 셰이더 데이터, 픽셀 히스토리 추출
AI가 추론할 수 있도록 구조화된 JSON 반환
개발
# Install in dev mode
pip install -e .
# Run tests (no RenderDoc needed — uses mocks)
python -m pytest tests/ -v
# Project structure
src/renderdoc_mcp/
├── server.py # FastMCP server, 3 prompt definitions
├── session.py # Capture lifecycle, resource/texture caches (singleton)
├── util.py # Serialization, enum maps, blend formula, module loader
└── tools/
├── session_tools.py # open/close/info (GPU quirks) + get_frame_overview
├── event_tools.py # list/get/set/search actions + find_draws
├── pipeline_tools.py # pipeline state, shader bindings, vertex inputs + get_draw_call_state
├── resource_tools.py # texture/buffer/resource enumeration
├── data_tools.py # save/read/pick/stats + read_texture_pixels + export_draw_textures, save_render_target, export_mesh
├── shader_tools.py # disassembly (fallback chain, search), reflection, cbuffer contents (filter)
├── advanced_tools.py # pixel history, post-VS data + diff_draw_calls (implications), analyze_render_passes, sample_pixel_region, debug_shader_at_pixel
├── performance_tools.py # get_pass_timing, analyze_overdraw, analyze_bandwidth, analyze_state_changes
└── diagnostic_tools.py # diagnose_negative_values, diagnose_precision_issues, diagnose_reflection_mismatch, diagnose_mobile_risks라이선스
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
MCP server for Wan AI video generation
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/fjxyyzg3/renderdoc-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server