Analyze GPU frame captures for graphics debugging and performance analysis.
renderdoc-mcp
⚠️ Disclaimer
$\Large\color{#ff69b4}{\textsf{This is a personal }}$ $\Large\color{#ff69b4}{\mathtt{✨ vibe\text{-}coding ✨}}$ $\Large\color{#ff69b4}{\textsf{project —}}$ $\Large\color{#ff69b4}{\textsf{built for fun, not for production use.}}$
$\small\color{gray}{\textsf{I have no idea why this repo has so many stars...}}$
MCP server for RenderDoc — let AI assistants analyze GPU frame captures (.rdc files) for graphics debugging and performance analysis.
Built on the Model Context Protocol, works with Claude Desktop, Claude Code, and any MCP-compatible client.
Features
- 42 tools covering the full RenderDoc analysis workflow
- 10 high-level tools for one-call analysis (draw call state, frame overview, diff, batch export, pixel region sampling, etc.)
- 3 built-in prompts for guided debugging
- Human-readable output — blend modes, depth functions, topology shown as names not numbers
- GPU quirk detection — auto-identifies Adreno/Mali/PowerVR/Apple-specific pitfalls from driver name
- Headless — no GUI needed, runs entirely via RenderDoc's Python replay API
- Pure Python — single
pip install, no build step - Supports D3D11, D3D12, OpenGL, Vulkan, OpenGL ES captures
Quick Start
1. Prerequisites
- Python 3.10+
- RenderDoc installed (download)
- You need the
renderdoc.pyd(Windows) orrenderdoc.so(Linux) Python module - It ships with every RenderDoc installation
- You need the
2. Install
git clone https://github.com/Linkingooo/renderdoc-mcp.git
cd renderdoc-mcp
pip install -e .
3. Find your `renderdoc.pyd` path
The Python module is in your RenderDoc install directory:
| Platform | Typical path |
|---|---|
| Windows | C:\Program Files\RenderDoc\renderdoc.pyd |
| Linux | /usr/lib/renderdoc/librenderdoc.so or where you built it |
You need the directory containing this file.
4. Configure your MCP client
Claude Desktop
Edit 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 Code
Add to .claude/settings.json:
{
"mcpServers": {
"renderdoc": {
"command": "python",
"args": ["-m", "renderdoc_mcp"],
"env": {
"RENDERDOC_MODULE_PATH": "C:\\Program Files\\RenderDoc"
}
}
}
}
Run standalone
# 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
Usage Examples
Once configured, just talk to your AI assistant:
"Open
frame.rdcand show me what's happening in the frame"
"Find the draw call that renders the character model and check its pipeline state"
"Why is my shadow map rendering black? Check the depth pass"
"Analyze performance — are there any redundant draw calls?"
Typical Tool Flow
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
For performance and diagnostic analysis:
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
Tools (20)
open_captureLoad a RenderDoc capture file.get_capture_infoRetrieve API, GPU, and known GPU quirks.get_frame_overviewGet frame-level statistics and render passes.get_draw_call_stateGet complete state for a specific draw call.diff_draw_callsCompare two draw calls.export_draw_texturesBatch export all bound textures for a draw call.save_render_targetSave a render target snapshot.analyze_render_passesAuto-detect render pass boundaries.find_drawsSearch for draw calls by rendering state.sample_pixel_regionScan a render target region for NaN, Inf, or negative values.pixel_historyDebug a specific pixel's history.export_meshExport a mesh as an OBJ file.get_pass_timingFind most expensive render passes.analyze_overdrawEstimate fill-rate pressure.analyze_bandwidthEstimate memory bandwidth usage.analyze_state_changesIdentify batching opportunities.diagnose_negative_valuesFind NaN, Inf, or negative color values.diagnose_precision_issuesCheck for format mismatches like R11G11B10 or SRGB.diagnose_reflection_mismatchDiagnose reflection artifacts.close_captureClose the current capture.Environment Variables
RENDERDOC_MODULE_PATHrequiredThe directory path containing the RenderDoc Python module (renderdoc.pyd or librenderdoc.so).Configuration
{"mcpServers": {"renderdoc": {"command": "python", "args": ["-m", "renderdoc_mcp"], "env": {"RENDERDOC_MODULE_PATH": "C:\\Program Files\\RenderDoc"}}}}