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{我不知道这个仓库为什么会有这么多 star...}}$
面向 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(设置 → 开发者 → 编辑配置):
{
"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)
工具 | 描述 |
| 列出绘制调用 / 动作树 —— 支持 |
| 单个动作的完整详情 |
| 导航到某个事件(管线查询必需) |
| 按名称模式和/或动作标志搜索 |
| 按渲染状态搜索绘制调用:混合、最小顶点数、纹理/着色器/渲染目标绑定 |
管线检查(4)
工具 | 描述 |
| 完整状态:拓扑、视口、光栅化器、混合、深度、模板(人类可读的枚举) |
| 某个着色器阶段的常量缓冲、SRV、UAV、采样器 |
| 顶点属性、顶点/索引缓冲绑定 |
| 一次调用完成绘制分析:动作信息、混合公式、深度、模板、光栅化器、带尺寸的纹理、渲染目标、着色器 |
资源分析(4)
工具 | 描述 |
| 所有纹理(可按格式、最小宽度过滤) |
| 所有缓冲(可按最小大小过滤) |
| 所有命名资源(可按类型、名称模式过滤) |
| 哪些事件读取/写入某个资源 |
数据提取(8)
工具 | 描述 |
| 导出为 PNG、JPG、BMP、TGA、HDR、EXR 或 DDS |
| 读取缓冲字节(十六进制转储或 float32 数组) |
| 坐标处的 RGBA 值 |
| 每个通道的最小/最大/平均值,带异常检测(NaN/Inf/负数);支持 cubemap 的 |
| 读取矩形像素区域(最大 64×64),带逐像素异常标志 |
| 批量导出绘制调用绑定的所有纹理(自动命名,跳过占位符) |
| 在事件处保存渲染目标快照(颜色 + 可选深度) |
| 将网格导出为 OBJ,包含来自 VS 后数据的位置、法线、UV |
着色器分析(3)
工具 | 描述 |
| 着色器反汇编,带自动回退链;支持 |
| 输入/输出签名、资源绑定布局 |
| 实际常量缓冲变量值;支持 |
高级(6)
工具 | 描述 |
| 所有事件中完整的逐像素修改历史 |
| 变换后顶点数据(VS 输出 / GS 输出) |
| 比较两个绘制调用 —— 显示状态差异及人类可读的影响 |
| 通过 Clear/RT 切换自动检测渲染通道边界,汇总每个通道 |
| 对渲染目标区域进行均匀网格扫描 —— 检测 NaN/Inf/负数/过曝热点 |
| 逐像素着色器调试 —— 返回变量跟踪或像素值 + 着色器信息作为回退 |
性能分析(4)
工具 | 描述 |
| 最耗时的渲染通道 —— 如果有 GPU 计数器则使用,否则回退到三角形数量启发式 |
| 每个渲染目标组的过绘制估算 |
| 每个渲染目标的写/读带宽估算 |
| 发现冗余状态更改模式和批处理机会 |
诊断(4)
工具 | 描述 |
| 扫描所有浮点渲染目标中的负数/NaN/Inf —— 找到引入它们的第一个事件,检测 TAA 累积 |
| 检查 R11G11B10 符号位丢失、浅深度缓冲、sRGB/线性不匹配 |
| 将反射通道与主场景绘制进行比较 —— 找到着色器/混合/格式原因 |
| 跨精度 / 性能 / 兼容性 / GPU 特定风险类别的全面检查 |
提示词
内置提示模板,引导 AI 完成常见工作流:
提示词 | 描述 |
| 深入分析单个绘制调用:管线 → 着色器 → 常量缓冲 → 输出 |
| 从问题描述出发进行系统化诊断 |
| 全帧性能分析:通道耗时、过绘制、带宽、状态变化 |
工作原理
AI Assistant ←—MCP—→ renderdoc-mcp server ←—Python API—→ renderdoc.pyd ←→ GPU replay服务器使用 RenderDoc 的无头回放 API(renderdoc.pyd)来:
无需 GUI 即可打开
.rdc捕获文件回放帧并查询任何事件处的管线状态
提取纹理、缓冲、着色器数据和像素历史
返回结构化 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许可证
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