Godot Resource — 18 Operations for AI Agents

Godot `.tscn` and `.tres` files are the scene graph itself — nodes, resources, and connections behind every Godot game. act101 reads scene structure natively, so agents work in game files without corrupting what the editor expects.

This page is the canonical reference an AI coding agent uses to refactor, query, and analyze Godot Resource code through the act MCP server. 18 operations available: 0 refactor, 18 query, 0 analysis. Each operation is callable from Claude Code, Cursor, Codex, OpenCode, or any MCP-compatible agent host. Click any operation for a stable anchor link suitable for citation.

18Query

Worked Godot Resource examples

act101 reads a Godot scene or resource file's bracketed sections — [gd_scene], [ext_resource], [sub_resource], [node] — as declarations, one per section. Both skeleton and symbols share the identical rule and name every section after its own section-type keyword rather than the name=/id= attribute in its header, so two sections of the same type are not distinguishable from each other by name. The unit of structure in this grammar is the section: neither query reads a section's own key/value properties or attributes. Each example below is the verbatim output of the command shown, run against the file shown. Query outputs are pretty-printed with the timing block omitted.

Read the scene's sections as a skeleton

player.tscn assembles a player character: two ext_resource entries (a sprite texture and a script), one sub_resource collision shape, and three node entries — Player, Sprite, and CollisionShape — under the scene root.

$ act query skeleton player.tscn

Before

[gd_scene load_steps=4 format=3]

[ext_resource type="Texture2D" path="res://sprites/player.png" id="1"]
[ext_resource type="Script" path="res://scripts/player.gd" id="2"]

[sub_resource type="RectangleShape2D" id="RectangleShape2D_1"]
size = Vector2(16, 24)

[node name="Player" type="CharacterBody2D"]
script = ExtResource("2")

[node name="Sprite" type="Sprite2D" parent="."]
texture = ExtResource("1")

[node name="CollisionShape" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_1")

Output

{
    "type": "Skeleton",
    "declarations": [
        {
            "kind": "class",
            "name": "gd_scene",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 1,
                    "column": 1,
                    "byte_offset": 0
                },
                "end": {
                    "file": "player.tscn",
                    "line": 1,
                    "column": 33,
                    "byte_offset": 32
                }
            },
            "name_range": {
                "start": {
                    "file": "player.tscn",
                    "line": 1,
                    "column": 2,
                    "byte_offset": 1
                },
                "end": {
                    "file": "player.tscn",
                    "line": 1,
                    "column": 10,
                    "byte_offset": 9
                }
            }
        },
        {
            "kind": "class",
            "name": "ext_resource",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 3,
                    "column": 1,
                    "byte_offset": 34
                },
                "end": {
                    "file": "player.tscn",
                    "line": 3,
                    "column": 71,
                    "byte_offset": 104
                }
            },
            "name_range": {
                "start": {
                    "file": "player.tscn",
                    "line": 3,
                    "column": 2,
                    "byte_offset": 35
                },
                "end": {
                    "file": "player.tscn",
                    "line": 3,
                    "column": 14,
                    "byte_offset": 47
                }
            }
        },
        {
            "kind": "class",
            "name": "ext_resource",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 4,
                    "column": 1,
                    "byte_offset": 105
                },
                "end": {
                    "file": "player.tscn",
                    "line": 4,
                    "column": 67,
                    "byte_offset": 171
                }
            },
            "name_range": {
                "start": {
                    "file": "player.tscn",
                    "line": 4,
                    "column": 2,
                    "byte_offset": 106
                },
                "end": {
                    "file": "player.tscn",
                    "line": 4,
                    "column": 14,
                    "byte_offset": 118
                }
            }
        },
        {
            "kind": "class",
            "name": "sub_resource",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 6,
                    "column": 1,
                    "byte_offset": 173
                },
                "end": {
                    "file": "player.tscn",
                    "line": 7,
                    "column": 23,
                    "byte_offset": 258
                }
            },
            "name_range": {
                "start": {
                    "file": "player.tscn",
                    "line": 6,
                    "column": 2,
                    "byte_offset": 174
                },
                "end": {
                    "file": "player.tscn",
                    "line": 6,
                    "column": 14,
                    "byte_offset": 186
                }
            }
        },
        {
            "kind": "class",
            "name": "node",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 9,
                    "column": 1,
                    "byte_offset": 260
                },
                "end": {
                    "file": "player.tscn",
                    "line": 10,
                    "column": 26,
                    "byte_offset": 329
                }
            },
            "name_range": {
                "start": {
                    "file": "player.tscn",
                    "line": 9,
                    "column": 2,
                    "byte_offset": 261
                },
                "end": {
                    "file": "player.tscn",
                    "line": 9,
                    "column": 6,
                    "byte_offset": 265
                }
            }
        },
        {
            "kind": "class",
            "name": "node",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 12,
                    "column": 1,
                    "byte_offset": 331
                },
                "end": {
                    "file": "player.tscn",
                    "line": 13,
                    "column": 27,
                    "byte_offset": 405
                }
            },
            "name_range": {
                "start": {
                    "file": "player.tscn",
                    "line": 12,
                    "column": 2,
                    "byte_offset": 332
                },
                "end": {
                    "file": "player.tscn",
                    "line": 12,
                    "column": 6,
                    "byte_offset": 336
                }
            }
        },
        {
            "kind": "class",
            "name": "node",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 15,
                    "column": 1,
                    "byte_offset": 407
                },
                "end": {
                    "file": "player.tscn",
                    "line": 16,
                    "column": 42,
                    "byte_offset": 512
                }
            },
            "name_range": {
                "start": {
                    "file": "player.tscn",
                    "line": 15,
                    "column": 2,
                    "byte_offset": 408
                },
                "end": {
                    "file": "player.tscn",
                    "line": 15,
                    "column": 6,
                    "byte_offset": 412
                }
            }
        }
    ]
}

The skeleton reports seven declarations, all kind: class, but the three node sections all come back named "node" and the two ext_resource sections both come back named "ext_resource" — the scene's own Player/Sprite/CollisionShape names never appear.

List the same sections as symbols

The CollisionShape node references the sub_resource's RectangleShape2D by id, and Player references the script ext_resource by id.

$ act query symbols player.tscn

Before

[gd_scene load_steps=4 format=3]

[ext_resource type="Texture2D" path="res://sprites/player.png" id="1"]
[ext_resource type="Script" path="res://scripts/player.gd" id="2"]

[sub_resource type="RectangleShape2D" id="RectangleShape2D_1"]
size = Vector2(16, 24)

[node name="Player" type="CharacterBody2D"]
script = ExtResource("2")

[node name="Sprite" type="Sprite2D" parent="."]
texture = ExtResource("1")

[node name="CollisionShape" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_1")

Output

{
    "type": "Symbols",
    "symbols": [
        {
            "name": "gd_scene",
            "kind": "class",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 1,
                    "column": 2,
                    "byte_offset": 1
                },
                "end": {
                    "file": "player.tscn",
                    "line": 1,
                    "column": 10,
                    "byte_offset": 9
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "ext_resource",
            "kind": "class",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 3,
                    "column": 2,
                    "byte_offset": 35
                },
                "end": {
                    "file": "player.tscn",
                    "line": 3,
                    "column": 14,
                    "byte_offset": 47
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "ext_resource",
            "kind": "class",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 4,
                    "column": 2,
                    "byte_offset": 106
                },
                "end": {
                    "file": "player.tscn",
                    "line": 4,
                    "column": 14,
                    "byte_offset": 118
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "sub_resource",
            "kind": "class",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 6,
                    "column": 2,
                    "byte_offset": 174
                },
                "end": {
                    "file": "player.tscn",
                    "line": 6,
                    "column": 14,
                    "byte_offset": 186
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "node",
            "kind": "class",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 9,
                    "column": 2,
                    "byte_offset": 261
                },
                "end": {
                    "file": "player.tscn",
                    "line": 9,
                    "column": 6,
                    "byte_offset": 265
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "node",
            "kind": "class",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 12,
                    "column": 2,
                    "byte_offset": 332
                },
                "end": {
                    "file": "player.tscn",
                    "line": 12,
                    "column": 6,
                    "byte_offset": 336
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "node",
            "kind": "class",
            "range": {
                "start": {
                    "file": "player.tscn",
                    "line": 15,
                    "column": 2,
                    "byte_offset": 408
                },
                "end": {
                    "file": "player.tscn",
                    "line": 15,
                    "column": 6,
                    "byte_offset": 412
                }
            },
            "visibility": "unknown"
        }
    ]
}

symbols reports the identical seven entries with the identical kind-collapsed-to-keyword names skeleton already showed — this grammar's symbols query is the same rule as skeleton's, so it adds nothing new.

Query

18 query tools, the same on every supported language. Descriptions live in the shared reference: /docs/query-tools.

callers control_flow data_flow definition diagnostics effect_closure effect_summary fix_auto get_type graph import_organize interface mutations references repo_outline skeleton symbols symbols_batch

← Go TemplatesGraphQL →