9.6 KiB
ClaudeCode Roblox Studio MCP Server
Control Roblox Studio from Claude Code via MCP (Model Context Protocol)
Built with GLM 5.1 model using Claude Code
This project allows any Claude Code agent/bot to directly control Roblox Studio - creating parts, writing scripts, building maps, spawning enemies, and running Lua code - all through natural language commands.
Architecture
Claude Code <---> MCP Server (stdio) <---> HTTP/WS Bridge <---> Roblox Studio Plugin
| | |
| tool calls | HTTP polling (port 37423) | executes Lua
| (create_part, | WebSocket (port 37424) | creates objects
| create_script, | | runs game logic
| execute_code) | |
How it works:
- Claude Code communicates with the MCP server via stdin/stdout (MCP protocol)
- The MCP server runs an HTTP + WebSocket bridge on localhost
- The Roblox Studio plugin polls the MCP server and executes commands
- Results flow back: Plugin -> HTTP -> MCP Server -> Claude Code
Quick Start (5 minutes)
Step 1: Install Dependencies
cd ClaudeCode-Roblox-Studio-MCP
npm install
Step 2: Install the Studio Plugin
Copy the plugin to your Roblox plugins folder:
# Windows
copy roblox-plugin\RobloxMCPPlugin.lua "%LOCALAPPDATA%\Roblox\Plugins\"
# Mac
cp roblox-plugin/RobloxMCPPlugin.lua ~/Library/Application\ Support/Roblox/Plugins/
Step 3: Start the MCP Server
node src/index.js
You should see:
HTTP server listening on port 37423
WebSocket server listening on port 37424
Roblox Studio MCP server running on stdio
Step 4: Configure Claude Code
Add to your .claude.json (project settings):
{
"mcpServers": {
"roblox-studio": {
"command": "node",
"args": ["C:\\path\\to\\ClaudeCode-Roblox-Studio-MCP\\src\\index.js"]
}
}
}
Or use the auto-setup:
AutoConnect\START-HERE.bat
Step 5: Open Roblox Studio
- Open Roblox Studio
- Create or open a place
- Go to Game Settings > Security > Allow HTTP Requests and enable it
- The plugin auto-connects (check Output window for
[RobloxMCP] Connected!)
Step 6: Use in Claude Code
Restart your Claude Code session, then ask it to build:
"Build me a military base with guard towers"
"Create a zombie survival game"
"Add 20 weapons to my FPS game"
Available MCP Tools
| Tool | Description |
|---|---|
roblox_create_script |
Create Lua scripts (Script, LocalScript, ModuleScript) |
roblox_create_part |
Create 3D parts (Block, Ball, Cylinder, Wedge, CornerWedge) |
roblox_create_model |
Create model containers for grouping objects |
roblox_create_folder |
Create organizational folders |
roblox_create_gui |
Create UI elements (ScreenGui, Frame, TextLabel, TextButton, etc.) |
roblox_set_property |
Set properties on existing objects (Position, Size, Color, etc.) |
roblox_get_hierarchy |
Inspect the object tree of any path |
roblox_delete_object |
Delete objects by path |
roblox_execute_code |
Run arbitrary Lua code in the command bar |
roblox_play |
Start playtesting |
roblox_stop |
Stop playtesting |
roblox_save_place |
Save the current place |
roblox_import_glb |
Import a GLB 3D model into the workspace |
Tool Parameters
roblox_create_part
{
"parentPath": "Workspace",
"partName": "Wall1",
"partType": "Block",
"position": {"x": 10, "y": 5, "z": 20},
"size": {"x": 10, "y": 10, "z": 1},
"anchored": true,
"color": "Bright red"
}
roblox_create_script
{
"path": "Workspace.Model",
"scriptName": "EnemyAI",
"scriptType": "Script",
"source": "-- Lua code here\nprint('Hello from Claude!')"
}
roblox_execute_code
{
"code": "for i=1,10 do local p = Instance.new('Part', workspace) p.Position = Vector3.new(i*5, 1, 0) p.Anchored = true end"
}
Python Injection (Alternative Method)
If the MCP plugin isn't connecting, you can inject Lua code directly into Studio's command bar using the Python scripts:
# Single script injection
python examples/studio-inject.py
# Multi-part sequential injection (for large games)
python examples/inject-all-parts.py
This uses Win32 API to:
- Find the Roblox Studio window
- Focus the command bar
- Copy Lua code to clipboard
- Paste and execute via simulated keyboard input
Requirements: Python 3.x on Windows, Roblox Studio open with a place loaded
Included Example: CoD-Style FPS Game
A full Call of Duty-inspired FPS game built entirely from code:
Map: Urban military combat zone with buildings, cover positions, watchtowers, crates, barrels, and boundary walls.
20 Weapons (key to switch):
| Key | Weapon | Category | Key | Weapon | Category |
|---|---|---|---|---|---|
| 1 | M4A1 Carbine | Assault Rifle | 0 | UMP-45 | SMG |
| 2 | AK-47 | Assault Rifle | Q | AWP Sniper | Sniper |
| 3 | FN SCAR-H | Assault Rifle | E | Barrett M82 | Sniper |
| 4 | M16A4 | Assault Rifle | T | SVD Dragunov | Sniper |
| 5 | FAMAS F1 | Assault Rifle | Z | SPAS-12 | Shotgun |
| 6 | HK G36C | Assault Rifle | X | Remington 870 | Shotgun |
| 7 | MP5A4 | SMG | C | M249 SAW | LMG |
| 8 | FN P90 | SMG | V | M134 Minigun | LMG |
| 9 | HK MP7A2 | SMG | B | Desert Eagle | Pistol |
| N | Glock 18C | Pistol | |||
| G | RPG-7 | Launcher |
Controls: WASD=Move, LMB=Shoot, RMB=ADS, Shift=Sprint, Ctrl=Crouch, R=Reload
Features:
- First-person camera with ADS zoom + FOV transition
- Bullet trails, muzzle flash, impact sparks, explosion effects
- Recoil system with crosshair spread dynamics
- 10 enemy soldiers with AI (patrol, detect, chase, shoot)
- Health regen, damage vignette, hit markers, headshot indicators
- Kill feed, killstreak banners ("TRIPLE KILL!", "UNSTOPPABLE!")
- Minimap with enemy position dots
- Full HUD: health bar, ammo counter, weapon name, score, reload bar
Auto-Connect Setup
For hands-free setup on a fresh machine:
AutoConnect\START-HERE.bat
This will:
- Install Node.js dependencies
- Start the MCP server
- Copy the plugin to Roblox's plugins folder
- Register the MCP server with Claude Code
Troubleshooting
Plugin doesn't connect
- Enable HttpService: Game Settings > Security > Allow HTTP Requests = ON
- Check MCP server is running: Visit
http://localhost:37423/healthin browser - Check Output window: Look for
[RobloxMCP]messages in Studio's Output
MCP server won't start
- Ensure Node.js 18+ is installed
- Run
npm installin the project directory - Check ports 37423 and 37424 are not in use
Commands time out
- The plugin polls every 0.5 seconds - slight delay is normal
- Make sure you're not in Play mode (commands work in Edit mode)
- Check Studio isn't frozen or busy
Injection script fails
- Make sure Roblox Studio is open with a place loaded
- Run as Administrator if the window can't be focused
- Try manually: View > Command Bar, paste Lua code, press Enter
File Structure
ClaudeCode-Roblox-Studio-MCP/
src/
index.js # MCP server (Node.js)
roblox-plugin/
RobloxMCPPlugin.lua # Studio plugin v2 (HTTP polling, auto-enable)
RobloxMCPServer_HTTP.lua # Alternative HTTP-only server
TestConnection.lua # Connection test script
examples/
fps-game/
part1_map.lua # Map building (buildings, cover, towers)
part2_weapons.lua # Weapon data module
part3_ai.lua # Server handler + enemy AI system
part4_hud.lua # HUD elements + player setup
part5_client.lua # Client weapon controller
studio-inject.py # Direct command bar injection via Win32
inject-all-parts.py # Multi-part sequential injection
AutoConnect/
START-HERE.bat # Main entry point
Setup-MCP.bat # MCP setup batch
Setup-MCP.ps1 # PowerShell setup script
AutoSetup.vbs # Silent launcher
package.json
README.md
For AI Agents / Bots
If you are an AI agent reading this README, here is how to use this tool:
- Check if the MCP server is configured: Look in
.claude.jsonforroblox-studioinmcpServers - Start the server if needed: Run
node src/index.jsin the background - Ensure Roblox Studio is open with a place loaded and HttpService enabled
- Use the MCP tools: Call
roblox_create_part,roblox_create_script,roblox_execute_code, etc. - For complex builds: Use
roblox_execute_codewith large Lua scripts to build entire games at once - Fallback injection: If MCP is not working, use the Python injection scripts (
examples/studio-inject.py) to paste Lua directly into Studio's command bar via Win32 API
Quick build example (via MCP tool)
Tool: roblox_create_part
Params: { "partName": "Ground", "parentPath": "Workspace", "partType": "Block",
"size": {"x":100,"y":2,"z":100}, "position": {"x":0,"y":-1,"z":0},
"anchored": true, "color": "Dark green" }
Quick script example (via MCP tool)
Tool: roblox_create_script
Params: { "path": "ServerScriptService", "scriptName": "GameController",
"scriptType": "Script", "source": "-- Game logic here" }
Large build example (via execute_code + Python injection)
# Read the Lua file, inject into Studio command bar
python examples/inject-all-parts.py
License
MIT