项目简介
Shaderc VkRunner MCP服务器是一个基于Rust 'rmcp'库实现的Model Context Protocol (MCP) 服务器。它将外部的 'glslc' 着色器编译器和 'vkrunner' Vulkan测试工具封装为MCP工具,通过标准的JSON-RPC协议提供给LLM客户端调用,实现着色器的自动化编译和运行任务。它专注于提供工具执行能力(Tool),不包含资源(Resource)和Prompt模板(Prompt)的管理。
主要功能点
- GLSL到SPIR-V编译: 接收GLSL着色器源代码,调用 'glslc' 将其编译为SPIR-V汇编 (.spvasm) 格式。
- VkRunner测试执行: 根据客户端提供的配置(引用编译后的着色器文件、硬件要求、管线配置、顶点数据、测试指令等),生成 'vkrunner' 可识别的 '.shader_test' 测试脚本。
- 模拟Vulkan管线: 调用 'vkrunner' 执行生成的测试脚本,模拟Vulkan渲染或计算管线。
- 任务结果反馈: 捕获 'glslc' 和 'vkrunner' 的标准输出、标准错误,并返回详细的测试结果、错误信息和生成的测试脚本内容。
- 输出图像保存: 支持将VkRunner的渲染结果保存为PNG图像文件。
- 多着色器阶段支持: 支持顶点、片段、计算、几何、曲面细分控制、曲面细分评估等多种着色器阶段的编译和测试。
- 硬件能力声明与检查: 可在测试配置中指定所需的Vulkan硬件特性,服务器会检查设备是否满足要求。
安装步骤
- 安装Rust开发环境: 访问 https://rustup.rs/ 按照指引安装 rustup。
- 安装Vulkan SDK: 确保您的系统安装了包含 'glslc' 可执行文件的Vulkan SDK。具体安装步骤请参考 https://vulkan.lunarg.com/sdk/home。
- 安装VkRunner: 'vkrunner' 工具是服务器的重要依赖。您可以从其源代码编译安装,或者寻找预编译的二进制文件。本项目包含VkRunner作为子模块,您可以通过 'git submodule update --init --recursive' 初始化并更新。随后可能需要根据VkRunner的文档进行构建和安装,以确保 'vkrunner' 可执行文件在系统PATH中或可通过绝对路径访问。
- 获取项目代码: 通过Git克隆本仓库: 'git clone https://github.com/mehmetoguzderin/shaderc-vkrunner-mcp.git'
- 构建服务器: 进入项目根目录,运行构建命令: 'cargo build --release'
- 构建成功后,可执行文件位于 'target/release/shaderc-vkrunner-mcp'。
服务器配置 (供MCP客户端使用)
LLM客户端需要配置服务器的启动信息(通常在如 'tool-cache.json' 这样的配置文件中)来建立MCP连接。以下是示例配置中 'server' 部分的JSON结构,用户需要将 'command' 的值替换为实际 'shaderc-vkrunner-mcp' 可执行文件的路径:
{ // ... 其他客户端配置项 ... "server": { "name": "shaderc-vkrunner", // 服务器名称 "command": "path/to/shaderc-vkrunner-mcp", // 服务器可执行文件的绝对或相对路径 "args": [ // "--work-dir", "/tmp" // 可选参数:指定服务器创建临时文件(.spvasm, .shader_test, .ppm)的目录 ], "transport": "stdio" // 服务器与客户端通信的传输协议,目前代码只实现了stdio } }
- 'name': 服务器的标识名称,供客户端识别。
- 'command': 启动MCP服务器进程的可执行文件路径。
- 'args': 启动服务器进程时传递的命令行参数列表。'--work-dir' 参数可以指定服务器用于存放临时文件(如编译后的SPIR-V汇编文件、生成的VkRunner测试脚本和输出图像)的工作目录。
- 'transport': 服务器和客户端之间建立连接使用的传输协议。根据当前代码实现,仅支持 'stdio' (标准输入/输出)。
基本使用方法
- 确保已按照上述步骤成功安装和配置服务器及其依赖('glslc' 和 'vkrunner')。
- 配置您的LLM客户端,使其能够通过MCP协议连接到此服务器,使用上面提供的command/args等信息。
- 在LLM客户端中,您可以通过调用名为 'compile_run_shaders' 的工具来发起着色器编译和运行任务。
- 调用 'compile_run_shaders' 工具时,需要向其传递一个JSON对象作为输入参数,该对象详细描述了要执行的任务,包括:
- 'requests': 着色器编译请求列表(指定GLSL源代码、目标着色器阶段以及编译后SPIR-V汇编文件的临时保存路径)。
- 'requirements': 可选的硬件功能要求列表。
- 'passes': 着色器管线配置,引用 'requests' 中生成的SPIR-V文件。
- 'vertex_data': 可选的顶点数据,用于图形渲染测试。
- 'tests': 测试命令列表,如绘制调用、计算调度、内存探测(验证结果)等。
- 'output_path': 可选的输出图像保存路径(通常用于渲染测试)。
- 服务器将执行编译和VkRunner测试,并将结果(成功/失败、日志输出、错误信息)返回给客户端。
信息
分类
开发者工具