The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Tripwire listing page.
made by alibolly
An MCP server that gives an AI coding agent real control of Roblox Studio and Roblox Open Cloud, with a test-and-security layer no other Studio MCP has.
Tripwire lets an assistant read, write, and edit the data model, drive playtests with simulated input, run tests-as-code headlessly in the real engine, flag client-trust exploits in game code, and call the Open Cloud APIs (DataStores, MessagingService, Memory Stores, and more). The Studio tools need no API key; the headless test, asset, and Open Cloud tools use an Open Cloud key.
npx. The prebuilt binary needs no Node.Tripwire is for Roblox developers who drive Studio through an AI coding agent.
[Tripwire v...] connected.studio_status. A connected Studio confirms the bridge works.Tripwire's server is a single binary. The easiest way to run it is with npx, which fetches the
prebuilt binary for your platform, so there is no Rust toolchain to install. Prefer a manual binary
or a source build? See the Alternatives at the end of this section.
One command:
Or add it to a project .mcp.json (or ~/.claude.json):
Add to ~/.codex/config.toml:
Or: codex mcp add tripwire -- npx -y tripwire-roblox
Add to ~/.gemini/settings.json (or a project .gemini/settings.json):
Or: gemini mcp add tripwire npx -y tripwire-roblox
Any client that speaks MCP over stdio can run it:
Prebuilt binary (no Node). Download the archive for your platform from the
Releases page (for example
tripwire-server-vX.Y.Z-aarch64-apple-darwin.tar.gz), extract it, and point your client's
command at the extracted tripwire-server with empty args.
Build from source (needs Rust):
Then point your client's command at that binary path.
The Studio tools reach Studio through a small plugin that long-polls the local server. Grab
Tripwire.rbxmx from the Releases page, or build it:
Restart Studio, enable Game Settings > Security > Allow HTTP Requests, then click the
Tripwire toolbar button and press Connect in the panel. The panel shows Connected and
the Output prints [Tripwire v...] connected.
The Studio tools need no key. The Open Cloud tools do. See Open Cloud setup below for the full walkthrough.
Most of Tripwire needs no credentials. These tools do, because they call Roblox Open Cloud:
run_luau, the headless tests (run_tests, run_test_file, list_tests), and every tool in the
Open Cloud sections below (assets, publishing, data stores, messaging, memory, universe and
servers, the Engine Instance API, moderation, secrets, monetization, Creator Store, groups,
analytics, platform, and open_cloud_request). They authenticate with a Roblox Open Cloud API key.
Use at your own risk. An Open Cloud key is a real credential with real power over your experience. Depending on the scopes you grant it, it can read and overwrite your live DataStores, publish new versions of your place, upload assets to your account, and message your servers. Treat it like a password: grant only the scopes you actually use, restrict it to your own IP, never commit it, and revoke it if it leaks. You are responsible for what you do with it. Tripwire is not affiliated with or endorsed by Roblox.
Tripwire).run_luau and the headless tests.publish_place.open_cloud_request.0.0.0.0/0 to allow any (simplest for local use). Set an expiration if you want.In the Studio command bar (View, then Command Bar), run:
GameId is your ROBLOX_UNIVERSE_ID; PlaceId is your ROBLOX_PLACE_ID. The place must be
published to Roblox for Open Cloud to act on it.
Create a .env at the repo root. It is gitignored and the server loads it automatically:
Or put the same variables in your MCP client's env block instead (those take precedence).
Reconnect the MCP server after changing either. Each tool works when the key grants its scope and
returns Roblox's own error if a scope is missing, so you can add scopes as you go.
studio_statusping_studiolist_studiosset_active_studioget_file_treeget_instance_childrenget_instance_propertiessearch_objectssearch_by_propertyget_script_sourcegrep_scriptsget_output_logget_selectionget_class_inforaycastget_bounding_boxfind_spawnscapture_screenshotcreate_instancedelete_instanceset_propertyupdate_script_sourceinsert_modelmass_createmass_set_propertystart_playteststop_playteststart_simulationstop_simulationsimulate_mouse_inputsimulate_keyboard_inputcharacter_navigationget_playtest_outputcursor from the previous call as since to get only new lines; the buffer is bounded so long sessions do not freeze it.reset_playtest_outputrun_luau_liverun_luaurun_testsrun_test_filelist_testswrite_testreview_securityscan_remotesscan_client_trustupload_assetget_assetupdate_assetlist_asset_versionsrollback_asset_versionarchive_asset / restore_assetlist_asset_quotasdownload_assetgrant_asset_permissionspublish_placelist_datastoreslist_datastore_entriesscope; - lists every scope.get_datastore_entryrevision of it.set_datastore_entrydelete_datastore_entryincrement_datastore_entrylist_datastore_entry_revisionsdelete_datastore / undelete_datastoresnapshot_datastoreslist_ordered_entriesget_ordered_entryset_ordered_entryincrement_ordered_entrydelete_ordered_entrypublish_messagememory_sorted_map_setmemory_sorted_map_getmemory_sorted_map_listmemory_sorted_map_deletememory_queue_addmemory_queue_readmemory_queue_discardflush_memory_storeget_universeupdate_universeget_placeupdate_placerestart_serverslist_game_serversget_game_server_logsget_playtest_output.translate_textcloud_list_instance_childrenroot.cloud_get_instancecloud_update_instancelist_user_restrictionsget_user_restrictionset_user_restrictionlist_user_restriction_logslist_secretscreate_secret / update_secretHttpService:GetSecret. It is sealed with the universe's public key on your machine before upload.delete_secretlist_developer_products / get_developer_productcreate_developer_product / update_developer_productlist_game_passes / get_game_passcreate_game_pass / update_game_passsearch_creator_storeinsert_model.get_creator_store_assetget_creator_store_productget_grouplist_group_membershipslist_group_roleslist_group_join_requests / resolve_group_join_requestset_group_roleget_usergenerate_user_thumbnaillist_inventorysend_notificationget_subscriptionquery_analyticsopen_cloud_requestapis.roblox.com with the key attached: method, host-relative path, query, JSON body. This is how the legacy and experimental systems are reached (badges, localization tables, Team Create, game events, thumbnails, ads, place version history, creator store products). The key is only ever sent to that host.Every API system you can add to a key on the Creator Dashboard, and the tools that use it. Scope names are the ones the dashboard and Roblox's error messages use.
| Permission (scope) | Tools |
|---|---|
Luau Execution (universe.place.luau-execution-session) | run_luau, run_tests, run_test_file, list_tests |
Places (universe-places:write, universe.place) | publish_place, update_place, get_place |
Universe (universe:read, universe:write) | update_universe, restart_servers, translate_text, list_game_servers, get_game_server_logs |
Instance (universe.place.instance) | cloud_list_instance_children, cloud_get_instance, cloud_update_instance |
Data Stores (universe-datastores.control, .objects, .versions) | the DataStores section: entries, revisions, store delete, snapshot |
Ordered Data Stores (universe.ordered-data-store.scope.entry) | list/get/set/increment/delete_ordered_entry |
Memory Stores (memory-store.sorted-map, .queue, :flush) | the sorted-map and queue tools, flush_memory_store |
Messaging Service (universe-messaging-service:publish) | publish_message |
User Restrictions (universe.user-restriction) | list/get/set_user_restriction, list_user_restriction_logs |
Secrets (universe.secret) | list/create/update/delete_secret |
Assets (asset:read, asset:write) | upload_asset, get_asset, update_asset, list_asset_versions, rollback_asset_version, archive_asset, restore_asset, list_asset_quotas |
Asset Permissions (asset-permissions:write) | grant_asset_permissions |
Legacy Assets (legacy-asset:manage) | download_asset |
Developer Products (developer-product) | list/get/create/update_developer_product |
Game Passes (game-pass) | list/get/create/update_game_pass |
Creator Store (creator-store-product) | search_creator_store, get_creator_store_asset, get_creator_store_product; create and update via open_cloud_request |
Groups (group:read, group:write) | get_group, list_group_memberships, list_group_roles, list_group_join_requests, resolve_group_join_request, set_group_role |
Users and Inventory (user.advanced:read, user.social:read, user.inventory-item:read) | get_user, generate_user_thumbnail, list_inventory |
Notifications (user.user-notification:write) | send_notification |
Subscriptions (universe.subscription-product.subscription:read) | get_subscription |
Analytics (universe.analytics:read) | query_analytics |
| Everything else: Ads, Game Events, Thumbnails, Creator Store saves, Legacy Badges, Legacy Develop, Legacy Followings, Legacy Game Internationalization, Legacy Groups, Legacy Localization Tables, Legacy Publish, Legacy Team Collaboration, Legacy Users | open_cloud_request |
These are platform limits, not bugs. They are written down here so you know going in.
stop_playtest may not take, because the plugin and the running game are separate DataModels. stop_simulation (F8) stops cleanly. If an F5 playtest will not stop, press Stop in Studio.RunService:IsStudio() is false and plugin APIs are absent. Use it for server and gameplay logic and the security tests, not for Studio-plugin or client-input behaviour.open_cloud_request). Their shapes can move, and open_cloud_request gives you the raw response, not a tidied one.Tripwire is maintained by one person in spare time. Issues and pull requests usually get a reply within about a week. A slow reply is not a no.
The Studio tools time out or report no connected Studio. The plugin is not connected. Install Tripwire.rbxmx, restart Studio, click the Tripwire toolbar button, and press Connect in the panel. The panel status and the Output line [Tripwire v...] connected both confirm it.
The plugin reports that HTTP is blocked. Turn on Game Settings > Security > Allow HTTP Requests on the open place. This is the most common setup failure. Studio cannot reach the local bridge without it.
The Output shows a version mismatch between the plugin and the server. The installed .rbxmx is stale. Rebuild it (npx rbxtsc && rojo build --output Tripwire.rbxmx), copy it into your Plugins folder, and restart Studio. The plugin prints its compiled version, so the prefix tells you what is actually installed; the panel header shows the same version.
An Open Cloud tool returns 401 Invalid API Key. The key itself is not accepted: it was regenerated, expired, or pasted incompletely. Every tool fails the same way. Create or copy the key again on the Creator Dashboard, replace ROBLOX_OPEN_CLOUD_KEY, and reconnect the MCP server.
An Open Cloud tool returns a 403 or scope error. The key is missing the scope that tool needs, the universe or place id is wrong, or the place is not published. Add the scope on the Creator Dashboard (the tool description names it), confirm the ids, and reconnect the MCP server. The error text is Roblox's own, so it names what is missing.
run_tests does not see your latest change. It reads the published place. Publish first; rojo serve only updates the live edit session, not what Open Cloud runs.
npx cannot fetch the server. You have no Node.js, or no network for the first download. Install Node, or use the prebuilt binary from the Releases page and point command at it (see Alternatives under Install).
The server says the bridge port is busy. A previous server is still holding port 44331. Close the old MCP session or the stale process, then reconnect.
The Studio runtime approach (a plugin that long-polls a local server, an injected in-play runner) follows ideas from boshyxd/robloxstudio-mcp and Chrrxs/robloxstudio-mcp. Tripwire is an independent, from-scratch implementation; the headless test harness, the CI security reviewer, and the Open Cloud tooling are its own.
Bug reports, feature ideas, and patches are welcome. See CONTRIBUTING.md for the setup, the build gates, and the branch and commit rules, and ARCHITECTURE.md for how the pieces fit together. By taking part you agree to the Code of Conduct.
Found a security issue? Do not open a public issue. See SECURITY.md for the private disclosure path.
Release notes for each version are on the Releases page.
MIT. See LICENSE.