Skip to main content
Glama

Roblox Compact MCP

sooo, i wanted Grok Bot to actually do stuff in Roblox Studio without burning my free credits counting 3 modulescripts ig

This is a local MCP server + a Studio plugin. It also uses Roblox's built-in MCP for playtests, runtime Luau, screenshots, inputs, and whatever else your Studio version exposes.

The whole point: do the work inside Studio, send the bot a small answer. Asking how many ModuleScripts named pepitoelmascapito123 exist should give you {"count":3}, not a novel about your entire game.

No AI API key. No npm dependencies. Node 22+ and Studio. Your bot/provider can still charge for tokens and tool calls, so this reduces context; it doesn't magically make their billing disappear lol

what u get

  • Exact names/classes/tags, count-only queries, scoped searches, and pagination.

  • Instance properties, attributes, tags, and child counts. You pick the properties.

  • Create, change, move, clone, delete, tag, and set/remove attributes in batches.

  • One Undo recording per edit batch. If an edit fails, its recording is cancelled.

  • Script line ranges, literal text search, unique replacements, and guarded writes that check the old source first.

  • Start/stop Play, run Luau in Edit/Server/Client, and get Studio state through the official MCP.

  • On-demand access to the official tool catalog: console logs, screenshots, player inputs, assets, etc. Eight compact tools are exposed initially.

  • A plugin toolbar button to connect/disconnect. Multiple Studio windows get separate IDs.

  • Local stdio, or authenticated JSON Streamable HTTP for a cloud bot.

  • Separate random keys for the Studio plugin and the remote bot. Nothing listens outside localhost by default.

The plugin handles the structured Edit operations. Runtime code, Play, and advanced tools use the official Studio connection. You can also use all structured tools through the official connection without installing the plugin.

Related MCP server: Roblox Studio MCP Server

let the bot set it up

Send Grok this repo and BOT_SETUP.md. Tell it to do setup on the Windows/Mac running Studio, not just in its cloud VM. The VM can't reach your desktop's localhost by being very confident about it.

Your app needs to support a local MCP process, or a remote MCP URL with a Bearer token. This repo doesn't assume a particular free-plan entitlement. If your Grok Bot build doesn't expose either, the bot can still operate its MCP client from your local computer when local execution is supported and enabled. It must verify which option actually exists in your app.

local setup, aka the easy path

git clone https://github.com/Crazy-Or-Something/roblox-compact-mcp.git
cd roblox-compact-mcp
node scripts/setup.mjs --install-plugin

That generates private files in .local/, installs GrokCompactBridge.rbxmx into your local Roblox Plugins folder, and backs up an older copy before replacing it. Restart Studio yourself when you're ready. Open your place, go to Plugins → Grok Bridge → Connect, and allow its localhost HTTP permission if Studio asks.

Enable the official connection too: Assistant → … → Manage MCP Servers → Enable Studio as MCP server. For Windows the upstream launcher is %LOCALAPPDATA%\Roblox\mcp.bat; for macOS it's /Applications/RobloxStudio.app/Contents/MacOS/StudioMCP.

For a local MCP client, merge the Roblox_Compact entry from .local/mcp.local.json into its config. That file contains the correct absolute Node and server paths for your machine. Let the client start it. Don't also run the HTTP server on the same port.

Clicking Connect doesn't start the Node process. The MCP client starts it, or you start it with the remote command below. The plugin only polls while connected in idle Edit mode; it disconnects from Edit operations during Play. Click again to disconnect.

Grok's cloud VM

Run this on your Studio computer:

node src/server.mjs --http

The remote MCP endpoint is http://127.0.0.1:28761/mcp. A cloud bot needs a tunnel or your own HTTPS reverse proxy forwarding to that local port. If you already have Cloudflare's tunnel client:

cloudflared tunnel --url http://127.0.0.1:28761

Use https://your-generated-host/mcp as the remote MCP URL. The connector must send:

Authorization: Bearer <remoteToken from .local/config.json>

Use your client's secret/header field, not a public repo file or a normal chat message. bridgeToken belongs only to the local Studio plugin. A tunnel URL alone won't grant access. HTTP replies are JSON; GET/SSE isn't provided. See xAI's tunnel guide for how their cloud connections reach local servers. A quick tunnel URL changes when restarted. Keep the bridge and tunnel running while using it.

If the app only offers OAuth and can't send a Bearer header, this version won't connect through that UI. Use its local execution path or a compatible MCP client; OAuth isn't implemented here.

Don't commit .local/. The generated plugin contains your private local bridge key. Share the source under plugin/; everyone generates their own plugin. Don't put that generated plugin in your game's Workspace/ReplicatedStorage, publish it to the Creator Store, or upload it as a public release.

how to not waste credits

Paste BOT_INSTRUCTIONS.md into your bot's project instructions. Example calls:

{"name":"roblox_studio","arguments":{"action":"list"}}

Pick the actual Studio ID first. Plugin IDs start with plugin:; official IDs don't. If both represent the same place, use the plugin ID for Edit operations and the official ID for Play/runtime. Never guess when multiple windows are open.

{"name":"roblox_query","arguments":{"studio_id":"ID_FROM_LIST","name":"pepitoelmascapito123","class":"ModuleScript","count_only":true}}

That's one count request and a tiny reply. Counts include descendants below root, not the root itself. Matching is exact and case-sensitive unless contains:true; class names are exact. Pagination traverses current children in depth-first order; if someone edits the hierarchy between pages, query again.

{"name":"roblox_query","arguments":{"studio_id":"ID_FROM_LIST","root":["ServerScriptService"],"class":"ModuleScript","limit":10}}

Paths are arrays of exact instance names, so names containing dots are fine. [] means game. Duplicate sibling names make a path ambiguous: the server fails instead of silently picking the wrong object. Rename/select them using explicit runtime Luau when needed.

{"name":"roblox_edit","arguments":{"studio_id":"ID_FROM_LIST","operations":[{"action":"create","class":"Part","parent":["Workspace"],"name":"hello cube","as":"cube","properties":{"Anchored":true,"Position":{"type":"Vector3","values":[0,5,0]}}},{"action":"attribute","ref":"cube","name":"MadeByGrok","value":true}]}}

Read 80 lines by default (200 max), or request a specific range:

{"name":"roblox_script","arguments":{"studio_id":"ID_FROM_LIST","action":"read","path":["ServerScriptService","Main"],"start_line":1,"line_count":40}}

replace takes find and replace and requires exactly one occurrence. write takes source and the complete expected_source; if it changed, the write fails. For new scripts, create an empty Script/ModuleScript with roblox_edit, then write with expected_source:"". Source changes use ScriptEditorService so open tabs are respected.

For Play: call roblox_play start with an official ID, inspect state, then roblox_luau with datamodel_type:"Server" or "Client". Run bounded assertions and return a short result. Collect relevant logs, then call roblox_play stop. Arbitrary Luau doesn't get an automatic Undo recording; use structured edit tools for regular edits.

Need another tool? roblox_advanced list returns names. describe with tool returns one schema; call uses that exact schema in arguments. Don't invent parameters. Screenshots/audio are forwarded only when explicitly requested through advanced calls. Paid generation and upstream subagents aren't invoked automatically.

Long responses are saved locally for 10 minutes (20 results max). The first response includes result_id, text, and next_offset. Fetch only the needed continuation with roblox_advanced, action:"result", result_id, and offset. text pages are slices of serialized JSON; concatenate them before parsing if you need the whole result. Filtering at the source is still cheaper than paging.

status / things i actually checked

Early version. Automated checks cover authentication, session isolation, bounded query schemas, pagination reconstruction, cache limits, and timeout behavior. Read-only live checks have passed against an open Windows Studio: exact ModuleScript count, two-item hierarchy query, Studio mode, and a requested Workspace property.

Another live check passed 15 assertions on detached engine objects: typed properties, tags, exact counts, attributes/removal, clone/delete, source reads/writes/replacements, grep, duplicate-name rejection and stale-write protection. Those objects never enter the real game's DataModel. The Undo service is mocked in that check, so it doesn't prove Studio's actual rollback behavior.

Plugin toolbar behavior, actual Undo rollback, and gameplay assertions still need validation in a disposable place. A successful count doesn't prove your game's combat system works. Don't treat this as a finished Roblox QA department lol

node --test
node scripts/probe.mjs
node scripts/check-live.mjs
node scripts/check-operations.mjs

check-live is read-only and targets the first listed Studio for smoke checks; it doesn't edit anything or start Play. Production tools always require explicit IDs. Node/protocol tests use a fake plugin; they don't touch your game.

Overrides: ROBLOX_PORT, ROBLOX_BRIDGE_TOKEN, ROBLOX_REMOTE_TOKEN, ROBLOX_MCP_COMMAND, ROBLOX_MCP_ARGS (JSON array). Configure an alternate port before generating the plugin; its endpoint is baked into the generated file. ROBLOX_ALLOWED_ORIGINS is a comma-separated explicit Origin allowlist for browser-based clients. Requests without Origin work for normal MCP clients.

There's no auto-retry for edits. If a dispatched request times out, it may have run: inspect before trying it again. One process owns the local port; stdio and HTTP modes can't both use it at once. API keys, local place contents and raw tool results don't go into analytics because there aren't any.

license

MIT. Unofficial project, not affiliated with Roblox or xAI. The official Studio MCP remains Roblox's own thing; no upstream code was copied into this repo.

Available Tools

8 tools
roblox_advancedC
Destructive

Discover official tools on demand (names), describe ONE schema, call it, or page a saved result. Includes logs, screenshots, input, assets. Generation/subagents can spend credits: use only when asked.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
limitNo
actionYes
offsetNo
argumentsNo
result_idNo

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this tool can mutate state. The description adds a credit-spend warning not present in annotations, which is useful, but it does not explain what 'call' actually changes, whether actions are reversible, or how results are returned.

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

Conciseness3/5

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

The description is short and front-loads the main actions, but the sentence 'Includes logs, screenshots, input, assets.' is ambiguous and does not clearly earn its place. The action-to-parameter mapping is also left implicit, reducing structural clarity.

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 complex meta-tool with six parameters, nested objects, a destructive annotation, and no output schema, the description is severely incomplete. It omits return value details, how arguments are used in the call action, and the specific consequences of each action, leaving the agent under-informed.

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% for six parameters, so the description must carry full parameter meaning. It hints at uses (e.g., 'names' for list, 'describe ONE schema', 'page a saved result') but never explicitly maps parameters like tool, arguments, result_id, limit, or offset to their actions, falling far short of compensating for the coverage gap.

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

Purpose3/5

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

The description enumerates several actions (list, describe, call, result) that map to the action enum, but it never states a single clear verb+resource for the tool as a whole. It does not differentiate itself from the many sibling roblox_* tools, leaving the agent to guess when to use this advanced interface.

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?

The only usage guidance is 'use only when asked' tied to credit spending. There is no explicit when-to-use, when-not, or comparison to sibling tools, leaving the selection criteria largely to inference.

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

roblox_editA
Destructive

Batch create/set/move/clone/delete/attribute/tag. One Undo recording; failure cancels. Typed values: {type:"Vector3",values:[x,y,z]}, Color3/CFrame/UDim2/Enum/Instance. Use as/ref to address newly created instances. Edit mode only.

ParametersJSON Schema
NameRequiredDescriptionDefault
studio_idYesExact official Studio ID or plugin: ID from roblox_studio list.
operationsYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotency. The description adds genuinely valuable context beyond that: the whole batch is a single Undo recording and any failure cancels the batch (atomicity), which is critical for a destructive multi-operation call, plus the typed-value encoding format.

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?

Extremely dense and front-loaded: the action list leads, followed by atomicity, then type encoding, then addressing. Every sentence carries information, though the telegraphic fragments (e.g. 'Use as/ref to address newly created instances') trade readability for brevity.

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 destructive, nested-operation mutation tool with no output schema, the description covers the essentials: what it mutates, that edits are atomic and undoable, how values are typed, and how new instances are referenced. It omits return/error shape and operation-limit behavior (maxItems 100), but the core calling contract is complete.

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?

With 50% schema coverage, the description must compensate. It does add the typed-value grammar for the 'value' parameter (Vector3/Color3/CFrame/UDim2/Enum/Instance) and explains the as/ref addressing mechanism, which the schema leaves as bare strings. But it says nothing about path, parent, properties, remove, or name, so the coverage gap is only partially filled.

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 names the specific resource (Roblox instances) and enumerates the seven operations it performs (create/set/move/clone/delete/attribute/tag), so an agent knows exactly what the tool does. It does not explicitly differentiate itself from siblings like roblox_script or roblox_query, but the operation list is distinctive enough to imply the scope.

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 closing constraint 'Edit mode only' gives one clear usage condition, and the action list implies batch editing is the use case. However, it never says when to prefer this over roblox_script or roblox_advanced, and no alternative is named, leaving routing to inference.

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

roblox_getB
Read-onlyIdempotent

Inspect an instance: requested properties, attributes, tags and child count. Paths are arrays of exact names; [] is game.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
studio_idYesExact official Studio ID or plugin: ID from roblox_studio list.
propertiesNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent and non-destructive, so safety is covered. The description adds that only requested properties plus attributes/tags/child count are returned, which is useful since there is no output schema, but it omits limits, error behavior for bad paths, and result size characteristics.

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?

Two short clauses, zero filler, with the retrieval scope front-loaded and the path convention appended. Appropriately sized for a simple read tool.

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?

With no output schema the description partially carries the return-value burden by naming what is inspected. It is still thin on path failure cases, the 30-property cap, and whether inspection recurses into children, which matters given the 64-element path limit.

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?

At 33% schema coverage the description must compensate, and it does explain path as an array of exact names with [] meaning game — a genuinely necessary detail. However it only gestures at the properties parameter ('requested properties') and says nothing about the maxItems caps or the studio_id reference.

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?

States a specific verb (Inspect) and resource (an instance) plus exactly what is retrieved: properties, attributes, tags, child count. This contrasts implicitly with mutating siblings like roblox_edit and roblox_script, though it never names them explicitly.

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 on when to choose this over roblox_query or roblox_advanced, and no stated prerequisites or exclusions. The reader must infer it is the read/inspect counterpart to the edit tools.

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

roblox_luauA
Destructive

Execute Luau through official MCP in Edit/Server/Client. Return compact aggregates. Official studio_id required. Arbitrary code may mutate the game; no automatic retries.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
studio_idYesExact official Studio ID or plugin: ID from roblox_studio list.
datamodel_typeYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag destructive=true and non-idempotent, and the description reinforces this with 'Arbitrary code may mutate the game'. It adds genuinely new behavioral context beyond annotations: 'no automatic retries', so the caller must handle failure itself, and 'Return compact aggregates', which hints at response shape.

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?

Five telegraphic clauses, front-loaded with the core action and scope, and every clause carries information (context modes, precondition, risk, retry policy). Style is terse rather than padded, though the fragmentary phrasing slightly hurts readability.

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 destructive, non-idempotent code-execution tool with no output schema, the description covers the key gaps: execution context, prerequisite ID, mutation risk, and no-retry behavior, plus a note on return shape. Missing only guidance on which sibling to prefer and any sandboxing or size semantics for 'code'.

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?

With schema description coverage at only 33%, the description must compensate, and it partially does: it clarifies studio_id must be the official IDE/plugin ID (reinforcing the schema hint) and enumerates the Edit/Server/Client execution contexts. But the most important parameter, 'code', gets no semantic detail beyond the 200k length cap, so the compensation is incomplete.

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?

States a specific verb (Execute) and resource (Luau code) and names the three datamodel contexts (Edit/Server/Client), which maps directly to the datamodel_type enum. However, it does not distinguish itself from close siblings like roblox_script or roblox_edit, leaving the agent to guess which execution tool to pick.

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?

Provides one hard prerequisite ('Official studio_id required') that routes the agent through roblox_studio first, and implies a raw code-execution use case. But it offers no explicit when-to-use vs alternatives among the seven siblings, nor any exclusion criteria.

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

roblox_playA
Destructive

Get state, start or stop official playtest. Run assertions with roblox_luau Server/Client after start; inspect logs with advanced tools; stop when finished.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
studio_idYesExact official Studio ID or plugin: ID from roblox_studio list.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, non-idempotent, non-read-only, so the safety profile is covered structurally. The description adds lifecycle context (stop when finished), but never warns that 'stop' tears down playtest state or that 'start' mutates a running Studio session — meaningful behavioral detail the annotations alone imply but do not explain.

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?

One tight sentence with the core action front-loaded, then the follow-up workflow. No filler, though the semicolon-chained clauses pack three distinct pieces of guidance into one breath.

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?

No output schema, so return values needn't be described, and both parameters are covered by schema or enum. Still, for a destructive lifecycle tool it omits what 'state' reports and what the session must look like before 'start' succeeds.

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 50%; studio_id is documented in-schema and action's enum self-documents state/start/stop. The description merely restates the same three verbs the enum already lists, adding no format, prerequisite, or validation detail.

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?

States a specific verb set (get state, start, stop) and resource (official playtest), which is clear and actionable. It does not explicitly differentiate itself from siblings like roblox_studio beyond naming the follow-up tools, but the lifecycle scope is 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?

Gives real workflow routing: use roblox_luau Server/Client for assertions after start, advanced tools for logs, and stop when finished. This tells the agent the ordering and the alternatives, though it gives no explicit when-not-to-use guidance.

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

roblox_queryC
Read-onlyIdempotent

Exact instance search. count_only returns ONLY a count in one call. No source/tree dump. Results are paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
nameNo
rootNo
classNo
limitNo
offsetNo
containsNo
studio_idYesExact official Studio ID or plugin: ID from roblox_studio list.
count_onlyNo
children_onlyNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description contributes real behavioral context by noting that count_only returns only a count in a single call and that results are paginated, but says nothing about error behavior, matching rules, or the shape of returned instances.

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 terse sentences with zero filler, and the governing concept (exact search) is front-loaded. The clipped style borders on under-specification rather than pure conciseness, so it falls short of a 5.

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 10-parameter, no-output-schema search tool, the description is too thin. It never clarifies how name/tag/class filters combine, what 'exact' means versus the contains flag, or what a returned instance looks like, so an agent is left guessing on most of the call surface.

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 only 10%, so the description must carry the load, and it only explains count_only. Parameters such as tag, name, class, root, contains, children_only, limit and offset receive no elaboration in either place, leaving most of the 10-parameter surface undocumented.

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?

States a specific operation (exact instance search) with a clear distinguishing qualifier ('exact'), so an agent knows it is a precise-match lookup rather than a fuzzy or tree traversal. It does not explicitly differentiate itself from siblings like roblox_get or roblox_advanced, which keeps it at a 4.

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?

The description implies a search use case but gives no when-to-use condition or named alternative among the many siblings. The closest thing to guidance, 'No source/tree dump', hints at what other tools are for but never routes the agent explicitly.

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

roblox_scriptB
Destructive

Read a line range, literal grep, unique exact replacement, or write with expected_source concurrency guard. Never read whole codebase to locate a name.

ParametersJSON Schema
NameRequiredDescriptionDefault
findNo
pathNo
rootNo
limitNo
actionYes
offsetNo
sourceNo
replaceNo
studio_idYesExact official Studio ID or plugin: ID from roblox_studio list.
line_countNo
start_lineNo
expected_sourceNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds real context beyond that: replace requires a 'unique exact' match and write enforces an 'expected_source concurrency guard'. It still omits what happens on a non-unique match, permission requirements, and failure behavior.

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 tight sentences, front-loaded with the four modes and followed by the key anti-pattern. No filler, and the most decision-relevant content comes first.

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 12-parameter mutation tool with 8% schema coverage and no output schema, the description is too thin. It neither compensates for the undocumented parameters nor explains per-action behavior or results, leaving the agent to guess for most inputs.

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 only 8% across 12 parameters, so the description must carry weight. It implies mappings for find (literal grep), replace (unique exact), expected_source (concurrency guard), and line-range params, but leaves root, path, offset, limit, line_count, and studio_id undocumented in both the description and schema.

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 names the four concrete operations (read a line range, literal grep, exact replacement, write with a concurrency guard), which map cleanly onto the action enum. It is clearly distinct from lookup-oriented siblings, though it never explicitly restates the resource (script) beyond the tool name.

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 closing sentence 'Never read whole codebase to locate a name' implies using grep/find instead of read for name lookups, which is useful routing guidance. However, it gives no explicit when-to-use versus siblings like roblox_query, roblox_get, or roblox_edit, nor prerequisites for each action.

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

roblox_studioB
Read-onlyIdempotent

List connected Studio/plugin sessions, or inspect official Studio state. Select explicit IDs before edits.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
studio_idNoExact official Studio ID or plugin: ID from roblox_studio list.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only the workflow hint about selecting IDs before edits; it says nothing about what 'state' returns, pagination, or session freshness.

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?

Two short, front-loaded sentences with no filler; the primary capability is stated first. The trailing workflow sentence is slightly cryptic but earns its place as the only usage guidance present.

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?

With no output schema, the description is the only place return content could be described, yet 'inspect official Studio state' leaves the shape of that state opaque. For a read-only two-mode tool this is adequate but leaves an agent guessing about what list and state actually yield.

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 50%: the studio_id field carries its own description, and the enum values list/state are self-describing. The description echoes both modes but adds no meaning beyond the schema for either parameter — no detail on what an official Studio ID looks like or what the 'state' inspection returns. Baseline 3 for partial coverage.

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 two specific verb+resource modes that map directly to the action enum: listing Studio/plugin sessions and inspecting official Studio state. It distinguishes the tool as a discovery/inspection entry point in a large sibling set (roblox_edit, roblox_query, etc.), though it doesn't explicitly name which sibling to use for edits.

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?

"Select explicit IDs before edits" implies a workflow prerequisite (resolve IDs here before mutating via another tool) but does not name the alternative edit tool or state an explicit when-not-to-use condition. Usage is inferable but not spelled out.

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. 8 tool updatesv0.1.0
    • First observedroblox_advanced
    • First observedroblox_edit
    • First observedroblox_get
    • First observedroblox_luau
    • First observedroblox_play
    • First observedroblox_query
    • First observedroblox_script
    • First observedroblox_studio

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation4/5

The eight tools have distinct primary purposes: session management, instance search, instance inspection, batch editing, script manipulation, Luau execution, playtest control, and an advanced gateway. Minor potential overlap exists between roblox_advanced and tools like roblox_studio and roblox_luau, but the descriptions provide clear usage contexts.

Naming Consistency4/5

All tools use the consistent 'roblox_' prefix with lowercase snake_case, making them easily identifiable as a set. The suffixes mix nouns and verbs (e.g., studio, query, get, edit), but the format is uniform and each name clearly conveys its purpose.

Tool Count5/5

Eight tools is well-scoped for a compact MCP covering Roblox Studio interactions, offering a focused set without redundancy. Each tool addresses a distinct operational area, and the count falls comfortably within the ideal 3–15 range.

Completeness5/5

The toolset covers the essential lifecycle: connecting to sessions, querying and inspecting instances, editing them, reading/writing scripts, executing Luau, managing playtests, and accessing additional official tools via the advanced gateway. No obvious critical gaps exist for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to control Roblox Studio by running Luau code, creating and editing instances, reading the scene tree, and managing scripts via an MCP server with a long-polling plugin bridge.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to explore, edit, and automate Roblox Studio sessions locally, including browsing instance hierarchies, reading and modifying scripts, manipulating properties, creating instances, building terrain, and running playtests.
    800 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to drive a running Roblox Studio in real time over a single WebSocket, executing whole Luau programs, installing in-engine controllers, hot-patching scripts during live playtests, and receiving errors, assertions and other events as pushes. It also reaches Roblox Open Cloud for the open place and answers visual questions via a vision sidecar, exposing all of this through nine MCP tools.
    9
    MIT