Install
openclaw skills install @tomleelive/openclaw-godot-skillControl 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.
openclaw skills install @tomleelive/openclaw-godot-skillControl Godot 4.x Editor through 30 built-in tools. Supports 80+ node types.
For Telegram, Discord, and other OpenClaw channels:
For Claude Code, Cursor, and local AI tools:
claude mcp add godot -- node <path>/MCP~/index.jsIf 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.
| 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 |
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")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})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")godot_execute(tool="console.getLogs", parameters={limit: 50})godot_execute(tool="console.getLogs", parameters={type: "error", limit: 20})console.getLogs - Get logs from Godot log file {limit: 100, type: "error"|"warning"|""}console.clear - Placeholder (logs can't be cleared programmatically)scene.getCurrent - Get current scene infoscene.list - List all .tscn/.scn filesscene.open - Open scene by pathscene.save - Save current scenescene.create - Create new scene {rootType: "Node2D"|"Node3D"|"Control", name: "SceneName"}node.find - Find by name, type, or groupnode.create - Create node (80+ types: CSGBox3D, MeshInstance3D, ColorRect, etc.)node.delete - Delete node by pathnode.getData - Get node info, children, transformnode.getProperty - Get property valuenode.setProperty - Set property value (Vector2/3 auto-converted)transform.setPosition - Set position {x, y} or {x, y, z}transform.setRotation - Set rotation (degrees)transform.setScale - Set scaleeditor.play - Play current or custom sceneeditor.stop - Stop playingeditor.pause - Toggle pauseeditor.getState - Get playing state, version, project namedebug.screenshot - Capture viewportdebug.tree - Get scene tree as textdebug.log - Print messageinput.keyPress - Press and release key {key: "W"}input.keyDown - Hold key downinput.keyUp - Release keyinput.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 actionscript.list - List .gd filesscript.read - Read script contentresource.list - List files by extensionA-Z, 0-9, SPACE, ENTER, ESCAPE, TAB, BACKSPACE, DELETE
UP, DOWN, LEFT, RIGHT
SHIFT, CTRL, ALT
F1-F12
| 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 |
input.actionPress for mapped actions (from Input Map)input.keyPress for direct key simulationnode.find {name: "Player"} # By name substring
node.find {type: "Sprite2D"} # By exact type
node.find {group: "enemies"} # By group
node.setProperty auto-converts dictionaries to Vector2/Vector3:
{path: "Cam", property: "zoom", value: {x: 2, y: 2}} # → Vector2(2, 2)
console.getLogs {limit: 50} # Last 50 lines
console.getLogs {type: "error"} # Errors only
console.getLogs {type: "warning"} # Warnings only
When publishing to ClawHub, you can configure disableModelInvocation:
| Setting | AI Auto-Invoke | User Explicit Request |
|---|---|---|
false (default) | ✅ Allowed | ✅ Allowed |
true | ❌ Blocked | ✅ Allowed |
trueReason: 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.
This skill drives a live Godot Editor. Full disclosure of capabilities and current limitations:
Apache-2.0 — See LICENSE.md