io.github.TomasLucasUTN/godot-mcp-bridge
NPM · GODOT-MCP-BRIDGE · SCANNED SEP 21
MCP server for Godot game engine integration — control the Godot editor with AI
Available components
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 Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 96 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 16 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability84
- 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 6815 tokens (~128/item across 53 items; 44 tools + 9 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 Management91
- Stability check failed: the tool surface changed between 1.1.6 and 1.2.1: 1 tool removals, 0 breaking changes, 1 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 99% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 45 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
- Supports UI / widget rendering.Pass
How do I install the io.github.TomasLucasUTN/godot-mcp-bridge server?
io.github.TomasLucasUTN/godot-mcp-bridge runs locally as an npm package, launched with npx -y godot-mcp-bridge. 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-bridge
claude mcp add tomaslucasutn-godot-mcp-bridge -- npx -y godot-mcp-bridge
{
"mcpServers": {
"tomaslucasutn-godot-mcp-bridge": {
"command": "npx",
"args": [
"-y",
"godot-mcp-bridge"
]
}
}
} {
"servers": {
"tomaslucasutn-godot-mcp-bridge": {
"command": "npx",
"args": [
"-y",
"godot-mcp-bridge"
]
}
}
} codex mcp add tomaslucasutn-godot-mcp-bridge -- npx -y godot-mcp-bridge
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"tomaslucasutn-godot-mcp-bridge": {
"type": "local",
"command": [
"npx",
"-y",
"godot-mcp-bridge"
],
"enabled": true
}
}
} openclaw mcp add tomaslucasutn-godot-mcp-bridge --command npx --arg -y --arg godot-mcp-bridge
mcp_servers:
tomaslucasutn-godot-mcp-bridge:
command: "npx"
args: ["-y", "godot-mcp-bridge"] {
"McpServers": {
"tomaslucasutn-godot-mcp-bridge": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"godot-mcp-bridge"
]
}
}
} assistant mcp add tomaslucasutn-godot-mcp-bridge -t stdio -c npx -a -y godot-mcp-bridge
{
"mcpServers": {
"tomaslucasutn-godot-mcp-bridge": {
"command": "npx",
"args": [
"-y",
"godot-mcp-bridge"
]
}
}
} 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.
- 21 Sept 26 +1
- Security disclosure: unverified → pass ▲ functional
- 20 Sept 26 0
- Security disclosure: pass → unverified ▼ functional
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 81 to 84.
- 18 Sept 26 −3
No change was recorded against any check on this day. Stability & Change Management went from 98 to 81.
- 17 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 94 to 98.
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 88 to 91.
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 81 to 84.
- 11 Sept 26 −3
No change was recorded against any check on this day. Stability & Change Management went from 98 to 78.
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 21 Sept 2026 · Analysed npm/godot-mcp-bridge@1.2.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 →
Dependencies 96 packages
| Packages resolved | 96 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
add_node ~281
Add a node to an existing scene file, optionally with a script, groups, and a whole sub-tree of children in the same call. Children take the same keys as add_node itself ({name|node_name, type|node_type, properties?, script?, groups?, children?}); an unknown key is an error.
| Name | Type | Req | Description |
|---|---|---|---|
| children | array | – | Sub-tree to create in the same call. Each entry takes add_node's own args, minus parent_path. |
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| groups | array | – | Optional list of node groups this node should belong to. Persisted to the .tscn file. |
| node_name | string | yes | Name for the new node |
| node_type | string | yes | Type of node (e.g., Sprite2D, Camera2D, RigidBody2D, CollisionShape2D) |
| parent_path | string | – | Path to parent node (. for root, or relative path like Sprite2D) |
| properties | object | – | Optional dictionary of properties to set on the node |
| scene_path | string | yes | Path to the scene file (res://path/to/scene.tscn) |
| script | string | – | Optional script path to attach to the new node (res://path/to/script.gd) |
No output schema declared.
No examples provided.
attach_script ~96
Attach or change a script on a node in a scene.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| node_path | string | – | Path to the node (. for root, or relative path) |
| scene_path | string | yes | Path to the scene file |
| script_path | string | yes | Path to the script file (res://path/to/script.gd) |
No output schema declared.
No examples provided.
batch_execute ~187
Run a sequence of {tool, args} calls in ONE request instead of N round-trips — the way to build several scenes at once (batch_scene_edit covers only one). Dispatches inside the EDITOR, so it cannot reach tools that live in the running game (take_screenshot, send_input, query_runtime_node, game_eval, ...); call those directly. NOT a transaction: each scene tool still does its own load/save. stop_on_error halts at the first failure. Cannot be nested.
| Name | Type | Req | Description |
|---|---|---|---|
| operations | array | yes | Ordered list of {tool, args} to run. Max 100. e.g. [{"tool":"add_node","args":{...}}, {"tool":"set_node_properties","args":{...}}] |
| stop_on_error | boolean | – | If true, stop at the first operation that returns ok:false. Default: false (run all). |
No output schema declared.
No examples provided.
batch_scene_edit ~253
Apply many structural/property edits to ONE scene with a single load and a single save — much faster than N separate add_node/set_node_properties/... calls on a closed scene (each of those re-loads and re-saves the whole .tscn). For an open scene the whole batch lands on the live editor tree and marks it dirty (no disk write). Ops run in order; stop_on_error (default true) discards the entire batch — nothing saved — on the first failure. Op types: add_node {node_name,node_type,parent_path,properties?,script?,groups?,children?}, set_properties {node_path,properties}, remove_node {node_path}, rename_node {node_path,new_name}, move_node {node_path,new_parent_path,sibling_index?}.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| operations | array | yes | Ordered edits. Each is an object with an "op" field and that op's args. |
| scene_path | string | yes | Path to the .tscn file |
| stop_on_error | boolean | – | Discard the whole batch (save nothing) on the first failing op. Default true. |
No output schema declared.
No examples provided.
classdb_query ~210
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.
| Name | Type | Req | Description |
|---|---|---|---|
| class_name | string | yes | Godot class name to query (e.g., "CharacterBody2D", "Sprite2D", "Control") |
| filter | string | – | Case-insensitive substring: only members whose name contains it are returned. Use when checking for a specific method/property (e.g. "velocity") on a big class — cuts the output massively. |
| include_virtual | boolean | – | Include well-known virtual methods like _ready, _process, _input (default: true). Set to false to see only public non-virtual methods. |
| query | string | – | What to return: "all" (default), "properties", "methods", or "signals" |
No output schema declared.
No examples provided.
connect_signal ~211
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.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| flags | number | – | Connection flags (CONNECT_DEFERRED=1, CONNECT_PERSIST=2, CONNECT_ONE_SHOT=4). Default 0. |
| from_node | string | yes | Path to the emitting node |
| method | string | yes | Method name on the receiving node's script |
| scene_path | string | yes | – |
| signal | string | yes | Signal name on the emitting node |
| to_node | string | yes | Path to the receiving node |
No output schema declared.
No examples provided.
create_scene ~206
Create a new Godot scene (.tscn) file with nodes. Use this to create player scenes, UI screens, game objects, etc.
| Name | Type | Req | Description |
|---|---|---|---|
| attach_script | string | – | Optional script path to attach to root node (res://path/to/script.gd) |
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| nodes | array | – | Child nodes to add: {name|node_name, type|node_type, properties?, script?, groups?, children?}. Both key styles work; an unknown key is an error, not a generic Node. |
| root_node_name | string | – | Name of root node (default: derived from filename) |
| root_node_type | string | yes | Type of root node (e.g., Node2D, CharacterBody2D, Control, Node3D). REQUIRED. |
| scene_path | string | yes | Scene file path (e.g., res://Scenes/player.tscn) |
No output schema declared.
No examples provided.
create_script ~139
Create a NEW GDScript file (.gd) that does not exist yet. Use this for creating new scripts, NOT for editing existing files (use edit_script for edits). Use classdb_query to verify unfamiliar Godot class methods. After creating a script, consider using run_scene to test and get_errors to check for issues.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Full GDScript content to write to the file |
| dry_run | boolean | – | Preview only: checks the path and whether the file exists, writes nothing. Default false. |
| path | string | yes | Script file path (res://scripts/player.gd) - must not exist yet |
No output schema declared.
No examples provided.
delete_file ~264
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | yes | Must be true — the safety gate described above. |
| create_backup | boolean | – | 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. |
| dry_run | boolean | – | Preview without deleting. Default false. Needs no confirm — it changes nothing. |
| force | boolean | – | Bypass the "open in editor" guard. Only when you know it is not the active scene. |
| path | string | yes | Path to the file to delete (e.g. res://scenes/old.tscn) |
No output schema declared.
No examples provided.
diagnose_connection ~93
Diagnose why the Godot editor is (or is not) connected — the #1 setup frustration. Works even when nothing is connected (runs entirely in the MCP server). Returns a pass/fail checklist plus, when disconnected, an ordered list of concrete remedies (enable the plugin, wrong port, Godot version, the _console.exe stub, etc.). Call this first when tools report "Godot editor is not connected".
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
disable_toolset ~48
Disable a toolset so its tools stop appearing in list_tools. Does not affect tool names already known to the client.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Toolset to disable, or "all". |
No output schema declared.
No examples provided.
duplicate_node ~107
Duplicate a node and its children within the same scene, inserted right after the original as a sibling.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| new_name | string | – | Optional name for the duplicate. Defaults to the original name with an incrementing number suffix. |
| node_path | string | yes | Path to the node to duplicate (cannot be root) |
| scene_path | string | yes | Path to the scene file |
No output schema declared.
No examples provided.
edit_script ~180
Apply a SMALL, SURGICAL code edit (1-10 lines) to GDScript files. Auto-applies changes. For large changes, call multiple times. ONLY for .gd files - NEVER for .tscn scene files. Use classdb_query to verify unfamiliar Godot class methods. After making changes, consider using run_scene to test and get_errors to check for issues.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: reports whether the snippet matched and what it would produce, writes nothing. Default false. |
| edit | object | yes | Edit spec: {type: "snippet_replace", file: "res://path.gd", old_snippet: "old code", new_snippet: "new code", context_before: "line above", context_after: "line below"}. Keep old_snippet SMALL (1-10… |
No output schema declared.
No examples provided.
enable_toolset ~90
Enable an optional toolset so its tools appear in the next list_tools call. "core" (look around, edit scenes/scripts, run the game, read errors) is always on; the rest are opt-in to keep the surface small. Use find_tools or list_toolsets to find which one holds the tool you want.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Toolset to enable, or "all". |
No output schema declared.
No examples provided.
find_nodes_by_type ~98
Recursively find all nodes of a given class (or subclass, unless exact_match) in a scene. Returns node_path/node_name/node_type for each match.
| Name | Type | Req | Description |
|---|---|---|---|
| exact_match | boolean | – | If true, match exact class only (not subclasses). Default: false |
| node_type | string | yes | Class name to match, e.g. "CharacterBody2D" |
| scene_path | string | yes | Path to the scene file |
No output schema declared.
No examples provided.
find_tools ~177
Find a tool by what you want to do, across all 231 — including the ones whose toolset is off. Ask "autotile a tilemap" or "record input" and get the matching names, a one-line summary each, and the toolset to enable. Use this when you know what you want to DO but not what it is called; list_toolsets is for browsing.
| Name | Type | Req | Description |
|---|---|---|---|
| include_schema | boolean | – | Also return each match's full inputSchema. Default false — the names and summaries are usually enough to pick one. |
| limit | number | – | How many matches to return (1-40, default 8). |
| query | string | yes | What you are trying to do, in your own words (e.g. "bake a navmesh", "read the player position while the game runs"). |
No output schema declared.
No examples provided.
get_console_log ~87
Return the latest lines from the Godot editor output log (as a single "content" string). Pass filter to keep only lines containing a substring — cheaper than pulling the whole log to find one message.
| Name | Type | Req | Description |
|---|---|---|---|
| filter | string | – | Case-insensitive substring: only matching log lines are returned. |
| max_lines | number | – | Maximum number of lines to include (default: 50) |
No output schema declared.
No examples provided.
get_errors ~106
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. If errors mention a missing method or property, use classdb_query to verify the correct API before fixing.
| Name | Type | Req | Description |
|---|---|---|---|
| include_warnings | boolean | – | Include warnings in addition to errors (default: true) |
| max_errors | number | – | Maximum number of errors to return (default: 50) |
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 ~100
Read a short markdown guide from the server — the same content as the MCP resources, exposed as a tool for clients that do not support them. Call with no args to list them, or with a slug for the full markdown. Worth reading when a workflow is non-obvious: testing a running game, choosing between the scene-editing tools, "Runtime helper not connected".
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | – | Guide to read. Omit to list them. |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| include_physics | boolean | – | Include physics settings |
| include_render | boolean | – | Include render settings |
No output schema declared.
No examples provided.
get_runtime_log ~173
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 full engine stdout (script prints, errors, warnings) use get_console_log — the editor already captures the running game's stdout. Returns entries with ts_ms, level, and text plus started_at_ms (when the helper started) and now_ms.
| Name | Type | Req | Description |
|---|---|---|---|
| level | string | – | Only return entries of this level (e.g. "error", "warning", "info"). Omit for all. |
| limit | number | – | Maximum entries to return (default: 200, max 500) |
| since_ms | number | – | Only return entries with ts_ms >= since_ms. Use 0 (default) for all. |
No output schema declared.
No examples provided.
get_scene_dependencies ~60
List a scene's resource dependencies (instanced sub-scenes, scripts, external resources) via ResourceLoader.get_dependencies — reads the file's dependency table directly, no need to load the scene.
| Name | Type | Req | Description |
|---|---|---|---|
| scene_path | string | yes | Path to the scene file |
No output schema declared.
No examples provided.
instance_scene ~223
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.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| instance_path | string | yes | Path to the .tscn scene to instance (the child/prefab scene) |
| node_name | string | – | Optional name for the instance. If omitted, uses the instanced scene's root node name. |
| parent_path | string | – | Path to parent node within the scene (. for root, or relative path like Level/Enemies) |
| properties | object | – | Optional property overrides on the instance root (e.g., {position: {type: "Vector3", x: 5, y: 0, z: 10}}) |
| scene_path | string | yes | Path 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 ~97
List files and folders under a Godot project path (e.g., res://). Returns arrays of files and folders in the specified directory.
| Name | Type | Req | Description |
|---|---|---|---|
| include_hidden | boolean | – | Include dot-entries. Default false. Supported by the handler all along; it was missing from this schema, so the unknown-argument guard rejected anyone who passed it. |
| root | string | yes | Starting 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_toolsets ~106
List every toolset with what it is for, how many tools it holds, and whether it is enabled. Only "core" is on by default; if the tool you need is not in list_tools, find its toolset here and enable that one.
| Name | Type | Req | Description |
|---|---|---|---|
| include_tools | boolean | – | Also list every tool name in each toolset. Off by default: that is ~2,000 tokens, and find_tools answers "what is this called" for a quarter of it. |
No output schema declared.
No examples provided.
move_node ~119
Move a node to a different parent in a scene and optionally control its position among siblings.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| new_parent_path | string | yes | Path to the new parent node (. for root) |
| node_path | string | yes | Path to the node to move |
| scene_path | string | yes | Path to the scene file |
| sibling_index | number | – | Optional position among siblings (0 = first child). Omit or -1 to append. |
No output schema declared.
No examples provided.
read_file ~145
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.
| Name | Type | Req | Description |
|---|---|---|---|
| end_line | number | – | Inclusive end line; 0 or missing means to end of file (optional) |
| max_bytes | number | – | Stop after this many bytes. Use it on a large file rather than pulling the whole thing into context. Supported by the handler all along; it was missing from this schema. |
| path | string | yes | res:// path to the file (e.g., res://scripts/player.gd) |
| start_line | number | – | 1-based inclusive start line (optional) |
No output schema declared.
No examples provided.
read_scene ~317
Read and parse a scene file to get its node structure (and optionally properties). Use this to understand a scene before editing. On large scenes pass max_depth for a cheap shallow read — a depth-limited node reports children_truncated instead of expanding.
| Name | Type | Req | Description |
|---|---|---|---|
| include_properties | boolean | – | Include a fixed set of common properties (position, rotation, scale, size, visible, modulate, z_index, text, collision layers, mass) on every node. All-or-nothing and expensive on a big tree — prefer… |
| max_depth | number | – | Max tree depth to expand (root is 0). Omit or -1 for the full tree. Use 1-2 for a cheap overview of a big scene. |
| node_path | string | – | Read this branch instead of the whole scene, e.g. "Player" or "UI/HUD". Default "." (the scene root). max_depth cuts a big scene off at the top; this starts lower, which is usually the actual questio… |
| properties | array | – | Return exactly these properties on every node, e.g. ["position"] to get the whole layout of a 2D scene in one call. Overrides include_properties. A name the node does not have is reported under missi… |
| scene_path | string | yes | Path to the scene file (res://path/to/scene.tscn) |
No output schema declared.
No examples provided.
remove_node ~75
Remove a node from an existing scene file.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| node_path | string | yes | Path to the node to remove (cannot be root, use relative path) |
| scene_path | string | yes | Path to the scene file |
No output schema declared.
No examples provided.
rename_node ~78
Rename a node in a scene.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| new_name | string | yes | New name for the node |
| node_path | string | yes | Path to the node to rename |
| scene_path | string | yes | Path to the scene file |
No output schema declared.
No examples provided.
render_scene_preview ~245
Render a 2D scene to a PNG WITHOUT running the game — the cheap way to actually look at a scene. take_screenshot needs a live game (launch, runtime connection, remembering to stop it); this renders offscreen in the editor, auto-framing the scene's content, and leaves no editor state changed. Use it to check layout, sprite placement, and whether a level looks like you think it does. 2D only.
| Name | Type | Req | Description |
|---|---|---|---|
| height | number | – | Output height in pixels. Default 648. |
| save_to | string | – | Where to write the PNG. Defaults to res://addons/godot_mcp/cache/previews/<scene>.png |
| scene_path | string | yes | Scene to render (res://path/to/scene.tscn) |
| show_collision | boolean | – | Draw CollisionShape2D/CollisionPolygon2D outlines (same visual as Godot's Debug > Visible Collision Shapes), so hitboxes can be checked from the PNG directly. Default false. |
| transparent | boolean | – | Transparent background instead of the scene's own. Default false. |
| width | number | – | Output width in pixels. Default 1152. |
No output schema declared.
No examples provided.
rescan_filesystem ~69
Trigger a full filesystem rescan in the Godot editor. Use after creating, deleting, or modifying files externally (e.g. from the terminal or another tool). The scan is asynchronous and returns immediately. NOT enough for a new autoload or a new class_name — those need restart_editor.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
restart_editor ~154
Restart the Godot editor. Needed for two things a rescan cannot fix: an AUTOLOAD added this session, and a brand-new class_name. Until the editor restarts, every script referencing them fails to compile — and a node whose script failed to compile loses its exported properties, so create_scene/add_node write defaults and still report ok. Symptom: you set a property, the call succeeds, and the value is wrong when you read it back. The bridge disconnects with the editor; poll get_godot_status until it reconnects (usually 20-40s).
| Name | Type | Req | Description |
|---|---|---|---|
| save | boolean | – | Save all open scenes and project settings before restarting. Default true. Setting false discards unsaved editor work. |
No output schema declared.
No examples provided.
run_scene ~374
Launch a scene in the Godot editor. Blocks until the editor is playing, so the next get_errors / take_screenshot call sees a real game. Use the returned runtime_root (e.g. "/root/Main") as the prefix for query_runtime_node paths — it comes from the root node name in the .tscn, NOT the file name. wait_for_runtime=true also waits for the in-game MCPRuntime helper, which take_screenshot and send_input need. Full loop: get_guide("testing-loop").
| Name | Type | Req | Description |
|---|---|---|---|
| attach_debugger | boolean | – | Default true (the editor's Play). False runs the game as its own process with no debugger: a game_eval runtime error then answers as a result instead of halting the game, at the cost of debug_* stepp… |
| block_until_started | boolean | – | Wait until the editor reports playing=true before returning (default: true). Up to startup_timeout_ms. |
| debug_collisions | boolean | – | Draw CollisionShape2D/3D outlines for this run, so take_screenshot shows them. Only takes effect on the run it is passed to — flipping it mid-session is unreliable. Default: false. |
| scene | string | – | Scene to run: omit for main scene, "current" for the currently open scene, or a res:// path for a specific scene |
| startup_timeout_ms | number | – | A cap, not an expected wait — MCPRuntime connects in ~1.7s. Default 20000. If wait_for_runtime reports false, poll get_runtime_status; it is usually about to land. |
| wait_for_runtime | boolean | – | Wait until the MCPRuntime in-game helper connects back (required for take_screenshot/send_input). Default: false. |
No output schema declared.
No examples provided.
scene_tree_dump ~118
Dump the scene tree of the scene currently open in the Godot editor (node names, types, and attached scripts). Pass max_depth to keep the output small on large scenes — a depth-limited branch reports its descendant count instead of expanding. Start shallow (max_depth 1-2) for an overview, then drill in.
| Name | Type | Req | Description |
|---|---|---|---|
| max_depth | number | – | Max tree depth to expand (root is 0). Omit or -1 for the full tree. Use 1-2 for a cheap overview of a big scene. |
No output schema declared.
No examples provided.
search_project ~199
Search the Godot project for a substring and return file hits with line numbers. At most max_results matches (default 50), each line cut at 200 chars, because the answer costs context. When it stops early it says `truncated: true` and reports `returned` rather than a total it never finished counting.
| Name | Type | Req | Description |
|---|---|---|---|
| case_sensitive | boolean | – | Match case exactly. Default false. |
| glob | string | – | Optional glob filter like **/*.gd to search only GDScript files |
| include_addons | boolean | – | Search res://addons/ too. Default false: third-party addon source answers almost every common identifier and crowds out the project own code. |
| max_results | number | – | Stop after this many matches (default 50). The handler has always supported it; it was missing from this schema, so the unknown-argument guard rejected anyone who tried. |
| query | string | yes | Case-insensitive substring to find |
No output schema declared.
No examples provided.
set_node_properties ~231
Set properties on ONE node — one or many, in a single call and a single save. For the same property across many nodes use batch_set_property. Non-atomic: each property is applied independently and the response separates "applied" from "failed", so partial success is visible. Never edit a .tscn as text. To set a script use attach_script, NOT a "script" property here: that only rewrites the file, leaving the editor's in-memory node scriptless, which makes connect_signal fail. Resource-typed properties need set_resource_property / set_sprite_texture / etc.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| node_path | string | – | Path to the node (. for root, or relative path) |
| properties | object | yes | Map of property_name -> value. Each value follows the same form as modify_node_property.value (primitives, arrays, or {type:"Vector3",...} discriminated objects). |
| scene_path | string | yes | Path to the .tscn scene file |
No output schema declared.
No examples provided.
set_node_reference ~230
Point an exported property at another NODE in the same scene — the wiring you would otherwise do by dragging a node into an inspector slot. Use for any @export typed as a node (`@export var target: Area2D`, `@export var health: HealthComponent`) or as a NodePath. set_node_properties CANNOT do this: it takes a JSON value, and this needs a live object reference. Fails loudly if the property does not exist or is typed for a different node class, instead of silently doing nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview only: do the work, report it, write nothing. Default false. |
| node_path | string | yes | Node that HOLDS the property (. for root, or a relative path) |
| property | string | yes | Name of the exported property to set, e.g. "initial_state" or "health" |
| scene_path | string | yes | Path to the .tscn scene file |
| target_path | string | yes | Node it should point AT, relative to the scene root, e.g. "StateMachine/Idle" |
No output schema declared.
No examples provided.
stop_scene ~33
Stop the currently running scene in the Godot editor. Always stop the scene before editing code to avoid errors repeating every frame.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
take_screenshot ~152
Capture the current viewport of the running game and save it as a PNG. REQUIRES the game to be running with the MCPRuntime autoload connected (run_scene with wait_for_runtime=true first). Returns resource_path, absolute_path, width, height, and (optionally) base64_png. Default save location is res://addons/godot_mcp/cache/screenshots/.
| Name | Type | Req | Description |
|---|---|---|---|
| return_base64 | boolean | – | Also include the PNG bytes inline as base64 (default: false). Useful when the agent has no filesystem access. |
| save_to | string | – | Optional res:// or user:// destination path. Defaults to res://addons/godot_mcp/cache/screenshots/screenshot_<ms>.png |
No output schema declared.
No examples provided.
validate_scripts ~187
Validate many GDScript files at once. Pass "paths" (array of res:// .gd paths) to check a specific set, or omit it to sweep the project (addons/ excluded unless include_addons). Returns only the invalid scripts, each with a message you can act on, plus elapsed_ms. PREFER an explicit paths list: validation runs on the editor's main thread at roughly 34ms per script, so a whole-project sweep on a large codebase is slow and can approach the bridge's 20s watchdog.
| Name | Type | Req | Description |
|---|---|---|---|
| include_addons | boolean | – | Include res://addons/ in a whole-project sweep. Default false: plugin code is usually most of the files and is not yours to fix. |
| paths | array | – | res:// .gd paths to validate. Omit to sweep the project — but pass the files you changed instead when you know them. |
No output schema declared.
No examples provided.
What is the io.github.TomasLucasUTN/godot-mcp-bridge server?
io.github.TomasLucasUTN/godot-mcp-bridge is listed in the public MCP registry as io.github.TomasLucasUTN/godot-mcp-bridge. MCP server for Godot game engine integration, control the Godot editor with AI. This page covers its npm package (godot-mcp-bridge).
Is the io.github.TomasLucasUTN/godot-mcp-bridge server safe to use?
io.github.TomasLucasUTN/godot-mcp-bridge scores 85 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 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.TomasLucasUTN/godot-mcp-bridge server expose?
io.github.TomasLucasUTN/godot-mcp-bridge exposes 44 tools: get_godot_status, diagnose_connection, get_guide, find_tools, list_toolsets, and 39 more. Their descriptions and schemas cost roughly 6,454 tokens of context every time the server is loaded.
Is the io.github.TomasLucasUTN/godot-mcp-bridge server still maintained?
io.github.TomasLucasUTN/godot-mcp-bridge is still listed as active in the MCP registry. We last reached this channel on 21 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.TomasLucasUTN/godot-mcp-bridge server under?
io.github.TomasLucasUTN/godot-mcp-bridge declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.