Roblox MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ROBLOX_MCP_PORT | No | Bridge port used by the MCP server (default 44755). Can also be set with the --port option, e.g. --port 44756. | 44755 |
| ROBLOX_MCP_TOKEN | No | Optional authentication token. Start the server with --token <random string>; the Studio plugin must then send the header X-Roblox-MCP-Token: <random string> with requests. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
You are connected to a running Roblox Studio session through the RobloxMCP plugin.
Answer questions about the open place by inspecting it before you change it: get_tree → search_instances → get_instance → read_script.
Address every instance with a path such as Workspace/Baseplate or
ServerScriptService/Main/Init. game (or game/Workspace) is the root.
Mutating tools (create_instance, set_property, delete_instance, insert_model, write_script, execute_luau) act on the real Studio place. Each change is wrapped in a Studio undo recording, so the user can press Ctrl+Z. Prefer the smallest change that answers the request, tell the user what you are about to change when it is destructive, and never guess a path — look it up first.
execute_luau runs arbitrary Luau inside Studio (plugin identity). Use it only when no dedicated tool covers the job, and keep the snippet small.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| studio_statusA | Check whether the Roblox Studio plugin is connected and report the open place, port and queue state. |
| get_treeA | Print the instance tree of the open place as text. root is a path like 'Workspace' or 'game' (default), max_depth limits recursion (default 2). |
| get_instanceA | Read one instance: class, curated properties, attributes and children. path is like 'Workspace/Baseplate'. properties is an optional comma list of property names. |
| search_instancesB | Find instances by name substring and/or exact class name. Returns paths with class. |
| create_instanceC | Create a new instance. class_name is a Roblox class such as 'Part', 'Script', 'Model'. properties is an optional JSON object like {"Size": "Vector3(4,1,2)", "Anchored": true}. |
| set_propertyB | Set one property on an instance. Values accept plain JSON scalars or literals such as 'Vector3(4,1,2)', 'Color3(1,0,0)', 'Enum.Material.Neon', 'CFrame(0,5,0)'. |
| delete_instanceB | Delete (Destroy) an instance by path. Wrapped in an undo recording. |
| insert_modelB | Insert a model or asset from the Roblox catalog into the place via InsertService. asset_id is the catalog asset id; position is optional like 'Vector3(0,5,0)'. |
| execute_luauB | Run a Luau snippet inside Studio and return its return value plus printed output. Use sparingly: dedicated tools are safer. The snippet runs as a temporary ModuleScript. |
| list_scriptsC | List all scripts in the place (path, class, line count). |
| read_scriptC | Read the source of a Script/LocalScript/ModuleScript by path. |
| write_scriptB | Replace the source of a Script/LocalScript/ModuleScript by path (undoable). |
| get_selectionB | Show what the user currently has selected in Studio. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
Each tool targets a distinct resource or action, but there are mild overlaps: get_instance vs read_script (both read instance data, one script-source-specific) and create_instance vs insert_model (both add objects, one generic, one catalog asset). execute_luau intentionally overlaps with everything, though its description explicitly says to prefer dedicated tools.
Almost all tools follow a clean snake_case verb_noun pattern (read_script, get_tree, create_instance, set_property, delete_instance, list_scripts, write_script). The only deviation is studio_status, which is a descriptive noun phrase without a verb, but it remains readable and predictable.
13 tools is well within the sweet spot and every tool maps to a meaningful Studio operation: status, inspection, search, mutation, scripts, and asset insertion. Nothing feels redundant enough to remove, and nothing essential is obviously missing from the count.
The surface covers the core lifecycle: inspect (status, tree, instance, selection, search), mutate (create, set_property, delete, insert_model), and script management (read/list/write) plus an escape hatch via execute_luau. Gaps include no explicit playtest start/stop control, no undo/redo tool, and no dedicated reparent/rename operation, though most can be worked around via set_property (Parent/Name) or execute_luau.