GPA MCP服务器
用于Intel GPA(图形性能分析器)帧分析的MCP服务器。使Claude能够分析GPU捕获,提取纹理/着色器/几何体,并通过MCP协议收集性能指标。
特性
- 20个MCP工具 用于完整的GPU帧逆向工程
- DXBC着色器拆卸 --DX11捕获的D3D Shader反汇编程序输出的自动提取
- 三种后端模式:模拟(开发),框架(
.gpa_frame),遗产(GPA.Stream) - 批量导出 --从整个帧中重复导出所有独特的着色器、纹理和几何体
- GPU指标 --每次抽取调用时间和管道统计
快速开始
先决条件
- Python 3.10+
- 已安装英特尔GPA框架2025.1(
C:\Program Files\IntelSWTools\GPA\) - MCP-SDK:
pip install mcp pydantic pillow numpy
Claude代码配置
添加到MCP设置(.claude/settings.json 或项目设置):
{
"mcpServers": {
"gpa_mcp": {
"command": "python",
"args": ["-m", "gpa_mcp.server"],
"cwd": "F:/GPA",
"env": {
"GPA_INSTALL_DIR": "C:/Program Files/IntelSWTools/GPA",
"GPA_OUTPUT_DIR": "F:/GPA/gpa_exports"
}
}
}
}Claude桌面配置
添加 claude_desktop_config.json:
{
"mcpServers": {
"gpa_mcp": {
"command": "python",
"args": ["-m", "gpa_mcp.server"],
"cwd": "F:/GPA",
"env": {
"GPA_INSTALL_DIR": "C:/Program Files/IntelSWTools/GPA",
"GPA_OUTPUT_DIR": "F:/GPA/gpa_exports"
}
}
}
}模拟模式(无需GPA)
对于未安装GPA的开发/测试:
{
"env": {
"GPA_MOCK_MODE": "1"
}
}建筑
.gpa_frame --> FrameAnalyzer.exe + gpa_export_all plugin --> JSON cache (8 files)
|
MCP Tool --> gpa_loader.open_stream(path) --> FrameData --> read JSON根据输入路径自动检测三种模式:
| 模式 | 条件 | 后端 |
|---|---|---|
| Mock | GPA_MOCK_MODE=1 | 虚假数据促进发展 |
| 帧 | 路径以结尾 .gpa_frame | FrameAnalyzer JSON导出 |
| 传统 | GPA SDK可用+流目录 | 原生 GPA.Stream |
工具
流管理(Stream_tools.py)
| 工具 | 说明 |
|---|---|
gpa_open_stream | 打开流/帧,验证,返回基本信息 |
gpa_stream_info | 获取流元数据、文件列表、API类型 |
gpa_list_ranges | 列出带分页和过滤的绘图调用范围 |
绘图调用分析(drawcall_tools.py)
| 工具 | 说明 |
|---|---|
gpa_get_drawcall_detail | 获取范围的API调用序列和参数 |
gpa_get_pipeline_state | 获取完整的管道状态(着色器、混合、光栅化器等) |
gpa_search_api_calls | 在整个流中搜索特定的API调用 |
资源导出(Resource_tools.py)
| 工具 | 说明 |
|---|---|
gpa_list_bound_resources | 列出绑定到绘图调用的所有GPU资源 |
gpa_export_texture | 将单个纹理导出到PNG/DDS |
gpa_batch_export_textures | 导出所有纹理以进行绘图调用 |
gpa_export_geometry | 将几何图形导出为OBJ/CSV |
gpa_export_geometry_fbx | 将带有UV的几何体导出为FBX/OBJ |
着色器提取(Shader_tools.py)
| 工具 | 说明 |
|---|---|
gpa_get_shader_info | 获取着色器元数据:哈希、模型、源可用性 |
gpa_export_shader | 导出着色器源代码/反汇编/字节码 |
gpa_batch_export_shaders | 批量导出所有唯一着色器(重复数据消除) |
GPU度量(Metrics_tools.py)
| 工具 | 说明 |
|---|---|
gpa_list_metrics | 列出可用的GPU性能指标 |
gpa_collect_metrics | 收集特定抽签的指标 |
gpa_export_metrics_report | 导出GPU计时报告(前N个昂贵调用) |
导出和实用程序(Export_tools.py)
| 工具 | 说明 |
|---|---|
gpa_full_export | 一键导出所有资源以进行抽签 |
gpa_cli_wrapper | 运行官方GPA CLI工具(FrameAnalyzer等) |
gpa_list_exports | 列出按类型分组的所有导出文件 |
遮阳板拆卸
对于DX11捕获,HLSL源代码通常不可用(捕获时需要调试信息)。服务器会自动回退到DXBC反汇编:
源优先级:
- HLSL源代码(如果在捕获过程中启用了调试信息)
- DXBC反汇编(DX11默认--从
prog.get_description()[stage]["dxbc"]) - DXIL拆卸(DX12捕获)
- ISA反汇编(仅限英特尔GPU)
当 output_type="source" 返回DXBC反汇编而不是HLSL,文件扩展名自动设置为 .asm (不是 .hlsl).
DXBC拆卸输出示例:
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position 0 xyzw 0 POS float
// SV_IsFrontFace 0 x 1 FFACE uint x
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer CB0[159], immediateIndexed
dcl_input_ps_sgv constant v1.x, is_front_face
dcl_output o0.xyzw
and r0.x, cb1[0].x, l(64)
movc r0.x, r0.x, l(-1.000000), l(1.000000)
mul r0.x, r0.x, cb0[158].w
discard_nz r0.x
mov o0.xyzw, l(0,0,0,0)
ret工作流示例
# Analyze a VALORANT DX11 frame capture
1. gpa_stream_info(stream_path="path/to/VALORANT.gpa_frame")
-> First open triggers FrameAnalyzer export (~30s)
-> 12,791 ranges, 886 draw call events
2. gpa_list_ranges(start=665, count=10)
-> Browse draw calls, find target DrawIndexed
3. gpa_get_shader_info(range_index=669)
-> vertex: hash=319abd7168826503, has_source=True, lang=DXBC
-> pixel: hash=950c23be14e49ee1, has_source=True, lang=DXBC
4. gpa_export_shader(range_index=669, stage="pixel", output_type="source")
-> Export DXBC disassembly to ps_950c23be14e49ee1.asm
5. gpa_batch_export_shaders(output_type="disasm", deduplicate=True)
-> Export 199 unique shaders (62 VS + 137 PS), skipped 1540 duplicates
6. gpa_collect_metrics(range_index=669, metric_names=["GpuTime"])
-> GpuTime: 21.00 us项目结构
gpa_mcp/
├── server.py # Entry point, registers all 20 tools
├── requirements.txt # Dependencies: mcp, pydantic, pillow, numpy
├── tools/
│ ├── stream_tools.py # Module 1: Stream management (3 tools)
│ ├── drawcall_tools.py # Module 2: Draw call analysis (3 tools)
│ ├── resource_tools.py # Module 3: Resource export (5 tools)
│ ├── shader_tools.py # Module 4: Shader extraction (3 tools)
│ ├── metrics_tools.py # Module 5: GPU metrics (3 tools)
│ └── export_tools.py # Module 6: Export utilities (3 tools)
├── utils/
│ ├── gpa_loader.py # Three-mode loader (Mock/Frame/Legacy)
│ ├── frame_loader.py # Frame mode: FrameData reads JSON cache
│ └── formatting.py # Unified JSON response formatting
└── fa_plugins/ # FrameAnalyzer Python plugins
├── gpa_export_all/ # Full frame export (8 JSON files)
├── gpa_export_texture/ # On-demand texture pixel export
└── gpa_export_buffer/ # On-demand buffer data export环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
GPA_INSTALL_DIR | C:\Program Files\IntelSWTools\GPA | GPA安装根 |
GPA_TOOLS_DIR | 与上述相同 | GPA CLI工具路径 |
GPA_OUTPUT_DIR | ./gpa_exports | 所有导出的根目录 |
GPA_MOCK_MODE | 0 | 设置为 1 模拟模式(无需GPA) |
GPA_FRAME_ANALYZER | /FrameAnalyzer.exe | FrameAnalyzer可执行文件 |
GPA_PLUGINS_DIR | gpa_mcp/fa_plugins/ | FrameAnalyzer插件目录 |
GPA_FRAME_CACHE_DIR | /frame_cache/ | JSON缓存根目录 |
已知限制
- DX11捕获没有HLSL源 --而是使用DXBC拆卸(自动回退,
.asm扩展) - ISA反汇编需要Intel GPU --非英特尔GPU收到“参与驱动程序”错误
- 纹理/几何体导出需要FrameAnalyzer --按需FA插件调用缓慢(每次调用约30秒启动)
- 帧头元数据为空 -FrameAnalyzer插件API不公开帧头信息(GPU名称、分辨率等)
- GPA 2025.1是最终版本 --英特尔宣布将于2026年停产
