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.

Godot MCP Runtime

NPM · GODOT-MCP-RUNTIME · SCANNED SEP 20

Zero-addon MCP server for Godot 4: agents edit, run, and play-test the game.

Available components

−1 this week 93 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 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 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to Erodenn/godot-mcp-runtime). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability70
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7961 tokens (~204/item across 39 items; 39 tools + 0 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 Management97
  • Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (49% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 40 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 Godot MCP Runtime server?

Godot MCP Runtime runs locally as an npm package, launched with npx -y godot-mcp-runtime. 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-runtime

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

  • 20 Sept 26 +1

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

  • 19 Sept 26 −1
    • Security disclosure: pass → unverified functional
  • 18 Sept 26 +1

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

  • 16 Sept 26 +16
    • Malware scan: unverified → pass security
  • 15 Sept 26 −18
    • Malware scan: pass → unverified security
    • Stability: pass → 0.80 functional
    • Package version: 3.6.0 → 3.7.0 functional
  • 14 Sept 26 0
    • Stability: 0.97 → pass security
  • 13 Sept 26 +1

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

  • 12 Sept 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 20 Sept 2026 · Analysed npm/godot-mcp-runtime@3.7.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo Erodenn/godot-mcp-runtime
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/Erodenn/godot-mcp-runtime/.github/workflows/publish.yml@refs/tags/v3.7.0
Rekor log index 2852253408
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:ded5e1ffd853608229a8c55c5973b707f33f90d94c3ce696459226209b72c0d736e4c388c1bd28a174b6d9bc36d3ec135be5a277195e7f8694d9eaba6

Background: How many MCP packages publish verified provenance →

Dependencies 95 packages
Packages resolved 95
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 39 exposed · ~7,247 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_autoload ~202

Register a new autoload in a project. autoloadPath accepts "res://..." or a project-relative path (auto-prefixed). singleton defaults true (accessible globally by name). No Godot process required. Warning: autoloads initialize in headless mode - a broken script will crash every subsequent headless op; validate before adding. Returns plain-text confirmation with the registered name, path, and singleton flag. Errors if an autoload with the same name already exists; use update_autoload to modify.

NameTypeReqDescription
autoloadNamestringyesName of the autoload node (e.g. "MyManager")
autoloadPathstringyesPath to the script or scene (e.g. "res://autoload/my_manager.gd" or "autoload/my_manager.gd")
projectPathstringyesPath to the Godot project directory
singletonbooleanRegister as a globally accessible singleton by name (default: true)

No output schema declared.

No examples provided.

add_node ~544

Add a node to a Godot scene. Saves automatically. Common spatial properties (position, rotation, scale, visible, modulate) are top-level params; anything else goes under properties. {x,y} / {x,y,z} / {r,g,b,a} auto-convert to Vector2 / Vector3 / Color. Values are checked against the property's declared type and error instead of silently storing that type's zero value. Object-typed properties take a res:// path, a typed dict {type: ClassName, ...props} that constructs a Resource inline, or null. Full value rules: the Property Values section of docs/tools.md. parentNodePath defaults to the scene root. Returns a plain-text confirmation naming the new node and type. Errors, and adds nothing, if nodeType is not a registered Godot class, parentNodePath does not exist, or a property name or value is invalid. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
modulateobjectColor modulation (e.g. {"r": 1, "g": 0, "b": 0, "a": 1})
nodeNamestringyesName for the new node as it appears in the scene tree
nodeTypestringyesGodot node class to instantiate (e.g. "Sprite2D", "CollisionShape2D", "Label"), or a project-relative scene path (.tscn or .scn, e.g. "scenes/enemy.tscn") to instance an existing scene as a child - i…
parentNodePathstringParent node path from scene root (e.g. "root/Player"). Defaults to the root node.
positionobjectPosition: {"x": 100, "y": 200} on a 2D node, {"x": 0, "y": 1, "z": 0} on a 3D node
projectPathstringyesPath to the Godot project directory
propertiesobjectAdditional property values as a JSON object. Top-level params (position, rotation, etc.) take precedence over keys in this dict.
rotationnumberRotation in radians
scaleobjectVector2 scale (e.g. {"x": 2, "y": 2})
scenePathstringyesScene file path relative to the project
visiblebooleanWhether the node is visible

No output schema declared.

No examples provided.

attach_project ~182

Inject the MCP bridge into a Godot process you launch yourself, then wait up to 15s for the bridge to respond. Call BEFORE Godot launches - Godot reads autoloads only at process start, so a late call returns "bridge did not respond." Recommended pattern: kick off the Godot launch in parallel with this call so the wait absorbs startup. Prefer run_project unless MCP must not spawn Godot. Returns plain-text status with the resolved bridge port. Call detach_project or stop_project when done.

NameTypeReqDescription
bridgePortnumberTCP port for the MCP bridge. Omit to auto-select a free port (recommended). The chosen port is baked into the project's `mcp_bridge.gd` at inject time, so the running Godot listens on exactly this po…
projectPathstringyesPath to the Godot project directory

No output schema declared.

No examples provided.

attach_script ~181

Attach an existing GDScript file to a node in a scene. Use after writing the script with the standard file tools and validating it via the validate tool. Replaces any previously attached script. Saves automatically. Returns: success with the resolved nodePath and scriptPath that were attached. Errors if scriptPath does not exist or nodePath is not found. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
nodePathstringyesNode path from scene root (e.g. "root/Player")
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project
scriptPathstringyesPath to the GDScript file relative to the project (e.g. "scripts/player.gd")
NameTypeReqDescription
nodePathstring
scriptPathstring
successboolean

No examples provided.

batch_scene_operations ~257

Use this instead of chaining add_node / load_sprite / save_scene calls when you have multiple mutations on the same or related scenes - runs in one Godot process (~3s startup avoided per call) and shares an in-memory scene cache, saving once at the end. Each item picks its own sub-operation (add_node, load_sprite, set_node_properties, save) and supplies its own params; add_node items accept the same promoted spatial params (position, rotation, scale, visible, modulate) as the standalone tool; set_node_properties items accept the same per-update params (nodePath, property, value) and per-operation scenePath and abortOnError as the standalone tool; abortOnError stops on first failure (default false continues). Returns: results[] in input order, each tagged with operation and scenePath plus success or error. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
abortOnErrorbooleanStop processing on first error (default: false)
operationsarrayyesOrdered list of scene operations. Each item has its own operation and scenePath.
projectPathstringyesPath to the Godot project directory
NameTypeReqDescription
resultsarray

No examples provided.

connect_signal ~209

Connect a signal on a source node to a method on a target node, persisting it in the .tscn. Use get_node_signals first to confirm names - connecting the same pair twice creates a duplicate connection. Saves automatically. Returns a plain-text confirmation naming source, signal, target, and method. Errors if the signal or method does not exist. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
methodstringyesMethod name on the target node to call when the signal fires
nodePathstringyesSource node path from scene root
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project
signalstringyesSignal name on the source node (e.g. "pressed", "body_entered")
targetNodePathstringyesTarget node path from scene root that receives the signal

No output schema declared.

No examples provided.

create_scene ~184

Create a new Godot scene file with a single root node. Writes a fresh .tscn at scenePath. Use when starting a new scene from scratch; for adding nodes to an existing scene, use add_node. rootNodeType defaults to Node2D - pass "Node3D" for 3D scenes or "Control" for UI. Saves automatically. Overwrites silently if the file already exists. Returns: success and the scenePath that was written. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
projectPathstringyesPath to the Godot project directory
rootNodeTypestringRoot node type (default: Node2D)
scenePathstringyesScene file path relative to the project (e.g. "scenes/main.tscn")
NameTypeReqDescription
scenePathstring
successboolean

No examples provided.

delete_nodes ~171

Remove one or more nodes (and their descendants) from a scene file. Always-array: pass a single-element nodePaths array for one-off deletes. Saves once at the end. Cannot delete the scene root - that entry returns an error and the rest still process. Returns: results array with one entry per nodePath in input order (success or error message). Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
nodePathsarrayyesNode paths from scene root to delete (e.g. ["root/Player/Sprite2D"])
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project (e.g. "scenes/main.tscn")
NameTypeReqDescription
resultsarray

No examples provided.

detach_project ~172

Clear attached-mode runtime state and remove the injected McpBridge autoload. Does NOT stop the manually launched Godot process - that stays running. Use after attach_project when you are done driving the game from MCP. For spawned sessions (run_project), use stop_project instead. Mostly optional now: when the bridge disconnects (you closed Godot), the next runtime tool call probes once and ends the attached session itself, removing the autoload. Calling it afterwards still succeeds idempotently, wording the message to distinguish "an attached session existed and already ended" from "this server never attached to a project". Returns: message confirming detach plus externalProcessPreserved (always true here - that is the point of detach vs stop_project). Errors only when a spawned session is what is active; use stop_project for those.

Input schema present but exposes no named parameters.

NameTypeReqDescription
externalProcessPreservedboolean
messagestring

No examples provided.

disconnect_signal ~178

Remove an existing signal connection between two nodes, persisting the change in the .tscn. Use get_node_signals first to confirm the connection exists; recovery requires reconnecting via connect_signal. Saves automatically. Returns a plain-text confirmation naming the disconnected signal and target. Errors if the connection does not exist. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
methodstringyesMethod name on the target node
nodePathstringyesSource node path from scene root
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project
signalstringyesSignal name on the source node
targetNodePathstringyesTarget node path from scene root

No output schema declared.

No examples provided.

duplicate_node ~195

Duplicate a node and its descendants in a Godot scene, without rebuilding it node-by-node via add_node. newName defaults to the original name + "2"; targetParentPath defaults to the original parent. Saves automatically. Returns: success with originalPath and the newPath where the duplicate now lives. Errors if nodePath does not exist or targetParentPath cannot accept children. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
newNamestringName for the duplicated node (default: original name + "2")
nodePathstringyesNode path from scene root to duplicate
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project
targetParentPathstringParent node path for the duplicate (default: same parent as original)
NameTypeReqDescription
newPathstring
originalPathstring
successboolean

No examples provided.

export_mesh_library ~195

Export a scene of MeshInstance3D nodes as a MeshLibrary .res file for use in GridMap. For grid-based 3D tile palettes only, not 2D scenes. Source scene must contain MeshInstance3D children. Pass meshItemNames for a subset, or omit for all. Saves to outputPath, overwriting silently. Returns a plain-text confirmation with the exported item count. Errors if the scene contains no valid meshes. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
meshItemNamesarrayNames of specific mesh items to export. Omit to export all.
outputPathstringyesOutput path for the MeshLibrary .res file (relative to project)
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project

No output schema declared.

No examples provided.

get_debug_output ~144

Get captured stdout/stderr from a spawned Godot project. Use whenever runtime tools fail unexpectedly - script errors, missing nodes, and crash backtraces all surface here. Still works after the process exits or crashes: the session clears itself on exit but the captured logs are retained until stop_project. Requires run_project (not attach_project; attached mode does not capture output). Returns: output/errors (last `limit` lines each, default 200), running (false after exit, null when attached), exitCode after exit, attached:true with empty arrays in attached mode.

NameTypeReqDescription
limitnumberMax lines to return (default: 200, from end of output)
NameTypeReqDescription
attachedboolean
errorsarray
exitCodenumber|null
outputarray
runningboolean|null
tipstring

No examples provided.

get_node_properties ~130

Read one or more nodes' current property values from a scene file in a single Godot process. Always-array: pass a single-element nodes array for one-off reads. Per-node changedOnly:true filters out properties matching class defaults (useful for compact diffs). Returns: { results: [{ nodePath, nodeType, properties?, error? }] }; failed reads include error and omit properties.

NameTypeReqDescription
nodesarrayyesNodes to read properties from
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project

No output schema declared.

No examples provided.

get_node_signals ~158

List all signals defined on a node and their current connections. Use before connect_signal/disconnect_signal to verify signal/method names. The connections[].target field is already scene-root-relative in the "root/..." form connect_signal/disconnect_signal accept as targetNodePath (a self-connection reports as "root") - pass it straight through with no conversion. Returns: nodeType and signals[], each with name and current connections (signal/target/method). Errors if node not found.

NameTypeReqDescription
nodePathstringyesNode path from scene root (e.g. "root/Button")
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project
NameTypeReqDescription
nodePathstring
nodeTypestring
signalsarray

No examples provided.

get_project_files ~151

Return a recursive file tree of a Godot project. Use to discover project structure when paths are unknown. Pass extensions to filter (e.g. ["gd","tscn"]); maxDepth caps recursion (-1 unlimited). Skips hidden (dot-prefixed) entries and the .mcp directory. Returns: { name, type, path, extension?, children? } (nested tree).

NameTypeReqDescription
extensionsarrayFilter to only these file extensions (e.g. ["gd", "tscn"]). Omit to include all.
maxDepthnumberMaximum recursion depth. -1 means unlimited (default: -1)
projectPathstringyesPath to the Godot project directory

No output schema declared.

No examples provided.

get_project_info ~119

Get metadata about a Godot project: name, path, Godot version, and a structure summary (counts of scenes/scripts/assets/other). Omit projectPath to get just the Godot version (useful for capability checks). Returns: { name, path, godotVersion, structure } or { godotVersion } when projectPath is omitted. Errors if projectPath is set but lacks project.godot.

NameTypeReqDescription
projectPathstringPath to the Godot project directory (optional - omit to get Godot version only)

No output schema declared.

No examples provided.

get_project_settings ~179

Parse project.godot into structured JSON. Use to inspect configured display, input, rendering, etc. settings without launching Godot. Pass section to filter to one INI section (e.g. "display", "application"). Returns: { settings: { [section]: { [key]: value } } } or { settings: { [key]: value } } when section is given. Complex Godot types (including multi-line arrays/dicts, e.g. the full "[input]" action map) are returned as their complete raw string, not just the first line; keys outside any section appear under __global__.

NameTypeReqDescription
projectPathstringyesPath to the Godot project directory
sectionstringFilter to a specific INI section (e.g. "display", "application"). Omit for all sections.

No output schema declared.

No examples provided.

get_scene_dependencies ~118

Parse a .tscn file for ext_resource references (scripts, textures, subscenes). Use to inspect what a scene depends on before refactoring or moving files. Returns: the queried scene path and dependencies[] from ext_resource refs (path, type, optional uid). Errors if scene file does not exist.

NameTypeReqDescription
projectPathstringyesPath to the Godot project directory
scenePathstringyesPath to the .tscn file relative to the project root (e.g. "scenes/main.tscn")
NameTypeReqDescription
dependenciesarray
scenestring

No examples provided.

get_scene_tree ~164

Get the scene hierarchy as a nested tree of { name, type, path, script, children }. Use maxDepth:1 for a shallow listing of direct children only; default -1 returns the full tree. parentPath scopes the result to a subtree. Returns the nested tree as JSON text. Errors if scene does not exist or parentPath is not found.

NameTypeReqDescription
maxDepthnumberMaximum recursion depth. -1 for unlimited (default: -1). 1 returns only direct children.
parentPathstringScope to a subtree starting at this node path (e.g. "root/Player")
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project

No output schema declared.

No examples provided.

get_ui_elements ~148

Walk the running scene tree and return all Control nodes with positions, sizes, types, and text content. Always call this before simulate_input click_element actions to discover valid element names and paths. Requires an active runtime session (run_project or attach_project). visibleOnly defaults true; pass false to include hidden Controls. filter narrows by class. Returns: elements[] with path/type/rect/visible plus optional text/disabled/tooltip.

NameTypeReqDescription
filterstringFilter by Control node type (e.g. "Button", "Label", "LineEdit")
visibleOnlybooleanOnly return nodes where Control.visible is true (default: true). Set false to include hidden elements.
NameTypeReqDescription
elementsarray
tipstring
warningsarray

No examples provided.

launch_editor ~104

Open the Godot editor GUI for a project for the human user. Use only when the user explicitly asks to "open the editor"; for any agent-driven work, use the headless scene/node tools (add_node, set_node_properties, etc.) instead - the editor cannot be controlled programmatically. Returns plain-text confirmation after spawning the editor process. Errors if projectPath has no project.godot.

NameTypeReqDescription
projectPathstringyesPath to the Godot project directory

No output schema declared.

No examples provided.

list_autoloads ~89

List all registered autoloads in a project with paths and singleton status. Use first when diagnosing headless failures - broken autoloads crash all headless ops, so this tells you what is loaded. No Godot process required (reads project.godot directly). Returns: [{ name, path, singleton }].

NameTypeReqDescription
projectPathstringyesPath to the Godot project directory

No output schema declared.

No examples provided.

list_projects ~115

Find Godot projects under a directory by locating project.godot files. Use to discover available projects when the user has not specified one; for inspecting a known project, use get_project_info. recursive:true descends into subdirectories (skipping hidden ones); default false checks only the directory itself and its immediate children. Returns: [{ path, name }], empty array on no matches.

NameTypeReqDescription
directorystringyesDirectory to search for Godot projects
recursivebooleanWhether to search recursively (default: false)

No output schema declared.

No examples provided.

load_sprite ~190

Set the texture on an existing Sprite2D, Sprite3D, or TextureRect node. For new nodes, pass texture via add_node properties instead. Saves automatically. texturePath must be a real file under projectPath. Returns a plain-text confirmation message naming the loaded texture. Errors if the node is not one of those three classes, or the texture file does not exist. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
nodePathstringyesPath to the target node from scene root (e.g. "root/Player/Sprite2D")
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project
texturePathstringyesPath to the texture file relative to the project (e.g. "assets/player.png")

No output schema declared.

No examples provided.

profile_project ~245

Capture a window of Godot's function profiler - the editor's Profiler tab numbers. Requires run_project with profiling: true. Blocks for `seconds` (default 5). Times are elapsed, not CPU; inclusive rows overlap - never sum totalMs. Returns: rows (function, file, line, calls, selfMs/totalMs, per-frame averages, percentOfFrame, peak), the frame budget, servers, worstFrame, plus frames/frameGaps/limitReached for capture quality. Errors if profiling was off at launch or a capture is already open.

NameTypeReqDescription
captureLimitnumberRows the engine puts in each frame packet, 16..512 (default: 512). Godot selects them by inclusive time, so a lower limit hides cheap functions and sets limitReached.
secondsnumberCapture duration in seconds, greater than 0 and at most 60 (default: 5).
sortstringRank by own time ("selfMs", default), inclusive time ("totalMs"), or invocation count ("calls").
topnumberHow many functions to return, 1..100 (default: 20).
NameTypeReqDescription
captureLimitnumber
firstFramenumber|null
frameobject
frameGapsnumber
framesnumber
framesReceivednumber
functionsReceivednumber
lastFramenumber|null
limitReachedboolean
rowsarray
secondsnumber
serversarray
sortstring
undecodablePacketsnumber
unresolvedFunctionsnumber
worstFrameobject|null

No examples provided.

remove_autoload ~89

Unregister an autoload from a project by name. Use to recover from a broken autoload that is crashing headless ops. No Godot process required. Returns plain-text confirmation on success. Errors if no autoload with that name exists.

NameTypeReqDescription
autoloadNamestringyesName of the autoload to remove
projectPathstringyesPath to the Godot project directory

No output schema declared.

No examples provided.

run_project ~319

Spawn a Godot project as a child process with stdout/stderr captured. Required before take_screenshot, simulate_input, get_ui_elements, run_script, or get_debug_output. Set profiling: true at launch to enable the profiler tools. Use attach_project for one you launched yourself. Verifies MCP bridge readiness before returning success. Returns status with the assigned bridge port. Call stop_project when done. Errors if projectPath is not a Godot project or another session is already active.

NameTypeReqDescription
backgroundbooleanIf true, hides the Godot window off-screen and blocks all physical keyboard and mouse input, while keeping programmatic input (simulate_input, run_script) and screenshots fully active. Useful for aut…
bridgePortnumberTCP port for the MCP bridge. Omit to auto-select a free port (recommended). The chosen port is baked into the project's `mcp_bridge.gd` at inject time, so the running Godot listens on exactly this po…
profilingbooleanAttach Godot's own remote debugger so profile_project, start_profiler and stop_profiler can measure this session. Must be set at launch - a session already running cannot be profiled - and costs a li…
projectPathstringyesPath to the Godot project directory
scenestringScene to run (path relative to project, e.g. "scenes/main.tscn"). Omit to use the project's main scene.

No output schema declared.

No examples provided.

run_script ~196

Execute a custom GDScript in the live running project with full scene tree access. Requires an active runtime session. Script must extend RefCounted and define func execute(scene_tree: SceneTree) -> Variant. Return values are JSON-serialized (primitives, Vector2/3, Color, Dictionary, Array, and Node path strings). Use print() for debug output - it appears in get_debug_output, not in the result. In spawned mode, stderr runtime errors escalate to errors (when the script returns null) or surface as warnings. Returns: { success, result, warnings?, tip? } where result is the JSON-serialized return value of execute().

NameTypeReqDescription
scriptstringyesGDScript source code. Must contain "extends RefCounted" and "func execute(scene_tree: SceneTree) -> Variant".
timeoutnumberTimeout in ms (default: 30000). Increase for long-running scripts.
NameTypeReqDescription
result
successboolean
tipstring
warningsarray

No examples provided.

save_scene ~166

Re-pack and save a scene, optionally to a different path (save-as). Most mutations (add_node, set_node_properties, delete_nodes, etc.) auto-save - only use this for save-as via newPath, or to re-canonicalize a hand-edited .tscn. Overwrites silently. Returns a plain-text confirmation naming the save path. Errors if the scene file does not exist. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
newPathstringSave to a different path (relative to project) instead of overwriting the original
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project

No output schema declared.

No examples provided.

search_project ~189

Plain-text (substring) search across project files. Use to find references, callers, or signatures across the codebase. Default fileTypes is ["gd","tscn","cs","gdshader"]; caseSensitive default false; maxResults default 100. Skips hidden entries and the .mcp directory. Returns: matches[] (project-relative file, 1-indexed lineNumber, line text) and truncated:true when maxResults was hit - consider raising it.

NameTypeReqDescription
caseSensitivebooleanCase-sensitive search (default: false)
fileTypesarrayFile extensions to search (default: ["gd", "tscn", "cs", "gdshader"])
maxResultsnumberMaximum matches to return (default: 100)
patternstringyesPlain-text string to search for
projectPathstringyesPath to the Godot project directory
NameTypeReqDescription
matchesarray
truncatedboolean

No examples provided.

set_node_properties ~260

Set one or more node properties on a scene in one Godot process. Always-array: pass a single-element updates array for one-off edits. {x,y} / {x,y,z} / {r,g,b,a} auto-convert to Vector2 / Vector3 / Color. Values are checked against the property's declared type and error instead of silently storing that type's zero value. Object-typed properties (e.g. CollisionShape2D.shape) take a res:// path, a typed dict {type: ClassName, ...props} that constructs a Resource inline, or null to clear. Full value rules: the Property Values section of docs/tools.md. abortOnError stops on first failure (default false continues). Saves once at the end. Returns: results[] with one entry per update in input order (success or error). Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

NameTypeReqDescription
abortOnErrorbooleanStop processing on first error (default: false)
projectPathstringyesPath to the Godot project directory
scenePathstringyesScene file path relative to the project
updatesarrayyesProperty updates to apply
NameTypeReqDescription
resultsarray

No examples provided.

simulate_input ~134

Simulate sequential input in a running project. Each action's `type` (key, mouse_button, mouse_motion, click_element, action, wait) gates which other fields apply - see per-property docs. For click_element use get_ui_elements first; resolution is by path/name, not visible text. Press/release require two actions; insert wait between for frame ticks. Returns: success, actions_processed, warnings for runtime errors fired by input handlers. Errors if no session or any action fails validation.

NameTypeReqDescription
actionsarrayyesArray of input actions to execute sequentially. Each object must have a "type" field.
NameTypeReqDescription
actions_processednumber
successboolean
tipstring
warningsarray

No examples provided.

start_profiler ~176

Start a profiler capture and return immediately, so simulate_input, run_script and screenshots can drive the game while it records. Requires run_project with profiling: true. Stops itself after `seconds` (default 30, max 60); call stop_profiler for the results. Returns: active, firstFrame, captureLimit, maxSeconds. Use profile_project instead for an unattended window. Errors if a capture is already running or profiling was not enabled at launch.

NameTypeReqDescription
captureLimitnumberRows the engine puts in each frame packet, 16..512 (default: 512). Godot selects them by inclusive time, so a lower limit hides cheap functions and sets limitReached.
secondsnumberMaximum capture duration before the automatic stop, greater than 0 and at most 60 (default: 30).
NameTypeReqDescription
activeboolean
captureLimitnumber
firstFramenumber|null
maxSecondsnumber

No examples provided.

stop_profiler ~173

Stop the capture started by start_profiler and rank the recorded functions; a capture that already hit its time limit is read back as-is, and can be re-read with a different sort. Times are elapsed, not CPU; inclusive rows overlap - never sum totalMs. Returns: the same payload as profile_project - rows (file, line, function, calls, selfMs/totalMs, per-frame averages, percentOfFrame, peak frame), frame budget, servers, worstFrame, frames, frameGaps, limitReached. Errors if no capture was started.

NameTypeReqDescription
sortstringRank by own time ("selfMs", default), inclusive time ("totalMs"), or invocation count ("calls").
topnumberHow many functions to return, 1..100 (default: 20).
NameTypeReqDescription
captureLimitnumber
firstFramenumber|null
frameobject
frameGapsnumber
framesnumber
framesReceivednumber
functionsReceivednumber
lastFramenumber|null
limitReachedboolean
rowsarray
secondsnumber
serversarray
sortstring
undecodablePacketsnumber
unresolvedFunctionsnumber
worstFrameobject|null

No examples provided.

stop_project ~172

Stop the spawned Godot project and clean up bridge state. Call when done with runtime testing, even after a crash, and even if you closed the Godot window yourself: it frees the process slot and clears the flag blocking scene-editing tools. A process that exited on its own already removed the bridge autoload at that moment, and this still succeeds - it reports alreadyExited:true with the exit code and the logs captured before the exit, and leaves a finished profiler capture readable. Attached sessions detach without killing the external process. Returns: message, mode, externalProcessPreserved, alreadyExited, exitCode (already-exited case), and condensed finalOutput/finalErrors (capped at 200); get_debug_output has the full log. Errors only when there is no session and no exited process to report.

Input schema present but exposes no named parameters.

NameTypeReqDescription
alreadyExitedboolean
exitCodenumber|null
externalProcessPreservedboolean
finalErrorsarray
finalOutputarray
messagestring
modestring

No examples provided.

take_screenshot ~249

Capture a PNG of the running viewport. responseMode: preview (default - saves full PNG, returns bounded inline preview at 960x540), full (full inline PNG; use for small text or pixel-level inspection), path_only (saved-path only, no inline image). Saved under .mcp/godot-runtime/screenshots/ (persists after stop_project). Returns: inline image block (full/preview modes), plus path and size of the saved PNG; previewPath/previewSize in preview mode; warnings for non-fatal runtime errors. Errors if no session or bridge times out (default 10000ms).

NameTypeReqDescription
previewMaxHeightnumberMaximum preview height in pixels when responseMode is "preview" (default: 540)
previewMaxWidthnumberMaximum preview width in pixels when responseMode is "preview" (default: 960)
responseModestringResponse payload mode. "preview" returns a bounded inline preview plus paths (default). "full" returns the full inline PNG. "path_only" returns paths only.
timeoutnumberTimeout in milliseconds to wait for the screenshot (default: 10000)
NameTypeReqDescription
pathstring
previewPathstring
previewSizeobject
responseModestring
sizeobject
warningsarray

No examples provided.

update_autoload ~129

Modify an existing autoload's path or singleton flag. Pass either or both - omitted fields keep their current value. Use instead of remove_autoload + add_autoload (single edit, no orphan window). No Godot process required. Returns plain-text confirmation on success. Errors if autoloadName is not registered.

NameTypeReqDescription
autoloadNamestringyesName of the autoload to update
autoloadPathstringNew path to the script or scene
projectPathstringyesPath to the Godot project directory
singletonbooleanNew singleton flag

No output schema declared.

No examples provided.

validate ~271

Validate GDScript syntax or scene file integrity using headless Godot. Use before attach_script or run_script to catch parse errors early. Single-target: provide exactly one of scriptPath, source, or scenePath. Batch: provide a targets array - runs all in one Godot process. Returns { valid, errors: [{ line?, message }] } for single, or { results: [{ target, valid, errors }] } for batch. Line numbers appear when Godot's stderr includes them (not always). Returns valid:false on any parse error; never throws.

NameTypeReqDescription
projectPathstringyesPath to the Godot project directory
scenePathstring[single] Path to a .tscn scene file relative to the project to validate (e.g. "scenes/main.tscn")
scriptPathstring[single] Path to a .gd file relative to the project to validate (e.g. "scripts/player.gd")
sourcestring[single] Inline GDScript source code to validate. Written to a temporary file and validated against the project.
targetsarray[batch] Array of targets to validate in a single Godot process. Each item must have exactly one of: scriptPath, source, or scenePath.

No output schema declared.

No examples provided.

Common questions

What is the Godot MCP Runtime server?

Godot MCP Runtime is listed in the public MCP registry as io.github.Erodenn/godot-mcp-runtime. Zero-addon MCP server for Godot 4: agents edit, run, and play-test the game. This page covers its npm package (godot-mcp-runtime).

Is the Godot MCP Runtime server safe to use?

Godot MCP Runtime scores 93 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 Godot MCP Runtime server expose?

Godot MCP Runtime exposes 39 tools: launch_editor, run_project, attach_project, detach_project, get_debug_output, and 34 more. Their descriptions and schemas cost roughly 7,247 tokens of context every time the server is loaded.

Is the Godot MCP Runtime server still maintained?

Godot MCP Runtime is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Godot MCP Runtime server under?

Godot MCP Runtime declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.