Godot Plugin Skill
Control Godot 4.x Editor through 30 built-in tools. Supports 80+ node types.
Connection Modes
Mode A: OpenClaw Gateway (Remote)
For Telegram, Discord, and other OpenClaw channels:
- Plugin connects TO Gateway via WebSocket
- Gateway URL: configurable in Godot dock UI
- Best for: remote access, mobile messaging
Mode B: MCP Bridge (Local)
For Claude Code, Cursor, and local AI tools:
- Built-in HTTP server in Godot Plugin
- Start: Click "Start MCP" in dock UI (port 27183)
- Add to Claude Code:
claude mcp add godot -- node <path>/MCP~/index.js
First-Time Setup
If godot_execute tool is not available, install the gateway extension:
# From skill directory
./scripts/install-extension.sh
# Restart gateway
openclaw gateway restart
The extension files are in extension/ directory.
Quick Reference
Core Tools
| Category |
Key Tools |
| Scene |
scene.create, scene.getCurrent, scene.open, scene.save |
| Node |
node.find, node.create, node.delete, node.getData |
| Transform |
transform.setPosition, transform.setRotation, transform.setScale |
| Debug |
debug.tree, debug.screenshot, console.getLogs |
| Input |
input.keyPress, input.mouseClick, input.actionPress |
| Editor |
editor.play, editor.stop, editor.getState |
Common Workflows
1. Scene Creation
Use godot_execute tool:
godot_execute(tool="scene.create", parameters={rootType: "Node2D", name: "Level1"})
godot_execute(tool="node.create", parameters={type: "CharacterBody2D", name: "Player"})
godot_execute(tool="scene.save")
2. Find & Modify Nodes
godot_execute(tool="node.find", parameters={name: "Player"})
godot_execute(tool="node.getData", parameters={path: "Player"})
godot_execute(tool="transform.setPosition", parameters={path: "Player", x: 100, y: 200})
3. Game Testing with Input
godot_execute(tool="editor.play")
godot_execute(tool="input.keyPress", parameters={key: "W"})
godot_execute(tool="input.actionPress", parameters={action: "jump"})
godot_execute(tool="debug.screenshot")
godot_execute(tool="editor.stop")
4. Check Logs
godot_execute(tool="console.getLogs", parameters={limit: 50})
godot_execute(tool="console.getLogs", parameters={type: "error", limit: 20})
Tool Categories
Console (2 tools)
console.getLogs - Get logs from Godot log file {limit: 100, type: "error"|"warning"|""}
console.clear - Placeholder (logs can't be cleared programmatically)
Scene (5 tools)
scene.getCurrent - Get current scene info
scene.list - List all .tscn/.scn files
scene.open - Open scene by path
scene.save - Save current scene
scene.create - Create new scene {rootType: "Node2D"|"Node3D"|"Control", name: "SceneName"}
Node (6 tools)
node.find - Find by name, type, or group
node.create - Create node (80+ types: CSGBox3D, MeshInstance3D, ColorRect, etc.)
node.delete - Delete node by path
node.getData - Get node info, children, transform
node.getProperty - Get property value
node.setProperty - Set property value (Vector2/3 auto-converted)
Transform (3 tools)
transform.setPosition - Set position {x, y} or {x, y, z}
transform.setRotation - Set rotation (degrees)
transform.setScale - Set scale
Editor (4 tools)
editor.play - Play current or custom scene
editor.stop - Stop playing
editor.pause - Toggle pause
editor.getState - Get playing state, version, project name
Debug (3 tools)
debug.screenshot - Capture viewport
debug.tree - Get scene tree as text
debug.log - Print message
Input (7 tools) - For Game Testing
input.keyPress - Press and release key {key: "W"}
input.keyDown - Hold key down
input.keyUp - Release key
input.mouseClick - Click at position {x, y, button: "left"|"right"|"middle"}
input.mouseMove - Move mouse to position {x, y}
input.actionPress - Press input action {action: "jump"}
input.actionRelease - Release input action
Script (2 tools)
script.list - List .gd files
script.read - Read script content
Resource (1 tool)
resource.list - List files by extension
Supported Keys for Input
A-Z, 0-9, SPACE, ENTER, ESCAPE, TAB, BACKSPACE, DELETE
UP, DOWN, LEFT, RIGHT
SHIFT, CTRL, ALT
F1-F12
Node Types for Creation
| Type |
Description |
Node2D |
2D spatial |
Node3D |
3D spatial |
Sprite2D |
2D sprite |
CharacterBody2D |
2D character |
CharacterBody3D |
3D character |
RigidBody2D/3D |
Physics body |
Area2D/3D |
Trigger area |
Camera2D/3D |
Camera |
Label, Button |
UI elements |
Tips
Input Simulation
- Only works during Play mode
- Use
input.actionPress for mapped actions (from Input Map)
- Use
input.keyPress for direct key simulation
Finding Nodes
node.find {name: "Player"} # By name substring
node.find {type: "Sprite2D"} # By exact type
node.find {group: "enemies"} # By group
Vector Properties
node.setProperty auto-converts dictionaries to Vector2/Vector3:
{path: "Cam", property: "zoom", value: {x: 2, y: 2}} # → Vector2(2, 2)
Console Logs
console.getLogs {limit: 50} # Last 50 lines
console.getLogs {type: "error"} # Errors only
console.getLogs {type: "warning"} # Warnings only
🔐 Security: Model Invocation Setting
When publishing to ClawHub, you can configure disableModelInvocation:
| Setting |
AI Auto-Invoke |
User Explicit Request |
false (default) |
✅ Allowed |
✅ Allowed |
true |
❌ Blocked |
✅ Allowed |
Recommendation: true
Reason: During Godot development, it's useful for AI to autonomously perform supporting tasks like checking scene tree, taking screenshots, and inspecting nodes.
When to use true: For sensitive tools (payments, deletions, message sending, etc.)
As of v1.2.10 this skill ships with disableModelInvocation: true — it runs only on explicit user request.
Security & Privacy Disclosure
This skill drives a live Godot Editor. Full disclosure of capabilities and current limitations:
- Local HTTP bridge hardening (plugin v1.4.4+): the MCP bridge (port 27183) binds to localhost, rejects browser-originated requests (any
Origin header → 403), and supports optional shared-secret auth — set OPENCLAW_BRIDGE_TOKEN for both the Godot editor process and the MCP client to require X-OpenClaw-Token on every request. Without the token set, keep the port on trusted machines only — any local process can send editor commands.
- Destructive operations — confirm with the user before: modifying/deleting nodes, saving scenes, simulating input. Keep the project under version control before automation sessions.
- Data visibility: tools can read and transmit project name, engine version, scene structure, script contents, and viewport screenshots to the connected agent. Don't use on projects whose contents must not leave the machine.
- Trigger scope: routine-sounding requests ("clean up the scene", "save everything") map to state-changing editor operations — confirm once before the first state-changing call in a session.
License
Apache-2.0 — See LICENSE.md
1---2name: godot-plugin3description: Control Godot Editor via OpenClaw Godot Plugin. Use for Godot game development tasks including scene management, node manipulation, input simulation, debugging, and editor control. Can modify, save, and delete scenes/nodes and capture project metadata and screenshots — destructive operations should be confirmed with the user. Use only on explicit Godot Editor requests like inspecting scenes, creating nodes, taking screenshots, testing gameplay, or controlling the editor, in trusted local projects.4---56# Godot Plugin Skill78Control Godot 4.x Editor through 30 built-in tools. Supports 80+ node types.910## Connection Modes1112### Mode A: OpenClaw Gateway (Remote)13For Telegram, Discord, and other OpenClaw channels:14- Plugin connects TO Gateway via WebSocket15- Gateway URL: configurable in Godot dock UI16- Best for: remote access, mobile messaging1718### Mode B: MCP Bridge (Local)19For Claude Code, Cursor, and local AI tools:20- Built-in HTTP server in Godot Plugin21- Start: Click "Start MCP" in dock UI (port 27183)22- Add to Claude Code: `claude mcp add godot -- node <path>/MCP~/index.js`2324## First-Time Setup2526If `godot_execute` tool is not available, install the gateway extension:2728```bash29# From skill directory30./scripts/install-extension.sh3132# Restart gateway33openclaw gateway restart34```3536The extension files are in `extension/` directory.3738## Quick Reference3940### Core Tools4142| Category | Key Tools |43|----------|-----------|44| **Scene** | `scene.create`, `scene.getCurrent`, `scene.open`, `scene.save` |45| **Node** | `node.find`, `node.create`, `node.delete`, `node.getData` |46| **Transform** | `transform.setPosition`, `transform.setRotation`, `transform.setScale` |47| **Debug** | `debug.tree`, `debug.screenshot`, `console.getLogs` |48| **Input** | `input.keyPress`, `input.mouseClick`, `input.actionPress` |49| **Editor** | `editor.play`, `editor.stop`, `editor.getState` |5051## Common Workflows5253### 1. Scene Creation5455Use `godot_execute` tool:56- `godot_execute(tool="scene.create", parameters={rootType: "Node2D", name: "Level1"})`57- `godot_execute(tool="node.create", parameters={type: "CharacterBody2D", name: "Player"})`58- `godot_execute(tool="scene.save")`5960### 2. Find & Modify Nodes6162- `godot_execute(tool="node.find", parameters={name: "Player"})`63- `godot_execute(tool="node.getData", parameters={path: "Player"})`64- `godot_execute(tool="transform.setPosition", parameters={path: "Player", x: 100, y: 200})`6566### 3. Game Testing with Input6768- `godot_execute(tool="editor.play")`69- `godot_execute(tool="input.keyPress", parameters={key: "W"})`70- `godot_execute(tool="input.actionPress", parameters={action: "jump"})`71- `godot_execute(tool="debug.screenshot")`72- `godot_execute(tool="editor.stop")`7374### 4. Check Logs7576- `godot_execute(tool="console.getLogs", parameters={limit: 50})`77- `godot_execute(tool="console.getLogs", parameters={type: "error", limit: 20})`7879## Tool Categories8081### Console (2 tools)82- `console.getLogs` - Get logs from Godot log file {limit: 100, type: "error"|"warning"|""}83- `console.clear` - Placeholder (logs can't be cleared programmatically)8485### Scene (5 tools)86- `scene.getCurrent` - Get current scene info87- `scene.list` - List all .tscn/.scn files88- `scene.open` - Open scene by path89- `scene.save` - Save current scene90- `scene.create` - Create new scene {rootType: "Node2D"|"Node3D"|"Control", name: "SceneName"}9192### Node (6 tools)93- `node.find` - Find by name, type, or group94- `node.create` - Create node (80+ types: CSGBox3D, MeshInstance3D, ColorRect, etc.)95- `node.delete` - Delete node by path96- `node.getData` - Get node info, children, transform97- `node.getProperty` - Get property value98- `node.setProperty` - Set property value (Vector2/3 auto-converted)99100### Transform (3 tools)101- `transform.setPosition` - Set position {x, y} or {x, y, z}102- `transform.setRotation` - Set rotation (degrees)103- `transform.setScale` - Set scale104105### Editor (4 tools)106- `editor.play` - Play current or custom scene107- `editor.stop` - Stop playing108- `editor.pause` - Toggle pause109- `editor.getState` - Get playing state, version, project name110111### Debug (3 tools)112- `debug.screenshot` - Capture viewport113- `debug.tree` - Get scene tree as text114- `debug.log` - Print message115116### Input (7 tools) - For Game Testing117- `input.keyPress` - Press and release key {key: "W"}118- `input.keyDown` - Hold key down119- `input.keyUp` - Release key120- `input.mouseClick` - Click at position {x, y, button: "left"|"right"|"middle"}121- `input.mouseMove` - Move mouse to position {x, y}122- `input.actionPress` - Press input action {action: "jump"}123- `input.actionRelease` - Release input action124125### Script (2 tools)126- `script.list` - List .gd files127- `script.read` - Read script content128129### Resource (1 tool)130- `resource.list` - List files by extension131132## Supported Keys for Input133134```135A-Z, 0-9, SPACE, ENTER, ESCAPE, TAB, BACKSPACE, DELETE136UP, DOWN, LEFT, RIGHT137SHIFT, CTRL, ALT138F1-F12139```140141## Node Types for Creation142143| Type | Description |144|------|-------------|145| `Node2D` | 2D spatial |146| `Node3D` | 3D spatial |147| `Sprite2D` | 2D sprite |148| `CharacterBody2D` | 2D character |149| `CharacterBody3D` | 3D character |150| `RigidBody2D/3D` | Physics body |151| `Area2D/3D` | Trigger area |152| `Camera2D/3D` | Camera |153| `Label`, `Button` | UI elements |154155## Tips156157### Input Simulation158- Only works during **Play mode**159- Use `input.actionPress` for mapped actions (from Input Map)160- Use `input.keyPress` for direct key simulation161162### Finding Nodes163```164node.find {name: "Player"} # By name substring165node.find {type: "Sprite2D"} # By exact type166node.find {group: "enemies"} # By group167```168169### Vector Properties170`node.setProperty` auto-converts dictionaries to Vector2/Vector3:171```172{path: "Cam", property: "zoom", value: {x: 2, y: 2}} # → Vector2(2, 2)173```174175### Console Logs176```177console.getLogs {limit: 50} # Last 50 lines178console.getLogs {type: "error"} # Errors only179console.getLogs {type: "warning"} # Warnings only180```181182## 🔐 Security: Model Invocation Setting183184When publishing to ClawHub, you can configure `disableModelInvocation`:185186| Setting | AI Auto-Invoke | User Explicit Request |187|---------|---------------|----------------------|188| `false` (default) | ✅ Allowed | ✅ Allowed |189| `true` | ❌ Blocked | ✅ Allowed |190191### Recommendation: **`true`**192193**Reason:** During Godot development, it's useful for AI to autonomously perform supporting tasks like checking scene tree, taking screenshots, and inspecting nodes.194195**When to use `true`:** For sensitive tools (payments, deletions, message sending, etc.)196197As of v1.2.10 this skill ships with `disableModelInvocation: true` — it runs only on explicit user request.198199## Security & Privacy Disclosure200201This skill drives a live Godot Editor. Full disclosure of capabilities and current limitations:202203- **Local HTTP bridge hardening (plugin v1.4.4+)**: the MCP bridge (port 27183) binds to localhost, rejects browser-originated requests (any `Origin` header → 403), and supports optional shared-secret auth — set `OPENCLAW_BRIDGE_TOKEN` for both the Godot editor process and the MCP client to require `X-OpenClaw-Token` on every request. Without the token set, keep the port on trusted machines only — any local process can send editor commands.204- **Destructive operations** — confirm with the user before: modifying/deleting nodes, saving scenes, simulating input. Keep the project under version control before automation sessions.205- **Data visibility**: tools can read and transmit project name, engine version, scene structure, script contents, and viewport screenshots to the connected agent. Don't use on projects whose contents must not leave the machine.206- **Trigger scope**: routine-sounding requests ("clean up the scene", "save everything") map to state-changing editor operations — confirm once before the first state-changing call in a session.207208## License209210Apache-2.0 — See LICENSE.md