servers / robloxstudio-mcp
robloxstudio-mcp
communitystdiolocaldestructive capablehealthy
Create agentic AI workflows in ROBLOX Studio
01Tools · 69
How to read this: tool names here are observed from a live tools/list handshake. The Risk label is a heuristic inferred from the tool name (write/destructive verbs), not from executing the tool — a conservative guess, not a verified capability. We never escalate risk from a description. Found one that's wrong? Tell us — we fix on report.
| Tool | Risk | Side effects | Approval |
|---|---|---|---|
| start_playtest Start playtest. Captures print/warn/error via LogService. Poll with get_playtest_output, end with stop_playtest. Use numPlayers for multi-client testing (server + N clients). | unknown | unknown | unknown |
| compare_instances Diff two instances by comparing their properties. Useful for debugging why a duplicate behaves differently. | unknown | unknown | unknown |
| remove_tag Remove a tag | destructive | true | true |
| undo Undo the last change in Roblox Studio. Uses ChangeHistoryService to reverse the most recent operation. | unknown | unknown | unknown |
| search_materials Search for MaterialVariant instances in MaterialService by name. Use this to find custom materials before using them in generate_build or create_build palettes. Returns material names and their base material types. | read | false | unknown |
| mass_create_objects Create multiple instances. Each can have optional properties. | write | true | unknown |
| delete_object Delete an instance | destructive | true | true |
| get_attribute Get an attribute value | read | false | unknown |
| stop_playtest Stop playtest and return all captured output. | unknown | unknown | unknown |
| import_build Import a build into Roblox Studio. Accepts either a full build data object OR a library ID string (e.g. "medieval/church_01") to load from the build library. When using generate_build or create_build, pass the build ID string instead of the full data. | unknown | unknown | unknown |
| get_output_log Get the Studio output log history. Works in both edit and play mode. | read | false | unknown |
| get_script_analysis Run syntax analysis on Luau scripts using loadstring. Detects compile errors with line numbers. Pass a script path to analyze one script, or a container path to analyze all scripts under it. | read | false | unknown |
| get_attributes Get all attributes on an instance | read | false | unknown |
| get_services Get available services and their children | read | false | unknown |
| clone_object Clone an instance to a new parent location. Creates a deep copy of the instance and all its descendants. | unknown | unknown | unknown |
| get_tagged Get all instances with a specific tag | read | false | unknown |
| search_files Search instances by name, class, or script content | read | false | unknown |
| redo Redo the last undone change in Roblox Studio. Uses ChangeHistoryService to reapply the most recently undone operation. | unknown | unknown | unknown |
| capture_screenshot Capture a screenshot of the Roblox Studio viewport and return it as a PNG image. Requires EditableImage API to be enabled: Game Settings > Security > "Allow Mesh / Image APIs". Only works in Edit mode with the viewport visible. | unknown | unknown | unknown |
| get_project_structure Get full game hierarchy tree. Increase maxDepth (default 3) for deeper traversal. | read | false | unknown |
| mass_duplicate Batch smart_duplicate operations | unknown | unknown | unknown |
| create_build Create a new build model from scratch and save it to the library. Define parts using compact arrays [posX, posY, posZ, sizeX, sizeY, sizeZ, rotX, rotY, rotZ, paletteKey, shape?, transparency?]. Palette maps short keys to [BrickColor, Material] pairs. The build is saved and can be referenced by import_build or import_scene. | write | true | unknown |
| character_navigation Move the player character to a target position or instance during playtest. Uses PathfindingService for automatic navigation around obstacles, falling back to direct movement. Requires an active playtest in "play" mode. Does NOT simulate player input — moves the character directly. | unknown | unknown | unknown |
| execute_luau Execute Luau code in plugin context. Use print()/warn() for output. Return value is captured. | write | true | unknown |
| get_connected_instances List all connected plugin instances with their roles. Use during multi-client playtest to discover server and client instances for targeted commands. | read | false | unknown |
| get_selection Get all currently selected objects | read | false | unknown |
| delete_attribute Delete an attribute | destructive | true | true |
| get_tags Get all tags on an instance | read | false | unknown |
| list_library List available builds in the local build library. Returns build IDs, styles, bounds, and part counts. Optionally filter by style. | read | false | unknown |
| get_asset_details Get detailed marketplace metadata for a specific asset. Uses ROBLOX_OPEN_CLOUD_API_KEY or falls back to ROBLOSECURITY cookie (own assets only). | read | false | unknown |
| set_property Set a property on an instance | write | true | unknown |
| create_object Create a new instance. Optionally set properties on creation. | write | true | unknown |
| search_assets Search the Creator Store (Roblox marketplace) for assets by type and keywords. Requires ROBLOX_OPEN_CLOUD_API_KEY env var (no cookie auth for this endpoint). | read | false | unknown |
| smart_duplicate Duplicate with naming, positioning, and property variations | unknown | unknown | unknown |
| add_tag Add a tag | write | true | unknown |
| export_build Export a Model/Folder into a compact, token-efficient build JSON format and auto-save it to the local build library. The output contains a palette (unique BrickColor+Material combos mapped to short keys) and compact part arrays with positions normalized relative to the bounding box center. The file is saved to build-library/{style}/{id}.json automatically. | unknown | unknown | unknown |
| import_scene Import a full scene layout. Provide a scene with model references (resolved from library) and placement data. Each model is placed at the specified position/rotation. Can also include inline custom builds. | unknown | unknown | unknown |
| find_and_replace_in_scripts Find and replace text across all scripts in the game. Supports literal and Lua pattern matching. Use dryRun to preview changes before applying. Pairs with grep_scripts for search-only operations. | read | false | unknown |
| mass_get_property Get a property from multiple instances | read | false | unknown |
| set_attribute Set an attribute. Supports primitives, Vector3, Color3, UDim2, BrickColor. | write | true | unknown |
| get_class_info Get properties/methods for a class | read | false | unknown |
| get_build Get a build from the library by ID. Returns metadata, palette, and generator code (if the build was created with generate_build). IMPORTANT: When the user asks to modify an existing build, ALWAYS call get_build first to retrieve the original code, then make targeted edits to only the relevant lines, and call generate_build with the modified code. Never rewrite the entire code from scratch — only change what the user asked to change. | read | false | unknown |
| get_file_tree Get instance hierarchy tree from Studio | read | false | unknown |
| mass_set_property Set a property on multiple instances | write | true | unknown |
| bulk_set_attributes Set multiple attributes on an instance in a single call. More efficient than repeated set_attribute calls. | write | true | unknown |
| generate_build Procedurally generate a build via JS code. ALWAYS generate the entire scene in ONE call — never split into multiple small builds. PREFER high-level primitives over manual loops. No comments. No unnecessary variables. Maximize build detail per line.
EDITING: When modifying an existing build, call get_build first to retrieve the original code. Then make ONLY the targeted changes the user requested — do not rewrite unchanged code. Pass the modified code to generate_build.
HIGH-LEVEL (use these first — each replaces 5-20 lines):
room(x,y,z, w,h,d, wallKey, floorKey?, ceilKey?, wallThickness?) - Complete enclosed room (floor+ceiling+4 walls)
roof(x,y,z, w,d, style, key, overhang?) - style: "flat"|"gable"|"hip"
stairs(x1,y1,z1, x2,y2,z2, width, key) - Auto-generates steps between two points
column(x,y,z, height, radius, key, capKey?) - Cylinder with base+capital
pew(x,y,z, w,d, seatKey, legKey?) - Bench with seat+backrest+legs
arch(x,y,z, w,h, thickness, key, segments?) - Curved archway
fence(x1,z1, x2,z2, y, key, postSpacing?) - Fence with posts+rails
BASIC:
part(x,y,z, sx,sy,sz, key, shape?, transparency?)
rpart(x,y,z, sx,sy,sz, rx,ry,rz, key, shape?, transparency?)
wall(x1,z1, x2,z2, height, thickness, key) — vertical plane from (x1,z1) to (x2,z2)
floor(x1,z1, x2,z2, y, thickness, key) — horizontal plane at height y, corners (x1,z1)-(x2,z2). NOT fill — only takes 2D corners+y, not 3D points
fill(x1,y1,z1, x2,y2,z2, key, [ux,uy,uz]?) — 3D volume between two 3D points
beam(x1,y1,z1, x2,y2,z2, thickness, key)
IMPORTANT: Palette keys must match exactly. Use only keys defined in your palette object, not color names.
CUSTOM MATERIALS: Use search_materials to find MaterialVariant names, then reference them as the 3rd palette element: {"a": ["Color", "BaseMaterial", "VariantName"]}.
REPETITION:
row(x,y,z, count, spacingX, spacingZ, fn(i,cx,cy,cz))
grid(x,y,z, countX, countZ, spacingX, spacingZ, fn(ix,iz,cx,cy,cz))
Shapes: Block(default), Wedge, Cylinder, Ball, CornerWedge. Max 10000 parts. Math and rng() available.
CYLINDER AXIS: Roblox cylinders extend along the X axis. For upright cylinders, use size (height, diameter, diameter) with rz=90. The column() primitive handles this automatically.
EXAMPLE — compact cabin (17 lines):
room(0,0,0,8,4,6,"a","b","a")
roof(0,4,0,8,6,"gable","c")
wall(-4,0,-2,4,0,-2,4,1,"a")
part(0,2,3,3,3,0.3,"a","Block",0.4)
row(-2,0,-1,3,0,2,(i,cx,cy,cz)=>{pew(cx,0,cz,3,2,"d")})
column(-3,0,-2,4,0.5,"a","b")
column(3,0,-2,4,0.5,"a","b")
part(0,2,0,2,1,1,"b") | read | false | unknown |
| search_objects Find instances by name, class, or properties | read | false | unknown |
| grep_scripts Ripgrep-inspired search across all script sources. Supports literal and Lua pattern matching, context lines, early termination, and results grouped by script with line/column numbers. | read | false | unknown |
| get_descendants Get all descendants of an instance recursively with depth info. More efficient than repeated get_instance_children calls. | read | false | unknown |
| insert_script_lines Insert lines after a given line number (0 = beginning). | write | true | unknown |
| edit_script_lines Replace exact text in a script. old_string must match exactly once in the script (whitespace-sensitive). Use get_script_source first to see current content. | write | true | unknown |
| search_by_property Find objects with specific property values | read | false | unknown |
| get_playtest_output Poll output buffer without stopping. Returns isRunning and captured messages. | read | false | unknown |
| rename_object Rename an instance. | write | true | unknown |
| get_asset_thumbnail Get the thumbnail image for an asset as base64 PNG, suitable for vision LLMs. Thumbnails API is public but asset validation uses ROBLOX_OPEN_CLOUD_API_KEY. | read | false | unknown |
| set_script_source Replace entire script source. For partial edits use edit/insert/delete_script_lines. | write | true | unknown |
| preview_asset Preview a Roblox asset without permanently inserting it. Loads the asset, builds a hierarchy tree with properties and summary stats, then destroys it. Useful for inspecting asset contents before insertion. | unknown | unknown | unknown |
| get_place_info Get place ID, name, and game settings | read | false | unknown |
| get_instance_children Get children and their class types | read | false | unknown |
| simulate_keyboard_input Simulate keyboard input via VirtualInputManager. Use during playtest for character movement (W/A/S/D), jumping (Space), interactions (E), or any key-driven action. For sustained movement, use "press" to hold and "release" to let go. | unknown | unknown | unknown |
| simulate_mouse_input Simulate mouse input in the Roblox Studio viewport via VirtualInputManager. Use during playtest to click UI buttons, interact with objects, or navigate menus. Coordinates are viewport pixels (top-left is 0,0). Use capture_screenshot to identify UI element positions before clicking. | unknown | unknown | unknown |
| delete_script_lines Delete a range of lines. 1-indexed, inclusive. | destructive | true | true |
| set_properties Set multiple properties on a single instance in one call. | write | true | unknown |
| get_instance_properties Get all properties of an instance | read | false | unknown |
| create_ui_tree Create an entire instance hierarchy from a nested JSON tree in one call. | write | true | unknown |
| get_script_source Get script source. Returns "source" and "numberedSource" (line-numbered). Use startLine/endLine for large scripts. | read | false | unknown |
| upload_decal Upload an image file as a Decal asset to Roblox. Supports ROBLOSECURITY cookie auth (recommended, simpler) or ROBLOX_OPEN_CLOUD_API_KEY (needs asset:write scope + creator ID). Cookie auth is used automatically when ROBLOSECURITY is set. | write | true | unknown |
| move_object Move (reparent) an instance to a new parent location. Preserves all children and properties. | write | true | unknown |
| insert_asset Insert a Roblox asset into Studio by loading it via AssetService and parenting it to a target location. Optionally set position. | write | true | unknown |
02Install & source
npx -y robloxstudio-mcp@latest
npxnpx -y robloxstudio-mcp-inspector@latest
npx- repohttps://github.com/boshyxd/robloxstudio-mcp
- licenseMIT
- adoption485 stars · 90 forks
03Access granted
Browser automation · writeMaps & location · writeMonitoring & logs · write
The access this server can exercise, inferred from its verified tools — not a declared OAuth scope.
05Provenance & freshness
sourcesGitHub repo search [p4]
last_checked2026-08-16 19:12Z
next_check2026-08-16 22:10Z
cadenceevery 3h
verifiedtools_list:passed handshake:passed metadata:passed tools_list:passed handshake:passed metadata:passed tools_list:passed handshake:passed metadata:passed metadata:passed
index_statusindex — 9 unique facts >= 5
06Badge
Add the “as seen on MCPExplorer” badge to your README.
[](https://mcpexplorer.com/servers/robloxstudio-mcp)
Next step
This is one server. A loadout combines the right servers, governance, and proven plays for a whole job — assembled deliberately, not tool-dumped.
Explore loadouts →