ShaderToy MCP服务器使用说明
项目简介
ShaderToy MCP服务器是一个基于Model Context Protocol (MCP) 构建的后端应用,旨在连接大语言模型(LLM)与ShaderToy网站。通过提供工具,使LLM能够查询和检索ShaderToy上的着色器信息,辅助LLM生成更复杂、更具创意的着色器代码。
主要功能点
- 获取ShaderToy着色器信息: 允许LLM通过提供ShaderToy链接中的ID,获取指定着色器的详细信息,例如代码、作者、描述等。
- 搜索ShaderToy着色器: 允许LLM根据关键词搜索ShaderToy网站,获取相关的着色器列表。
- 辅助复杂着色器生成: 通过访问和学习ShaderToy上的现有shader,LLM可以借鉴其实现原理和技巧,生成更高级、更复杂的着色器作品。
安装步骤
- 克隆仓库: 首先,使用Git克隆ShaderToy-MCP仓库到本地:
git clone https://github.com/wilsonchenghy/ShaderToy-MCP.git cd ShaderToy-MCP - 安装 'uv' (包管理器): 'uv' 是一个快速的Python包安装和解析器。
- macOS: 使用 Homebrew 安装 'uv':
brew install uv - Windows: 使用 PowerShell 运行安装脚本:
安装完成后,可能需要手动将 'uv' 添加到系统环境变量 'Path' 中,例如:powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
(请将 '你的用户名' 替换为你的实际用户名)set Path=C:\Users\你的用户名\.local\bin;%Path% - 或者参考 uv 官方安装文档 获取更详细的安装指导。
- macOS: 使用 Homebrew 安装 '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