项目简介

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硬件特性,服务器会检查设备是否满足要求。

安装步骤

  1. 安装Rust开发环境: 访问 https://rustup.rs/ 按照指引安装 rustup。
  2. 安装Vulkan SDK: 确保您的系统安装了包含 'glslc' 可执行文件的Vulkan SDK。具体安装步骤请参考 https://vulkan.lunarg.com/sdk/home
  3. 安装VkRunner: 'vkrunner' 工具是服务器的重要依赖。您可以从其源代码编译安装,或者寻找预编译的二进制文件。本项目包含VkRunner作为子模块,您可以通过 'git submodule update --init --recursive' 初始化并更新。随后可能需要根据VkRunner的文档进行构建和安装,以确保 'vkrunner' 可执行文件在系统PATH中或可通过绝对路径访问。
  4. 获取项目代码: 通过Git克隆本仓库: 'git clone https://github.com/mehmetoguzderin/shaderc-vkrunner-mcp.git'
  5. 构建服务器: 进入项目根目录,运行构建命令: 'cargo build --release'
  6. 构建成功后,可执行文件位于 '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' (标准输入/输出)。

基本使用方法

  1. 确保已按照上述步骤成功安装和配置服务器及其依赖('glslc' 和 'vkrunner')。
  2. 配置您的LLM客户端,使其能够通过MCP协议连接到此服务器,使用上面提供的command/args等信息。
  3. 在LLM客户端中,您可以通过调用名为 'compile_run_shaders' 的工具来发起着色器编译和运行任务。
  4. 调用 'compile_run_shaders' 工具时,需要向其传递一个JSON对象作为输入参数,该对象详细描述了要执行的任务,包括:
    • 'requests': 着色器编译请求列表(指定GLSL源代码、目标着色器阶段以及编译后SPIR-V汇编文件的临时保存路径)。
    • 'requirements': 可选的硬件功能要求列表。
    • 'passes': 着色器管线配置,引用 'requests' 中生成的SPIR-V文件。
    • 'vertex_data': 可选的顶点数据,用于图形渲染测试。
    • 'tests': 测试命令列表,如绘制调用、计算调度、内存探测(验证结果)等。
    • 'output_path': 可选的输出图像保存路径(通常用于渲染测试)。
  5. 服务器将执行编译和VkRunner测试,并将结果(成功/失败、日志输出、错误信息)返回给客户端。

信息

分类

开发者工具