idontlikecode-roblox-mcp
v0.1.9
Published
A local-first, typed, observable bridge between MCP-compatible AI clients and Roblox Studio
Maintainers
Readme
iDONTLikeCODE 🎮
A local-first, typed, observable Model Context Protocol (MCP) bridge for Roblox Studio.
iDONTLikeCODE connects MCP-compatible AI clients (such as Antigravity CLI, Claude Desktop, Cursor, Gemini, and Cline) directly to Roblox Studio.
It enables AI agents to inspect your DataModel hierarchy, plan structured changes, construct 3D environments, edit Luau scripts with syntax verification, frame camera angles, capture viewport screenshots for visual evaluation, and execute playtest assertions—all recorded safely in Studio’s native ChangeHistoryService undo history.
🚀 Quick Start (60 Seconds)
You don't need to clone this repository to use it! All you need is Node.js (>= 20) and Roblox Studio.
1. Install the Studio Plugin
Run this one command in your terminal to automatically install the prebuilt plugin to your local Roblox Studio plugins folder:
npx -y idontlikecode-roblox-mcp install-plugin(Supports macOS and Windows automatically).
2. Configure Roblox Studio
- Open your place in Roblox Studio.
- Go to Home ➔ Game Settings ➔ Security:
- Toggle Allow HTTP Requests to ON (required for the bridge connection).
- Toggle Allow Mesh / Image APIs to ON (required for
camera_screenshot).
- Save settings.
- Under the Plugins tab ribbon, click the iDONTLikeCODE button to open the widget and click Connect Bridge.
3. Add to Your AI Client
Add idontlikecode-roblox-mcp to your client configuration:
Antigravity CLI (~/.gemini/config/mcp_config.json or .agents/mcp_config.json)
{
"mcpServers": {
"idontlikecode": {
"command": "npx",
"args": ["-y", "idontlikecode-roblox-mcp@latest"],
"env": {
"ENABLE_LUAU_EXECUTE": "true"
}
}
}
}Claude Desktop (claude_desktop_config.json)
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"idontlikecode": {
"command": "npx",
"args": ["-y", "idontlikecode-roblox-mcp@latest"]
}
}
}Cursor (mcp.json)
{
"mcpServers": {
"idontlikecode": {
"command": "npx",
"args": ["-y", "idontlikecode-roblox-mcp@latest"]
}
}
}🌟 Core Features
- Inspect-Before-Write: Stable ancestry fingerprints (
dataModelFingerprintand instance fingerprints). Writes against deleted or moved instances fail safely withSTALE_FINGERPRINT. - ChangeHistoryService Native: Every mutation wraps inside
ChangeHistoryService:TryBeginRecording()and commits viaFinishRecording(). FullCtrl+Z/Cmd+Zsupport in Studio. - Vision-Driven Loop: The AI can frame targets (
camera_focus) and capture high-resolution Edit-mode screenshots (camera_screenshot) to evaluate 3D aesthetics and adjust misalignments. - Diff-First Plans: Preview, validate, and approve changes before mutating your game (
change_plan,change_validate,change_diff). - Multi-Session Safety: Automatically protects against accidental cross-place changes when multiple Studio windows are open (
AMBIGUOUS_TARGETgate). - Self-Healing Bridge: Automatic port conflict resolution (
EADDRINUSE) and graceful fallback between WebSocket and HTTP long-polling.
🛠️ Canonical Tools Reference
| Tool | Category | Risk / Approval | Description |
| :--- | :--- | :---: | :--- |
| session_list | Session | Read (Safe) | List connected Studio places, fingerprints, and capabilities |
| session_select | Session | Read (Safe) | Select target Studio place when multiple places are open |
| tree_query | Inspection | Read (Safe) | Query DataModel hierarchy with depth, count, and property filters |
| instance_get | Inspection | Read (Safe) | Retrieve instance properties, attributes, tags, and fingerprint |
| selection_read | Inspection | Read (Safe) | Read developer's current Selection in Studio (with spatial coordinates and bounding boxes) |
| selection_set | Inspection | Write (Safe) | Select instances in Roblox Studio Explorer and 3D Viewport by their paths |
| diagnostics_read | Inspection | Read (Safe) | Read recent Studio output messages and error logs |
| camera_focus | Camera / Vision | Write (Safe) | Frame Studio camera at any instance, 3D coordinate, or active Studio selection |
| camera_screenshot| Camera / Vision | Read (Safe) | Capture Edit-mode viewport as a PNG image block for AI evaluation |
| change_plan | Mutation | Read (Safe) | Prepare a structured plan with diff preview before mutating |
| change_validate | Mutation | Read (Safe) | Validate plan syntax, fingerprints, and policy |
| change_diff | Mutation | Read (Safe) | Review computed diff of a planned change |
| instance_create | Mutation | Write (Safe) | Create new instances with ChangeHistoryService recording |
| instance_patch | Mutation | Write (Safe) | Patch properties, attributes, and tags with fingerprint validation |
| instance_delete | Mutation | Destructive (Approval Req) | Delete an instance safely (requires approvalToken: "user_approved") |
| instance_reparent| Mutation | Write (Safe) | Move an instance to a new parent container |
| instance_clone | Mutation | Write (Safe) | Clone an instance to a destination container |
| script_get_source| Scripts | Read (Safe) | Read script source code, line count, and SHA-256 hash |
| script_patch_source| Scripts | Write (Safe) | Patch full script source with Luau syntax verification |
| script_replace_range| Scripts | Write (Safe) | Replace specific line ranges with fingerprint validation |
| script_dependency_graph| Scripts | Read (Safe) | Analyze require() module dependencies across ReplicatedStorage |
| terrain_patch | World | Write (Safe) | Procedural voxel terrain filling with cooperative yielding |
| terrain_clear_region| World | Destructive (Approval Req) | Clear voxel terrain in a bounding box |
| terrain_sculpt_natural| World / 3D | Write (Safe) | Procedural smooth voxel terrain generator (mountains, hills, craters, lakes) with elevation biome strata |
| pbr_material_apply | 3D / Materials | Write (Safe) | Apply high-quality PBR material maps (SurfaceAppearance) or curated presets (scifi, marble, rust, gold) |
| asset_search_marketplace| 3D / Assets | Read (Safe) | Search Roblox Creator Store marketplace and verified 3D assets catalog by keyword |
| asset_insert | 3D / Assets | Write (Safe) | Insert Creator Store 3D models and meshes into Workspace using InsertService:LoadAsset |
| environment_patch| World | Write (Safe) | Adjust Lighting (ClockTime, Ambient, Brightness) and Atmosphere |
| spatial_query | World | Read (Safe) | Perform box, sphere, or raycast spatial overlap queries |
| spatial_surface_snap| World | Write (Safe) | Snap a Part or Model cleanly onto the nearest ground/surface using raycasting |
| mechanic_scaffold | Gameplay / World| Write (Safe) | Scaffold interactive 3D props (doors, spinning coins, bounce pads, hazards, teleporters) |
| gui_scaffold | GUI / Interface | Write (Safe) | Scaffold responsive, modern Roblox UI hierarchies (Modals, HUDs, Grids) in StarterGui |
| playtest_start | Testing | Write (Safe) | Start a bounded Studio playtest session (Play, Run, PlayHere) |
| playtest_stop | Testing | Write (Safe) | Stop active playtest session |
| playtest_assert | Testing | Read (Safe) | Assert runtime conditions (instance existence, property values, no errors) |
| playtest_diagnose| Testing | Read (Safe) | Autonomous self-healing test run capturing runtime errors and offending script snippets |
| diagnostics_read | Inspection / Test| Read (Safe) | Read recent Studio output and diagnostics messages from ring buffer |
| history_status | History | Read (Safe) | Inspect ChangeHistoryService recording status and waypoints |
| history_checkpoint| History | Write (Safe) | Set named history waypoint |
| history_rollback_operation| History | Destructive (Approval Req) | Rollback changes made by a specific operation ID |
| luau_execute_sandboxed| Advanced | Execute (Approval Req) | Bounded Luau execution (requires ENABLE_LUAU_EXECUTE=true) |
🔒 Security & Safety Controls
| Threat | Mitigation |
| :--- | :--- |
| Accidental cross-place mutation | Each Studio window receives a unique session key. Multi-session requires explicit targetSessionId. |
| Mutating moved or stale instances | Target fingerprint validation. Changes fail with STALE_FINGERPRINT if modified externally. |
| Secret leaks via tool responses | Recursive pattern redaction masks API keys, bearer tokens, passwords, and .ROBLOSECURITY cookies. |
| Destructive actions | Deletions and rollbacks require an explicit approvalToken: "user_approved". |
| Stdio corruption | All diagnostics and bridge logs strictly stream to process.stderr (never stdout). |
💻 Local Development & Contributing
If you want to contribute to iDONTLikeCODE:
Prerequisites
- Node.js:
>= 20.0.0 - pnpm:
>= 10.0.0 - Rojo:
>= 7.4.0(brew install rojoor via Aftman) - Luau CLI:
luau/luau-compile(brew install luau)
Build & Test Commands
# 1. Install dependencies
pnpm install --frozen-lockfile
# 2. Typecheck & Lint
pnpm typecheck
pnpm lint
# 3. Run full Vitest test suite (51 tests)
pnpm test
# 4. Check Luau plugin files & compile with Rojo
pnpm plugin:check
pnpm plugin:build
# 5. Build TypeScript server
pnpm build📄 License
MIT © Fikri Firman & Contributors.
