Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Chrrxs/robloxstudio-mcp/llms.txt

Use this file to discover all available pages before exploring further.

Roblox Studio MCP provides first-class tools for managing playtest lifecycle directly from an AI agent. solo_playtest handles single-player start/stop/status with a clean action model, while multiplayer_playtest orchestrates multi-client StudioTestService sessions. Alongside lifecycle control, a suite of simulation and device tools lets you apply network condition presets, inspect the device simulator, and capture screenshots across multiple device profiles — all from a single agent loop without manually clicking the Studio toolbar.

solo_playtest

Starts, stops, or inspects a single-player Studio playtest. Returns a brief lifecycle status; use get_runtime_logs to read script output after the playtest is running.
action
string
required
Lifecycle action to run. One of:
  • "start" — starts a single-player playtest. Requires mode.
  • "stop" — stops the playtest and waits for all runtime peers (server, client) to disconnect.
  • "status" — returns the currently active runtime roles without changing state.
mode
string
Required when action="start". One of:
  • "play" — starts in Play mode (spawns a character, connects a local client).
  • "run" — starts in Run mode (server-only, no local player character).
timeout
number
Maximum seconds to wait for start readiness or stop teardown. Defaults: start → 60 seconds, stop → 15 seconds.
instance_id
string
Which connected Studio place to target. Required when multiple places are connected; omit when only one is open. Use get_connected_instances to list available IDs.
Ordinary start → eval → stop workflows do not need reset_simulation_state. Reserve simulation resets for tasks that explicitly involve network condition testing or device simulator state.

Typical solo workflow

1

Start the playtest

Call solo_playtest with action="start" and mode="play". The tool waits until server and client peers are registered and ready.
2

Evaluate server state

Call eval_server_runtime to inspect live game state, or eval_client_runtime to inspect the client.
3

Read logs

Call get_runtime_logs with target="all" to collect print/warn output from all peers.
4

Stop the playtest

Call solo_playtest with action="stop". The tool waits for runtime peers to disconnect before returning.

multiplayer_playtest

Starts or inspects a StudioTestService multiplayer playtest with one or more client windows. Returns brief lifecycle status only; read script output with get_runtime_logs.
action
string
required
Lifecycle action to run. One of:
  • "start" — starts a multiplayer test. Requires numPlayers and force=true.
  • "status" — inspects current StudioTestService state and registered peers.
  • "add_players" — adds more client players to a running test. Requires numPlayers.
  • "leave_client" — disconnects a specific client. Uses target to specify which client.
  • "end"disabled. Returns the StudioTestService:EndTest broken-API reason. Close test windows manually.
numPlayers
number
Required for action="start" and action="add_players". Number of client players to start or add (1–8).
force
boolean
Required for action="start". Pass true only after acknowledging that MCP cannot stop a multiplayer test via StudioTestService:EndTest (known Roblox regression) and that test windows must be closed manually.
target
string
Client to disconnect for action="leave_client". For example, "client-1" (default), "client-2", etc.
testArgs
any
For action="start": a JSON-compatible table passed to StudioTestService:GetTestArgs() on the server and each client.
timeout
number
Maximum seconds to wait for peer detection or action completion. Defaults to 30 seconds.
instance_id
string
Which connected Studio place to target. Required when multiple places are connected; omit when only one is open.
action="end" is permanently disabled. StudioTestService:EndTest is broken in the current MCP flow. To stop a multiplayer test, manually close the extra Studio client windows that were opened when the test started. This is a known Roblox regression, not an MCP limitation.

Network Simulation

set_network_profile

Applies simulated network conditions to active playtest client peers via NetworkSettings in plugin context. Requires a running playtest.
profile
string
required
Network condition preset:
  • "great" — 30 ms total latency (15 ms each direction), 0 ms jitter, 0% packet loss.
  • "good" — 100 ms total latency (50 ms each direction), 10 ms jitter, 0% packet loss.
  • "poor" — 300 ms total latency (150 ms each direction), 100 ms jitter, 0.5% packet loss.
  • "custom" — applies only the numeric overrides you provide.
target
string
Client target: "client-1" (default), "client-2", etc., or "all-clients" to apply to every connected playtest client.
overrides
object
Optional exact NetworkSettings property overrides. For preset profiles, these replace preset fields; for "custom", only these properties are applied. Fields:
  • InboundNetworkMinDelayMs — server-to-client minimum latency in milliseconds.
  • OutboundNetworkMinDelayMs — client-to-server minimum latency in milliseconds.
  • InboundNetworkJitterMs — server-to-client jitter in milliseconds.
  • OutboundNetworkJitterMs — client-to-server jitter in milliseconds.
  • InboundNetworkLossPercent — server-to-client packet loss percentage (max 0.5%).
  • OutboundNetworkLossPercent — client-to-server packet loss percentage (max 0.5%).
instance_id
string
Which connected Studio place to target.

get_simulation_state

Inspects the current NetworkSettings and/or StudioDeviceSimulatorService state for the edit context and connected clients. Server peers are always skipped.
include
string
State to inspect: "network", "deviceSimulator", or "both" (default).
target
string
Scope: "edit-and-clients" (default), "edit", "all-clients", or "client-N". Server peers are never included.
instance_id
string
Which connected Studio place to target.

reset_simulation_state

Resets NetworkSettings and/or StudioDeviceSimulatorService to a clean baseline. Network reset sets all six simulated NetworkSettings fields to 0; device reset calls StopSimulationAsync().
Do not call this as routine Studio lifecycle hygiene. Use it only after intentionally changing simulation settings, when get_simulation_state shows dirty state, or when a task explicitly requires a clean network/device baseline.
target
string
Scope: "edit-and-clients" (default), "edit", "all-clients", or "client-N". Server peers are skipped.
network
boolean
Reset simulated NetworkSettings fields to 0 (default true).
deviceSimulator
boolean
Stop device simulation via StopSimulationAsync() (default true).
instance_id
string
Which connected Studio place to target.

Device Simulator

get_device_simulator_state

Inspects StudioDeviceSimulatorService state and the list of supported built-in device presets. Defaults to target="edit". When no simulated device is active, isSimulating=false and active-only fields are omitted.
target
string
"edit" (default) or a regular playtest client like "client-1". Server targets are rejected.
deviceId
string
Optional built-in device preset ID to inspect in detail via GetDeviceInfoAsync.
includeDeviceList
boolean
Include the full built-in device preset list from GetDeviceListAsync (default true).
instance_id
string
Which connected Studio place to target.

set_device_simulator

Sets or stops StudioDeviceSimulatorService using built-in device presets. Applies deviceId first, then optional overrides for orientation, resolution, pixel density, and scaling mode.
target
string
"edit" (default), "client-1", "client-2", etc., or "all-clients". Server targets are rejected.
deviceId
string
Built-in device preset ID from get_device_simulator_state.
orientation
string
ScreenOrientation enum name, e.g. "LandscapeRight", "LandscapeLeft", "Portrait", or a full Enum.ScreenOrientation.* string.
resolution
object
Optional resolution override: { width: number, height: number } in pixels.
pixelDensity
number
Optional positive pixel density override applied after the device preset.
scalingMode
string
DeviceSimulatorScalingMode enum name, e.g. "ScaleToPhysicalSize", or a full Enum.DeviceSimulatorScalingMode.* string.
stopSimulation
boolean
Stop device simulation. When true, do not pass other simulator setters.
instance_id
string
Which connected Studio place to target.

capture_device_matrix

Applies up to 6 ordered device simulator settings, captures a viewport screenshot for each, then restores the previous simulator state. Useful for visual regression checks across multiple device profiles in a single agent call.
entries
array
required
Ordered device capture entries (max 6). Each entry may include:
  • label — optional string label included in screenshot metadata.
  • deviceId — built-in device preset ID.
  • orientationScreenOrientation enum name or full string.
  • resolution{ width, height } override.
  • pixelDensity — positive density override.
  • scalingModeDeviceSimulatorScalingMode enum name or full string.
target
string
"edit" (default) or a regular playtest client such as "client-1". all-clients and server targets are rejected.
format
string
Screenshot format: "jpeg" (default, compact) or "png" (lossless).
quality
number
JPEG quality 1–100 (default 92). Ignored for PNG.
settleSeconds
number
Seconds to wait after applying each simulator entry before capturing (default 0.3).
restoreAfter
boolean
Restore the previous simulator state after the matrix finishes (default true). Custom active devices are not preserved.
instance_id
string
Which connected Studio place to target.

Full workflow example: solo playtest with runtime eval

-- 1. Start a solo playtest in play mode
-- solo_playtest: { action: "start", mode: "play" }

-- 2. Evaluate live server state
-- eval_server_runtime: { code: "return game.Players.NumPlayers" }

-- 3. Read logs from all peers
-- get_runtime_logs: { target: "all" }

-- 4. Stop the playtest
-- solo_playtest: { action: "stop" }
1

Start

solo_playtestaction="start", mode="play". Waits up to 60 s for server + client peers.
2

Eval

eval_server_runtime → inspect module singletons, live game state, DataStore connections.
3

Check logs

get_runtime_logstarget="all", optional filter for specific messages.
4

Stop

solo_playtestaction="stop". Waits up to 15 s for peers to disconnect.

Build docs developers (and LLMs) love