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.

ToolRiskSide effectsApproval
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).
unknownunknownunknown
compare_instances
Diff two instances by comparing their properties. Useful for debugging why a duplicate behaves differently.
unknownunknownunknown
remove_tag
Remove a tag
destructivetruetrue
undo
Undo the last change in Roblox Studio. Uses ChangeHistoryService to reverse the most recent operation.
unknownunknownunknown
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.
readfalseunknown
mass_create_objects
Create multiple instances. Each can have optional properties.
writetrueunknown
delete_object
Delete an instance
destructivetruetrue
get_attribute
Get an attribute value
readfalseunknown
stop_playtest
Stop playtest and return all captured output.
unknownunknownunknown
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.
unknownunknownunknown
get_output_log
Get the Studio output log history. Works in both edit and play mode.
readfalseunknown
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.
readfalseunknown
get_attributes
Get all attributes on an instance
readfalseunknown
get_services
Get available services and their children
readfalseunknown
clone_object
Clone an instance to a new parent location. Creates a deep copy of the instance and all its descendants.
unknownunknownunknown
get_tagged
Get all instances with a specific tag
readfalseunknown
search_files
Search instances by name, class, or script content
readfalseunknown
redo
Redo the last undone change in Roblox Studio. Uses ChangeHistoryService to reapply the most recently undone operation.
unknownunknownunknown
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.
unknownunknownunknown
get_project_structure
Get full game hierarchy tree. Increase maxDepth (default 3) for deeper traversal.
readfalseunknown
mass_duplicate
Batch smart_duplicate operations
unknownunknownunknown
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.
writetrueunknown
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.
unknownunknownunknown
execute_luau
Execute Luau code in plugin context. Use print()/warn() for output. Return value is captured.
writetrueunknown
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.
readfalseunknown
get_selection
Get all currently selected objects
readfalseunknown
delete_attribute
Delete an attribute
destructivetruetrue
get_tags
Get all tags on an instance
readfalseunknown
list_library
List available builds in the local build library. Returns build IDs, styles, bounds, and part counts. Optionally filter by style.
readfalseunknown
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).
readfalseunknown
set_property
Set a property on an instance
writetrueunknown
create_object
Create a new instance. Optionally set properties on creation.
writetrueunknown
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).
readfalseunknown
smart_duplicate
Duplicate with naming, positioning, and property variations
unknownunknownunknown
add_tag
Add a tag
writetrueunknown
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.
unknownunknownunknown
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.
unknownunknownunknown
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.
readfalseunknown
mass_get_property
Get a property from multiple instances
readfalseunknown
set_attribute
Set an attribute. Supports primitives, Vector3, Color3, UDim2, BrickColor.
writetrueunknown
get_class_info
Get properties/methods for a class
readfalseunknown
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.
readfalseunknown
get_file_tree
Get instance hierarchy tree from Studio
readfalseunknown
mass_set_property
Set a property on multiple instances
writetrueunknown
bulk_set_attributes
Set multiple attributes on an instance in a single call. More efficient than repeated set_attribute calls.
writetrueunknown
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")
readfalseunknown
search_objects
Find instances by name, class, or properties
readfalseunknown
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.
readfalseunknown
get_descendants
Get all descendants of an instance recursively with depth info. More efficient than repeated get_instance_children calls.
readfalseunknown
insert_script_lines
Insert lines after a given line number (0 = beginning).
writetrueunknown
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.
writetrueunknown
search_by_property
Find objects with specific property values
readfalseunknown
get_playtest_output
Poll output buffer without stopping. Returns isRunning and captured messages.
readfalseunknown
rename_object
Rename an instance.
writetrueunknown
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.
readfalseunknown
set_script_source
Replace entire script source. For partial edits use edit/insert/delete_script_lines.
writetrueunknown
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.
unknownunknownunknown
get_place_info
Get place ID, name, and game settings
readfalseunknown
get_instance_children
Get children and their class types
readfalseunknown
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.
unknownunknownunknown
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.
unknownunknownunknown
delete_script_lines
Delete a range of lines. 1-indexed, inclusive.
destructivetruetrue
set_properties
Set multiple properties on a single instance in one call.
writetrueunknown
get_instance_properties
Get all properties of an instance
readfalseunknown
create_ui_tree
Create an entire instance hierarchy from a nested JSON tree in one call.
writetrueunknown
get_script_source
Get script source. Returns "source" and "numberedSource" (line-numbered). Use startLine/endLine for large scripts.
readfalseunknown
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.
writetrueunknown
move_object
Move (reparent) an instance to a new parent location. Preserves all children and properties.
writetrueunknown
insert_asset
Insert a Roblox asset into Studio by loading it via AssetService and parenting it to a target location. Optionally set position.
writetrueunknown

02Install & source
npx -y robloxstudio-mcp@latest
npx
npx -y robloxstudio-mcp-inspector@latest
npx

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_statusindex9 unique facts >= 5

06Badge

Add the “as seen on MCPExplorer” badge to your README. robloxstudio-mcp MCP — as seen on mcpexplorer.com

[![robloxstudio-mcp MCP — as seen on mcpexplorer.com](https://mcpexplorer.com/badge/robloxstudio-mcp.svg)](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 →
robloxstudio-mcp — MCPExplorer