roblox-vfx-lab
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| VFX_LAB_PORT | No | The port of the local lab page (127.0.0.1 only). Default: `4518`. A lab that already runs on that port is used as it is. | 4518 |
| VFX_LAB_LIBRARY | No | The library folder: `shaders/` for nodes, `bakes/` for PNGs and recipes. Default: `~/roblox-vfx-lab`. | ~/roblox-vfx-lab |
| ROBLOX_STUDIO_MCP | No | The command that starts Roblox's Studio MCP. Use double quotes around a path with spaces. Default on Windows: `cmd.exe /c %LOCALAPPDATA%\Roblox\mcp.bat`; default on macOS: `/Applications/RobloxStudio.app/Contents/MacOS/StudioMCP`. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| vfx_guideA | How to write, render, bake, upload, apply and preview VFX lab nodes (WGSL baked into Roblox textures). Without section: the index and the overview. Sections: overview, node, helpers, examples, quality, roblox. Read overview and node first. |
| vfx_shader_listA | Every node in the VFX library ($VFX_LAB_LIBRARY, default ~/roblox-vfx-lab/shaders): its hash, state (clean, or problems at line:column) and parameters with type, range and default. Compiles each on the GPU. |
| vfx_shader_readA | A node's source, its hash (what vfx_shader_write's replaces names), its state and problems, and its parameters. |
| vfx_shader_writeA | Creates a node, or replaces one whole. Replacing needs replaces: the hash from vfx_shader_read or your last write or edit; if the file changed since, nothing is written and the current hash comes back. Answers the new hash and the verdict (state, problems with line:column in your source, parameters). Read vfx_guide node first. |
| vfx_shader_editA | Changes a node by exact text replacements, applied in order to the latest version, all or nothing. Each old must occur exactly once, or at least once with all: true. Answers the new hash and the verdict; the source is not echoed back. |
| vfx_renderA | Renders a node on the GPU and shows it as one image, cells in reading order with grey lines between them. Default: the clip as a flipbook would play it (frames cells across phase 0..1). phases: chosen moments instead. sweep: { param, from?, to?, count?, phase? } renders one f32 parameter across a range (default its own range) at one phase. Answers per-cell stats (coverage, peak, edge alpha, full-white share, change) and, for a clip, the quality warnings. backdrop: dark (default, how it reads in game), light, checker, or alpha (the shape as grey). The file is not changed. |
| vfx_bakeA | Renders a node into its final PNG: grid 1 (a still) or a 2x2, 4x4 or 8x8 flipbook sheet at size 256, 512 or 1024, or a still sharper than Roblox's 1024 cap as tiles x tiles PNGs of size px (bakes/--), to lay out in one gui, supersampled, straight alpha with the colour spread into transparent pixels (no dark halos). Writes bakes/.png and bakes/.json (the recipe: node, hash, values, grid, mode, duration, stats, warnings, uploads). Answers the paths, the flipbook settings, the warnings and a preview over the dark backdrop. Upload it with vfx_upload. |
| vfx_uploadA | Uploads a baked PNG through Roblox's own Studio MCP (upload_image, under the Studio user's account) and records the asset id in the recipe. Uploads are public, moderated and permanent: only on an explicit request, after the look is settled. The same PNG is never uploaded twice: the recorded id comes back unless force is true. |
| vfx_applyA | Puts an uploaded bake (or any texture id) on instances in Studio, with the flipbook settings a sheet needs (FlipbookLayout, FlipbookMode, FlipbookFramerate for a loop) on a ParticleEmitter; Texture on a Beam, Trail or Decal, TextureID on a MeshPart. targets: existing instances; create: { parent, name?, className? } makes a new one (default ParticleEmitter). properties: more values set in the same call (same format as set_properties). |
| vfx_previewA | Plays the ParticleEmitters at or under targets in the Edit viewport and freezes them (TimeScale 0) at each moment in at (seconds after the emit), then captures the screen: one image per moment. Burst emitters (Enabled false) emit EmitCount (attribute, default 1, or emit) after EmitDelay; Enabled emitters run from empty. The camera frames the emitters unless camera_position and look_at_position are given. TimeScales are restored after. |
| vfx_deleteA | Deletes a node (shaders/.wgsl) or a bake (bakes/.png and its recipe) from the library for good. Only on the developer's request: there is no undo. A bake stays when its node is deleted, and an uploaded asset stays on Roblox. |
| vfx_viewerA | Starts the local lab page (once per machine) and answers its URL, for the artist to open in a WebGPU browser (Chrome, Edge, Safari 26, Firefox 141 on Windows). It renders every node live with WebGPU (play, scrub, parameter sliders, flipbook sheet view, alpha view), has a WGSL editor, plays baked sheets as Roblox plays them, and has Export to Roblox (upload, then apply to the Studio selection). It follows the library live: a node or bake that changes updates the open page. With Auto bake on, the page re-bakes bakes/.png after each change the artist makes. Port: $VFX_LAB_PORT, default 4518. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
The tools mostly target distinct stages of the VFX pipeline: node CRUD, GPU render, final bake, upload, Studio apply, Studio capture, and local viewer. The closest overlaps are vfx_render vs vfx_bake and vfx_preview vs vfx_viewer, but the descriptions make the boundaries clear.
All tool names use lower snake_case with a consistent vfx_ prefix, which makes the set readable. There are minor deviations: the shader CRUD tools use a shader_ infix while vfx_delete is generic, and vfx_viewer/vfx_guide are noun-like rather than verb-like.
Twelve tools is well within the ideal range and each one maps to a distinct step in the workflow. Nothing appears redundant or padded.
The surface covers the full node lifecycle (list/read/write/edit/delete) plus rendering, baking, uploading, applying, previewing, viewing, and guidance. A minor gap is the lack of explicit bake listing/reading tools, though bakes can be inspected through the viewer or filesystem.