Skip to main content
Glama
swlittles
by swlittles

roblox-studio-bridge MCP

An MCP server that lets an agent drive Roblox Studio: run Luau in any DataModel, sync a Rojo project into the open place, start solo or multiplayer play tests, read Output, inspect GUIs and see the game.

How it works

agent ──MCP stdio──▶ server.mjs ──▶ bridge.mjs (HTTP 127.0.0.1:44777) ◀──long-poll── StudioBridge plugin
                                                                          ├─ edit DataModel
                                                                          ├─ play-test server
                                                                          └─ play-test clients (relayed via the server)
  • Plugin (plugin/StudioBridge.server.luau): a small bootstrap. In edit mode it downloads plugin/Core.luau from the bridge, so reload_plugin applies core changes without restarting Studio. Play-test DataModels use the copy bundled into the plugin.

  • Play-test clients cannot use HttpService, so the server session relays their traffic through a RemoteEvent, with large results sent in chunks.

  • Code execution: loadstring in edit mode. Play-test server and clients have no loadstring, so the bridge compiles the code with a pinned Luau 0.700 compiler (bin/luau-compile-bc6) and the bundled Fiu VM runs the bytecode.

  • Screenshots: by default screenshot captures the real Studio window with bin/studio-snap (macOS, needs Screen Recording permission for the app hosting the agent). If Studio is on another Space behind a full-screen app, it is brought forward for about a second and the previous app is restored.

  • Software render fallback (mode: "render"): Studio's StudioCaptureService is feature-flagged off in current builds, and CaptureService captures can't be read back. The plugin falls back to a software raycast renderer (sun/moon plus point and spot lights with shadows, fog and sky), then overlays the visible GUI with the same z-order and clipping rules Roblox uses. It also renders ViewportFrame contents and returns every visible text string with its position. It works in edit mode, on the server and on each client, with no screen access.

Related MCP server: Roblox Executor MCP

Tools

Tool

Purpose

studio_status

Connected sessions (edit, server, client:<Player>)

run_luau

Run Luau (may yield) in edit/server/client[:name|n]; returns prints + return values

get_logs

Output from all sessions, filter by target/level/text, page with since

screenshot

Real Studio window capture (default), or mode:"render" software render of a session; optional camera {position, lookAt, fov, release}, title, width

list_gui

A client's PlayerGui tree with positions, visibility and text

sync_project

Push a Rojo project's scripts into the open place (edit mode)

start_test / stop_test

play, run, or multiplayer with 1–8 simulated clients

add_players

Add clients to a running multiplayer test

get_tree

Instance hierarchy under a path

reload_plugin

Hot-reload plugin/Core.luau in edit sessions

cli.mjs exposes the same tools from a shell (node cli.mjs status, node cli.mjs run server < file.luau, node cli.mjs shot client out.png '{"width":800}'). If no bridge is running, it starts one in the background.

Install

scripts/setup.sh installs dependencies, the pinned compiler, the capture helper and the plugin. Register the server in any MCP client:

{ "mcpServers": { "roblox-studio": { "command": "node", "args": ["/abs/path/studio-mcp/server.mjs"] } } }

License

MIT, see LICENSE. Third-party code: see THIRD_PARTY_NOTICES.md (Fiu, MIT).

Available Tools

11 tools
add_playersB

Add simulated clients to a running multiplayer test.

ParametersJSON Schema
NameRequiredDescriptionDefault
playersYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It correctly indicates this is an additive mutation, but it does not mention any limits on player count, whether the test must be actively running versus simply started, or what happens if the test is not running. This is thin coverage for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with no filler. The core verb, object, and required context are all front-loaded, making it immediately scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description is nearly sufficient, but it leaves the meaning of the 'players' parameter unexplained and provides no behavioral guardrails. Given the absence of annotations and output schema, a bit more detail about expected usage and constraints would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate for the undocumented 'players' parameter. The tool name and description imply that 'players' is the count of simulated clients, but the description never explicitly states that the number parameter controls how many clients are added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Add') with a clear resource ('simulated clients') and a context ('running multiplayer test'), which clearly separates it from siblings like start_test and stop_test. An agent can understand the tool's function without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'running multiplayer test' implies the tool should be used after start_test, but it does not explicitly say when to use it versus alternatives or mention any exclusions. Usage context is present but implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_logsB

Read Studio Output (LogService) captured from connected sessions. Use since with the last seq to page.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNo
limitNo
sinceNo
targetNo
containsNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that the tool reads (non-destructive) and that logs are 'captured from connected sessions,' implying a session must be connected. It also hints at pagination behavior via `since`. However, it does not mention any side effects, rate limits, or data volume considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads the purpose, and the second adds a concrete usage tip. Every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no output schema, and no annotations, this description is too sparse. It does not explain the return format, the meaning of the filter parameters, or any prerequisites beyond connected sessions. An agent would need to infer or experiment to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It only explains `since` ('use with the last seq to page'). The remaining parameters (level, limit, target, contains) are left entirely undocumented, leaving an agent to guess their types and purposes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read Studio Output (LogService) captured from connected sessions.' This clearly identifies the tool's function as retrieving logs. It does not explicitly differentiate from sibling tools, but the resource is distinct enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a specific pagination instruction: 'Use `since` with the last seq to page.' This gives practical guidance for one parameter. However, it does not state when to use this tool versus alternatives like studio_status or get_tree, nor any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_treeC

Describe the instance hierarchy under a path such as 'Workspace.Camp' (dot separated from game).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
depthNo
targetNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not disclose whether the tool is read-only, how depth behaves, what happens for invalid paths, or whether it returns a tree structure. The description only states what it describes, not how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence and front-loads the core purpose with a concrete example. It is concise, though it could be more structured by adding parameter details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, no annotations, and no output schema, the description is too thin. It does not explain the meaning of 'depth' or 'target', nor what the returned hierarchy looks like. An agent would likely need to guess or inspect other tools to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only explains the 'path' parameter via an example. 'depth' and 'target' are not explained at all; 'target' is a $ref to 'path', which is confusing and not clarified. The description does not compensate for the schema's lack of documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Describe') and resource ('instance hierarchy under a path'), and gives a concrete example ('Workspace.Camp'). It is clear what the tool does, though it does not explicitly distinguish it from siblings like list_gui.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives such as list_gui or get_logs. The example path format is helpful, but there is no context about typical use cases or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_guiA

List the PlayerGui hierarchy of a play-test client with positions, visibility and text.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the operation is a listing and names the output fields, but it does not state whether the tool is read-only, whether a live play-test is required, or how it behaves if target is omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It communicates the operation, resource, and key output attributes efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description needs to cover return format and parameter semantics, but it only partially describes output fields and leaves 'target' undefined. The agent cannot fully determine how to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the 'target' parameter, and the description does not explain what target means or what values it accepts. The phrase 'play-test client' offers a minimal hint, but the agent is left guessing the target's format and optionality.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a clear resource ('PlayerGui hierarchy of a play-test client'), and even names the data returned (positions, visibility, text). This is specific enough to distinguish it from generic siblings like get_tree or screenshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'play-test client' implies this tool is used during a play-test session, but the description does not explicitly state when to use it versus alternatives or what prerequisites are required. The usage context is inferable, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reload_pluginA

Hot-reload the StudioBridge core (plugin/Core.luau) in every connected session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry full behavioral burden. It discloses that reloading occurs in every connected session, but it does not mention side effects (e.g., state loss, script re-execution, or whether existing sessions will be disrupted). For a reload operation without annotation coverage, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence that front-loads the action, target, and scope. No filler words; every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is technically sufficient for a parameterless tool but lacks usage context and behavioral side effects. With no annotations and no output schema, an agent would still be uncertain about when to invoke it and what happens to sessions. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description adds no parameter-level meaning. Baseline 4 applies because no parameter documentation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action (hot-reload), a specific resource (plugin/Core.luau), and a scope (every connected session). This distinguishes it from siblings like run_luau (arbitrary code execution) and sync_project (project syncing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternative guidance is provided. The hot-reload wording implies usage after editing Core.luau, but the description does not state when to prefer this over run_luau or other siblings, leaving usage to the agent's inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_luauA

Execute Luau in a Studio DataModel and return print/warn output plus returned values. Code may yield (task.wait). plugin is available in scope. Target: edit (default), server, client, client:<PlayerName|n>, or a session id.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
targetNo
timeoutSecNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavioral traits: code may yield (task.wait), `plugin` is available in scope, and the tool returns print/warn output plus returned values. It also reveals that the target can be a session id, which implies stateful execution. With no annotations provided, the description carries the full burden, and it does a good job of setting expectations about execution context and output. It doesn't mention side effects or persistence, but for a code execution tool, the disclosed traits are substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the action, the environment, the output, and the key execution caveat in the first sentence. The second sentence lists targets efficiently. Every sentence earns its place, and there is no filler or repetition of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a code execution tool with no output schema and no annotations, the description covers the essential context: what it runs, where it runs, what it returns, and the available targets. It could mention timeout behavior or error handling, but the `timeoutSec` parameter name implies a timeout. The sibling tools are all distinct enough that an agent can select this tool correctly. A 4 is appropriate because it's nearly complete but leaves minor gaps around failure modes and exact return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the `code` parameter implicitly (the code to execute) and the `target` parameter explicitly by listing valid values (edit, server, client, client:<PlayerName|n>, session id). It does not explain `timeoutSec`, but the name is self-explanatory. The description adds meaning beyond the bare schema, especially for `target`, which would otherwise be ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes Luau code in a Studio DataModel and returns print/warn output plus returned values. It also specifies the available execution targets (edit, server, client, client:<PlayerName|n>, session id), which distinguishes it from sibling tools like get_logs or screenshot. The verb 'Execute' plus the resource 'Luau in a Studio DataModel' makes the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool: when you need to run Luau code and capture output. It lists the target options, which helps the agent choose the right execution context. However, it doesn't explicitly state when NOT to use it or name alternative tools (e.g., use get_logs for reading logs, use start_test for running tests). The target list partially compensates by implying the tool is for arbitrary code execution rather than specific test or log operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshotA

See what Studio shows. Default mode 'window' captures the real Studio window (macOS; briefly brings Studio forward if it is on another Space). Use title to pick a window (e.g. a multiplayer client's player name). mode 'render' asks a session (target: edit|server|client[:name]) for a software raycast render with GUI overlay and a GUI text listing; it works without screen access and can move the camera first: camera={position:[x,y,z], lookAt:[x,y,z], fov?, release?}. In window mode camera is applied to the target session before capturing.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
titleNo
widthNo
cameraNo
methodNo
targetNo
exposureNo
includeUiNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses macOS window focusing, the no-screen-access nature of render mode, and camera movement before capture. It does not mention output format, permissions, or error behavior, but the disclosed traits are significant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences pack a lot of mode, parameter, and platform detail without wasted words. The information is front-loaded and scannable, though a bulleted structure could improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations, no output schema, and 8 parameters, the description covers the core modes and key parameters but omits the meaning of four parameters and the return format. This is a meaningful gap for an agent deciding how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description explains mode, title, target, and the camera object's shape (position, lookAt, fov, release). However, width, method, exposure, and includeUi are left completely unexplained, so agents must guess at their meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'See what Studio shows' and then details two capture modes—window and render—with distinct behaviors. This clearly identifies the tool's purpose as capturing Studio visuals and differentiates it from sibling tools like get_logs or studio_status, which are unrelated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use window mode by default, when to pass title, and when render mode is preferable ('works without screen access'). It does not explicitly state when not to use the tool or name alternatives, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_testA

Start a Studio test from the edit DataModel. mode: play (solo, default), run (server only), multiplayer (players 1-8 simulated clients). Waits until the server and client sessions connect.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
playersNo
waitSecNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral load. It does disclose one key behavior: 'Waits until the server and client sessions connect.' However, it does not mention whether the call blocks beyond connection, what side effects occur, or what the return/value signals are.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the core action first, then summarizes modes, then notes the connection wait. Every sentence adds useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient for common default usage and explains mode behavior, but it lacks an explanation of waitSec and gives no output/return context. With no annotations and no output schema, this is a notable gap, though the tool is still usable for simple calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the only source of parameter meaning. It explains mode values and the players range ('players 1-8 simulated clients'), but waitSec is completely unexplained, leaving a semantic gap for one of the three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb and resource ('Start a Studio test from the edit DataModel') and lists the supported modes. This clearly distinguishes it from siblings like stop_test and makes the tool's purpose immediately obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when starting a Studio test. It also covers mode-specific guidance and defaults, though it does not explicitly name alternatives or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_testA

End the running Studio test session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses a mutation ('End') but doesn't mention side effects, such as whether the session state is saved, whether it fails if no session is running, or whether it is idempotent. Minimal disclosure beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every word earns its place, and the action is stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple stop action with no params or output schema, the description is nearly complete. It could mention behavior when no session is running, but that's a minor gap given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides complete coverage. The description correctly adds no parameter detail, meeting the baseline of 4 for no-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear, specific verb ('End') and resource ('running Studio test session'). It unambiguously distinguishes from the sibling 'start_test' by its opposite action, and no other sibling does this.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool vs alternatives. While the opposite 'start_test' implies it should be used after starting, the description never states prerequisites, conditions, or when not to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

studio_statusA

List connected Roblox Studio sessions (edit DataModel, play-test server and each play-test client).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It does disclose the scope of the listing (edit DataModel, play-test server, clients), which adds value beyond the schema (which is empty). However, it doesn't mention potential side effects, permissions, or session states (e.g., if no session is connected), so it's minimal but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the action ('List connected Roblox Studio sessions') and then specifies the exact session types. No wasted words; every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple status-listing tool with no parameters, the description is complete: it tells the agent what it does and what it returns. With no output schema, the description does not detail the return format (e.g., list of session IDs), but for a status tool, the core purpose is clear enough for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty with 100% coverage (vacuously). Per the rubric, baseline is 4 for zero-parameter tools dropped to baseline 3 due to high coverage. The description adds no parameter semantics needed; it's clear the tool takes no input. Thus 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: listing connected Roblox Studio sessions, and specifies the types of sessions (edit DataModel, play-test server, play-test client). This is a specific verb+resource combination that distinguishes it from sibling tools like run_luau or get_logs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage as a status/discovery tool, but it does not explicitly state when to use it versus alternatives. Given the sibling tools include run_luau and start_test, the description could have mentioned that this is useful before running scripts or tests, but it doesn't. It's adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_projectA

Push scripts from a Rojo project file into the open place (edit mode only). Creates/updates scripts and folders, removes previously synced instances that no longer exist on disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and handles it well by disclosing that the tool creates/updates scripts and folders and removes previously synced instances that no longer exist on disk. This warns the agent about destructive side effects. It does not cover failure modes or conflict handling, but the core mutation behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first front-loads the action and mode; the second lists effects. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no annotations or output schema, the description gives enough context to call it safely: what to pass, where it acts, and what side effects to expect. It does not describe return values or error outcomes, but those are less critical for invoking a sync operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the schema only says 'project' is a required string with no description, the tool description explains that it represents a Rojo project file, which is the key semantic needed to invoke it correctly. It stops short of spelling out path/form requirements, so it is not perfect.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Push scripts from a Rojo project file') and the target context ('open place, edit mode only'), then details the side effects of the sync. The combination of Rojo sync with create/update/remove behavior sets it apart from sibling tools like run_luau or reload_plugin.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended use clear: synchronize a Rojo project into the currently open place, and explicitly restricts use to edit mode. It does not name alternative sibling tools or provide when-not-to-use guidance beyond the edit-mode constraint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.1.0
    • First observedadd_players
    • First observedget_logs
    • First observedget_tree
    • First observedlist_gui
    • First observedreload_plugin
    • First observedrun_luau
    • First observedscreenshot
    • First observedstart_test
    • First observedstop_test
    • First observedstudio_status
    • First observedsync_project

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct capability: session listing, code execution, logs, screenshots, project sync, test lifecycle, GUI inspection, plugin reload, and tree traversal. Even where run_luau returns print output, get_logs is clearly the historical log reader, so no two tools are easily confused.

Naming Consistency4/5

Most tools follow a clear verb_noun snake_case pattern such as run_luau, start_test, stop_test, add_players, and get_tree. Minor deviations like studio_status (noun phrase) and screenshot (single word without object) keep it from being perfectly consistent.

Tool Count5/5

Eleven tools is well within the ideal range for a domain-specific server, and each tool covers a meaningful part of the Roblox Studio workflow without redundancy or bloat.

Completeness5/5

The surface covers session discovery, arbitrary Luau execution, log access, visual inspection, project syncing, test lifecycle management, simulated players, GUI hierarchy listing, and instance tree traversal. run_luau also provides a powerful escape hatch for any specialized operation not explicitly exposed.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers