Skip to main content
Glama

Tripwire

made by alibolly

npm CI MCP Registry License: MIT

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.


Requirements

  • An MCP client: Claude Code, Codex, Gemini, or any client that speaks MCP over stdio.

  • Roblox Studio, for the Studio tools. These need no API key.

  • Node.js, only if you run the server with npx. The prebuilt binary needs no Node.

  • For the headless test, asset, and Open Cloud tools: a published place and a Roblox Open Cloud API key. See Open Cloud setup.

Related MCP server: Melo

Quickstart

Tripwire is for Roblox developers who drive Studio through an AI coding agent.

  1. Wire the server into your MCP client (one command or a small config block, see Install below).

  2. Install the Studio plugin so the Studio tools can reach Studio (see the plugin step in Install).

  3. Open your place in Studio, click the Tripwire toolbar button, and turn on Game Settings > Security > Allow HTTP Requests. The Output prints [Tripwire v...] connected.

  4. Ask your agent to run studio_status. A connected Studio confirms the bridge works.

  5. Optional: add an Open Cloud key for the headless test, asset, and Open Cloud tools (see Open Cloud setup).


Install

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:

claude mcp add --transport stdio tripwire -- npx -y tripwire-roblox

Or add it to a project .mcp.json (or ~/.claude.json):

{
  "mcpServers": {
    "tripwire": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "tripwire-roblox"]
    }
  }
}

Add to ~/.codex/config.toml:

[mcp_servers.tripwire]
command = "npx"
args = ["-y", "tripwire-roblox"]

Or: codex mcp add tripwire -- npx -y tripwire-roblox

Add to ~/.gemini/settings.json (or a project .gemini/settings.json):

{
  "mcpServers": {
    "tripwire": {
      "command": "npx",
      "args": ["-y", "tripwire-roblox"]
    }
  }
}

Or: gemini mcp add tripwire npx -y tripwire-roblox

Any client that speaks MCP over stdio can run it:

command: npx
args:    ["-y", "tripwire-roblox"]

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):

git clone https://github.com/aliboIly/Tripwire.git
cd Tripwire/server
cargo build --release   # produces server/target/release/tripwire-server

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:

cd Tripwire/plugin
npm install
npx rbxtsc
rojo build --output Tripwire.rbxmx
cp Tripwire.rbxmx ~/Documents/Roblox/Plugins/   # macOS; Windows: %LOCALAPPDATA%\Roblox\Plugins

Restart Studio, click the Tripwire toolbar button, and enable Game Settings > Security > Allow HTTP Requests. The Output shows [Tripwire v...] connected.

The Studio tools need no key. The Open Cloud tools do. See Open Cloud setup below for the full walkthrough.


Open Cloud setup

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), upload_asset, publish_place, and the DataStore, Ordered DataStore, MessagingService, Memory Store, platform, and engagement tools. 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.

1. Create the key

  1. Go to create.roblox.com/dashboard/credentials and sign in.

  2. Click Create API Key and name it (for example Tripwire).

  3. Under Access Permissions, add only the API systems for the tools you want, and grant each the operation it needs, scoped to your experience:

    • Luau Execution (write): run_luau and the headless tests.

    • universe-places (write): publish_place.

    • Assets (read + write): upload_asset.

    • DataStores and Ordered DataStores: the data-store tools.

    • Messaging Service (publish) and Memory Stores: those tools.

    • User/Group/Inventory/Subscription/Notification: the platform and engagement tools.

  4. Under Security, set Accepted IP Addresses to your machine's IP, or 0.0.0.0/0 to allow any (simplest for local use). Set an expiration if you want.

  5. Click Save & Generate Key and copy the key string. It is shown only once.

2. Find your universe and place IDs

In the Studio command bar (View, then Command Bar), run:

print("universe", game.GameId, "place", game.PlaceId)

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.

3. Give Tripwire the credentials

Create a .env at the repo root. It is gitignored and the server loads it automatically:

ROBLOX_OPEN_CLOUD_KEY=paste_the_key_here
ROBLOX_UNIVERSE_ID=000000
ROBLOX_PLACE_ID=000000
ROBLOX_CREATOR_USER_ID=000000   # only for upload_asset (your user id)

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.


Tools

Connection

Read and inspect

Spatial (read-only)

Edit (each is one undo step)

Playtest and input

Tests and headless execution (Open Cloud)

Security review (static analysis, no key)

Assets and publishing (Open Cloud)

DataStores (Open Cloud)

Messaging and memory (Open Cloud)

Platform and engagement (Open Cloud)


What you can do

  • Build scenes from a prompt. Create and mass-create instances, set typed properties, insert models, and write scripts, each as a clean undo step.

  • Test gameplay in CI. Write specs, run them headlessly in the real engine through Open Cloud, and gate pull requests on the results.

  • Catch exploits before they ship. The security reviewer flags server handlers that trust client input and suggests the server-side fix; the same check runs automatically on every PR.

  • Drive a real playtest. Enter Play mode, send keyboard and mouse input, walk the character to a spot, read the combined server/client output, then stop.

  • Inspect a live place. Read the instance tree, search by name or property, read and grep scripts, and pull the Output log.

  • Automate Open Cloud. Seed DataStores for test fixtures, publish a place, broadcast a MessagingService topic, or look up users, groups, and inventory.


Known limits

These are platform limits, not bugs. They are written down here so you know going in.

  • F5 playtest stop is best-effort. 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.

  • In-play actions go through an injected runner. Input, runtime state, and stop during a playtest are relayed over the bridge, not called directly on the plugin.

  • Headless tests run a server context. Open Cloud runs your published place on a server, where 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.

  • Tool parity with Roblox's built-in Assistant is maintained by hand.

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.


Troubleshooting

The Studio tools time out or report no connected Studio. The plugin is not running. Install Tripwire.rbxmx, restart Studio, click the Tripwire toolbar button, and check the Output for [Tripwire v...] connected.

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.

An Open Cloud tool returns a 401, 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, 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.


Prior art

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.


Contributing

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.

Changelog

Release notes for each version are on the Releases page.


License

MIT. See LICENSE.

A
license - permissive license
-
quality - not tested
A
maintenance

Maintenance

Maintainers
<1hResponse time
0dRelease cycle
3Releases (12mo)
Commit activity

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aliboIly/Tripwire'

If you have feedback or need assistance with the MCP directory API, please join our Discord server