Roblox Studio MCP

Edit places, run Luau, drive playtests and profile games in Roblox Studio from a coding agent

By Chris Michael Guzman (individual) JavaScript Local · stdio Developer toolsTesting

62 popularity score ★ 360 ↓ 1.9k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add roblox-studio -- npx -y @chrrxs/robloxstudio-mcp@latest --auto-install-plugin
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "roblox-studio": {
      "command": "npx",
      "args": [
        "-y",
        "@chrrxs/robloxstudio-mcp@latest",
        "--auto-install-plugin"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "roblox-studio": {
      "command": "npx",
      "args": [
        "-y",
        "@chrrxs/robloxstudio-mcp@latest",
        "--auto-install-plugin"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "roblox-studio": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@chrrxs/robloxstudio-mcp@latest",
        "--auto-install-plugin"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.roblox-studio]
command = "npx"
args = ["-y", "@chrrxs/robloxstudio-mcp@latest", "--auto-install-plugin"]
Gemini CLITerminal
gemini mcp add --scope user roblox-studio npx -- -y @chrrxs/robloxstudio-mcp@latest --auto-install-plugin

Settings 12

Set together: open cloud
ROBLOX_OPEN_CLOUD_API_KEY secret Optional: Open Cloud key for monetization, experience settings, uploads, audio preview and place versions. Scopes depend on the tool. Also settable with --open-cloud-key. For manage_monetization, manage_experience, upload_asset.
ROBLOX_CREATOR_USER_ID Optional: User that uploads are created under, or set ROBLOX_CREATOR_GROUP_ID instead. Also settable with --creator-id. For upload_asset, generate_model.
ROBLOX_CREATOR_GROUP_ID Optional: Group that uploads are created under, in place of a user. Also settable with --creator-group-id. For upload_asset, generate_model.
ROBLOSECURITY secret Optional: Roblox account cookie. When set, Decal and reference image uploads use it in place of the Open Cloud key. Not in the docs. For upload_asset, generate_model.
ROBLOX_STUDIO_PORT Optional: Port of the local bridge to the Studio plugin. Default 58741.
ROBLOX_STUDIO_HOST Optional: Bind address of the bridge. A non-loopback address exposes it to other machines. Default 127.0.0.1.
ROBLOX_STUDIO_AUTH_TOKEN secret Optional: Shared secret for HTTP tool endpoints, overriding the generated token file.
ROBLOX_STUDIO_NO_AUTH Optional: Set to 1 or true to turn off HTTP tool authentication.
ROBLOX_STUDIO_HOST_CAPTURE Optional: Set to 0, false or off to turn off the host window screenshot fallback. For capture_screenshot.
MCP_PLUGINS_DIR Optional: Folder the Studio plugin is installed to, instead of Studio's default.
Set together: wine
ROBLOX_STUDIO_EXE Optional: Studio executable to launch. Needed on native Linux with Wine. For manage_instance.
ROBLOX_STUDIO_WINE_LAUNCHER Optional: Native Linux only: script that execs Wine on Studio. For manage_instance.

What it does

Roblox Studio MCP connects a coding agent to a running copy of Roblox Studio through a companion plugin, which the launch command installs with --auto-install-plugin. In edit mode the agent reads and changes instances, properties and script source, either a whole file or a line range. It can also run Luau in the edit context or inside a live playtest, on the server or on one chosen client.

Most of the tools are about testing. It starts solo or multi-client playtests (up to 8 clients) and can open a baseplate, a local file or an older revision of a published place. You can add latency and packet loss, switch device emulation, and set breakpoints that log each hit without pausing. Logs, screenshots, memory and profiler captures come back per peer. It also sends simulated mouse and keyboard input, inserts Creator Store assets with their scripts stripped, and fetches Roblox engine docs.

With an Open Cloud key it reaches the live experience as well. manage_monetization handles developer products and game passes. manage_experience, new since our last review, reads and changes the title, description, server size, allowed devices, voice chat, private server price and social links.

Version 3.4.2 registers 50 tools in packages/core/src/tools/definitions.ts, half of them in the read category. A separate Inspector edition (@chrrxs/robloxstudio-mcp-inspector) exposes only those. The code also reads a ROBLOSECURITY variable the configuration docs never mention. If it holds an account cookie, Decal uploads and generate_model reference images go through Roblox's user-auth asset API with that cookie in place of the key (roblox-cookie-client.ts). The project continues boshyxd/robloxstudio-mcp from its v2.7.0 under a different npm package.

What it needs

RuntimeNode.js 22+
Runs onmacOS, Windows, Linux
RobloxFreeOpen Cloud API key only for monetization, experience settings, uploads, audio preview and place versions
Also
  • Roblox Studio running with the companion plugin installed
  • Wine and a launcher script to manage Studio on native Linux

Studio must be fully restarted after the plugin is installed, and the plugin and server must be the same version. On native Linux set ROBLOX_STUDIO_WINE_LAUNCHER and ROBLOX_STUDIO_EXE. The Open Cloud key needs the experience added to it, plus developer-product or game-pass read and write scopes for manage_monetization, and universe.place:write or universe:write for manage_experience depending on the setting. Uploads need ROBLOX_CREATOR_USER_ID or ROBLOX_CREATOR_GROUP_ID. The macOS screenshot fallback needs Screen Recording permission and Xcode Command Line Tools.

Limits

  • Limit A plugin whose version differs from the server is rejected until the server is restarted with --auto-install-plugin and Studio is reopened.
  • Platform Host window screenshots work on Windows (not minimized) and macOS 14+. Elsewhere capture_screenshot returns Studio's own result, which can be black in solo playtests.
  • Not covered manage_monetization cannot delete developer products or game passes and refuses a name that already exists.
  • Not covered manage_experience cannot make an experience public or private. Visibility is changed in Creator Hub.
  • Limit The confirm flag that private server price changes need is set by the agent itself, so it is no human approval step. A price change cancels existing subscriptions.
  • Size cap upload_asset refuses files over 20 MB, or 3.75 GB for video (tools/index.ts).
  • Not covered multiplayer_playtest runs 1 to 8 clients.
  • Limit Only one edition, full or Inspector, can be installed at a time. Installing one removes the other.
  • Platform Launching and closing Studio on native Linux needs Studio under Wine and a launcher script.

The plugin and server must be the same version; a mismatched plugin is rejected until the server is restarted with --auto-install-plugin and Studio reopened. Host window screenshots work only on Windows (not of a minimized window) and macOS 14+; elsewhere capture_screenshot returns Studio's own result, which can be a black frame in solo playtests. manage_monetization cannot delete products or passes (Roblox does not allow it) and refuses duplicate names. Only one edition (full or Inspector) can be installed at a time. Launching and closing Studio on native Linux needs a Wine launcher script.

Who it suits

Suits Roblox developers who want an agent to test and debug a game, not just edit scripts: per-peer eval, multi-client playtests, profilers and logs are its focus. It writes to the open place and can run arbitrary Luau, so anyone who only wants an agent to look at a place should install the read-only Inspector edition instead. We also list boshyxd/robloxstudio-mcp, the project this one is based on (v2.7.0); pick that one for the original line, this one for the playtest and profiling tools added since. It is a community project, not published by Roblox.

Tools 50

25 only read, 24 change things, 1 can delete or overwrite. A ? marks an optional parameter.

get_place_info
Report details of the open placeinstance_id?: string
search_objects
Find instances by name, class or propertyquery?: stringsearchType?: enumpropertyName?: stringpath?: stringclassName?: stringmaxResults?: integerinstance_id?: string
get_instance_properties
Read the properties of an instanceinstancePath: stringexcludeSource?: booleaninstance_id?: string
get_project_structure
Show the instance tree of the placepath?: stringmaxDepth?: numberscriptsOnly?: booleaninstance_id?: string
set_properties changes
Change properties on one or more instancesoperation_id?: stringinstancePath: stringproperties: objectatomic?: booleandryRun?: booleaninstance_id?: string
get_script_source
Read a script's sourceinstancePath: stringline_range?: stringinstance_id?: string
set_script_source changes
Replace a script's whole sourceoperation_id?: stringinstancePath: stringsource: stringexpected_revision?: stringinstance_id?: string
edit_script_lines changes
Replace a range of lines in a scriptoperation_id?: stringinstancePath: stringold_string?: stringnew_string?: stringline_range?: stringedits?: arrayexpected_revision?: stringdry_run?: booleaninstance_id?: string
insert_script_lines changes
Insert lines into a scriptoperation_id?: stringinstancePath: stringafterLine?: numbernewContent: stringexpected_revision?: stringinstance_id?: string
delete_script_lines changes
Remove lines from a scriptoperation_id?: stringinstancePath: stringline_range: stringexpected_revision?: stringinstance_id?: string
get_attributes
Read an instance's attributesinstancePath: stringinstance_id?: string
selection
Read or set the Studio selection and frame the cameraaction: enumpaths?: arraymode?: enumpath?: stringfrom?: numberpadding?: numberangleY?: numberinstance_id?: string
execute_luau changes
Run Luau in Studio's edit contextoperation_id?: stringcode: stringtarget?: stringinstance_id?: string
eval_server_runtime changes
Run Luau on the server of a live playtestoperation_id?: stringcode: stringinstance_id?: string
eval_client_runtime changes
Run Luau on a chosen client of a live playtestoperation_id?: stringcode: stringtarget?: stringinstance_id?: string
grep_scripts
Search script text across the placepattern: stringcaseSensitive?: booleanusePattern?: booleancontextLines?: integermaxResults?: integermaxResultsPerScript?: integerfilesOnly?: booleanpath?: stringclassFilter?: enuminstance_id?: string
manage_instance changes
Open or close Studio windows and placesaction: enumsource?: enumlocal_place_file?: stringplace_id?: numberplace_version?: numberrequire_process_identity?: booleanwait_for_connection?: booleantimeout_ms?: numberstudio_executable?: stringstudio_working_directory?: stringprocess_environment?: objectmax_page_size?: numberpage_token?: stringinstance_id?: stringlaunch_id?: string
solo_playtest changes
Start, check or stop a solo playtestaction: enummode?: enumtimeout?: numberinstance_id?: string
set_network_profile changes
Add latency, jitter or packet loss to a clientprofile: enumtarget?: stringoverrides?: objectinstance_id?: string
get_simulation_state
Read the current simulation settingsinclude?: enumtarget?: stringinstance_id?: string
reset_simulation_state changes
Clear simulated network and device settingstarget?: stringnetwork?: booleandeviceSimulator?: booleaninstance_id?: string
get_device_simulator_state
Read the device emulator settingstarget?: stringdeviceId?: stringincludeDeviceList?: booleaninstance_id?: string
set_device_simulator changes
Switch the emulated devicetarget?: stringdeviceId?: stringorientation?: stringresolution?: objectpixelDensity?: numberscalingMode?: stringstopSimulation?: booleaninstance_id?: string
capture_device_matrix changes
Screenshot the viewport under up to six device settingsentries: arraytarget?: stringformat?: enumquality?: numbersettleSeconds?: numberrestoreAfter?: booleaninstance_id?: string
multiplayer_playtest changes
Start, check or stop a multi-client test sessionaction: enumnumPlayers?: numbertarget?: stringtestArgs?: anyvalue?: anytimeout?: numberinstance_id?: string
get_runtime_logs
Read output from edit mode, the server or a clientinstance_id?: stringmultiplayer_group_id?: stringcursor?: stringcursor_by_instance?: objecttail?: numberfilter?: string
capture_script_profiler
Record script CPU timings on server or clienttarget?: stringduration_ms?: numberfrequency?: numbermax_functions?: numbermin_total_us?: numberfilter?: stringinclude_native?: booleaninclude_plugin?: booleanoutput_path?: stringinstance_id?: string
capture_micro_profiler
Record or analyze a micro profiler captureaction?: enumtarget?: stringduration_ms?: numberinput_path?: stringfocus?: enumfilter?: stringmax_timers?: numbermax_groups?: numbermax_timers_per_group?: numbermax_related_timers?: numbermin_total_us?: numberinclude_idle?: booleaninclude_gpu?: booleanspike_frames?: numberstart_frame?: numberend_frame?: numberoutput_path?: stringsummary_output_path?: stringbaseline_path?: stringbaseline?: object
breakpoints changes
Set logging breakpoints that record hits without pausingaction: enumclear_all?: booleanscript_path?: stringline?: numberenabled?: booleancondition?: stringlog_message?: stringcontinue_execution?: booleantarget?: stringinstance_id?: string
get_connected_instances
List connected Studio windows and playtest peers
get_request_status
Recover the result of an operation that timed outrequest_id: stringwait_ms?: integer
search_assets
Search public Creator Store assetsassetType: enumquery?: stringmaxResults?: numbersortBy?: enumrobloxCreatedOnly?: boolean
get_asset_details
Read catalog details of an assetassetId: number
get_asset_thumbnail
Fetch an asset's thumbnail imageassetId: numbersize?: enum
insert_asset changes
Insert a Creator Store asset with scripts removedoperation_id?: stringassetId: numberparentPath?: stringposition?: objectinstance_id?: string
generate_model changes
Stage a model generated from text or an imageoperation_id?: stringasync?: booleanprompt?: stringimage_path?: stringimage_base64?: stringimage_mime_type?: enumimage_asset_id?: numberschema?: enumschema_groups?: arrayname?: stringsize?: objectmax_triangles?: numbergenerate_textures?: booleantimeout_ms?: numberinstance_id?: string
preview_asset
Inspect an asset's hierarchy, media and scan result before insertingassetId: numberincludeProperties?: booleanmaxDepth?: numberincludeAudio?: booleanmaxAudioPreviews?: numberinstance_id?: string
upload_asset changes
Upload a local file as an asset to a user or groupfilePath: stringassetType: enumdisplayName: stringdescription?: stringuserId?: stringgroupId?: string
capture_screenshot
Capture the Studio viewport as an imageformat?: enumquality?: numberinstance_id?: string
manage_monetization changes
List, create or update developer products and game passesaction: enumkind: enumuniverse_id?: integerid?: integername?: stringdescription?: stringprice?: integerfor_sale?: booleanmanaged_pricing?: booleanimage_path?: stringpage_token?: stringinstance_id?: string
manage_experience deletes
Read or change live experience settings such as title, devices and private serversaction: enumuniverse_id?: integerplace_id?: integername?: stringdescription?: stringserver_size?: integervoice_chat_enabled?: booleanprivate_server_price?: integerdisable_private_servers?: booleandevices?: objectsocial_links?: arrayremove_social_links?: arrayconfirm?: booleaninstance_id?: string
simulate_mouse_input changes
Send mouse input to the viewportaction: enumx: numbery: numberwheel?: numberbutton?: enumtarget?: stringinstance_id?: string
simulate_keyboard_input changes
Send keyboard input to the viewportkeyCode?: stringaction?: enumduration?: numbertext?: stringtarget?: stringinstance_id?: string
get_memory_breakdown
Break down memory use by categorytarget?: stringtags?: arrayinstance_id?: string
get_scene_analysis
Attribute rendering and scene cost to instancesmode?: enumtarget?: stringtopN?: numberraw?: booleaninstance_id?: string
export_rbxm
Save selected instances to a local .rbxm fileinstance_paths: arrayoutput_path: stringtarget?: enuminstance_id?: string
import_rbxm changes
Load a local, remote or inline .rbxm under a parentoperation_id?: stringsource: objectparent_path: stringtarget?: enuminstance_id?: string
find_and_replace_in_scripts changes
Find and replace text across scriptsoperation_id?: stringpattern: stringreplacement: stringcaseSensitive?: booleanusePattern?: booleanpath?: stringclassFilter?: enumdryRun?: booleanmaxReplacements?: integerexpected_revisions?: objectinstance_id?: string
get_roblox_skills
Read installed Roblox Studio Assistant skillsaction: enumname?: string
get_roblox_docs
Fetch Roblox engine API docs as Markdownname: stringdoc_type?: enumsection?: string

Similar servers