Studio Bridge
Integrates with Roblox Open Cloud for asset uploads and status checks, bulk publishing of instances and local files, and auditing asset ownership referenced by a place.
Provides an MCP server and Roblox Studio plugin that let an AI assistant read and edit a place, run Luau, manage scripts and instances, drive playtests, capture screenshots, build and test UI, and inspect logs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Studio Bridgeadd a spinning neon part above the spawn point"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Studio Bridge
An MCP server and Roblox Studio plugin that let an AI coding assistant such as Claude Code read and edit a place, run Luau, drive playtests, take screenshots and publish assets. Free to use, including for commercial games, under the Studio Bridge License (source-available, see License below); no dependencies beyond Node 22.
New: Studio Bridge Pro. Paid add-on packs are now available, starting with Snapshots and diffs, with more planned (audit, QA playtests, localization, a dead-code finder). The free program is unchanged. Pro has its own separate license; see Studio Bridge Pro.
Studio Bridge speaks standard MCP, so it is not tied to one assistant. It is used and tested with Claude Code. Setup for OpenAI's Codex CLI is included (see Install), but it has not yet been tried with Codex itself.
Quick start
npm install -g @zrob407/studio-bridge
studio-bridge installRestart Claude Code and Roblox Studio, then allow HTTP requests and Script Injection for "Studio Bridge" if Studio asks. Run studio-bridge doctor if anything looks wrong. Windows, Node 22 or newer, Roblox Studio and Claude Code are required (Codex CLI setup is included but untested). Linux works through Wine and is untested; see the Linux section.
Related MCP server: robloxstudio-mcp
Everyday time-savers
These are the things that take the most clicking by hand and the least time with Studio Bridge.
Publish assets in bulk.
asset_publish_instancesexports many instances at once (for example every KeyframeSequence in a rig's AnimSaves folder) and uploads them all, named "{name} {rig}".asset_upload_batchuploads many files at once, skips anything already uploaded in the last 24 hours so an interrupted run resumes instead of duplicating, and writes the results to a file instead of flooding the chat. After re-uploading,animation_idsandaudio_manageswap every old id in the place for the new one in a single call.Audit the whole place in seconds.
asset_auditlists every asset id the place references and who owns each, so you find the ones that will break or that you do not own.script_scanranks risky code (require by id, loadstring, obfuscation, DataStore, teleports),script_dependenciesfinds unused modules andrequire(assetId)calls, andphysics_reportandaudio_reportcatch loose parts, void parts, missing sounds and duplicates.Edit hundreds of things in one step.
batchruns up to 50 edits as one undo.instance_bulksets, adjusts (add or multiply relative to the current value) or deletes across everything that matches a filter, with dry runs.instance_rename,instance_duplicate(rows, grids and circles of copies),snap_gridandinstance_pivotreplace a lot of dragging.Build a world quickly.
terraingenerates hills with a biome, water level and seed, then smooths, fills and recolors;environmentswitches lighting between day, sunset, night, fog and more;scatterdrops trees, rocks or props across the ground with spacing, slope alignment and random scale;spatial_findfinds flat spots, free space and spawn points;spatial_checktells you whether something floats or overlaps, what it touches, and how much of an area a character can walk on.UI that fits every device.
ui_buildmakes a whole GUI from one description,ui_autoscaleconverts a pixel-based GUI to responsive Scale (respecting padding, anchors and layouts), andui_responsive_checklays it out on real phones, tablets and consoles through Studio's device emulator and reports what runs off the screen, is too small to tap or has tiny text.device_emulatorswitches devices for screenshots.Playtest without touching the keyboard.
character_movewalks the character to a spot with pathfinding,input_keyboardandinput_mousesend real key and mouse input,gui_clickpresses buttons by path, andrun_testand screenshots report what happened.Find and insert assets safely.
asset_searchlooks through the free Creator Store andasset_insertbrings a model in after scanning it; scripts are removed unless you keep them, because free models can hide malicious code.generate_modelmakes a model from a text prompt using Roblox's own generation.Animation without the editor.
animation_createbuilds keyframes from a description,animation_editretimes, reverses and adds markers,animation_playpreviews it on a rig while you screenshot, andanimation_posefreezes any frame.Documentation at hand.
roblox_docssearches and reads the official Roblox documentation, so answers come from the current API reference.Keep the AI's context small.
studio-bridge settings tools coreoffers only the 28 everyday tools and adds groups on demand (see Tool groups).
What you can ask for
"Export every animation in this rig's AnimSaves folder and publish them to my group."
"Find every script that uses DataStore and list the risky ones."
"List every asset this place uses that I do not own."
"Generate a rocky island with a beach, scatter palm trees on it, and switch the lighting to sunset."
"Build a main menu, make it responsive, and check it on an iPhone, an iPad and an Xbox."
"Run a playtest, walk the character to the shop door, click Buy and tell me what errors show up."
"Rename these 40 parts, space them out in a circle, and snap them to the grid."
Studio Bridge exposes seventy-nine tools, listed under Tools below. Roblox's own Studio MCP server is a separate server, so you can register both (they have not been tested together). As of this writing it has 26 tools centered on scripts, search, playtesting and generation; Studio Bridge adds terrain, lighting, spatial tools, animation and audio editing, UI scaling and device checks, bulk editing and publishing, audits and more.
Why Studio Bridge
It does not time out and force a Studio restart. Every command has a deadline and can be cancelled, results survive a reconnect, and the plugin reloads itself when it changes.
Fewer calls and tokens.
batchruns up to 50 edits in one call, the server instructions are a few hundred characters, and tool groups keep the tool list small.It is easy to trust. It listens only on
127.0.0.1, needs a secret on every request, verifies the plugin's signature, collects no telemetry, and ships with build provenance.Free for commercial games. See License.
Recently added
Tool groups (
studio-bridge settings tools), a Studio status window, and tokenless publishing to npm with provenance.Terrain, lighting presets, scatter, spatial and physics tools, effects, tweens.
Animation authoring, editing and preview; audio management with preview.
UI autoscale, responsive checks on real devices, and the device emulator.
Playtest control: character movement, keyboard and mouse input.
Asset search, safe insert and model generation; searchable Roblox documentation.
Bulk editing, renaming and duplication; script dependency and audit tools.
Install
Windows, Roblox Studio and Claude Code are required. Linux works through Wine (see the Linux section below).
With npm (recommended). Needs Node 22 or newer: npm install -g @zrob407/studio-bridge, then studio-bridge install. It runs on Node, which is signed by the OpenJS Foundation, so Windows protections such as Smart App Control do not block it the way they can block an unsigned exe. Data lives in %LOCALAPPDATA%\StudioBridge like the exe's, and studio-bridge update upgrades it through npm. The package is published on npm with build provenance, which npm audit signatures can verify.
With the exe (no Node needed). The exe is not code-signed, so Windows may warn about or block it (see Verifying a download); use npm or the source if that happens. Download studio-bridge-<version>.exe from the releases page and double-click it, or run studio-bridge.exe install in a terminal. It copies itself to %LOCALAPPDATA%\StudioBridge, creates a secret token, writes the Studio plugin, and registers itself with Claude Code (claude mcp add --scope user). Then restart Claude Code and Roblox Studio. If Studio asks, allow HTTP requests and Script Injection for "Studio Bridge".
If an earlier source install is registered with Claude Code (node server.mjs), the installer finds it, switches the registration to the exe, reuses its token (so an open Studio window keeps working) and copies over uploads.json and asset-owners.json if the new location has none. It never overwrites existing files and leaves the old folder alone; --migrate-from <folder> does the same for a folder you point it at. Old plugin files such as ClaudeStudioBridge.rbxmx are removed so only one copy loads.
From source (Node 22 or newer). Run node cli.mjs install in this folder. node install.mjs still works and does the same.
With OpenAI Codex CLI. studio-bridge install --client codex (or --client all for Claude Code and Codex) adds a [mcp_servers.studio-bridge] entry to ~/.codex/config.toml (or $CODEX_HOME/config.toml), keeping everything else in that file, with a 30-second startup timeout and a 600-second tool timeout; Codex's default tool timeout is 60 seconds, which would cut off playtests and large asset batches. Restart Codex afterwards. To add it by hand:
[mcp_servers.studio-bridge]
command = "C:\\Users\\you\\AppData\\Local\\StudioBridge\\studio-bridge.exe"
args = ["serve"]
startup_timeout_sec = 30
tool_timeout_sec = 600The setup follows the configuration format in OpenAI's published Codex documentation. The test suite checks the server against the official MCP client library, and doctor reports a Codex registration. If something does not work with Codex, please open an issue.
Only one bridge runs at a time, because it owns port 3010 and the Studio plugin connects to that port. When you upgrade, a newer server that finds an older one still running asks it to stop (using the shared token) and takes over the port, so you do not have to end the old process by hand. A server of the same version, or an older one, never replaces another. That also means two AI clients, for example Claude Code and Codex, cannot use the bridge at the same time: the second one to start finds the port busy and stops with a message.
Other commands: update downloads the latest release, checks it against the release's SHA256SUMS.txt and installs it over the old one (update --check only reports), doctor checks the installation and mentions when an update is available (--offline skips that), uninstall removes the plugin and the registration (--purge also deletes the data folder), version prints the version. install --no-register leaves the Claude Code configuration alone and prints the command to run yourself; install --standalone writes the full plugin instead of the self-updating loader.
To change a tool without rebuilding the exe, put a replacement file under %LOCALAPPDATA%\StudioBridge\overrides using the same relative path (for example handlers\script_get.luau or tools.json); it wins over the embedded copy.
To build the exe yourself: npm ci then npm run build (Windows, Node 24). The result is dist\studio-bridge.exe.
Updates
Three layers, from least to most automatic. Only the first two are on by default.
A notice. When the bridge starts it asks GitHub for the latest release, at most once a day, and
studio_listthen mentions an available update. Nothing is downloaded. Turn it off withstudio-bridge settings check-updates off.Update on request. Tell Claude to update Studio Bridge. The
bridge_updatetool reports the new version first and only downloads, verifies and installs it when it is called withconfirm: true, which Claude should do only after you agree. You then run/mcp. You can also runstudio-bridge updateyourself.Auto-update (off by default).
studio-bridge settings auto-update onmakes the bridge download, verify and install new releases on its own when it starts; they take effect at the next restart and are logged inupdate-log.txtin the data folder. Because this replaces the program without asking, it is opt-in; the checksum is verified first, but releases are not code-signed.
Every download is checked against the SHA256SUMS.txt published with the release before anything is replaced, and downloads are only accepted from GitHub. studio-bridge settings shows the current choices.
Pieces
server.mjsis the MCP server (no dependencies, Node 22). It also runs a bridge on127.0.0.1:3010that the Studio plugin talks to, over a WebSocket (/ws, with acknowledgements and result replay after a reconnect) with HTTP long-polling as an automatic fallback. Every connection needs the secret intoken.txt, and browser origins are refused.plugin.stub.luais the small loader thatnode install.mjsfills in with the token and writes to%LOCALAPPDATA%\Roblox\Plugins\Studio Bridge.rbxmx. On start it asks the running bridge forplugin.template.lua(the real plugin), checks the source's HMAC-SHA256 signature (keyed by your token) and refuses to run anything that fails the check. While Studio is in edit mode it re-checks every 10 seconds and reloads the plugin when the file changes and no command is running, so plugin changes need no Studio restart. Restart Studio once after the first install. In Studio: Plugins > Manage Plugins, allow HTTP requests (and Script Injection) for Studio Bridge.install --standalonewrites the full plugin instead of the loader, for people who do not want Studio to load code from the bridge. It does not update itself.tools.jsonlists every tool (name, description, input schema) plus a smallmetasection. The server watches it and tells the client the tool list changed, so edits show up without restarting the server; clients that ignore the notification pick them up on the next/mcpreconnect.handlers/*.luauare the Luau bodies of the tools. They are read on every call, so editing one needs no restart.
Adding a tool
Write
handlers/<name>.luau. The arguments arrive as the tableparams, and whatever the file returns is the result. Shared helpers such asresolve,pathOfandrequireScriptcome fromhandlers/_prelude.luau.Add an entry to
tools.jsonwith the samename, a short description and an input schema. A tool that has a handler file runs in the edit window by default and can be used insidebatch.Optional, in
meta:"role": "server"or"client"to target a play-session window, and"batchable": falseto keep it out ofbatch.
Tools that need server-side work (uploads, screenshots, the audit) are implemented in server.mjs and only have their schema in tools.json.
cli.mjsis the command line (serve,install,uninstall,doctor,version) and the entry point of the exe.paths.mjsdecides where files live: the data folder, the optionaloverridesfolder, the files embedded in the exe, or the source checkout.ws.mjsis a small dependency-free WebSocket server layer.assets.mjsis the Open Cloud upload client.screenshot.ps1captures or focuses the Studio window.
The Studio Bridge window
The plugin adds a Studio Bridge button to the Plugins toolbar that opens a themed panel (it follows Studio's light or dark theme):
Status: whether the bridge is connected and over which transport, how many commands have run and failed, the last command and how long ago it ran, and how long the plugin has been up.
Tools: a summary of how many tools are offered and their approximate token cost, one-click presets (Everything, Essentials, World builder, UI designer, Animator, Publisher) and a switch for each tool group. Changes are saved to the bridge straight away; your AI client may need
/mcpto refresh its tool list. If the profile is fixed by theSTUDIO_BRIDGE_TOOLSenvironment variable, the switches are read-only.Log: a short log of connection events and commands.
Linux
Roblox has no native Linux Studio, so this setup is for Studio running under Wine through Vinegar or Grapejuice. The bridge itself and Claude Code run natively on Linux; Studio reaches the bridge on 127.0.0.1 because Wine shares the host network.
Install Node 22 or newer, then
npm install -g @zrob407/studio-bridgeandstudio-bridge install.installfinds where Studio reads plugins. With Vinegar (native or Flatpak) Studio's Local AppData is~/.local/share/vinegar/appdata(Flatpak:~/.var/app/org.vinegarhq.Vinegar/data/vinegar/appdata), so the plugin goes intoappdata/Roblox/Plugins. Reports disagree on whether some Vinegar setups read the Wine prefix instead, so the plugin is also written todrive_c/users/<user>/AppData/Local/Roblox/Pluginsinside the prefix when one exists; Studio reads only one of them, so it never loads twice. Grapejuice,$WINEPREFIXand~/.wineuse the prefix folder. If yours is somewhere else, run it withSTUDIO_BRIDGE_PLUGINS_DIRset to thatPluginsfolder. Studio only loads plugins at startup, so restart it afterwards.Data (token, uploads, exports, settings) lives in
$XDG_DATA_HOME/studio-bridge, usually~/.local/share/studio-bridge.Start Studio from your launcher, allow HTTP requests and Script Injection for "Studio Bridge" if it asks, and run
studio-bridge doctor.
Differences from Windows:
The
screenshottool (a screen capture of the Studio window) works on Windows and on Hyprland, where it needsgrim.viewport_screenshotcaptures the 3D view from inside Studio and works everywhere.input_keyboard,input_mouseandgui_clickneed Studio to be the focused window. On Hyprland (detected fromHYPRLAND_INSTANCE_SIGNATURE) Studio Bridge finds the window withhyprctl -j clientsand focuses it withhyprctl dispatch focuswindow. On other X11 desktops it usesxdotool. Elsewhere, click into Studio yourself before using those tools.The packaged exe is Windows only. Use the npm package.
This path has not been tested on a real Linux machine yet. Reports are welcome.
Windows
studio_list shows every connected window with a role:
edit: the normal Studio window (default target)server: the running game server during a play sessionclient: the player client. It cannot use HTTP itself, so commands reach it through a RemoteFunction relay in the server window. Passstudio: "client".
When several windows are connected, pass studio as an id prefix, a placeId, part of the place name, or a role. Tokens are combined (for example "Lure client").
Tools
Maintenance:
bridge_update(reports a newer release; installs it only when called withconfirm: true)Code:
run_luau,batch(up to 50 edit-window tools in one call and one undo step)Scripts:
script_get,script_set,script_edit(line numbers refer to the original script),script_search,script_validateBuilding UI:
ui_build(a whole GUI from one nested description),ui_check(layout checks in a running play session),ui_autoscale(convert a pixel-based GUI to responsive Scale: measures the real layout including UIPadding, AnchorPoint and SizeConstraint, leaves layout-managed, scrolling and automatic-size content alone, converts corner radii and list and grid spacing, makes text scale between a minimum and maximum, and adds aspect ratio and maximum size limits to top-level panels;dryRunpreviews,designSizescales against the screen size you designed for),ui_responsive_check(lay a GUI out at phone, tablet and desktop sizes without a playtest and report anything off-screen, too small to tap, tiny text or overflowing; withemulator: trueit switches Studio to real devices such as iphone_14 or ipad_10th_generation for exact sizes and restores the emulator afterwards),device_emulator(list the roughly forty devices Studio can emulate, switch device, orientation or a custom resolution, and stop; screenshots then show the emulated screen)Instances:
instance_find,instance_children,instance_get,instance_set,instance_create,instance_delete,instance_move,instance_clone,selection_get,selection_setWorld building:
terrain(fill blocks, balls, cylinders and wedges; clear; read; smooth; replace a material; read and set material colors; generate noise terrain with a biome, height, water level and seed),environment(lighting presets day, sunset, night, overcast, foggy, horror and space, plus per-section overrides, a time of day, the sky and terrain water),scatter(drop copies of a model onto the ground with slope alignment, random spin and scale, minimum spacing and a seed),tween_play(preview a tween and restore the values)Animation:
animation_create(build a KeyframeSequence from keyframes of poses keyed by part name, nested to match the rig's joints),animation_edit(scale or shift time, reverse, delete keyframes, add markers, set loop and priority; all or nothing, and it can edit a copy),animation_inspect(a sequence's length, joints, markers and poses, or every sequence under a container),animation_pose(pose a rig at a time in the animation so you can screenshot it, or reset it),animation_play(preview the animation on the rig in the background while you screenshot it),animation_ids(list, set and remap AnimationIds)Audio:
audio_manage(list, create, bulk set properties or scale volume, SoundGroups, SoundEffects such as reverb and echo, preview play, pause and stop, and remap SoundIds),audio_reportPlacement and space:
spatial_find(ground height, the flattest spots, free space for a box, and character spawn spots),spatial_check(does a model overlap, float or sit on a slope; what it touches; how much of an area is walkable),spatial_map(a top-down text map, or a scan of what is in a box),snap_grid(snap position and rotation to a grid),physics_groups(collision groups: register, set collidable, assign, list),effects(list, toggle, emit and clear particles, beams, trails and lights)Instances:
instance_duplicate(arrays, grids and circles of copies),instance_rename(find and replace, prefix, suffix, case, numbering),instance_pivot(centre, base or top pivots),instance_bulk(get, set, adjust relative to the current value, or delete across many instances, with dry runs),instance_info(ancestors, an outline tree, and the members of a Roblox class),script_dependencies(follow require() between scripts, find unused modules, and spot require(assetId) calls)Playtest control:
character_move(walk the player character to a position or an instance, using pathfinding around obstacles, jump, stop, and read its state),input_keyboard(key presses, holds and typed text),input_mouse(clicks, drags and holds at viewport pixels), all working through Studio's virtual input on a running playtest; these bring Studio to the front for the inputGeneration and reference:
generate_model(a model from a text prompt, and optionally an image, using Roblox's own generation service in Studio),roblox_docs(search and read the official documentation on create.roblox.com)Asset library:
asset_search(the free Creator Store: models, decals, audio, images, meshes, plugins),asset_insert(insert a free model by id; it scans the code first and removes scripts unless you keep them)Queries and checks:
raycast(one ray or many),spatial_query(parts in a radius or box, nearest first, or the bounds of an instance),tag_manage(list, find, get, add and remove CollectionService tags),physics_report(loose, void, oversized and invisible-collidable parts),audio_report(missing, silent, loud and duplicated sounds)Playtests:
play_start,play_stop,run_test,logs_getCamera and pictures:
camera_set,camera_frame,viewport_screenshot(3D view only, works with the screen locked, can frame instances and restore your camera),screenshot(whole Studio window; needs an unlocked desktop)UI testing:
gui_snapshot,gui_click(needs an unlocked desktop and Studio focus)Safety and transfer:
script_scan(ranks risky code: require by id, loadstring, LoadAsset, obfuscation, HTTP, teleports, kicks, DataStore),import_rbxm(loads a saved .rbxm into the open place through a hidden holder, scans it first, and refuses high-risk code unlessblock_highis false;scan_onlyjust inspects)Assets:
export_rbxm,asset_upload,asset_statusAuditing:
asset_audit(every asset id a place references, plus who owns each; open the .rbxl in Studio first, then it reports yours, Roblox, Studio template, other owners and unavailable; keyless lookups, cached, resumable)Bulk publishing:
asset_publish_instances(export many instances from Studio and upload them, named "{name} {rig}"),asset_upload_batch(many local files),asset_batch_status(finish checking a results file). Results go to a JSON file inexports\; identical files are reused for 24 hours so a rerun resumes instead of duplicating.
Packs
A pack adds tools without changing Studio Bridge itself. Put a folder in the packs folder of the data folder (studio-bridge doctor prints the path) and its tools appear in Claude Code without a restart; deleting the folder removes them.
packs/my-pack/
pack.json name, version, title, summary and a tools array (name, description, inputSchema)
handlers/tool.luau one Luau file per tool; it gets the same prelude and `params` as the built-in handlers
main.mjs optional; export async function authorize({ tool, args }) to allow or refuse a callauthorizereturnstrue,{ ok: true }or{ ok: false, message }. The message is shown to the user, and a refused call never reaches Studio. If it throws, the call is refused with the error. This is where a pack can do its own checks, for example a license key.Each pack gets a tool group called
pack-<name>, sostudio-bridge settings tools core,pack-my-packworks.A pack tool cannot reuse a built-in name, cannot be used inside
batch, and a broken pack is skipped with a log line while the rest keep working.A tool marked
"server": trueinpack.jsonhas no handler file. Its code is inmain.mjsasexport const tools = { toolName: async (args, api) => ... }, and it can combine Luau in Studio with work on your computer.api.runHandler(name, params, { studio, timeoutSeconds })runshandlers/<name>.luaufrom the pack in Studio and returns{ ok, error, output, returned, files }, wherefilesare the files the Luau attached withbridge.attachFile.api.runLuau(source, params, options)does the same with Luau your code holds in memory, for packs that keep no handler files on disk.api.dataDiris a folder for the pack's own data,api.text(message, isError)builds a result andapi.log(message)writes a log line. Theauthorizehook runs before server tools too.Trust. Studio Bridge's own packs are digitally signed, and the core checks the signature against public keys built into it. There are two tiers, each with its own key: free official packs, and paid Studio Bridge Pro packs. The tier comes only from which key signed the pack, never from anything the pack says about itself.
studio-bridge doctorlists each pack as official, official Pro or unverified third-party, and the Studio Bridge window shows a PRO or unverified badge on the pack's group. Anyone can still use unsigned packs: they load, but their tool descriptions are labeled[Unverified third-party pack ...].studio-bridge settings pack-trust verifiedloads only packs signed by Studio Bridge; the defaultallalso loads unsigned ones. A pack that carries a signature that does not match its files, or that is signed by someone else's key, is never loaded, because it was changed after signing.A pack's
main.mjsruns with your user's permissions, like any program you install. Only install packs from people you trust.
Studio Bridge Pro
Studio Bridge Pro is a set of paid add-on packs for any MCP-ready AI tool. Everything in this repository stays free and works without a license: all seventy-nine tools, the Studio plugin and the pack system are not going behind a paywall. Pro adds extra packs on top.
Buy a license: https://buy.polar.sh/polar_cl_5c8YQvxi93De84kvcyfDl0CkAtxiYMb6dnDR61HbTDI (or press Buy a license in the Pro tab of the Studio Bridge window). Plans are 1, 3, 6 or 12 months, or a one-time lifetime license that covers every current and future version of Studio Bridge Pro, including packs added later.
Pro has its own license. Studio Bridge itself is under the source-available terms in LICENSE. The Pro packs and your license key are under the separate Pro license, which covers devices (up to three per key), what you may and may not share, plan length, privacy and refunds. Buying Pro does not change the license of the free program, and the free program's license does not cover the paid packs.
Available now
Snapshots and diffs. Save part of a place, see exactly what changed since, and roll it back with an automatic safety snapshot first.
Planned, in no particular order and with no dates
Audit pack. A broader sweep of a place for problems, with a written report.
QA playtests. Scripted playtests that exercise a game and report what broke.
Localization. Find hard-coded text and move it into translation tables.
Dead-code finder. Find scripts, modules and remotes that nothing uses.
Planned packs may change or be dropped, and none of them are promised until they ship. Lifetime licenses include whichever of them are released. Existing licenses pick up new packs automatically.
To unlock Pro, open the Pro tab in the Studio Bridge window, paste your license key and press Activate. Or run studio-bridge pro activate (it asks for the key with the typing hidden; --key-file and the STUDIO_BRIDGE_PRO_KEY variable also work). studio-bridge pro status shows what is installed and studio-bridge pro remove takes the license off this computer and frees its device slot.
What happens when you activate:
The key is sent to the Studio Bridge license server, together with a random device id and this computer's name. Your places, scripts and files are never sent.
The server checks the key and returns the pack launchers. The program verifies each launcher's digital signature against a public key built into it before installing anything, so a launcher that was changed or signed by someone else is refused.
The key is saved in the
packsfolder of the Studio Bridge data folder, inlicense.key. The paid code itself is downloaded the first time you use a Pro tool, and is kept encrypted on disk.A key works on up to three devices at a time. Repeated wrong keys pause that device and network for a while.
Pro needs Studio Bridge 0.6.7 or newer and an internet connection when you activate and every so often afterward; packs keep working offline for up to three days.
Tool groups
All seventy-nine tools are offered by default. Their definitions cost roughly 23,000 tokens of context in a client that loads every tool at once, so you can offer fewer: studio-bridge settings tools core keeps just the 28 everyday tools (about 5,700 tokens), and a list adds groups to it, for example studio-bridge settings tools building,ui. The groups are core (always on: scripts, instances, selection, screenshots, camera, playtest start and stop, logs, batch and the docs), building (terrain, lighting, scatter, spatial tools, effects, tweens, collision groups, bulk editing, asset search and insert, generation), ui (building, scaling and checking GUIs, the device emulator), playtest (keyboard, mouse and character control), media (animation and audio), publishing (uploads, audits, exports) and analysis (script, physics and audio checks). studio-bridge settings tools all turns everything back on, and the STUDIO_BRIDGE_TOOLS environment variable overrides the setting. A running bridge picks the change up within a second or two; your AI client may need /mcp to refresh its list. A tool outside the chosen groups is not listed, cannot be batched, and says which group to enable if it is called anyway.
Open Cloud key
Create %USERPROFILE%\.roblox-key.txt in your own terminal (no angle brackets): Set-Content "$env:USERPROFILE\.roblox-key.txt" -Value 'YOUR_KEY' -NoNewline. The key needs Assets read and write for the target creator. Revoke it when you are done. Uploads always need an explicit creator_type and creator_id.
Known limits
loadstringdoes not work inside a running game, so the plugin compiles code through a temporary ModuleScript there. Error line numbers are unchanged.Clicks come from the edit window's virtual input and only work while Studio is the focused window.
gui_clickfocuses Studio for you.Playtests run the game for real. A game that touches live services can have real effects.
Roblox's own asset guide says Animation uploads take
.rbxmor.rbxmx(model/x-rbxm, 20 MB max), which is what the tool sends. Still not tried against the real API: an exported KeyframeSequence. Payloads up to about 5 MB raw went through Studio's HTTP without trouble. Files edited outside Studio may be rejected.
Tests
npm test runs the sixteen suites in test/. They start the server with a random token and drive it with a fake plugin or the command line: queueing and timeouts, the WebSocket handshake, acknowledgements, reconnects, requeue limits and batch results, the tool list reload, the signed plugin endpoint, install and uninstall, the MCP handshake, the update command and the update notice, tool and auto-update, the official MCP client library talking to the server, and the npm package (packed, installed and run) with its update path. They need no Studio. node test/cli.test.mjs dist/studio-bridge.exe and node test/serve.test.mjs dist/studio-bridge.exe run the install and serve suites against a built exe.
Security
This tool lets an AI assistant run arbitrary Luau inside your Studio, which is its purpose. Treat it like giving that assistant a console.
The bridge listens only on
127.0.0.1, rejects requests with a foreignHostheader, and requires the random secret intoken.txton every request. The secret is created on install and never leaves your machine.The plugin loader only runs plugin source whose HMAC-SHA256 signature, keyed by that secret, matches. A different program that took over the port could not make Studio run its code without the secret.
Nothing is sent anywhere except what you ask for: Roblox Open Cloud uploads (using a key you create), the public Roblox economy API for
asset_audit, the public Creator Store search and economy details forasset_search, and the public documentation pages on create.roblox.com forroblox_docs.generate_modelsends your prompt to Roblox's generation service through Studio.The Open Cloud key is read from
%USERPROFILE%\.roblox-key.txtorROBLOX_API_KEYand is never printed. Give it only the permissions you need and revoke it when you are done.import_rbxmandscript_scanflag risky code (require by id, loadstring, LoadAsset, obfuscation, HTTP, teleports, kicks, DataStore) before it enters a place.Playtests run the game for real. A game that touches live services can have real effects.
Report vulnerabilities privately through the repository's security advisory page rather than a public issue.
Privacy
The project collects no telemetry and has no accounts. Apart from asset_search and the audit, which only run when you ask, the one request it makes on its own is the once-a-day update check to GitHub's public releases API (your IP address is visible to GitHub, as with any request); turn it off with studio-bridge settings check-updates off. Files it writes stay on your computer: token.txt, upload and owner caches, and exported files under exports\. Do not commit or share those; the provided .gitignore excludes them.
Verifying a download
Release builds are produced by the GitHub Actions workflow in .github/workflows/release.yml from the tagged source in this repository. Each release publishes a SHA256SUMS.txt and a GitHub build attestation, so you can check that a download was built from this source:
gh attestation verify <downloaded file> --repo <owner>/<repository>
The exe is not code-signed. If you download it in a browser, Windows SmartScreen may show "Windows protected your PC": choose "More info" and then "Run anyway" after checking the checksum. Files fetched by studio-bridge update, the bridge_update tool or command-line tools such as gh do not normally carry that browser mark.
License
Studio Bridge is source-available under the Studio Bridge License in LICENSE. In plain terms:
You may use, copy, modify and share it for free, and use it to make anything you like, including commercial games.
You must keep the copyright notice and license, and you must not present it, or a modified version, as your own original work.
You may not sell it, or charge for copies of it or for a product or service whose value comes mainly from it (a paid fork, a paid hosted version, selling the exe).
Forks should not use the name "Studio Bridge" in a way that suggests they are the original or endorsed by the author.
The core stays free. The author may also offer separate add-ons or services, possibly for a fee, under separate terms; those are not covered by this license, and versions already released stay available under the terms they were released with. The Studio Bridge Pro packs are such an add-on: they are covered only by the separate Pro license in
PRO-LICENSE.txt.
This is not an OSI-approved open-source license, because it forbids selling the software. Versions 0.2.3 and earlier were released under the MIT License, and those copies stay available under it. The Node.js runtime inside the exe has its own license in THIRD_PARTY_NOTICES.txt; studio-bridge licenses prints both. This summary is not legal advice and the text in LICENSE is what applies.
This server cannot be deployed
Maintenance
Related MCP Connectors
Build, edit, and publish real websites and online stores by chatting with your AI assistant.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Run accessibility, contrast, and design token audits and file QA issues from your AI coding tool.
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.68MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to explore Roblox Studio game structure, read and edit scripts, and perform bulk changes locally and safely.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI tools to read the Roblox Studio game tree, edit scripts, insert models, and run playtests via the Studio MCP interface.2 npmMIT
- 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.-