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 21

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

Available components

+1 this week 77 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 Management93
  • Stability observed for 28 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.

  • 21 Sept 26 +1

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

  • 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.

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 21 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
read_file ~103

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_linenumberInclusive end line; 0 or missing means to end of file (optional)
pathstringyesres:// path to the file (e.g., res://scripts/player.gd)
start_linenumber1-based inclusive start line (optional)

No output schema declared.

No examples provided.

read_scene ~161

Read and parse a scene file to get its full node structure and properties. Use this to understand a scene before editing. NOTE: `include_properties: true` returns a hand-picked subset (position, rotation, scale, size, offset, visible, modulate, z_index, text, collision_layer, collision_mask, mass) optimized for quick scene overviews. To see ALL properties on a specific node — including @export'd script vars — use `get_scene_node_properties`.

NameTypeReqDescription
include_propertiesbooleanInclude the curated property subset above on each node (default: false). For a full per-node property dump use get_scene_node_properties.
scene_pathstringyesPath to the scene file (res://path/to/scene.tscn)

No output schema declared.

No examples provided.

remove_node ~52

Remove a node from an existing scene file.

NameTypeReqDescription
node_pathstringyesPath to the node to remove (cannot be root, use relative path)
scene_pathstringyesPath to the scene file

No output schema declared.

No examples provided.

rename_file ~248

Rename or move a project file. By default also rewrites every literal reference to the old path in other text-format project files (.tscn, .tres, .gd, .cs, .gdshader, project.godot) and updates any matching `autoload/*` entry in ProjectSettings, so scenes and preloads keep working. When Godot exposes a reliable scene-dirty API, clean open scene tabs that referenced the renamed file are reloaded (close + reopen), while dirty tabs are preserved and returned in scenes_skipped_dirty. On Godot versions without that API, open scene reload is skipped with scene_reload_warnings to avoid discarding unsaved changes; the files are still correct on disk, but the user may need to manually reopen the tab to clear stale editor paths. Pass update_references:false to skip both reference rewrite and reload. Returns references_updated:[{file, replacements}], scenes_reloaded:[paths], and optionally scenes_skipped_dirty or scene_reload_warnings.

NameTypeReqDescription
new_pathstringyesNew file path
old_pathstringyesCurrent file path
update_referencesbooleanUpdate references in other files (default: true)

No output schema declared.

No examples provided.

rename_node ~55

Rename a node in a scene.

NameTypeReqDescription
new_namestringyesNew name for the node
node_pathstringyesPath to the node to rename
scene_pathstringyesPath to the scene file

No output schema declared.

No examples provided.

rescan_filesystem ~108

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. If a scan is already in progress (often happens right after a batch of mutations), the call returns ok:true with already_scanning:true — the in-flight scan will pick up your recent disk changes, no new scan is triggered. Response: {ok, already_scanning, message}.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

run_scene ~481

Launch a scene in the Godot editor. By default the call BLOCKS until the editor flips to playing state (so the next get_errors / take_screenshot / send_input call sees a real game). The response includes started, runtime_connected, wait_for_started_ms, wait_for_runtime_ms, scene_path, and runtime_root. Use runtime_root (e.g. "/root/Main") as the prefix for query_runtime_node node_path arguments — it is computed from the actual root node name in the .tscn, NOT from the file name. Set wait_for_runtime=true to additionally wait for the in-game MCPRuntime helper to connect (required before take_screenshot / send_input will work). By default this watermarks the log surfaces so the subsequent get_console_log / get_errors only show THIS run's output — no more mistaking stale errors from a previous run for fresh ones (set clear_output:false to keep reading the full history). Recommended testing loop: run_scene({wait_for_runtime:true}) → query_runtime_node / send_input / take_screenshot → get_errors → stop_scene.

NameTypeReqDescription
block_until_startedbooleanWait until the editor reports playing=true before returning (default: true). Up to startup_timeout_ms.
clear_outputbooleanWatermark the Output panel and Debugger > Errors tab at launch so get_console_log / get_errors only return entries from THIS run, preventing stale output from a previous run being read as current err…
scenestringScene to run: omit for main scene, "current" for the currently open scene, or a res:// path for a specific scene
startup_timeout_msnumberMax time in ms to wait for the above signals. Default: 10000. Bump to 15000–20000 on slower machines or autoload-heavy projects. Values above 25000 are clamped (response would otherwise miss the tran…
wait_for_runtimebooleanWait until the MCPRuntime in-game helper connects back (required for take_screenshot/send_input). Default: false.

No output schema declared.

No examples provided.

save_resource_to_file ~147

Save a Resource currently held by a node (or sub-resource) to a standalone .tres file so it can be referenced by other scenes / shared / committed. The node's property is then re-pointed to the loaded-from-disk version, so future set_resource_property calls write through to that file. Works for any Resource subclass: Material, Mesh, Shape, Curve, Gradient, etc.

NameTypeReqDescription
node_pathstring
resource_pathstringyesPath from node to the resource (e.g. "shape", "material")
save_tostringyesDestination path (res://.../foo.tres)
scene_pathstringyes

No output schema declared.

No examples provided.

scene_tree_dump ~429

Dump the scene tree of the scene currently open in the Godot editor (node names, types, and attached scripts) as an indented text block. Reflects unsaved edits (uses the live editor tree, not the .tscn on disk). All args are optional; with no args the entire tree is returned (existing behavior). Opt-in scoping / pagination (use these on large scenes to keep responses small): • subtree_root — start at a node path relative to the scene root (e.g. "UI/HUD"). Empty or "." means the scene root. Depth resets to 0 at this node. • max_depth — stop traversal at depth N from the (subtree_)root. 0 = only the root itself. Omit or pass a negative value for unlimited. • offset / limit — paginate by flat DFS preorder index. offset skips the first N nodes; limit caps how many are emitted. Response fields: • tree — the indented text (only nodes inside the window are rendered). • scene_path — the editor scene file. • total_node_count — total nodes inside the (subtree_root + max_depth) scope. Always returned. • truncated — true ONLY when offset/limit clipped output. max_depth is intentional scoping, not truncation. • next_offset — set to offset + emitted when truncated; call again with this offset to continue. • subtree_root — echoed when you passed one.

NameTypeReqDescription
limitnumberMaximum number of nodes to render after offset. Omit for unlimited.
max_depthnumberStop traversal at depth N from the (subtree_)root. 0 = only that root node. Omit or pass a negative value for unlimited depth.
offsetnumberSkip the first N nodes in DFS preorder (used for pagination). Default 0.
subtree_rootstringScene-relative node path to start the dump at (e.g. "UI/HUD"). Empty or "." = scene root. Errors if the node is not found.

No output schema declared.

No examples provided.

search_project ~72

Search the Godot project for a substring and return file hits with line numbers. Useful for finding usages of functions, variables, or any text pattern.

NameTypeReqDescription
globstringOptional glob filter like **/*.gd to search only GDScript files
querystringyesCase-insensitive substring to find

No output schema declared.

No examples provided.

send_input ~221

Synthesize an InputEvent and dispatch it to the running game via Input.parse_input_event. REQUIRES the game to be running with the MCPRuntime autoload connected. Use this to drive automated tests: click buttons, press keys, fire input actions. For multi-step interactions, alternate send_input → wait → query_runtime_node / take_screenshot.

NameTypeReqDescription
eventobjectyesInputEvent descriptor: Key: {type:"key", key:"Space", pressed:true, shift?:bool, ctrl?:bool, alt?:bool} or {type:"key", keycode:32, pressed:true} Mouse button: {type:"mouse_button", button_index:…

No output schema declared.

No examples provided.

set_collision_shape ~168

Create and assign a collision shape resource to a CollisionShape2D or CollisionShape3D node. Supports: CircleShape2D, RectangleShape2D, CapsuleShape2D, SphereShape3D, BoxShape3D, etc.

NameTypeReqDescription
node_pathstringPath to the CollisionShape2D/3D node
scene_pathstringyesPath to the .tscn scene file
shape_paramsobjectShape parameters: {radius: 32} for circles, {size: {x: 64, y: 64}} for rectangles, etc.
shape_typestringyesShape type: CircleShape2D, RectangleShape2D, CapsuleShape2D, SphereShape3D, BoxShape3D, etc.

No output schema declared.

No examples provided.

set_editor_selection ~280

Replace or extend the editor's Scene-dock selection. Two main uses: (1) after `add_node`, focus the user's gizmo on the freshly-created node so they can see/manipulate it immediately, and (2) draw the user's attention to a node the AI just modified or discovered ("here is the offending node — selected for you in the Scene dock"). Pre-validates every path against the live edited scene tree before mutating — if any path is unresolved, no selection change happens and `not_found` is returned. Args: `node_paths` (string OR array of strings; scene-relative, "." = scene root, "UI/HUD/Label" for nested), `mode` ("replace" default = clear existing then select; "add" = append to existing). Returns `{ok, scene_path, selected:[{path,name,type}], not_found:[], mode, count}`. Use `get_editor_selection` afterwards (or `scene_tree_dump`) to verify.

NameTypeReqDescription
modestring"replace" (default) clears the existing selection first; "add" appends to it.
node_pathsyesScene-relative path(s) to select. "." = scene root, "UI/HUD/Label" for nested. Accepts a single string OR an array of strings; both forms behave identically.

No output schema declared.

No examples provided.

set_material ~205

Create and assign a material to a MeshInstance3D, CSG, or GeometryInstance3D node. Supports StandardMaterial3D or loading from file.

NameTypeReqDescription
material_paramsobjectStandardMaterial3D: {albedo_color:{r,g,b,a}, metallic:0-1, roughness:0-1, emission:{r,g,b}, emission_energy:float, transparency:0=disabled/1=alpha/2=scissor/3=hash/4=depth_pre_pass}. file: {path:"res…
material_typestringyes"StandardMaterial3D" or "file" to load from a resource path
node_pathstringPath to the target node
scene_pathstringyesPath to the .tscn scene file
surface_indexnumberFor MeshInstance3D only: surface index for per-surface override. Omit for material_override on all surfaces.

No output schema declared.

No examples provided.

set_mesh ~279

Create and assign a mesh resource to a MeshInstance3D node. REQUIRED to make 3D geometry visible. Primitive types: BoxMesh, SphereMesh, CylinderMesh, CapsuleMesh, PlaneMesh, PrismMesh, TorusMesh, QuadMesh, TextMesh. Or load from file.

NameTypeReqDescription
mesh_paramsobjectBoxMesh: {size:{x,y,z}}. SphereMesh: {radius,height,radial_segments,rings}. CylinderMesh: {top_radius,bottom_radius,height}. CapsuleMesh: {radius,height}. PlaneMesh: {size:{x,y}}. PrismMesh: {left_to…
mesh_typestringyesMesh class: "BoxMesh", "SphereMesh", "CylinderMesh", "CapsuleMesh", "PlaneMesh", "PrismMesh", "TorusMesh", "QuadMesh", "TextMesh", or "file" to load from a resource path
node_pathstringPath to the MeshInstance3D node within the scene
scene_pathstringyesPath to the .tscn scene file

No output schema declared.

No examples provided.

set_node_groups ~124

Set, add, or remove a node's group memberships in a .tscn scene file. Groups persist to disk so the running game can call get_tree().get_nodes_in_group(name).

NameTypeReqDescription
groupsarrayyesList of group names to apply
modestringreplace (default): node ends up in EXACTLY the listed groups. add: union with existing. remove: drop the listed groups.
node_pathstringPath to the node (. for root)
scene_pathstringyesPath to the .tscn scene file

No output schema declared.

No examples provided.

set_node_properties ~237

Set MULTIPLE properties on a node in a single tool call. **Atomic pre-validation** — every entry is checked (name exists on the node's class plus its attached script's @export'd properties; Resource-typed properties must use the dedicated resource tools) BEFORE anything is written. If ANY entry fails, the response is `ok: false` with a `validation_errors` array (e.g. `properties.color: property does not exist on Sprite2D`) and ZERO mutation occurs — no scene save, no half-applied state. On success, returns the `applied` list with old/new values per property. Resource-typed properties must use set_resource_property / set_sprite_texture / set_mesh / set_material / set_collision_shape.

NameTypeReqDescription
node_pathstringPath to the node (. for root, or relative path)
propertiesobjectyesMap of property_name -> value. Each value follows the same form as modify_node_property.value (primitives, arrays, or {type:"Vector3",...} discriminated objects).
scene_pathstringyesPath to the .tscn scene file

No output schema declared.

No examples provided.

set_resource_property ~200

Modify a property on a Resource that is currently held by a node (or by another resource attached to that node). Use this to tweak shape radii, material colors, gradient stops, etc., WITHOUT recreating the resource. resource_path walks from the node down to the resource using "/"-separated property names, e.g. "shape", "material", or "material/next_pass". After the change, saves the scene.

NameTypeReqDescription
node_pathstringPath to the node owning the resource
property_namestringyesProperty on the target resource to set (e.g. "radius", "albedo_color")
resource_pathstringyesPath from node to the target resource via property names. Examples: "shape", "material", "material/next_pass"
scene_pathstringyesPath to the .tscn scene file
valueyesNew value (same shape as modify_node_property.value)

No output schema declared.

No examples provided.

set_sprite_texture ~322

Assign a texture resource to a Sprite2D / Sprite3D / TextureRect node in a .tscn scene file. Modes: • FromPath — load any texture file from disk (png/jpg/webp/svg/.tres) via load(). Returns whatever Texture2D the importer produced (usually CompressedTexture2D). Most common after generate_2d_asset. • ImageTexture (DEPRECATED ALIAS for FromPath, kept for back-compat) • NewImageTexture — force-create an ImageTexture (in-memory) from a raw image file. • PlaceholderTexture2D — in-scene placeholder of a given size. • GradientTexture2D / NoiseTexture2D — procedural textures. Response always includes texture_class (the actual Godot class the texture decoded to), width, height, and texture_path so the agent can confirm what landed without an extra get_resource_info call.

NameTypeReqDescription
node_pathstringPath to the Sprite2D/Sprite3D/TextureRect node
scene_pathstringyesPath to the .tscn scene file
texture_paramsobjectTexture parameters. FromPath / ImageTexture / NewImageTexture: {path: "res://assets/sprite.png"}. PlaceholderTexture2D: {size: {x: 64, y: 64}}. GradientTexture2D / NoiseTexture2D: {width, height}.
texture_typestringyesHow to obtain the texture. Prefer FromPath for assets on disk.

No output schema declared.

No examples provided.

setup_autoload ~103

Register, unregister, or list autoload singletons. Autoloads are scripts/scenes loaded automatically at project start.

NameTypeReqDescription
namestringAutoload name (e.g., "GameManager", "AudioManager")
operationstringyes"add" to register, "remove" to unregister, "list" to show all autoloads
pathstringres:// path to the script or scene file (required for "add")

No output schema declared.

No examples provided.

snap_node_to_grid ~153

Snap a Node3D position to a grid in local or global space. Useful for modular level building and keeping 3D scenes aligned.

NameTypeReqDescription
axesarrayAxes to snap. Any of: ["x"], ["x","z"], ["x","y","z"] (default: all axes)
grid_sizeyesPositive grid size. Use a number for uniform snapping or {x,y,z} for per-axis snapping.
node_pathstringPath to the Node3D to snap
scene_pathstringyesPath to the .tscn scene file
spacestringCoordinate space: "local" or "global" (default: "global")

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/.

NameTypeReqDescription
return_base64booleanAlso include the PNG bytes inline as base64 (default: false). Useful when the agent has no filesystem access.
save_tostringOptional res:// or user:// destination path. Defaults to res://addons/godot_mcp/cache/screenshots/screenshot_<ms>.png

No output schema declared.

No examples provided.

update_project_settings ~122

Update one or more Godot project settings. Pass a dictionary of setting paths to their new values. Use list_settings first to discover available setting paths, current values, and valid options for a category. For input action bindings, prefer configure_input_map — if you do pass input/* keys here, partial updates are merged safely (existing events are preserved).

NameTypeReqDescription
settingsobjectyesDictionary of setting paths to new values (e.g., {"display/window/size/viewport_width": 1920, "display/window/size/viewport_height": 1080})

No output schema declared.

No examples provided.

validate_script ~109

Validate a GDScript file for syntax errors using Godot's built-in parser. Good for ordinary project scripts after editing. For @tool/editor-plugin addon scripts this isolated parser path may return valid:false with diagnostics_available:false because dependencies and editor context are not fully loaded; in that case, use get_errors/get_console_log after enabling or reloading the addon for actionable details.

NameTypeReqDescription
pathstringyesPath to the GDScript file to validate (e.g., res://scripts/player.gd)

No output schema declared.

No examples provided.

wait ~87

Sleep server-side. Useful between input events to let the game process them. Capped at 30000ms / 30s. Pass either ms or seconds (ms wins if both given).

NameTypeReqDescription
msnumberMilliseconds to wait (1..30000).
secondsnumberSeconds to wait (0.001..30). Convenient when the agent is thinking in seconds.

No output schema declared.

No examples provided.

write_file ~632

Write UTF-8 text content to any file in the project. Creates the file if missing; REFUSES to clobber an existing file unless overwrite=true. Parent directories are auto-created (override with create_dirs=false). Refuses to write to plugin source (anywhere under res://addons/godot_mcp/ except res://addons/godot_mcp/cache/) unless force=true. Refuses paths containing ".." or "." traversal segments (would escape the project tree). Use this for non-GDScript text: .gdignore, .gitignore, README.md, .json configs, .gdshader files, custom .tres data, fixture files for tests, any plain-text content. For GDScript with boilerplate (class_name / extends), prefer create_script which adds those automatically and validates the path is .gd. The write is captured by the undo system: a single mcp_undo restores the prior content (when overwriting) or deletes the file (when creating new). Binary content is NOT supported — for binary files write a GDScript helper that produces the file and run it via run_scene, or copy/move via rename_file. Editor sync after write: the call replaces the ResourceLoader cache entry for .tscn/.tres/.gdshader/.scn so the next load() sees the new content (sets cache_evicted:true on success), force-reloads any Script resource for .gd writes (sets script_reloaded:true), and reloads an open scene tab whose .tscn was just written (sets scene_reloaded:true). The refresh runs unconditionally for the recognized extensions — flags reflect whether each step succeeded, not whether a stale cache happened to exist beforehand, because Godot keeps resources alive in places ResourceLoader.has_cached() cannot see (open tabs, EditorFileSystem index). The script editor's in-memory tab buffer is NOT swapped (Godot exposes no public API for that) — if you wrote to a .gd that is currently open in the editor, the user may need to refocus the tab to see the new source. When any refresh action ran successfully, an editor_refresh:{cache_evicted, scene_reloaded, script_reloaded}…

NameTypeReqDescription
contentstringyesText content to write. Encoded as UTF-8. Pass an empty string to create a zero-byte file.
create_dirsbooleanIf true (default), missing parent directories are auto-created. If false, missing parent dirs return an error.
forcebooleanBypass the plugin-source-protection guard. Required to overwrite anything under res://addons/godot_mcp/ except res://addons/godot_mcp/cache/. Default false.
overwritebooleanREQUIRED to replace an existing file. Default false — calls against an existing path without overwrite=true return file_exists:true and refuse.
pathstringyesFile path (res://... — res:// is prepended if missing).

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 77 out of 100 on VerifyMCP. We recorded 1 known advisory against 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.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 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.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.