Roblox Client MCP
Provides tools for interacting with a live Roblox client, enabling commands to read the console, inspect the instance tree, list and decompile scripts, monitor remote traffic, and run Luau code in the currently open game.
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., "@Roblox Client MCPwhat scripts are running in the game right now?"
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.
Roblox Client MCP
A hosted relay that lets an AI drive a live Roblox client.
You create an account, get a loadstring, paste it into an executor, and point your MCP client at an endpoint. The AI can then read the console, walk the instance tree, list and decompile scripts, watch remote traffic, and run Luau — in the game that is actually open.
┌───────────────┐ ┌────────────────────┐
│ Your AI │ MCP over HTTP (bearer token) │ │
│ Claude / │ ───────────────────────────────▶ │ This server │
│ Cursor / │ ◀─────────────────────────────── │ relay + MCP │
│ any MCP host │ tool results │ + SQLite │
└───────────────┘ │ + web dashboard │
│ │
┌───────────────┐ POST /api/agent/sync │ │
│ Arceus X │ ───────────────────────────────▶ │ │
│ (Lua agent) │ ◀─────────────────────────────── │ │
└───────────────┘ queued commands └────────────────────┘Executors have no outbound WebSocket, so the Lua agent uses HTTP long-polling: it posts its console output and command results, and the same response carries back whatever the AI asked for. That works through NAT and on mobile networks.
Quick start (Docker)
git clone https://github.com/LiteEagle262/Roblox-Client-MCP.git
cd Roblox-Client-MCP
cp .env.example .env
# edit .env and set PUBLIC_URL to the origin users will actually hit
docker compose up -dOpen the site, click Get an account number, and save the 16-digit number it shows you. It is the only credential — there is no email and no password recovery.
Deploying on Dokploy
Create an application, source = this Git repo, build type = Dockerfile.
Add a volume mounted at
/data. That single path holds the SQLite database and the signing secret; without it you lose every account on redeploy.Set the environment variables you care about, at minimum:
Variable
Value
PUBLIC_URLhttps://your-domain.example(no trailing slash)TRUST_PROXYtrueDATABASE_PATH/data/bridge.dbAdd the domain in Dokploy and point it at container port
3000. Traefik terminates TLS; the container itself speaks plain HTTP.Deploy. The health check hits
/healthz.
Notes that save time later:
PUBLIC_URLis baked into every generated loadstring. Change it and every existing loadstring points at the old host. Set it once, correctly.There is no external service to configure: no Redis, no Postgres, no object storage.
Start with
ACCOUNT_CREATION_ENABLED=trueand flip it tofalseif you want a private instance — existing accounts keep working.
Related MCP server: Roblox Executor MCP
The dashboard
Panel | What it does |
Overview | Live executor status (game, player, uptime, queued commands), a stream of the commands your AI has sent, and both connection blocks |
Connect an executor | The loadstring to paste, the connect key, and a rotate button |
Connect your AI | The MCP endpoint, the bearer token, a ready-to-paste client config, and a |
Console | Live console output with level filters, text search, pause and auto-scroll |
Tools | Every tool the AI can call, grouped and searchable |
Settings | Account label, recent activity, session reset, account deletion |
Status and console updates arrive over a WebSocket (/ws/dashboard), scoped to your session.
Tools exposed over MCP
31 tools. Reads are safe; anything that writes, fires, or moves is marked destructive and hits a real game.
Session and code
Tool | What it does |
| Is an executor attached, and what game is it in |
| Run arbitrary Luau; returns values and console output |
| Evaluate one expression |
Console
Tool | What it does |
| Read buffered prints, warnings and errors |
| Discard the console buffer |
Game and player
Tool | What it does |
| Place name, place id, job id, creator, player counts |
| Players with health and world position |
| Your own position, health, walk speed, camera, team, leaderstats |
| One player's character, health, team, leaderstats and tools |
| Move your character to a player, an instance, or coordinates |
| Marketplace name, creator and price for an asset id |
| Show a toast on the user's screen |
Explorer
Tool | What it does |
| Nested view of the instance tree |
| Class, children, attributes, properties |
| Scan for instances by name and/or class |
| Block until a path resolves, instead of guessing with sleeps |
| Write a property, with Roblox value coercion |
| Invoke a method on an instance |
Scripts
Tool | What it does |
| DataModel, loaded, running or module scripts |
| Recover readable Luau from a script instance |
| Grep every decompiled script for a string; returns script, line and context |
| Dump a script closure's captured variables |
| Find live tables or functions by name, hash or constant |
Remotes
Tool | What it does |
| Every RemoteEvent, RemoteFunction and Bindable, with paths |
| Hook namecall to log all remote traffic |
| Log or block traffic on one specific remote |
| List connections on an event, with the owning script |
| Fire an event on an instance |
| Invoke a remote from the client |
Network
Tool | What it does |
| HTTP through the executor's HTTP layer |
| Read, write, list or delete files in the executor's workspace |
roblox_search_scripts is usually the fastest way into an unfamiliar game: find a remote with
roblox_list_remotes, then grep for its name to find the script that uses it, then
roblox_decompile_script the result. Decompiles are cached per session, so the first search is
slow and later ones are fast.
Roblox value types are exchanged as tagged objects, so the AI can read and write them:
{ "__type": "Vector3", "x": 0, "y": 50, "z": 0 }
{ "__type": "Color3", "r": 1, "g": 0.2, "b": 0.2 }
{ "__type": "CFrame", "position": { "x": 0, "y": 5, "z": 0 } }
{ "__type": "UDim2", "x": { "scale": 0, "offset": 100 }, "y": { "scale": 1, "offset": 0 } }
{ "__type": "EnumItem", "enum": "Enum.HumanoidStateType", "name": "Jumping" }
{ "__type": "Instance", "path": "game.Workspace.Baseplate" }Connecting an MCP client
Grab the endpoint and token from Connect your AI, then:
Generic / Claude Desktop / Cursor
{
"mcpServers": {
"roblox": {
"type": "http",
"url": "https://your-domain.example/mcp",
"headers": { "Authorization": "Bearer rcm_your_token_here" }
}
}
}Verify it by hand
curl -s https://your-domain.example/mcp \
-H "Authorization: Bearer rcm_your_token_here" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'The endpoint is stateless, so every request is independent and any replica can serve it.
Executor requirements
The agent is written against the generic executor surface, and Arceus X / SPDM is the tested target (function reference).
Required | Why |
| Runs the code the AI asks for |
| Fetches the agent itself |
| Talks to the relay |
Everything else is probed with pcall and degrades gracefully:
Used when available | Enables |
|
|
|
|
| Decompile caching, so repeat searches are fast |
|
|
|
|
|
|
|
|
|
|
|
|
| Extra detail in results |
If a function is missing, the tool returns a clear error instead of failing the whole session. The agent also stops cleanly when the server revokes its key, so a rotated key does not leave a zombie poll loop running in the game.
Configuration
Every variable has a working default except PUBLIC_URL.
Variable | Default | Notes |
|
| Baked into loadstrings. Set this correctly. |
|
| |
|
| Put it on a volume. |
|
| Set |
|
|
|
|
| Hard cap. |
| empty | If set, registration requires |
|
| Dashboard session lifetime. |
|
| Per IP. |
|
| Per IP. |
|
| Per IP. |
|
| Per IP, on the agent sync endpoint. |
|
| How long an idle poll parks. Lower = snappier shutdown, more requests. |
|
| How long the AI waits for the executor. |
|
| Console lines kept per session. |
|
| Silence before a session is marked offline. |
| auto | Generated beside the database on first boot. Set it to run multiple replicas. |
|
|
|
Local development
npm run install:all
# terminal 1 - API on :3000
npm run dev:server
# terminal 2 - dashboard on :5173, proxying /api, /mcp and /ws to :3000
npm run dev:webProduction-shaped build:
npm run build:local # builds web, builds server, copies web/dist into server/public
npm startTests
npm testnpm run test:smokeboots a throwaway server on :3999 and exercises account creation, the loader, the agent sync loop, an MCPtools/callthat round-trips through a simulated executor, console capture, rate limiting and key rotation. It also asserts that the dashboard's tool catalogue matches what the MCP server registers.npm run test:luaruns the generated agent under a stubbed Roblox environment in a real Lua interpreter, with a real HTTP loop against the relay, proving the agent itself works without an executor. It skips cleanly if noluabinary is present.
Security
This is a tool for driving a game client you control. Read SECURITY.md before exposing an instance to the public internet. The short version:
The account number is a password. 16 digits is roughly 53 bits, and login is rate limited, but treat it like a secret.
The connect key is in the loadstring URL. Anyone who sees the URL can attach a session to your account. Rotate it if it leaks.
The MCP token grants full control of the attached client to whoever holds it. Do not put it in a public config.
Anyone with a valid MCP token can run arbitrary Luau in the connected client. There is no tool-level permission system. Run a private instance if that matters to you.
All three secrets are rotatable independently from the dashboard.
Legal
Arceus X is a third-party Roblox executor. Using executors can violate Roblox's Terms of Service and may get an account banned. This project is not affiliated with, endorsed by, or supported by Roblox Corporation or SPDM Team. You are responsible for what you run.
License
MIT — see LICENSE. Do whatever you want with it.
This server cannot be deployed
Maintenance
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
Securely control computers you explicitly pair through files, terminals, processes, screenshots, desktop UI/input, clipboard, browser automation, diagnostics, and document tools.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceEnables AI assistants to interact with running Roblox game instances by inspecting the game hierarchy, reading client-side scripts, and executing Lua code directly within the Roblox client through a WebSocket bridge.424 npm-
- AlicenseAqualityBmaintenanceEnables agents to interact with a running Roblox game client, execute Lua code, inspect scripts, spy on remotes, and more.2168 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to interact with a running Roblox game client to execute Lua code, inspect scripts, spy on remotes, and more.68 npm216MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with a running Roblox game client, including executing Lua code, inspecting scripts, and spying on remotes, with a local dashboard for monitoring and control.68 npmMIT