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

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

Available components

0 this week 77 Trust /100

Last scanned (1 hour ago)

Scores higher than 55% of npm servers

Category Entertainment and Games

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
  • 30 of 92 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 15067 tokens (~193/item across 78 items; 71 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 check failed: the tool surface changed between 0.6.0 and 0.6.1: 6 tool removals, 4 breaking changes, 0 additions. See how to fix → Fail
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 96% 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 72 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
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.

  • 4 Nov 26 +1

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

  • 3 Nov 26 −1

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

  • 29 Oct 26 0
    • CVE-2026-118663 affects this package: high ▼ security
  • 28 Oct 26 +1
    • GHSA-f897-62hf-6gxq affects this package: high ▼ security
  • 27 Oct 26 −1

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

  • 21 Oct 26 +1
    • CVE-2026-111771 affects this package: high ▼ security
    • CVE-2026-111768 affects this package: high ▼ security
    • CVE-2026-111769 affects this package: high ▼ security
    • CVE-2026-111767 affects this package: high ▼ security
  • 20 Oct 26 −1

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

  • 18 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
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 5 Nov 2026 · Analysed npm/godot-mcp-server@0.6.1

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 8 findings
ID CVE Severity Vector Fix available
GHSA-rmxm-3fg6-px4f CVE-2026-118663 medium CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N yes
GHSA-22jm-h49p-29qw CVE-2026-111767 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L yes
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
GHSA-46jr-4wx8-v453 CVE-2026-111768 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-6prh-2h8m-c8cw CVE-2026-111769 medium CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N yes
GHSA-6qxp-vccf-f47h CVE-2026-104850 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N yes
GHSA-f897-62hf-6gxq high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-rvq5-wwqv-78pq CVE-2026-111771 medium CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 92 packages
Packages resolved 92
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 71 exposed · ~14,833 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 ~466

Add a node (optionally with a script, groups, properties and a whole tree of children) to an existing scene file in one call. Children format: {name|node_name, type|node_type, properties?, script?, groups?, children?}; unknown child keys are errors. **All-or-nothing:** the node tree is built and checked in memory before the scene is touched. Every problem (unknown types or properties with suggestions, wrong value types, missing resource files, bad scripts) is reported together in `validation_errors` with path-pointed prefixes, and nothing is saved unless everything is valid. Returns the new node's `node_path`.

NameTypeReqDescription
childrenarray–Optional 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.
groupsarray–Optional 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_pathstring–Path to parent node (. for root, or relative path like Sprite2D)
propertiesobject–Optional properties to set on the node. Values are read according to each property type: numbers/bools/strings; enums by name ("Nearest") or number; Vector2/3 as {x, y[, z]} or [x, y[, z]]; Color as…
scene_pathstringyesPath to the scene file (res://path/to/scene.tscn)
scriptstring–Optional 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_pathstring–Path 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
atomicboolean–Default 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_errorboolean–Default 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,228

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** — positional arguments, read according to the method's parameter types (same value forms as set_node_properties): a Texture2D parameter takes `"re…

NameTypeReqDescription
argsarray–Positional arguments to pass. Default: []. Arity is pre-checked against the method signature (allowing for default arguments).
confirmboolean–Required 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_returnboolean–Capture 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).
runtimeboolean–When 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_pathstring–Editor 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_virtualboolean–Include well-known virtual methods like _ready, _process, _input (default: true). Set to false to see only public non-virtual methods.
querystring–What 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 ~386

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
kindstring–Which tab kind to target. "any" (default) closes both scenes and scripts. "scene" or "script" restricts to that side.
pathsarray–Optional list of paths to close (with or without "res://"). Omit or pass an empty array to close ALL open tabs of the chosen kind. Paths not currently open are returned in `not_open` rather than caus…

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")
deadzonenumber–Action deadzone (default: 0.5)
eventsarray–Input 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 ~198

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, otherwise the editor's in-memory node will not see the script and this tool will reject the connection.

NameTypeReqDescription
flagsnumber–Connection flags (CONNECT_DEFERRED=1, CONNECT_PERSIST=2, CONNECT_ONE_SHOT=4). Default 0.
from_node_pathstringyesPath to the emitting node (scene-relative, "." = root)
methodstringyesMethod name on the receiving node's script
scene_pathstringyes–
signalstringyesSignal name on the emitting node
to_node_pathstringyesPath to the receiving node (scene-relative, "." = root)

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 ~436

Create a new Godot scene (.tscn) with a tree of nodes in one call, including their properties, textures, collision shapes, scripts and groups. Use this to create player scenes, UI screens, game objects, etc. **All-or-nothing:** the whole tree is built and checked in memory first. Unknown node types or property names (with suggestions), values of the wrong type, missing resource files and bad scripts are ALL reported together as path-pointed `validation_errors` (e.g. `nodes[1].children[0].properties.texture: no resource at res://hero.png`), and no file is written unless everything is valid.

NameTypeReqDescription
attach_scriptstring–Optional script path to attach to root node (res://path/to/script.gd)
nodesarray–Child nodes to create under the root. Each node spec: {name|node_name, type|node_type, properties?, script?, groups?, children?}. Unknown keys (e.g. "class", "parent") are errors. properties values:…
root_node_namestring–Name of the root node. Default: the file name in PascalCase (res://player_ship.tscn -> PlayerShip).
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_backupboolean–If true (default), saves a .bak copy next to the original before deletion so the file can be recovered. Set false to delete without backup.
forceboolean–If 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_undoboolean–If 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.
forceboolean–If true, bypass the "file open in editor" guard. Deleting an open scene/script can crash the editor — prefer closing the tabs. Default false.
force_orphanboolean–If 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.
recursiveboolean–REQUIRED 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 ~78

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

NameTypeReqDescription
from_node_pathstringyesPath to the emitting node
methodstringyes–
scene_pathstringyes–
signalstringyes–
to_node_pathstringyesPath to the receiving node

No output schema declared.

No examples provided.

edit_script ~212

Edit an existing GDScript (.gd) file in place by replacing old_text with new_text, and save. The text can be any size — a single line, a function, or the whole file for a full rewrite. If old_text 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
context_afterstring–Optional unique text right after old_text
context_beforestring–Optional unique text right before old_text, when old_text appears more than once
new_textstringyesReplacement text (empty string deletes old_text)
old_textstringyesExact text to replace, including whitespace and indentation
pathstringyesScript to edit (res://path/to/script.gd)

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_groupstring–Group name to filter by.
name_patternstring–Case-insensitive match against node names. Glob (contains "*"/"?") or substring otherwise.
recursiveboolean–Traverse the whole subtree (default true). If false, only the scene root and its direct children are checked.
scene_pathstring–Path to the .tscn scene file (res://...). Optional; defaults to the editor's current edited scene.
typestring–Godot 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.
heightnumber–Optional 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_pathstring–Destination directory (default: res://assets/generated/). Created if it does not exist.
scalenumber–Optional 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.
widthnumber–Optional 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
debugboolean–When 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_linesnumber–Maximum number of lines to include (default: 50)

No output schema declared.

No examples provided.

get_editor_selection ~295

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 `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_warningsboolean–Include warnings in addition to errors (default: true)
max_errorsnumber–Maximum number of errors to return (default: 50)
wait_msnumber–Optional 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 ~45

Check if the Godot editor is connected to the MCP server. Also reports the plugin, server and Godot versions, and warns when the plugin and server versions differ.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_guide ~166

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, setting resources and property values, troubleshooting "Runtime helper not connected", etc.).

NameTypeReqDescription
slugstring–Guide 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_deadzonesboolean–Include 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_boundsboolean–Include computed subtree AABBs when visual descendants exist (default: true)
node_pathstring–Path 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_physicsboolean–Include physics settings
include_renderboolean–Include 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_pathstring–Node mode: path to the node within the scene.
pathstring–Path mode: resource path on disk (res://...).
resource_propertystring–Node mode: property name on the node holding the resource (e.g. "shape", "material", "stream", "texture").
scene_pathstring–Node 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
limitnumber–Maximum entries to return (default: 200, max 500)
since_msnumber–Only 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_pathstring–Path 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 ~213

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_namestring–Optional name for the instance. If omitted, uses the instanced scene's root node name.
parent_pathstring–Path to parent node within the scene (. for root, or relative path like Level/Enemies)
propertiesobject–Optional property overrides on the instance root, e.g. {"position": {"x": 5, "y": 0, "z": 10}}. Same value forms as set_node_properties; checked before the parent scene is touched.
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 ~80

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

NameTypeReqDescription
include_hiddenboolean–Include hidden files and folders (names starting with "."). Default: false.
pathstring–Folder to list, like res:// (default) or res://scenes

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
categorystring–Settings 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_incomingboolean–Include signals from other nodes whose handler is on this node (default: true). Only honored for scene_file source.
include_outgoingboolean–Include 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_pathstring–For source="scene_file": path to the .tscn
sourcestring–Where to read connections from. Default: scene_file

No output schema declared.

No examples provided.

map_project ~92

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_addonsboolean–Whether to include scripts in the addons/ folder (default: false)
pathstring–Folder 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
countnumber–Number of entries to redo. Defaults to 1.
previewboolean–If 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
countnumber–Number of entries to undo from the top of the stack. Defaults to 1. Stops early if the stack runs out.
previewboolean–If 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
limitnumber–Max 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.

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_indexnumber–Optional 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
linenumber–1-based line number
pathstringyesres:// path to open

No output schema declared.

No examples provided.

query_runtime_node ~251

Read a live node in the running game. REQUIRES the game to be running with the MCPRuntime autoload connected. Returns class, path, script, groups and property values. By default (no `properties`) it returns everything that describes the node's current state: all script variables (health, score, ...) plus every stored property that differs from the class default (a Label's text, a body's velocity, ...), plus global_position for 2D/3D/UI nodes. Pass `properties: ["text", "material:albedo_color"]` to read specific ones (colon paths read into resources); unknown names are errors with suggestions. Large arrays and strings are truncated. Set include_children=true to list direct children.

NameTypeReqDescription
include_childrenboolean–List direct children {name, class}. Default: false.
include_groupsboolean–Include the node's group memberships. Default: true.
node_pathstringyesAbsolute path (e.g. /root/Main/Player) or relative to current_scene.
propertiesarray–Property names (or colon paths) to read. Omit to get every script variable and every property that differs from its default.

No output schema declared.

No examples provided.

read_file ~124

Read a text file from the Godot project, optionally a specific line range. Useful for reading GDScript files, scene files, or any text-based content.

NameTypeReqDescription
end_linenumber–Inclusive end line; 0 or missing means to end of file (optional)
max_bytesnumber–Maximum bytes to return before truncating (default: 200000)
pathstringyesres:// path to the file (e.g., res://scripts/player.gd)
start_linenumber–1-based inclusive start line (optional)

No output schema declared.

No examples provided.

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
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 77 out of 100 on VerifyMCP. We recorded 8 known advisories against it as of 5 November 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 71 tools: get_godot_status, get_guide, list_dir, read_file, search_project, and 66 more. Their descriptions and schemas cost roughly 14,833 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 5 November 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.