MCP server for RenderDoc graphics debugger - enables AI-assisted frame capture analysis
RenderDoc MCP has 20 well-intentioned tools with comprehensive descriptions and reasonable parameter schemas. However, the server exhibits significant gaps in output schema documentation, error handling guidance, and several tools lack explicit input schema visibility in the provided source. Descriptions are generally strong (100-300 chars, aligned with baseline of 194), and most parameters are typed and annotated. The main weaknesses are: (1) output schemas are not formally documented for any tool, LLMs cannot predict response structure; (2) error responses shown in source code return generic JSON errors without actionable recovery hints; (3) some tools have optional parameters but lack clarity on fallback behavior; (4) no tool exhibits retry guidance or confirmation patterns for destructive operations (save_texture is WRITE but has no confirmation). The naming convention is strong (verb_noun pattern consistently applied), and parameter descriptions are detailed with ranges and constraints. Overall, this is a well-intentioned, technically complete tool suite that falls short of production quality due to missing output documentation and weak error handling.
Estimate frame bandwidth consumption across memory hierarchies. Analyzes: - Texture sampling bandwidth (per draw call, per pass) - Render target read-modify-write - Unordered access buffer traffic - Texture cache efficiency (reuse, hit rate heuristics) - Mip level selection (lod bias, aniso cost) Provides per-draw breakdown and per-resource ranking.
Analyze overdraw across the frame or within a specific render pass. Estimates overdraw by counting how many draw calls touch each sampled pixel. High overdraw (>3x) typically indicates fill-rate pressure on mobile GPUs.
Identify expensive state changes and suggest batching opportunities. Detects: - Frequent pipeline state changes - Resource descriptor table rebinds - Render target transitions - Viewport / scissor thrashing - Blend state / raster state changes Groups by state type and ranks by frequency. Suggests draw reordering to minimize context switches.
Debug the shader at a specific pixel using RenderDoc's shader debugger. Executes the shader for the given pixel and returns intermediate variable values at each step. Useful for tracing negative values, IBL computation errors, TAA artifacts, and other precision issues. Note: Shader debugging may not be supported for all API/GPU combinations. If unsupported, falls back to reporting pixel value and bound shader info.
Output schemas are not documented. LLMs cannot predict response structure, tools return ad-hoc JSON with fields like 'hotspots', 'statistics', 'diagnosis_hint' that are not formally declared. Agents must infer the schema by trial-and-error or read source code.
Error handling does not guide recovery. Source code shows errors returned as {"error": "message", "code": "ERROR_TYPE"} without actionable hints. Example: 'Resource not found' should suggest 'Try list_actions() to see available resources' or 'Use search_actions() to find texture IDs'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Scan the frame for rendering patterns that are risky on mobile GPUs. Detects: - High overdraw - Redundant state changes - Inefficient texture compression - Missing mip levels - Tile deferred rendering pitfalls - MSAA overhead Provides per-issue fix suggestions.
Scan all float render targets for negative/NaN/Inf pixels and trace their origin. Automatically identifies which draw calls first introduce negative values, checks if TAA/temporal buffers are amplifying them, and provides root cause candidates with fix suggestions.
Analyze floating-point precision issues in the frame. Scans render targets for common precision problems: denormalized values, accumulation errors in temporal passes, shader quantization, and IBL computation artifacts. Returns diagnosis with root causes and fixes.
Check shader reflection vs. actual resource bindings for inconsistencies. Detects: - Resources listed in reflection but not bound (dead code or binding bug) - Resources bound but not in reflection (unused or stale bindings) - Mismatched semantics (e.g. UAV bound where SRV expected) - Missing descriptor table entries
Search draw calls by rendering state filters. Iterates through draw calls checking pipeline state. This can be slow for large captures as it must set_event for each draw call.
Get detailed information about a specific action/draw call.
Read raw data from a buffer resource.
Get per-render-pass or per-draw-call GPU timing estimates. Note: True GPU timing requires counter support in the capture. When counters are unavailable, this tool falls back to heuristic estimates based on draw call complexity (vertex count × texture count).
Get min/max/average statistics for a texture at the current event.
List the draw call / action tree of the current capture.
Get the RGBA value of a specific pixel in a texture.
Read actual pixel values from a rectangular region of a texture. Returns float RGBA values for each pixel. Region is capped at 64x64. Useful for precisely checking IBL cubemap faces, LUT textures, history buffers, etc.
Batch-sample pixels from a render target and auto-detect anomalies. Scans for NaN / Inf / negative values and extreme-bright pixels. Best tool for locating anomalous color values and IBL / HDR issues.
Save a texture resource to an image file.
Search for actions by name pattern and/or flags.
Navigate the replay to a specific event ID. This must be called before inspecting pipeline state, shader bindings, etc. Subsequent queries will reflect the state at this event.
save_texture is a WRITE operation but has no confirmation or dry-run pattern. Agents can overwrite files without warning. Description is also minimal (3 sentences) compared to other tools.
diagnose_mobile_risks has an empty input schema (no parameters). The description 'Scan the frame for rendering patterns...' implies no configuration, but audit should clarify: is it always operating on the current event? Can it filter by pass or region? Empty schemas can confuse LLMs about when/how to invoke the tool.
Resource ID resolution is opaque. Tools accept 'resource_id' (string, typically hex-like '0x12AB'), but users think in terms of render target names ('HDR_COLOR', 'NORMAL_BUFFER'). Tools should accept human-readable names alongside IDs and document fallback behavior.
Parameters with numeric ranges lack explicit bounds in schema. Example: 'sample_count' has default=256, max=1024 mentioned in description but not in schema constraints. JSON Schema should declare minimum, maximum, and exclusiveMinimum/Maximum. LLMs rely on schema, not description text.
No pagination support declared. Tools like list_actions could return unbounded results. Schema should include 'limit' and 'offset' or 'cursor' parameters, and response should include 'total_count' or 'has_more'. Current max_results defaults (e.g., find_draws default=50) are ad-hoc, not enforced.
Implicit event state management. Tools call 'set_event(event_id)' to navigate, but this modifies server state. Subsequent calls inherit the set event. This is not documented as thread-unsafe or session-scoped. LLMs may assume calls are stateless and get wrong results in concurrent scenarios.