rbx-studio-plus
Provides tools for interacting with Roblox Studio, including running Luau code, inspecting and editing instances and scripts, managing selection and undo/redo history, syncing scripts to local files, and starting/stopping playtests while collecting console errors.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
๐งฑ rbx-studio-plus
The Roblox Studio MCP server that coding agents actually enjoy using.
Edit your Roblox scripts as local files, run Luau with real output, playtest in one call. Works with Claude Code, Codex, Cursor, opencode, or any MCP client.
Why
Roblox Studio ships a built-in MCP server. It is powerful, but it was not designed with coding agents in mind:
every call needs a
studio_idand adatamodel_type;print()output is lost;results over 100 KB are silently truncated;
syntax errors only say "Failed to parse command code";
scripts can only be edited through tool calls, never as files.
rbx-studio-plus sits between your agent and Studio and fixes all of that. It also adds the workflow agents are good at: edit files โ push โ playtest โ read errors โ fix.
flowchart LR
A["๐ค Agent<br/>Claude Code ยท Codex ยท Cursor"] -- MCP stdio --> P["๐งฑ rbx-studio-plus"]
P -- MCP stdio --> S["๐ฎ Roblox Studio<br/>built-in MCP"]
P <-- "two-way sync" --> F["๐ roblox-src/<br/>*.server.luau ยท *.client.luau ยท *.luau"]
A -- "Read / Edit / grep / git" --> FRelated MCP server: Roblox Studio MCP
โจ Highlights
Built-in Studio MCP | rbx-studio-plus | |
๐ฏ Targeting |
| automatic (or |
๐งช Running Luau | return value only, |
|
๐ Syntax errors | "Failed to parse command code" |
|
๐ Scripts | tool calls only | two-way file sync (Rojo layout), 3-way conflict detection, live watch |
โถ๏ธ Playtesting | start / stop |
|
๐ Output | whole log, no levels |
|
๐ ๏ธ Editing | raw Luau |
|
Every other Studio tool (generate_mesh, insert_asset, screen_capture, input simulation, subagentโฆ) is still available under the same name, without studio_id.
๐ Quick start
1. Enable Studio's MCP server. In Roblox Studio, go to Assistant โ โฆ โ Manage MCP Servers and turn on Enable Studio as MCP server.
2. Install.
git clone https://github.com/noan-hbt/rbx-studio-plus.git
cd rbx-studio-plus
npm install && npm run build
node dist/src/index.js install # registers "roblox-plus" in Claude Code + Codex3. Restart your agent, then ask it something like "pull the scripts and playtest the game".
{
"mcpServers": {
"roblox-plus": {
"command": "node",
"args": ["/absolute/path/to/rbx-studio-plus/dist/src/index.js"]
}
}
}Use install --claude or install --codex to register in only one of them.
๐งฐ Tools
Tool | What it does |
| Start here. Connected studios, play mode, datamodels, sync state |
| Pick one Studio when several are open |
| Run Luau (inline or a local |
| New Output lines since the last call; |
|
|
| Start the game, run optional code on server or client, collect errors, stop โ PASS / FAIL |
| Compact hierarchy, or flat search with |
| Properties, attributes and children of an instance (optionally a subset) |
| Set properties/attributes, e.g. |
|
|
| Read with line numbers, full replace (creates parents), exact search/replace |
| Compile every script, list syntax errors |
| Read or set what the user has selected in Studio |
| Undo / redo |
| Script โ file sync |
Paths accept Workspace.Model.Part, game.Workspaceโฆ or Workspace/Model/Part. Duplicate sibling names are addressed as Name~2.
๐ Script sync
roblox-src/
โโโ ServerScriptService/
โ โโโ Main/
โ โโโ init.server.luau โ Script "Main" (it has children)
โ โโโ Helper.luau โ ModuleScript
โโโ StarterPlayer/StarterPlayerScripts/
โ โโโ Client.client.luau โ LocalScript
โโโ .rbxsync.json โ sync state (do not edit)sync_pullexports every script, by default to./roblox-src(orRBX_SYNC_DIR). Re-running it only rewrites what changed.Edit the files with any tool, then
sync_push. New files become new scripts: the class comes from the suffix and missing Folders are created. Deleted files are removed in Studio only withdelete_missing: true.No silent overwrites. If a script changed both locally and in Studio, the push is refused. A pull writes
<file>.studionext to your file: merge it, delete it, then push withforce: true.sync_watch on=trueturns on live sync: saved files are pushed instantly and Studio edits are pulled every 3 s.Each folder is bound to one place. Pulling a different place into it requires
force.
๐ก Example
> luau_run code: "for _, p in workspace.Map:GetChildren() do print(p.Name) end return #workspace:GetDescendants()"
โ ok ยท 3 ms ยท Edit
--- output ---
Spawn
Bunker
Trees
--- result ---
4182> playtest duration_s: 6
โ FAIL ยท ran 8s ยท 1 error(s), 0 warning(s)
--- console ---
[GameManager] Started
[E] OnClientEvent is not a valid member of RemoteEvent "ReplicatedStorage.Remotes.RoundUpdate"โจ๏ธ CLI
The same engine also works without an agent:
rbx-studio-plus status
rbx-studio-plus sync pull|push|status|watch [--dir D] [--studio S] [--force] [--dry-run] [--delete-missing]
rbx-studio-plus run script.luau [--context server]Env var | Purpose |
| Default target studio (name substring or place id) |
| Default sync folder |
| Per-call timeout (default 60000) |
| JSON array overriding the Studio bridge command |
๐ง How it works
Studio connection. rbx-studio-plus is an MCP client of Studio's bridge (
%LOCALAPPDATA%\Roblox\mcp.bat, orStudioMCPon macOS). It reconnects automatically and applies timeouts.Luau execution. Your code is wrapped in a one-line prelude, so line numbers stay correct. The prelude shadows
print/warn, catches errors with a traceback, and serializes results safely.Large results. Results bigger than the bridge's limit are paged through
_G. Large inputs are uploaded in chunks.Change detection. Uses the same FNV-1a hash in Luau and in Node, so changes are detected without transferring source.
Undo. Every edit runs inside Studio's change history. Deletions use
Parent = nilso they can be undone.
๐งช Development
npm test # unit tests
node scripts/live-e2e.mjs <tmp-dir> --playtest # end-to-end against an open StudioThe end-to-end test writes only under ServerStorage.__rbxplus_test and deletes it at the end.
๐ License
MIT. Not affiliated with Roblox Corporation.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
This server cannot be deployed
Maintenance
Related MCP Connectors
A real-time, multiplayer filesystem for agents and humans: shared files, live edits, history.
Develop, manage, and debug Railway projects, services, and deployments from within agents.
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automateโฆ
Work on your own computers from Claude or ChatGPT: run commands, edit and search files.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI coding tools to control Roblox Studio for workspace exploration, instance manipulation, and script management. It provides tools for playtesting, scene rendering, and integration with the Roblox Creator Store.69MIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Roblox Studio, enabling them to interact with instance hierarchy, edit Luau scripts, manage properties, and sync files over a local connection.7 npm2MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to directly manage Roblox Studio projects by creating, reading, updating, and deleting scripts, listing instances, executing Luau code, and inspecting properties. It works through natural language, making Studio operations accessible to AI.-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to explore, edit, and automate Roblox Studio sessions locally, including browsing instance hierarchies, reading and modifying scripts, manipulating properties, creating instances, building terrain, and running playtests.875 npmMIT