ShaderToy MCP服务器使用说明

项目简介

ShaderToy MCP服务器是一个基于Model Context Protocol (MCP) 构建的后端应用,旨在连接大语言模型(LLM)与ShaderToy网站。通过提供工具,使LLM能够查询和检索ShaderToy上的着色器信息,辅助LLM生成更复杂、更具创意的着色器代码。

主要功能点

  • 获取ShaderToy着色器信息: 允许LLM通过提供ShaderToy链接中的ID,获取指定着色器的详细信息,例如代码、作者、描述等。
  • 搜索ShaderToy着色器: 允许LLM根据关键词搜索ShaderToy网站,获取相关的着色器列表。
  • 辅助复杂着色器生成: 通过访问和学习ShaderToy上的现有shader,LLM可以借鉴其实现原理和技巧,生成更高级、更复杂的着色器作品。

安装步骤

  1. 克隆仓库: 首先,使用Git克隆ShaderToy-MCP仓库到本地:
    git clone https://github.com/wilsonchenghy/ShaderToy-MCP.git
    cd ShaderToy-MCP
  2. 安装 'uv' (包管理器): 'uv' 是一个快速的Python包安装和解析器。
    • macOS: 使用 Homebrew 安装 'uv':
      brew install uv
    • Windows: 使用 PowerShell 运行安装脚本:
      powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
      安装完成后,可能需要手动将 'uv' 添加到系统环境变量 'Path' 中,例如:
      set Path=C:\Users\你的用户名\.local\bin;%Path%
      (请将 '你的用户名' 替换为你的实际用户名)
    • 或者参考 uv 官方安装文档 获取更详细的安装指导。

服务器配置

为了让MCP客户端(例如 Claude)连接到 ShaderToy MCP服务器,需要配置客户端的配置文件。以 Claude Desktop 为例,在 'claude_desktop_config.json' 文件中添加如下 'mcpServers' 配置:

{
    "mcpServers": {
        "ShaderToy_MCP": {  // MCP服务器名称,客户端内用于标识
          "command": "uv",  // 启动服务器的命令,这里使用 uv 包管理器
          "args": [        // 命令参数列表
            "run",         // uv run 命令,用于运行 Python 脚本
            "--with",      // 指定运行环境包含的依赖
            "mcp[cli]",    // 声明依赖 mcp 及其命令行工具
            "mcp",         // 实际执行的入口点,这里是 mcp 命令行工具
            "run",         // mcp run 子命令,用于启动 MCP 服务器
            "<项目路径>/ShaderToy-MCP/src/ShaderToy-MCP/server.py" // 服务器脚本路径,请替换为你的实际项目路径
          ],
          "env": {         // 环境变量配置
            "SHADERTOY_APP_KEY": "你的ShaderToy API Key"  // ShaderToy API Key,**请替换为你的实际API Key**,用于访问 ShaderToy API
          }
        }
    }
}

请务必注意:

  • 将 '<项目路径>' 替换为 ShaderToy-MCP 仓库在您本地文件系统中的实际路径。
  • 将 '"你的ShaderToy API Key"' 替换为您在 ShaderToy 申请的 API Key。您需要在 ShaderToy 网站注册并获取API Key才能使用其API服务。
  • 确保 Claude Desktop 能够找到 'uv' 命令。如果 'uv' 没有添加到系统环境变量,您可能需要提供 'uv' 的完整路径。

基本使用方法

配置完成后,在 Claude 等 MCP 客户端中,您可以使用如下指令调用 ShaderToy MCP服务器的功能:

  • 获取Shader信息: 'get_shader_info(shader_id='XsXXDn')' (将 'XsXXDn' 替换为实际的ShaderToy ID)
  • 搜索Shader: 'search_shader(query='ocean')' (将 'ocean' 替换为您想要搜索的关键词,例如 'mountain', 'fire', 'city' 等)

LLM 将会调用 'get_shader_info' 和 'search_shader' 这两个工具,从 ShaderToy 获取着色器信息或搜索结果,并利用这些信息来辅助完成用户提出的着色器生成任务。

示例指令:

'Generate shader code of a ocean, if it is based on someone's work on ShaderToy, credit it, make the code follow the ShaderToy format: void mainImage( out vec4 fragColor, in vec2 fragCoord ) {}'

在这个例子中,LLM 可能会先使用 'search_shader(query='ocean')' 搜索相关的ShaderToy着色器,然后使用 'get_shader_info' 获取搜索结果中一些着色器的详细信息,分析这些信息后,最终生成一个关于海洋主题的着色器代码。

信息

分类

网页与API