Roblox Studio MCP Bridge
Enables AI assistants to read, create, modify, and delete instances in the Roblox Studio DataModel, with full undo support and live updates.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Roblox Studio MCP BridgeFind all RemoteEvent instances in the game"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Roblox Studio MCP Bridge
A Model Context Protocol (MCP) server that connects AI coding assistants like Claude Code directly to Roblox Studio. Read, create, modify, and delete instances in the DataModel — all from your terminal.
How It Works
Claude Code (MCP Client)
|
MCP Server (stdio)
|
HTTP Bridge (localhost:3001)
|
Studio Plugin (polls every 200ms)
|
Roblox Studio DataModelThe bridge has two halves:
MCP Server (TypeScript) — Runs locally, exposes 14 tools via MCP over stdio, and serves an HTTP API on
localhost:3001Studio Plugin (Luau) — Polls the HTTP API for commands, executes them against the DataModel, and returns results
All write operations are wrapped in ChangeHistoryService, so every change can be undone with Ctrl+Z in Studio.
Related MCP server: MCP-Claude
Available Tools
Tool | Type | Description |
| Read | Get all descendants with paths, optional |
| Read | Get immediate children of an instance |
| Read | Get serialized properties of an instance |
| Read | Search by |
| Read | List all DataModel services |
| Read | Get currently selected instances in Studio |
| Write | Create a new Instance with properties |
| Write | Modify properties on an existing instance |
| Write | Destroy an instance (undo-supported) |
| Write | Clone an instance to a new parent |
| Write | Reparent an instance |
| Write | Set the Studio selection |
| Write | Insert a service via |
| Write | Execute arbitrary Luau code in the plugin context |
Paths use dot-notation starting from game, e.g. game.Workspace.SpawnLocation.
Prerequisites
Node.js 18+
Roblox Studio
Rojo 7+ (aftman or standalone install)
Installation
1. Clone the repository
git clone https://github.com/Justice219/roblox-studio-mcp.git
cd roblox-studio-mcp2. Install dependencies and build
npm install
npm run buildOr install directly from npm:
npm install -g @jamesworkbenchcrm/roblox-studio-mcp3. Build and install the Studio plugin
Using Rojo:
rojo build plugin.project.json -o MCPBridge.rbxmxThen copy the plugin file to your Roblox plugins folder:
OS | Path |
macOS |
|
Windows |
|
Or build directly to the plugins folder:
# macOS
rojo build plugin.project.json -o ~/Documents/Roblox/Plugins/MCPBridge.rbxmx
# Windows
rojo build plugin.project.json -o "%LOCALAPPDATA%\Roblox\Plugins\MCPBridge.rbxmx"4. Enable HttpService in Studio
Open Roblox Studio, then:
Home → Game Settings → Security → Allow HTTP Requests → ON
This is required for the plugin to communicate with the local MCP server.
5. Configure your MCP client
Add the server to your MCP client configuration.
Claude Code (~/.claude/settings.json):
{
"mcpServers": {
"roblox-studio": {
"command": "node",
"args": ["/absolute/path/to/roblox-studio-mcp/dist/index.js"]
}
}
}Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"roblox-studio": {
"command": "node",
"args": ["/absolute/path/to/roblox-studio-mcp/dist/index.js"]
}
}
}Replace /absolute/path/to/ with the actual path where you cloned the repo.
6. Restart Studio and your MCP client
Restart Roblox Studio (or reload plugins) — you should see an "MCP Bridge" button in the toolbar
Restart Claude Code / your MCP client
The plugin status widget will show a green dot when connected
Usage
Once connected, your AI assistant can manipulate Studio directly:
"Create a Part named SpawnPad in Workspace at position 0, 5, 0"
"Get all children of ServerScriptService"
"Find all instances with className RemoteEvent"
"Set the BrickColor of game.Workspace.SpawnPad to Bright green"The assistant uses the MCP tools to read the DataModel, create instances, set properties, and more — all reflected live in Studio with full undo support.
Configuration
Environment Variable | Default | Description |
|
| HTTP bridge port |
MCP_BRIDGE_PORT=4000 npm startDevelopment
# Watch mode — recompiles on file changes
npm run dev
# Type-check without emitting
npm run typecheck
# Build
npm run build
# Start the server
npm startArchitecture
src/
├── index.ts # Entry point — wires up all components
├── types.ts # Interfaces, constants, command type definitions
├── mcp-server.ts # MCP tool definitions (14 tools with Zod validation)
├── http-bridge.ts # Express HTTP server (poll/result/heartbeat endpoints)
└── command-queue.ts # In-memory command queue with timeout management
plugin/
├── init.server.luau # Plugin entry point — polling loop, UI, toolbar
└── modules/
├── CommandRouter.luau # Dispatches commands to handlers
├── HttpClient.luau # HTTP requests to the bridge
├── PathResolver.luau # Dot-notation path ↔ Instance resolution
└── Serializer.luau # Roblox type ↔ JSON serializationSecurity
The HTTP bridge only binds to
127.0.0.1— it is never exposed to the networkWrite operations are wrapped in
ChangeHistoryServicefor undo supportCommands timeout after 30 seconds
Connection requires heartbeat every 10 seconds
execute_luauruns code in the plugin context with no sandboxing — only use with trusted input
Supported Roblox Types
The serializer handles bidirectional conversion for:
Vector3 · Vector2 · CFrame · Color3 · BrickColor · UDim · UDim2 · Rect · NumberSequence · ColorSequence · NumberRange · Enum · Instance · Font · PhysicalProperties · Ray
All types use a { _type: "TypeName", ... } JSON format for lossless round-tripping.
Troubleshooting
Plugin shows red dot / "Disconnected"
Make sure the MCP server is running (
npm start)Check that HttpService is enabled in Studio
Verify the port matches (default
3001)
"Plugin not connected" error in Claude Code
Open Studio and check the MCP Bridge toolbar button is enabled
The plugin auto-starts on load — try reloading plugins
Check Studio's Output window for error messages
Port already in use
Another instance may be running. Kill it or use a different port:
MCP_BRIDGE_PORT=4000 npm start
npm
npm install -g @jamesworkbenchcrm/roblox-studio-mcphttps://www.npmjs.com/package/@jamesworkbenchcrm/roblox-studio-mcp
License
MIT
Available Tools
14 toolsclone_instanceB
Clone an instance to a new parent location
| Name | Required | Description | Default |
|---|---|---|---|
| sourcePath | Yes | Dot-notation path to the instance to clone | |
| destinationParent | Yes | Dot-notation path to the clone's new parent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing side effects. It does not state whether cloning copies children/properties, whether the source is preserved, or what the outcome is. The verb 'clone' implies a copy, but critical behavioral details are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that immediately conveys the core action and target. It is front-loaded and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a simple schema, the tool is a mutating operation with no annotations and no output schema. The description is too sparse to fully prepare an agent for the behavior, consequences, or expected results of cloning an instance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes both parameters (sourcePath, destinationParent) with clear dot-notation explanations. The description adds no additional parameter context, but the schema coverage is 100%, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Clone') with a clear resource ('an instance') and destination ('to a new parent location'). It effectively distinguishes the tool from siblings like move_instance and create_instance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool vs. alternatives. The description does not contrast clone_instance with move_instance or explain scenarios where cloning is preferred over moving or creating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_instanceB
Create a new Instance with the given className under the specified parent
| Name | Required | Description | Default |
|---|---|---|---|
| parent | Yes | Dot-notation path to parent (e.g. "game.Workspace", "game.ReplicatedStorage") | |
| className | Yes | Roblox class name (e.g. "Part", "RemoteEvent", "Folder") | |
| properties | No | Map of property names to values. Complex types use _type tags: { Position: { _type: "Vector3", x: 0, y: 5, z: 0 } } |
TDQS
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 only states the basic create action and does not disclose return value, error behavior, or whether the parent must exist, leaving the agent without critical operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 14 words, front-loaded with the verb and resource, and contains zero filler or redundant information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple create tool with comprehensive schema coverage, the description is sufficient for selection and invocation. However, it lacks return value or error handling details, and no output schema exists to fill that gap, so a 4 reflects the slight incompleteness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides complete descriptions for all 3 parameters (100% coverage), so the description adds no extra meaning beyond naming className and parent. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Create' with resource 'new Instance' and 'under the specified parent', clearly distinguishing it from sibling mutation tools like clone_instance or delete_instance. It precisely states what the tool does and its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It doesn't mention exclusions, prerequisites, or comparisons to sibling tools like insert_service or execute_luau, so the agent lacks context for choosing the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_instanceA
Destroy an instance (and all its descendants)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dot-notation path to the instance to destroy |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states that the destruction cascades to all descendants, which is a critical and non-obvious behavioral trait. The word 'Destroy' implies irreversibility, though it does not elaborate further on permissions or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and includes the essential descendant scope in a parenthetical. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive tool with one parameter and no output schema, the description covers the primary behavior and the cascading impact on descendants. It could optionally mention irreversibility or error conditions, but the core context is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already explains the path parameter as 'Dot-notation path to the instance to destroy', and the description adds no additional parameter semantics. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Destroy an instance (and all its descendants)'. It identifies both the resource (instance) and the critical scope (descendants), which distinguishes it from sibling tools like clone_instance or move_instance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, such as move_instance for reparenting or clone_instance for copying. There are no explicit exclusions or context about appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_luauA
Execute arbitrary Luau code in the Studio plugin context. Returns the result of the last expression.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Luau source code to execute in the plugin context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return behavior (result of last expression) but fails to warn about potential side effects, that arbitrary code can modify the scene, error handling, or the implications of running code in the plugin context. This is a significant omission for a code execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, with the first clearly stating the action and the second specifying the return value. There is no redundant or ambiguous wording, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the core function and return value, it lacks essential context for a code execution tool: no mention of side effects, sandboxing, error behavior, or when to prefer this over the available instance-specific tools. The single parameter makes the basic mechanics clear, but the missing safety and usage context lowers the completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with a self-explanatory parameter description. The tool description adds no additional semantic meaning beyond what the schema already states, aligning with the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Execute' and the resource 'arbitrary Luau code in the Studio plugin context'. It also specifies that it returns the result of the last expression, which further clarifies its purpose. This is distinct from sibling tools that perform specific instance operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'arbitrary Luau code' implies it is for custom logic beyond the specific tools, but there is no explicit guidance on when to use it versus alternatives. No exclusions or prerequisites are mentioned, leaving the condition 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.
find_instancesB
Search for instances by className and/or name pattern
| Name | Required | Description | Default |
|---|---|---|---|
| className | No | Class name to filter by (e.g. "Part", "RemoteEvent") | |
| maxResults | No | Maximum number of results to return (default: 100) | |
| searchRoot | No | Dot-notation path to search from (default: "game") | |
| namePattern | No | Lua pattern to match instance names (e.g. "^Button") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It only states 'search' without mentioning whether it is recursive, what the return format is, how maxResults affects results, or if it is a read-only operation. This is insufficient for an agent to predict side effects or output nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that front-loads the core purpose. No redundant or irrelevant information is present, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 optional parameters and no output schema, the description is too brief. It omits critical context such as the return structure, pagination behavior (despite maxResults being in the schema), search root scope, and the fact that no parameters are required. The agent lacks essential information to correctly invoke and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all 4 parameters (100% coverage). The description merely echoes className and namePattern without adding extra semantic meaning, so it adds no value beyond the schema, but the schema itself is rich enough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Search' and clearly identifies the resource 'instances', with explicit mention of filtering by className and/or name pattern. This differentiates it from sibling tools like get_children and get_descendants, which are simple listing operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for instance search by class/name pattern but provides no explicit guidance on when to prefer this over alternatives like get_descendants or get_children. No exclusions or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_childrenA
Get immediate children of an instance at the given path
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dot-notation path to the parent (e.g. "game.Workspace") |
TDQS
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 clearly indicates a read operation ('Get') and the non-recursive nature ('immediate'), but does not disclose return format, error behavior, or side effects. This is sufficient for a simple getter but leaves some behavioral details unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the action and resource. There is zero wasted wording, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, no annotations), the description adequately covers the core function and the parameter is well-documented in the schema. It lacks explicit return details, but for a basic read-only getter this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with a clear description for the single 'path' parameter, including an example. The tool description adds no additional semantic detail beyond what the schema already states, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and identifies the resource 'immediate children of an instance at the given path'. It clearly distinguishes from sibling tool get_descendants by specifying 'immediate', making the tool's function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'immediate children' implies a non-recursive scope, which contrasts with get_descendants, but the description does not explicitly state when to use this tool over that alternative or mention any exclusions. Usage context is implied but not directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_descendantsA
Get all descendants of an instance at the given path, with their classNames and full paths
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dot-notation path to the instance (e.g. "game.Workspace", "game.ServerStorage.Items") | |
| maxDepth | No | Maximum depth to traverse (default: unlimited) |
TDQS
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 clearly defines the scope ('all descendants'), the output content ('classNames and full paths'), and implicitly indicates a read-only operation via 'Get'. It does not mention traversal order or error behavior, but the core 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that states the action, scope, and output. It is front-loaded and contains no filler, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the tool's purpose and return content despite lacking annotations and an output schema. It does not detail the response structure or behavior for invalid paths, but the simplicity of the operation and schema documentation for maxDepth are sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for both parameters, including the dot-notation format for 'path' and the meaning of 'maxDepth'. The description adds no parameter-specific details beyond restating 'path' context, so it does not improve on schema semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' with the resource 'descendants of an instance at the given path', and clarifies the output ('classNames and full paths'). This distinguishes it clearly from sibling tools like get_children, which returns only direct children.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'all descendants' implies traversal of the full instance hierarchy, suggesting when this tool is appropriate. However, it does not explicitly state when to prefer this over alternatives (e.g., get_children for direct children), so usage guidance remains only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_propertiesA
Get serialized properties of an instance (with _type tags for Vector3, CFrame, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dot-notation path to the instance | |
| properties | No | Specific property names to read (default: all readable properties) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It conveys that the operation is a read ('Get') and describes the serialization format (_type tags for Vector3, CFrame), which is valuable. However, it does not mention potential errors, permission requirements, or behavior when the properties parameter is omitted, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that delivers the core purpose and a key output detail. Every word earns its place, with no unnecessary filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description adequately covers the return format (serialized properties with _type tags), and the schema documents the parameters. It lacks explicit alternative guidance, but the sibling names make the tool's niche clear, so the context is largely complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with clear descriptions for both 'path' and 'properties', so the baseline is 3. The description does not add parameter-specific semantics beyond what the schema already states, so no upward adjustment is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get serialized properties of an instance', with a specific verb ('Get') and resource ('properties of an instance'). It distinguishes from siblings like get_children and set_properties by focusing on reading property values, and adds useful detail about _type tags for complex types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives. The description does not mention that it is for reading properties as opposed to listing children (get_children/get_descendants) or modifying properties (set_properties), leaving the agent to infer usage from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_selectionA
Get the currently selected objects in Roblox Studio
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It merely states what it does but does not disclose return format, potential emptiness, order, or any side effects, leaving the agent without critical safety/behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately states the tool's purpose. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no parameters, no output schema), the description is nearly complete. However, it omits the return type (e.g., array of Instances) which could be useful, but for such a simple getter the description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, so the description is not required to explain parameters. Baseline for zero parameters is 4, and the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'currently selected objects in Roblox Studio'. It is specific and distinguishes itself from sibling tools like get_children or get_descendants by focusing on the current selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of when to use set_selection or other related tools, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_servicesA
List all services currently in the DataModel (Workspace, ReplicatedStorage, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must communicate behavioral traits. It only says 'List', which implies a read-only operation, but does not explicitly state that it is read-only, nor does it mention ordering, error conditions, or return format. The description offers minimal transparency beyond the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action and scope without any fluff. Every word contributes meaning, and it is perfectly sized for a tool of this simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter nature and no output schema, the description provides adequate context: it names the domain (DataModel), lists examples, and makes clear the tool lists services. It could mention the return type or whether all services are returned, but for this complexity it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers everything. The baseline for 0 params is 4, and the description does not need to add parameter details. There is no semantic gap to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and resource 'all services currently in the DataModel', clearly distinguishing it from sibling tools like get_children or get_descendants. The examples (Workspace, ReplicatedStorage) add clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It lacks exclusions, prerequisites, or context for when get_children or get_descendants would be more appropriate. The use case is implied but not explicitly stated for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_serviceB
Insert/get a service via game:GetService() (e.g. TeleportService, Teams)
| Name | Required | Description | Default |
|---|---|---|---|
| serviceName | Yes | Service class name (e.g. "TeleportService", "Teams", "Chat") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the mechanism via game:GetService() and hints at insertion, but does not mention side effects, error behavior, or return format. Some behavioral context is present but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant information, immediately stating the action and mechanism. It is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter, no output schema), the description is mostly sufficient. However, it does not explicitly state the return value or what happens if the service does not exist, which would be useful for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already explains serviceName with examples. The description adds no significant new meaning beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool inserts/gets a specific service via game:GetService(), with examples like TeleportService and Teams. It distinguishes from the sibling get_services by focusing on a single service, though the dual 'insert/get' wording is slightly ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. Since get_services exists as a sibling for listing services, mentioning that this tool is for a single service would be helpful, but it is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_instanceA
Move (reparent) an instance to a new parent
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dot-notation path to the instance to move | |
| newParent | Yes | Dot-notation path to the new parent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states the action 'Move (reparent)' but does not disclose any side effects, permission requirements, or whether children are preserved. For a mutation tool, this is minimal and leaves the agent without important context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, 8 words, directly states the action and object. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple with 2 fully documented parameters and no output schema. The description covers the core operation but omits behavioral context like return values, side effects, or error conditions. It is minimally adequate but has clear gaps for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'path' and 'newParent' having dot-notation explanations. The description adds no additional meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Move' with a clear resource 'instance' and clarifies with 'reparent'. It distinguishes from sibling tools like clone_instance (which duplicates) and delete_instance (which removes). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the verb 'Move' but does not explicitly state when to use this tool versus alternatives like set_properties or clone_instance. There is no mention of prerequisites or exclusions, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_propertiesB
Set properties on an existing instance
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dot-notation path to the instance | |
| properties | Yes | Map of property names to new values |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only states 'Set properties' but does not clarify whether existing properties are merged or replaced, what happens on invalid paths, or any side effects. This is a mutation tool with minimal behavioral context, similar to the 'update_drive' example which scored 2.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential purpose without any wasted words. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and nested objects in the properties parameter, the description is too thin. It does not explain the semantics of updating properties (merge vs. replace), behavior on errors, or what happens to unspecified properties. This leaves important gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (path and properties), so the schema already fully documents their semantics. The description adds no additional parameter-level detail beyond what is in the schema, matching the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set properties') and the target ('existing instance'), distinguishing it from sibling tools like get_properties (read) and create_instance (create). It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'on an existing instance' implies this tool is for modifying already-created instances, which offers some usage context. However, it does not explicitly mention when to use it over alternatives (e.g., get_properties for reading, create_instance for new) or provide exclusions. Usage is implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_selectionB
Set the Roblox Studio selection to the given instances
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | Array of dot-notation paths to select |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It states the basic action but does not mention side effects (e.g., replacing the current selection), whether it requires specific permissions, or any state changes beyond the selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant wording. Every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter, but the description is minimal. It does not explain what happens to prior selection, whether instances must already exist, or what the return behavior is. While no output schema exists, a bit more context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the single parameter with a description, so the baseline is 3. The description adds no extra semantic value beyond the schema, merely referencing 'given instances' without elaborating on paths or format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Set') with a clear resource ('Roblox Studio selection') and object ('given instances'), distinguishing it from sibling tools like get_selection. It fully identifies the tool's action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_selection or create_instance. The description implies a simple 'set the selection' action but provides no context, prerequisites, or exclusions.
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.
14 tool updates
v1.0.1- First observed
clone_instance - First observed
create_instance - First observed
delete_instance - First observed
execute_luau - First observed
find_instances - First observed
get_children - First observed
get_descendants - First observed
get_properties - First observed
get_selection - First observed
get_services - First observed
insert_service - First observed
move_instance - First observed
set_properties - First observed
set_selection
TDQS
Scored across 14 tools
Each tool has a clearly distinct purpose: navigation (get_children, get_descendants), property access/modification (get_properties, set_properties), instance lifecycle (create, delete, clone, move), selection (get_selection, set_selection), service handling (get_services, insert_service), and script execution (execute_luau). Even the related get_services and insert_service are distinguished by scope (list all vs. get/create one).
All tools follow a consistent verb_noun pattern in snake_case: get_, set_, create_, delete_, clone_, move_, insert_, execute_, find_. The naming is predictable and uniform across the entire set.
14 tools is well within the ideal 3-15 range. Each tool covers a specific operation without redundancy, making the set concise but comprehensive for interacting with Roblox Studio.
The tool surface covers the full lifecycle of instance manipulation (create, read, update, delete, clone, move), hierarchy traversal, selection, service access, and arbitrary Lua execution for advanced operations. No critical gaps are apparent for the stated purpose of bridging Roblox Studio.
Maintenance
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Connects AI assistants to QCDatabase.AI for everyday construction quality-control work.
- alloyOAuthai.usealloy
Connect Claude, Cursor, Codex, and other AI tools to your robotics mission data.
Connect any AI to your Foundry VTT world: actors, combat, dice, journals, tokens, compendiums.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI coding tools to control Roblox Studio for workspace exploration, instance manipulation, and script management. It provides tools for playtesting, scene rendering, and integration with the Roblox Creator Store.67MIT
- FlicenseNot gradedqualityDmaintenanceEnables chatting with AI directly in Roblox Studio to read, write, and modify scripts and instances, supporting multiple free AI providers.-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to explore Roblox Studio game structure, read and edit scripts, and perform bulk changes locally and safely.MIT
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants like Claude and Gemini to Roblox Studio, enabling game structure exploration, script editing, UI generation, style extraction, and bulk changes locally and safely.3 npmMIT