Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.tomyud1/godot-mcp

NPM · GODOT-MCP-SERVER · SCANNED SEP 20

MCP server for Godot game engine integration — control the Godot editor with AI

Available components

0 this week 76 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security81
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects @modelcontextprotocol/sdk 1.25.3, a direct dependency. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 31 of 94 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability79
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 16090 tokens (~191/item across 84 items; 77 tools + 7 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
  • Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 95% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove_node" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 78 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.tomyud1/godot-mcp server?

io.github.tomyud1/godot-mcp runs locally as an npm package, launched with npx -y godot-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · godot-mcp-server

# add to Claude Code
claude mcp add tomyud1-godot-mcp -- npx -y godot-mcp-server
// .cursor/mcp.json
{
  "mcpServers": {
    "tomyud1-godot-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "godot-mcp-server"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "tomyud1-godot-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "godot-mcp-server"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add tomyud1-godot-mcp -- npx -y godot-mcp-server
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tomyud1-godot-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "godot-mcp-server"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add tomyud1-godot-mcp --command npx --arg -y --arg godot-mcp-server
# ~/.hermes/config.yaml
mcp_servers:
  tomyud1-godot-mcp:
    command: "npx"
    args: ["-y", "godot-mcp-server"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "tomyud1-godot-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "godot-mcp-server"
      ]
    }
  }
}
# add to Vellum
assistant mcp add tomyud1-godot-mcp -t stdio -c npx -a -y godot-mcp-server
// mcp.json
{
  "mcpServers": {
    "tomyud1-godot-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "godot-mcp-server"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 −2
    • Stability: fail → 0.80 functional
  • 15 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 92 to 95.

  • 13 Sept 26 +1
    • Security disclosure: unverified → fail functional
  • 12 Sept 26 0
    • Security disclosure: fail → unverified functional
  • 11 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 78 to 82.

  • 10 Sept 26 −3

    No change was recorded against any check on this day. Stability & Change Management went from 98 to 78.

  • 8 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 92 to 95.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/godot-mcp-server@0.6.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Vulnerabilities 1 finding
ID CVE Severity Vector Fix available
GHSA-345p-7cg4-v4c7 CVE-2026-25536 high CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 94 packages
Packages resolved 94
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 77 exposed · ~15,868 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_node ~464

Add a node to an existing scene file. Supports an optional script attachment, group memberships, and a tree of children created in the same call (1 tool call instead of N). Children format: {name|node_name, type|node_type, properties?, script?, groups?, children?}. Both key styles are accepted so children can reuse the same keys you use at the top level (node_name, node_type) or the shorter form (name, type). Unknown child keys are rejected with a clear error. **Atomic pre-validation:** the entire spec (top-level node + every descendant in `children`, recursively) is walked and validated BEFORE the .tscn is loaded from disk. Property names are checked against ClassDB + the attached script's @export'd properties; `script` paths are checked for existence and Script-ness; node_types are checked against ClassDB. If anything fails, returns `ok: false` with `validation_errors: [...]` listing every issue with path-pointed prefixes (e.g. `children[2].properties.text: property does not exist on Sprite2D`), and ZERO mutation. Previously a typo like `properties: {color: ...}` on a Sprite2D would be silently swallowed; now it surfaces immediately.

NameTypeReqDescription
childrenarrayOptional tree of children to create under the new node. Each entry has the same shape as add_node's args (minus parent_path). Use this to build sub-trees in one call.
groupsarrayOptional list of node groups this node should belong to. Persisted to the .tscn file.
node_namestringyesName for the new node
node_typestringyesType of node (e.g., Sprite2D, Camera2D, RigidBody2D, CollisionShape2D)
parent_pathstringPath to parent node (. for root, or relative path like Sprite2D)
propertiesobjectOptional dictionary of properties to set on the node
scene_pathstringyesPath to the scene file (res://path/to/scene.tscn)
scriptstringOptional script path to attach to the new node (res://path/to/script.gd)

No output schema declared.

No examples provided.

attach_script ~73

Attach or change a script on a node in a scene.

NameTypeReqDescription
node_pathstringPath to the node (. for root, or relative path)
scene_pathstringyesPath to the scene file
script_pathstringyesPath to the script file (res://path/to/script.gd)

No output schema declared.

No examples provided.

batch_execute ~619

Run an ordered list of MCP tool calls as a single composite operation. Use this whenever you would otherwise issue multiple consecutive mutations on the same scene/script/project — e.g. "create a node, set 5 properties, attach a script, connect 2 signals" becomes one call instead of 9. Cuts round-trip latency, response tokens, and per-call error handling. The whole batch lands as ONE undo entry, so a single `mcp_undo` reverts everything. Modes: • atomic=true (default): on any failure, every earlier successful step is rolled back from snapshots before returning. The batch either fully applies or appears never to have happened. • atomic=false, stop_on_error=true (default): stop at first failure; successful steps are committed as a partial entry that mcp_undo can revert. • atomic=false, stop_on_error=false: run every command regardless; commit whatever succeeded. Each command is `{name: <tool>, args: <object>}`. Sub-commands run in order and reuse the normal tool dispatch path (same validation, same error shape). Disallowed inside a batch: `batch_execute` (no nesting), `mcp_undo` / `mcp_redo` / `mcp_undo_history` (would corrupt the in-progress entry), `wait` (coroutine), `run_scene` / `stop_scene` (process lifecycle isn't snapshotable). Read-only tools (read_scene, get_node_properties, etc.) are fine to include. Response: `{ok, atomic, stop_on_error, succeeded, total, results: [{ok, name, result}], failed_at?, failed_command?, error?, failures?, rolled_back?, rollback_errors?, undo_entry_id?}`. `results` length is `succeeded + failures.length` (early-broken batches stop after the first failure, so `results.length` can be less than `total`). The top-level `failed_at` / `failed_command` / `error` always describe the FIRST failure; `failures: [{index, name, error}]` lists EVERY failure (only relevant when atomic=false, stop_on_error=false, where multiple sub-commands can fail).

NameTypeReqDescription
atomicbooleanDefault true. When true, any sub-command failure rolls back every earlier successful step from snapshots and discards the entry. When false, successful steps stay in place and the partial entry is co…
commandsarrayyesOrdered list of sub-commands to run. Each entry is {name: <tool-name>, args: <object>}. Sub-commands run sequentially; earlier results are NOT piped into later args (build the args before sending). M…
stop_on_errorbooleanDefault true. Only meaningful when atomic=false. When true the batch stops at the first failure; when false it continues through errors, executing every command. Ignored when atomic=true (which alway…

No output schema declared.

No examples provided.

call_method ~1,199

Invoke any method on any node, in either the editor's on-disk scene or the running game. The write counterpart to query_runtime_node (which only reads). **Two modes** controlled by `runtime`: • `runtime: false` (default, editor mode) — Loads the .tscn from disk, finds the node, invokes the method, ALWAYS saves the scene back. Snapshot taken so `mcp_undo` reverts the file. Use for **engine/built-in methods that mutate persistent scene state**: `CollisionObject2D.set_collision_layer_value(layer, on)`, `Curve2D.add_point(pos)`, `Node.add_user_signal(name)`, `Node.add_to_group(name, true)` (the `true` is required to persist into the .tscn). ⚠️ **Editor mode cannot run user-defined methods in non-@tool scripts.** Godot's editor instantiates scenes with `GEN_EDIT_STATE_MAIN`, which attaches scripts and lets `@export` vars round-trip but does NOT dispatch user method bodies for non-@tool scripts. `call_method` detects this case and refuses with `reason: "non_tool_script_method"` — DO NOT use editor mode to invoke `take_damage`, `respawn`, `play_intro`, or any other game-logic method on your script. Use runtime mode for that. • `runtime: true` — Routes the call to the MCPRuntime helper inside the running game. Finds the live node in the active SceneTree, invokes the method, returns the serialized result. Use to drive the game from the AI: `Player.take_damage(50)`, `AnimationPlayer.play("intro")`, `AudioStreamPlayer.play()`, `Inventory.add_item("sword", 1)`. REQUIRES `run_scene` first (the game must be running) — same precondition as query_runtime_node / send_input. **node_path resolution:** • editor mode — relative to scene root, e.g. "Player" or "UI/HUD/HealthLabel", or "." for root. • runtime mode — absolute ("/root/Main/Player") OR relative to current_scene ("Player"). Same rules as query_runtime_node. **args** — array of positional arguments. Each follows the same form as `modify_node_property.value`: primitives (`1.5`, `"hello"`, `true`, `null`), arrays…

NameTypeReqDescription
argsarrayPositional arguments to pass. Default: []. Arity is pre-checked against the method signature (allowing for default arguments).
confirmbooleanRequired for methods on the destructive denylist (queue_free, free, set_script, remove_child, replace_by, reparent) and, in runtime mode, for direct calls on /root/<name> (autoload/scene root territo…
expect_returnbooleanCapture and serialize the return value (default: true). Set false for void / fire-and-forget calls to skip serialization in the response.
methodstringyesMethod name on the target node. Validated against node.has_method(); on miss returns closest_matches and available_methods_sample.
node_pathstringyesPath to the target node. Editor mode: relative to scene root (e.g. "Player", "UI/HUD/Label", or "." for root). Runtime mode: absolute (/root/Main/Player) or relative to current_scene (Player).
runtimebooleanWhen true, call on the live node in the running game via MCPRuntime. Requires the game to be running (run_scene first). When false (default), operates on the .tscn file in the editor.
scene_pathstringEditor mode only: which .tscn to operate on. Defaults to the editor's currently edited scene (must be saved at least once). Ignored when runtime=true.

No output schema declared.

No examples provided.

classdb_query ~165

Query Godot's ClassDB for class information: properties, methods, signals, and inheritance. Use this to verify that a class, method, or property actually exists in the running Godot engine before writing code. Prevents using wrong method names, outdated Godot 3 API, or incorrect signatures.

NameTypeReqDescription
class_namestringyesGodot class name to query (e.g., "CharacterBody2D", "Sprite2D", "Control")
include_virtualbooleanInclude well-known virtual methods like _ready, _process, _input (default: true). Set to false to see only public non-virtual methods.
querystringWhat to return: "all" (default), "properties", "methods", or "signals"

No output schema declared.

No examples provided.

clear_console_log ~37

Mark the current position in the Godot editor log. Subsequent get_console_log and get_errors calls will only return output after this point.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

close_editor_tabs ~390

Close open editor tabs (scenes and/or scripts). Files on disk are NOT touched — this only changes the editor UI state. Default behavior with no args closes EVERY open tab (both scenes and scripts). Primary use case: test automation — reset the editor to a known state between test runs without restarting Godot. Also useful before calling delete_file / delete_folder, which refuse by default when the target is open in an editor tab. Filter by kind ("scene", "script", "any") and/or by specific paths. Paths can be given with or without "res://". SCENES: built on EditorInterface.close_scene() (Godot 4.5+). Unsaved changes are DISCARDED silently (matches Godot's native close-tab behavior); save first via the editor or save_resource_to_file if you need to preserve pending edits. SCRIPTS: Godot does not currently expose a public API to close script tabs from script. Requested script paths are returned in `scripts_closed_not_supported` with the reason rather than silently skipped. Workarounds: close manually via the X on the tab, or use `force=true` on the next file mutation to bypass the editor-open guard. Response: {ok, scenes_closed, scripts_closed_not_supported, not_open, remaining_scenes, remaining_scripts, message}. `scenes_failed` appears with per-path Godot error codes when any close fails.

NameTypeReqDescription
kindstringWhich tab kind to target. "any" (default) closes both scenes and scripts. "scene" or "script" restricts to that side.
pathsarrayOptional list of paths to close (with or without "res://"). Omit, pass an empty array, or pass null to close ALL open tabs of the chosen kind. Paths not currently open are returned in `not_open` rath…

No output schema declared.

No examples provided.

configure_input_map ~214

Add, remove, or replace input actions and their key/button bindings. Use get_input_map to see current actions before modifying.

NameTypeReqDescription
actionstringyesInput action name (e.g., "move_left", "jump", "attack")
deadzonenumberAction deadzone (default: 0.5)
eventsarrayInput events to bind. Each object needs a "type" field: {"type":"key","key":"Space"} for keyboard, {"type":"mouse_button","button_index":1} for mouse (1=left,2=right,3=middle), {"type":"joypad_button…
operationstringyes"add" to create action and/or append events, "remove" to delete the action entirely, "set" to replace all events on an action (creates it if needed)

No output schema declared.

No examples provided.

connect_signal ~188

Connect a signal between two nodes inside a .tscn scene file. The target script must define the method (will refuse otherwise). Equivalent to clicking the "+" in the editor's Node > Signals panel and persists the connection to the .tscn. NOTE: scripts must be attached via attach_script (NOT via modify_node_property), otherwise the editor's in-memory node will not see the script and this tool will reject the connection.

NameTypeReqDescription
flagsnumberConnection flags (CONNECT_DEFERRED=1, CONNECT_PERSIST=2, CONNECT_ONE_SHOT=4). Default 0.
from_nodestringyesPath to the emitting node
methodstringyesMethod name on the receiving node's script
scene_pathstringyes
signalstringyesSignal name on the emitting node
to_nodestringyesPath to the receiving node

No output schema declared.

No examples provided.

create_folder ~34

Create a directory (with parent directories if needed).

NameTypeReqDescription
pathstringyesDirectory path (res://path/to/folder)

No output schema declared.

No examples provided.

create_scene ~366

Create a new Godot scene (.tscn) file with nodes. Use this to create player scenes, UI screens, game objects, etc. **Atomic pre-validation:** the entire spec (root, attach_script, every entry of `nodes`, and recursively their `children` / `properties` / `script`) is walked and validated BEFORE the scene file is created. If any node_type isn't a known class, any property name doesn't exist on its target class (plus the attached script's @export'd properties when present), or any script path is missing / isn't a Script — the call returns `ok: false` with a `validation_errors` array of path-pointed messages (`nodes[1].children[2].properties.text: property does not exist on Sprite2D`) and ZERO filesystem mutation. Fix all listed issues in one shot.

NameTypeReqDescription
attach_scriptstringOptional script path to attach to root node (res://path/to/script.gd)
nodesarrayArray of child nodes to add. Each node spec: {name|node_name, type|node_type, properties?, script?, groups?, children?}. Use either {name, type} or the same {node_name, node_type} keys used at the to…
root_node_namestringName of root node (default: derived from filename)
root_node_typestringyesType of root node (e.g., Node2D, CharacterBody2D, Control, Node3D). REQUIRED.
scene_pathstringyesScene file path (e.g., res://Scenes/player.tscn)

No output schema declared.

No examples provided.

create_script ~147

Create a NEW GDScript file (.gd) that does not exist yet. STRICTLY for .gd files — non-.gd extensions (.json, .gdignore, .md, etc.) are rejected with a pointer at write_file. A missing extension is auto-completed to .gd. Use edit_script for changes to an existing file. Use classdb_query to verify unfamiliar Godot class methods. After creating a script, consider run_scene and get_errors to verify it parses and behaves.

NameTypeReqDescription
contentstringyesFull GDScript content to write to the file
pathstringyesScript file path (res://scripts/player.gd) - must not exist yet

No output schema declared.

No examples provided.

delete_file ~281

Permanently delete a file from the project. REQUIRES confirm=true as an explicit safety gate — omitting confirm returns an error. Creates a .bak backup alongside the original by default (disable with create_backup=false). REFUSES if the file is currently open in the editor (any scene tab or script editor tab); close the tab first, or pass force=true to bypass the check (not recommended — deleting the active scene out from under the editor can crash Godot). Use ONLY when deletion is explicitly requested; NEVER as a way to "edit" or "reset" a file (use edit_script instead). Does not delete directories.

NameTypeReqDescription
confirmbooleanyesREQUIRED. Must be explicitly set to true — safety gate to prevent accidental deletes. Calls without confirm=true fail with an error.
create_backupbooleanIf true (default), saves a .bak copy next to the original before deletion so the file can be recovered. Set false to delete without backup.
forcebooleanIf true, bypass the "file is open in editor" guard. Use ONLY if you know the file is not the active scene. The guard exists because deleting the active scene tab from under the editor can crash Godot.
pathstringyesPath to the file to delete (e.g. res://scenes/old.tscn)

No output schema declared.

No examples provided.

delete_folder ~669

Recursively delete a directory and ALL of its contents from the project. REQUIRES confirm=true. For a non-empty folder you must ALSO pass recursive=true — otherwise the call refuses and reports the file/sub-folder count. The whole deletion lands as a SINGLE undo entry: one mcp_undo restores every file (empty sub-directories are not restored — only files are tracked). Three safety guards each REFUSE rather than half-delete: (1) refuses if any file inside is open in an editor tab — close the tabs or pass force=true (deleting an open scene can crash Godot); (2) refuses if any external file contains a literal "res://..." string pointing into this folder (preload, ext_resource, FileAccess.open targets, autoload entries — see below) — repoint them or pass force_orphan=true (leaves broken references); (3) refuses if the contents are too large to snapshot for undo without evicting existing undo history — pass allow_no_undo=true to delete without an undo entry. Refuses to touch res:// root or the godot_mcp addon. For a single file use delete_file instead. Returns {ok, path, deleted_files, deleted_count, removed_dirs, total_bytes, undo_available, message} and, on partial failure, partial:true with delete_errors. REFERENCE-SCAN BEHAVIOR (important): The external-reference guard does a literal substring search for "res://" path strings across .tscn / .tres / .gd / .cs / .gdshader / project.godot. It is intentionally conservative — any literal path-string match counts, including runtime FileAccess.open() targets that you may consider safe to delete (the script will just re-create the file on its next run). The scanner cannot statically distinguish load-bearing references from benign strings. If the referenced list looks like runtime/regenerable targets, pass force_orphan=true rather than trying to fight the scan. FRESHLY-CREATED FILES: If you are deleting a folder containing files you just wrote in this session (via create_script etc.), Godot may not have written the auto-gen…

NameTypeReqDescription
allow_no_undobooleanIf true, delete a folder too large to snapshot without recording an undo entry. The deletion then cannot be reverted with mcp_undo. Default false.
confirmbooleanyesREQUIRED. Must be explicitly true — safety gate against accidental deletes. Calls without confirm=true fail with an error.
forcebooleanIf true, bypass the "file open in editor" guard. Deleting an open scene/script can crash the editor — prefer closing the tabs. Default false.
force_orphanbooleanIf true, delete even when files inside are still referenced from outside the folder. This WILL leave broken references. Default false.
pathstringyesFolder to delete (e.g. res://enemies/old). res:// is prepended if missing.
recursivebooleanREQUIRED for a non-empty folder. Must be true to delete a folder that contains any files or sub-folders. Default false.

No output schema declared.

No examples provided.

detach_script ~46

Remove a script from a node in a scene.

NameTypeReqDescription
node_pathstringyesPath to the node (. for root)
scene_pathstringyesPath to the scene file

No output schema declared.

No examples provided.

disconnect_signal ~66

Remove a signal connection from a .tscn scene file. No-op if the connection doesn't exist.

NameTypeReqDescription
from_nodestringyes
methodstringyes
scene_pathstringyes
signalstringyes
to_nodestringyes

No output schema declared.

No examples provided.

edit_script ~217

Edit an existing GDScript (.gd) file in place by replacing one snippet with another, and save. Snippets can be any size — a single line, a function, or the whole file for a full rewrite. If old_snippet matches more than once, pass context_before/context_after to disambiguate; if it can't be found, read_file the relevant range and retry with an exact match. ONLY for .gd files; not for .tscn scene files (use the scene/node tools). After editing, consider validate_script and run_scene + get_errors.

NameTypeReqDescription
editobjectyesEdit spec: {type: 'snippet_replace', file: 'res://path.gd', old_snippet: 'text to replace (must match file contents exactly, including whitespace)', new_snippet: 'replacement text', context_before?:…

No output schema declared.

No examples provided.

find_nodes ~405

Search a .tscn file for nodes matching one or more filters. Filters AND together; pass any subset. Scene-scoped — for project-wide text search use search_project instead. Returns one entry per match with path (relative to scene root, "." = root), name, type (Godot class), and groups. Filters: • name_pattern: case-insensitive. If it contains "*" or "?" it is treated as a glob (matchn); otherwise as a substring (findn). • type: Godot class name (e.g. "Node2D", "CharacterBody3D", "Button"). Matches the node's class AND any subclass (so "Node2D" matches "Sprite2D"). Also matches custom script class_names registered globally via "class_name". Unknown types return an error (not silent zero matches). • in_group: exact group name; matches nodes where is_in_group() returns true. • recursive (default true): when false, only the scene root and its direct children are checked. If scene_path is omitted, defaults to the currently edited scene in the editor (must be saved at least once). Loads from disk like all other scene tools, so unsaved in-editor edits are not seen. No filters at all returns every node in the scene — handy as a structured alternative to scene_tree_dump.

NameTypeReqDescription
in_groupstringGroup name to filter by.
name_patternstringCase-insensitive match against node names. Glob (contains "*"/"?") or substring otherwise.
recursivebooleanTraverse the whole subtree (default true). If false, only the scene root and its direct children are checked.
scene_pathstringPath to the .tscn scene file (res://...). Optional; defaults to the editor's current edited scene.
typestringGodot class name or globally registered script class_name. Matches class AND subclasses (is_a check).

No output schema declared.

No examples provided.

generate_2d_asset ~245

Render an SVG to a PNG asset on disk via Image.load_svg_from_buffer. The SVG is rendered directly from bytes — no temp file is created, so concurrent calls are safe and project-rename quirks (user:// rebinding) cannot break it. Returns resource_path, absolute_path, dimensions {width,height}, and the render_scale used.

NameTypeReqDescription
filenamestringyesOutput filename. ".png" appended if missing.
heightnumberOptional desired output height in pixels. Same as width but matched on the height axis. If both width and height are provided, width takes precedence for scale derivation.
save_pathstringDestination directory (default: res://assets/generated/). Created if it does not exist.
scalenumberOptional explicit render scale (e.g. 2.0 = 2x). Overrides width/height-derived scaling. Default: 1.0.
svg_codestringyesComplete SVG markup. Either single or double quotes are accepted in attributes.
widthnumberOptional desired output width in pixels. Combined with the SVG's intrinsic width to derive a uniform render_scale.

No output schema declared.

No examples provided.

get_collision_layers ~24

Return named 2D/3D physics collision layers from ProjectSettings.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_console_log ~273

Return the latest lines from the Godot editor Output panel (editor-side messages plus prints from the running game). NOTE: this does NOT include the Debugger > Errors tab — runtime push_error / script errors during play often surface only there. After run_scene, always call get_errors (not just this) to check for errors. When this tool finds error-prefixed lines it returns errors_detected=true and a hint pointing to get_errors. The tool also reads the Output panel's Info/Warning/Error filter buttons; if Info is OFF and prints appear missing, the response includes output_panel_filters and a hint asking the user to toggle Info back on (the panel filters its RichTextLabel, so missing-print symptoms are usually a UI toggle, not a tool bug). Pass debug:true to also include editor_log_rtl_path, editor_log_candidates (every EditorLog widget found, with sample tails), and output_panel_filters even when nothing looks suspicious.

NameTypeReqDescription
debugbooleanWhen true, include editor_log_rtl_path and editor_log_candidates (each EditorLog widget found, with text length and a 200-char tail sample). Use this to diagnose cases where running-game prints do no…
max_linesnumberMaximum number of lines to include (default: 50)

No output schema declared.

No examples provided.

get_editor_selection ~300

Return the node path(s) the user has currently selected in the Godot editor (Scene dock). **Call this FIRST whenever the user refers to a node without naming a path** — phrases like "this node", "fix this", "change the color here", "delete that", "make this red", "the selected one", "what I have selected", etc. Returns an empty `selection` array if nothing is selected; that's informational, not an error. Selection is editor UI state (not stored in the .tscn) and is scoped to the currently edited scene tab — instances from a non-active tab will not appear. Response shape: `{ok, scene_path, selection: [{path, name, type}], count, reason, message?}`. `reason` is a stable machine-readable enum — `"ok"` (something is selected), `"none_selected"` (scene open but no nodes selected), or `"no_scene_open"` (no scene tab open at all) — so the agent can branch without string-matching the human-readable `message`. Paths are scene-relative ("." = scene root, "UI/HUD/Label" for nested) and match the format produced by `find_nodes` and `scene_tree_dump`, so they can be passed directly to `modify_node_property`, `set_node_properties`, `attach_script`, `remove_node`, etc. See the `selection-workflow` guide for end-to-end patterns.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_errors ~180

Get errors and warnings from both the Godot Output panel and the Debugger > Errors tab. Returns file paths, line numbers, severity, stack traces, and which source each error came from. Debugger rows can appear a few frames after run_scene returns; pass wait_ms:300 when checking immediately after launch. If errors mention a missing method or property, use classdb_query to verify the correct API before fixing.

NameTypeReqDescription
include_warningsbooleanInclude warnings in addition to errors (default: true)
max_errorsnumberMaximum number of errors to return (default: 50)
wait_msnumberOptional short wait before reading Output/Debugger errors, capped at 1000ms. Use ~300ms immediately after run_scene to avoid false "0 errors" results while the Debugger > Errors tab catches up.

No output schema declared.

No examples provided.

get_godot_status ~23

Check if Godot editor is connected to the MCP server.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_guide ~167

Read a short markdown guide from the server. Same content as the MCP resources/read protocol, exposed as a tool so it works in MCP clients that do not support resources (e.g. Claude Desktop, Cursor chat). Call with no args to list available guides: testing-loop, scene-editing, asset-generation, troubleshooting, batching, selection-workflow, tool-index. Call with {slug: "..."} to get the full markdown. Useful when a workflow is non-obvious (testing a running game, choosing between scene-editing tools, troubleshooting "Runtime helper not connected", etc.).

NameTypeReqDescription
slugstringGuide slug. Omit to list all available guides. Known slugs: testing-loop, scene-editing, asset-generation, troubleshooting, batching, selection-workflow, tool-index.

No output schema declared.

No examples provided.

get_input_map ~136

Return the full InputMap: built-in actions (ui_*, spatial_editor/*) plus all project-defined actions from project.godot. Each action maps to an object with "events" (array of key/mouse/gamepad bindings) and optionally "deadzone". Use this before configure_input_map to see current bindings and deadzones.

NameTypeReqDescription
include_deadzonesbooleanInclude the per-action "deadzone" field in each action object (default: true). When true, each action is {"deadzone": 0.5, "events": [...]}. When false, each action is {"events": [...]}.

No output schema declared.

No examples provided.

get_node_groups ~42

Read the list of groups a node belongs to in a .tscn scene file.

NameTypeReqDescription
node_pathstring
scene_pathstringyes

No output schema declared.

No examples provided.

get_node_properties ~74

Get available properties for a Godot node type. Use this to discover what properties exist on a node type (e.g., anchors_preset for Control, position for Node2D).

NameTypeReqDescription
node_typestringyesNode class name (e.g., "Sprite2D", "Control", "Label", "Button")

No output schema declared.

No examples provided.

get_node_spatial_info ~128

Query computed 3D spatial data for a Node3D in a scene file. Returns local/global positions, scales, rotation quaternions, and subtree bounding boxes (AABB) when available. Use this before making precise 3D placement decisions.

NameTypeReqDescription
include_boundsbooleanInclude computed subtree AABBs when visual descendants exist (default: true)
node_pathstringPath to the Node3D (. for root, or relative path like Level/Props/Crate)
scene_pathstringyesPath to the .tscn scene file

No output schema declared.

No examples provided.

get_performance_monitors ~375

Snapshot of Godot's Performance singleton from inside the RUNNING game: fps, frame/physics step times, static memory (current + peak), renderer draw calls / objects / primitives, and engine-wide object/node/orphan counts. REQUIRES the game to be running with the MCPRuntime autoload connected (run_scene with wait_for_runtime=true first). Use when: 1. After run_scene — verify the scene actually hits its target fps before reporting "done". 2. The user reports lag/jank — localize the bottleneck (low fps vs high draw_calls vs growing memory vs orphan_nodes leak). 3. Before/after an optimization change — measure both sides to confirm the change helped (the optimization claim is only credible with numbers). Response fields: • fps, frame_time_ms — overall frame budget. Target is usually 16.67ms (60fps) or 8.33ms (120fps). • physics_process_time_ms — physics step time (cost per tick). • physics_ticks_per_second — configured tick rate (Engine.physics_ticks_per_second). Compare against physics_process_time_ms: if step time > 1000/tick_rate, physics is over budget. • static_memory_mb / _bytes, static_memory_peak_mb / _bytes — current and high-water mark. • draw_calls, objects_in_frame, primitives_in_frame — render-side cost. • total_objects, nodes, orphan_nodes — engine-wide instance counts. orphan_nodes > 0 means nodes were created without being added to the tree (memory leak smell). • custom_monitors (only when present) — any user-registered Performance.add_custom_monitor entries. Values reflect a single frame; sample twice with a wait in between if you need to confirm a trend.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_project_settings ~53

Concise project settings summary: main_scene, window size/stretch, physics tick rate, and render basics.

NameTypeReqDescription
include_physicsbooleanInclude physics settings
include_renderbooleanInclude render settings

No output schema declared.

No examples provided.

get_resource_info ~272

Inspect ANY Godot Resource. Two modes: • path mode: pass {path: "res://foo.png"} for a resource on disk (.tres / .res / image / .glb / .ogg / .tscn / etc.) • node mode: pass {scene_path, node_path, resource_property} to inspect a resource attached to a node WITHOUT having to save it as .tres first (e.g. the shape on a CollisionShape2D, the material on a MeshInstance3D, the stream on an AudioStreamPlayer). Returns class, file size (path mode), and type-specific info: width/height for textures, vertex/surface counts and AABB for meshes, length for AudioStream/Animation, node count for PackedScene, common Material properties, Shape extents, and the resource's dependencies.

NameTypeReqDescription
node_pathstringNode mode: path to the node within the scene.
pathstringPath mode: resource path on disk (res://...).
resource_propertystringNode mode: property name on the node holding the resource (e.g. "shape", "material", "stream", "texture").
scene_pathstringNode mode: path to the .tscn that owns the node.

No output schema declared.

No examples provided.

get_runtime_log ~157

Return entries from the MCPRuntime in-game ring buffer. The buffer holds the last ~500 lines pushed via MCPRuntime.push_runtime_log(level, text) from your scripts plus internal connection events. For script prints/stdout use get_console_log; for runtime push_error / script errors use get_errors (it reads the Debugger > Errors tab — runtime errors do NOT appear in get_console_log). Returns entries with ts_ms, level, and text plus started_at_ms (when the helper started) and now_ms.

NameTypeReqDescription
limitnumberMaximum entries to return (default: 200, max 500)
since_msnumberOnly return entries with ts_ms >= since_ms. Use 0 (default) for all.

No output schema declared.

No examples provided.

get_runtime_status ~144

Combined editor + runtime status snapshot. Returns `playing`, `playing_scene`, `last_launched` ("current"|"main"|res-path), `uptime_ms` since the most recent run_scene, `runtime_helper_connected` (true once the in-game MCPRuntime autoload is talking to the MCP server), `godot_version` (e.g. "4.5.0.stable"), and `godot_version_info` (the full Engine.get_version_info() dict — `major`, `minor`, `patch`, `string`, `build`, `hex`, …). Useful for binding test reports to a specific Godot build without opening the About dialog.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_scene_node_properties ~238

Return the FULL property list of a single node in a .tscn file, including @export'd script vars and inherited properties — with current values, declared variant types, hint metadata, and a category grouping. Complements `read_scene` (which uses a curated subset of common properties for quick tree overviews) and `get_node_properties` (which returns class-level metadata, not a specific node's current values). Use this to verify a property was actually set after `add_node` / `set_node_properties` (especially for script @export vars), or to discover the exact name of a property you can't remember (handy when AI suggestions like "color" turn out to be "modulate"). Returns `{ok, scene_path, node_path, node_type, node_name, inheritance_chain, property_count, properties, categories}`.

NameTypeReqDescription
node_pathstringPath to the node within the scene (. for root, or relative path like "UI/HUD/Label"). Defaults to "." (scene root).
scene_pathstringyesPath to the scene file (res://path/to/scene.tscn)

No output schema declared.

No examples provided.

instance_scene ~200

Add an instance of another scene (.tscn) as a child node. This is how you compose scenes from reusable parts (like prefabs). The instance maintains a live reference to the source scene. Use this instead of add_node when you want to reuse an existing scene.

NameTypeReqDescription
instance_pathstringyesPath to the .tscn scene to instance (the child/prefab scene)
node_namestringOptional name for the instance. If omitted, uses the instanced scene's root node name.
parent_pathstringPath to parent node within the scene (. for root, or relative path like Level/Enemies)
propertiesobjectOptional property overrides on the instance root (e.g., {position: {type: "Vector3", x: 5, y: 0, z: 10}})
scene_pathstringyesPath to the scene file being edited (the parent scene)

No output schema declared.

No examples provided.

is_playing ~39

Compatibility shim: returns {playing, scene}. For richer info (uptime, runtime helper connectivity, last-launched target) prefer get_runtime_status.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_dir ~56

List files and folders under a Godot project path (e.g., res://). Returns arrays of files and folders in the specified directory.

NameTypeReqDescription
rootstringyesStarting path like res://addons/ai_assistant or res://

No output schema declared.

No examples provided.

list_scripts ~21

List all GDScript files in the project with basic metadata.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_settings ~132

Browse Godot project settings by category. Returns values from the editor's in-memory state — this matches project.godot after a normal Godot save, but direct edits to project.godot on disk are not reflected until the editor restarts (rescan_filesystem does not help). Call without a category to see all available categories. Call with a category to see all settings with their current values, types, and valid options.

NameTypeReqDescription
categorystringSettings category prefix (e.g., "display", "physics", "rendering", "application", "audio"). Omit to list all available categories.

No output schema declared.

No examples provided.

list_signal_connections ~193

List signal connections involving a node. source="scene_file" (default) reads connections persisted to a .tscn. source="runtime" requires the game to be running and reads live connections from the SceneTree. Use the runtime mode to verify dynamically-connected signals (those connected from code in _ready, not in the editor).

NameTypeReqDescription
include_incomingbooleanInclude signals from other nodes whose handler is on this node (default: true). Only honored for scene_file source.
include_outgoingbooleanInclude signals that this node emits (default: true)
node_pathstringyesPath to the node. For source="runtime" use absolute (/root/Main/Player) or relative to current_scene.
scene_pathstringFor source="scene_file": path to the .tscn
sourcestringWhere to read connections from. Default: scene_file

No output schema declared.

No examples provided.

map_project ~93

Crawl the entire Godot project and build an interactive visual map of all scripts showing their structure (variables, functions, signals), connections (extends, preloads, signal connections), and descriptions. Opens an interactive browser-based visualization.

NameTypeReqDescription
include_addonsbooleanWhether to include scripts in the addons/ folder (default: false)
rootstringRoot path to start crawling from (default: res://)

No output schema declared.

No examples provided.

mcp_redo ~213

Re-apply the most recently undone MCP mutation(s). Use this proactively whenever you've over-undone — for example, you walked back several steps to inspect intermediate state, or you undid in error and want to recover the change without re-deriving its arguments. Also use when the user says "redo", "put it back", "never mind, do it again", or similar. Prefer this over re-issuing the original tool call — it restores the exact post-mutation state with no guessing. After mcp_undo, undone entries land on a redo stack that mcp_redo replays in order. The redo stack is cleared whenever a NEW mutation is performed (standard undo semantics), so redo only works until the next mutation. Pass count to redo multiple entries; pass preview=true to inspect without applying.

NameTypeReqDescription
countnumberNumber of entries to redo. Defaults to 1.
previewbooleanIf true, return what *would* be redone without performing it.

No output schema declared.

No examples provided.

mcp_undo ~295

Roll back the most recent MCP mutation(s). Use this proactively — not just when the user asks — any time you want to recover from a mistake, clean up after a partial failure, or try a different approach. Specifically: call this if a tool call produced an error or unexpected result and you want a clean slate before retrying; if a multi-step sequence failed midway and you need to undo the steps that did succeed; or if get_errors shows new problems immediately after a mutation. Also use when the user says "undo", "revert", "go back", "restore", "that was wrong", "put it back", or similar. Prefer this over manually re-applying old values — it's exact (no guessing the prior state), atomic, and keeps the history clean. Only covers mutations made by MCP tools; does not cover changes the user made manually in the editor. Pass count to undo more than one entry in order; pass preview=true to see what would be undone without performing it (or call mcp_undo_history for a richer listing). After undo, scenes/scripts open in the editor are automatically reloaded.

NameTypeReqDescription
countnumberNumber of entries to undo from the top of the stack. Defaults to 1. Stops early if the stack runs out.
previewbooleanIf true, return what *would* be undone without performing the undo. Use to verify before committing.

No output schema declared.

No examples provided.

mcp_undo_history ~114

List the undo and redo stacks: tool name, args summary, files affected, and age in seconds for each entry. Use to decide how far to undo (then call mcp_undo with the chosen count) or to confirm a specific change is still on the stack. Returns {undo: [...newest-first], redo: [...newest-first], cap: {entries, max_entries, bytes, max_bytes}}.

NameTypeReqDescription
limitnumberMax entries to return per stack. Defaults to 20.

No output schema declared.

No examples provided.

measure_node_distance ~88

Measure the world-space distance between two Node3D nodes in a scene file. Returns both the full 3D delta and the horizontal XZ distance.

NameTypeReqDescription
from_node_pathstringyesPath to the first Node3D
scene_pathstringyesPath to the .tscn scene file
to_node_pathstringyesPath to the second Node3D

No output schema declared.

No examples provided.

modify_node_property ~404

Modify a single property on a node in a .tscn scene file. For multiple properties at once use set_node_properties. ALWAYS use a tool to modify .tscn files — NEVER edit them as text. To attach or change a script, use attach_script (NOT modify_node_property with property="script") — modify_node_property only rewrites the .tscn on disk, leaving the editor's in-memory node without the script, which makes connect_signal fail.

NameTypeReqDescription
node_pathstringPath to the node (. for root, or relative path like "Sprite2D")
property_namestringyesName of the property to modify (position, scale, rotation, modulate, visible, etc.)
scene_pathstringyesPath to the .tscn scene file
valueyesNew value for the property. ANY JSON value accepted: primitives (numbers, strings, booleans, null), arrays, or objects. Use the {type, ...} discriminated form for Godot variant types. Common forms: n…

No output schema declared.

No examples provided.

move_node ~96

Move a node to a different parent in a scene and optionally control its position among siblings.

NameTypeReqDescription
new_parent_pathstringyesPath to the new parent node (. for root)
node_pathstringyesPath to the node to move
scene_pathstringyesPath to the scene file
sibling_indexnumberOptional position among siblings (0 = first child). Omit or -1 to append.

No output schema declared.

No examples provided.

open_in_godot ~52

Open a file in the Godot editor at a specific line (side-effect only).

NameTypeReqDescription
linenumber1-based line number
pathstringyesres:// path to open

No output schema declared.

No examples provided.

query_runtime_node ~178

Query a live node in the running scene tree. REQUIRES the game to be running with the MCPRuntime autoload connected. Returns class, path, valid, groups, and a map of property values. By default returns position, global_position, rotation, scale, visible, modulate — pass `properties:["..."]` to override. Set include_children=true to also list direct child nodes.

NameTypeReqDescription
include_childrenbooleanList direct children {name, class}. Default: false.
include_groupsbooleanInclude the node's group memberships. Default: true.
node_pathstringyesAbsolute path (e.g. /root/Main/Player) or relative to current_scene.
propertiesarrayProperty names to read. Default: position, global_position, rotation, scale, visible, modulate.

No output schema declared.

No examples provided.

Common questions

What is the io.github.tomyud1/godot-mcp server?

io.github.tomyud1/godot-mcp is listed in the public MCP registry as io.github.tomyud1/godot-mcp. MCP server for Godot game engine integration, control the Godot editor with AI. This page covers its npm package (godot-mcp-server).

Is the io.github.tomyud1/godot-mcp server safe to use?

io.github.tomyud1/godot-mcp scores 76 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.tomyud1/godot-mcp server expose?

io.github.tomyud1/godot-mcp exposes 77 tools: get_godot_status, get_guide, list_dir, read_file, search_project, and 72 more. Their descriptions and schemas cost roughly 15,868 tokens of context every time the server is loaded.

Is the io.github.tomyud1/godot-mcp server still maintained?

io.github.tomyud1/godot-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.tomyud1/godot-mcp server under?

io.github.tomyud1/godot-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.