使用说明
renderdoc-mcp
⚠️ Disclaimer
$\Large \color{#ff69b4}{\textsf{这是个人事务}$$\Large\color}{#ff66b4}}{\mathtt{✨ vib\text{-}coding ✨}}$ $\大型\彩色{#ff69b4}{\textsf{project--}}$ $\Large\color{#ff69b4}{\textsf{为娱乐而建,不用于生产用途。}}$
$\small\color{gray}{\textsf{我不知道为什么这个回购有这么多星星…}}$
MCP服务器 渲染文档 --让AI助手分析GPU帧捕获(.rdc 文件),用于图形调试和性能分析。
建立在 模型上下文协议,适用于Claude Desktop、Claude Code和任何兼容MCP的客户端。
特性
- 42工具 涵盖完整的RenderDoc分析工作流程
- 10个高级工具 用于一次调用分析(绘制调用状态、帧概述、差异、批量导出、像素区域采样等)
- 3个内置提示 用于指导调试
- 人类可读输出 --混合模式、深度函数、拓扑显示为名称而非数字
- GPU怪癖检测 --自动根据驾驶员姓名识别Adreno/Mali/PowerVR/Apple特有的陷阱
- 无头 -不需要GUI,完全通过RenderDoc的Python回放API运行
- 纯 Python --单身
pip install,无构建步骤 - 支持HttpClient1、HttpClient2、OpenGL、Vulkan、OpenGL ES捕捉
快速开始
1.先决条件
- Python 3.10+
- 渲染文档 已安装(下载)
- 你需要
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安装目录中:
| 平台 | 典型路径 |
|---|---|
| 窗户 | C:\Program Files\RenderDoc\renderdoc.pyd |
| Linux | /usr/lib/renderdoc/librenderdoc.so 或者你在哪里建造的 |
你需要 目录 包含此文件。
4.配置您的MCP客户端
Claude Desktop
编辑 claude_desktop_config.json (设置→ 开发者→ 编辑配置):
{
"mcpServers": {
"renderdoc": {
"command": "python",
"args": ["-m", "renderdoc_mcp"],
"env": {
"RENDERDOC_MODULE_PATH": "C:\\Program Files\\RenderDoc"
}
}
}
}
Claude Code
添加 .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
用法示例
配置后,只需与您的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)
| 工具 | 说明 |
|---|---|
open_capture |
打开a .rdc 文件(自动关闭上一个) |
close_capture |
关闭当前捕获并释放资源 |
get_capture_info |
捕获元数据:API、操作数、分辨率、, known_gpuquirks (Adreno/马里/PowerVR/苹果) |
get_frame_overview |
帧级统计:按类型、纹理/缓冲区内存、渲染目标、分辨率列出的动作计数 |
活动导航(5)
| 工具 | 说明 |
|---|---|
list_actions |
列出绘图调用/操作树——支持 filter (名称子字符串)和 event_type (绘制/清除/复制……) |
get_action |
单个动作的全部细节 |
set_event |
导航到事件(必需的 在管道查询之前) |
search_actions |
按名称模式和/或动作标志搜索 |
find_draws |
按渲染状态搜索绘图调用:混合、最小顶点、纹理/着色器/RT绑定 |
管道检查(4)
| 工具 | 说明 |
|---|---|
get_pipeline_state |
完整状态:拓扑、视口、光栅化器、混合、深度、模板(人类可读菜单) |
get_shader_bindings |
恒定缓冲区、SRV、UAV、着色器阶段的采样器 |
get_vertex_inputs |
顶点属性、顶点/索引缓冲区绑定 |
get_draw_call_state |
一次通话抽奖分析:动作信息、混合公式、深度、模具、光栅化器、带大小的纹理、RT、着色器 |
资源分析(4)
| 工具 | 说明 |
|---|---|
list_textures |
所有纹理(可按格式过滤,最小宽度) |
list_buffers |
所有缓冲区(可按最小大小过滤) |
list_resources |
所有命名资源(可按类型、名称模式过滤) |
get_resource_usage |
哪些事件读取/写入资源 |
数据提取(8)
| 工具 | 说明 |
|---|---|
save_texture |
导出为PNG、JPG、BMP、TGA、HDR、EXR或DDS |
get_buffer_data |
读取缓冲区字节(十六进制转储或float32数组) |
pick_pixel |
坐标处的RGBA值 |
get_texture_stats |
每通道最小/最大/平均值 异常检测 (NaN/Inf/阴性);支持 all_slices 对于立方体贴图 |
read_texture_pixels |
读取具有每像素异常标志的矩形像素区域(最多64×64) |
export_draw_textures |
批量导出 绑定到绘图调用的所有纹理(自动命名,跳过占位符) |
save_render_target |
保存RT快照 在活动中(颜色+可选深度) |
export_mesh |
将网格导出为OBJ 使用VS后数据中的位置、法线、UV |
着色器分析(3)
| 工具 | 说明 |
|---|---|
disassemble_shader |
遮阳板拆卸 自动回退链;支持 search (关键字+上下文)和 line_range |
get_shader_reflection |
输入/输出签名、资源绑定布局 |
get_cbuffer_contents |
实际恒定缓冲变量值;支持 filter 用于变量名称子字符串 |
高级(6)
| 工具 | 说明 |
|---|---|
pixel_history |
所有事件的完整每像素修改历史记录 |
get_post_vs_data |
变换后顶点数据(VS输出/GS输出) |
diff_draw_calls |
比较两次平局 --显示具有人类可读含义的状态差异 |
analyze_render_passes |
自动检测渲染过程边界 通过Clear/RT开关,总结每次通过 |
sample_pixel_region |
均匀网格扫描 RT区域——检测NaN/Inf/阴性/过度暴露热点 |
debug_shader_at_pixel |
每像素着色器调试 --返回变量跟踪或像素值+着色器信息作为回退 |
性能分析(4)
| 工具 | 说明 |
|---|---|
get_pass_timing |
最昂贵的渲染过程——使用GPU计数器(如果可用),退回到三角形计数启发式 |
analyze_overdraw |
每个渲染目标组的透支估计 |
analyze_bandwidth |
每个渲染目标的写/读带宽估计 |
analyze_state_changes |
查找冗余状态更改模式和批处理机会 |
诊断(4)
| 工具 | 说明 |
|---|---|
diagnose_negative_values |
扫描所有浮点RT是否为负/NaN/Inf——找到引入它们的第一个事件,检测TAA累积 |
diagnose_precision_issues |
检查R11G11B10符号位丢失、浅深度缓冲区、SRGB/线性失配 |
diagnose_reflection_mismatch |
将反射过程与主场景绘制进行比较--查找着色器/混合/格式原因 |
diagnose_mobile_risks |
全面检查精度/性能/兼容性/GPU特定风险类别 |
提示
内置提示模板,指导人工智能完成常见工作流程:
| 提示 | 描述 |
|---|---|
debug_draw_call |
深挖单次调用:管道→ 着色器→ cbuffers→ 输出 |
find_rendering_issue |
从问题描述进行系统诊断 |
analyze_performance |
帧范围性能分析:通过时间、透支、带宽、状态变化 |
运作原理
AI Assistant ←—MCP—→ renderdoc-mcp server ←—Python API—→ renderdoc.pyd ←→ GPU replay
服务器使用RenderDoc的无头回放API(renderdoc.pyd)致:
- 打开
.rdc在没有GUI的情况下捕获文件 - 在任何事件中回放帧和查询管道状态
- 提取纹理、缓冲区、着色器数据和像素历史记录
- 返回结构化JSON供AI推理
发展
# 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
许可证
麻省理工学院