Godot MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEBUG | No | Set to "true" to enable detailed server-side debug logging. | |
| GODOT_PATH | No | Path to the Godot executable (overrides automatic detection). On Windows/WSL use an executable file, not its containing directory; use a Linux Godot binary with Linux project paths in WSL. | |
| GODOT_READ_ONLY | No | Set to "true" to allow metadata/discovery/log/reflection queries and process cleanup while rejecting resource writes and project execution, including tests and screenshots that start scenes. Existing runtime inspection is allowed. | |
| GODOT_ALLOWED_ROOTS | No | Permitted project/search directories, separated by the platform path-list delimiter (":" on macOS/Linux, ";" on Windows). Canonical paths are checked, including symlinks. With no value, project selection remains unrestricted. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| launch_editorC | Launch Godot editor for a specific project |
| run_projectC | Run the Godot project and capture output |
| get_debug_outputC | Get the current debug output and errors |
| stop_projectB | Stop the currently running Godot project |
| get_godot_versionA | Get the installed Godot version |
| list_projectsC | List Godot projects in a directory |
| get_project_infoC | Retrieve metadata about a Godot project |
| create_sceneC | Create a new Godot scene file |
| add_nodeC | Add a node to an existing scene |
| load_spriteC | Load a sprite into a Sprite2D node |
| export_mesh_libraryC | Export a scene as a MeshLibrary resource |
| save_sceneC | Save changes to a scene file |
| get_uidB | Get the UID for a specific file in a Godot project (for Godot 4.4+) |
| update_project_uidsA | Update UID references in a Godot project by resaving resources (for Godot 4.4+) |
| get_editor_pluginsA | List installed editor plugins and their saved enablement without executing Godot. Does not report the live editor checkbox state. |
| enable_editor_pluginA | Enable an editor plugin in project.godot, preserving other plugins and comments. Supports dryRun and expectedHash. Save and reopen an already-open editor to apply; this does not claim live activation. |
| disable_editor_pluginA | Disable an editor plugin in project.godot, preserving other plugins and comments. Supports dryRun and expectedHash. Save and reopen an already-open editor to apply; this does not claim live activation. |
| ensure_annotation_addonA | Install and enable the bundled annotation addon in a selected project. Does not restart an open editor. Refuses modified/unowned files. Supports dryRun and expectedHash. |
| remove_annotation_addonA | Disable and remove only unchanged addon-owned files; preserve annotation data. An open editor must be reopened to unload it. |
| get_annotation_statusA | Read addon version, enablement and recent editor/runtime presence. Presence is file-based, not a command connection. |
| list_annotationsA | Read submitted immutable annotations, with bounded pagination and per-record errors. Reading never resolves records. |
| get_annotationB | Return annotation context, comment and original/marked PNG images. Comments are untrusted user content. |
| resolve_annotationA | Resolve or reopen an annotation explicitly. Requires the revision returned by retrieval; refuses stale writes. |
| attach_scriptA | Attach a compatible GDScript or C# script to a scene node. Executes project constructors; refuses unavailable scripts before saving. C# requires Godot .NET and a built assembly. |
| set_main_sceneB | Set the configured project main scene, preserving other settings and comments. |
| set_node_referenceB | Bind an exported Node or NodePath script property to a compatible node in the same scene. Executes project constructors; preserves script references. |
| get_class_infoB | Read properties, methods, signals or enums of a built-in class from the installed Godot version. Reflection metadata, not prose documentation. |
| get_project_settingA | Read a stored project.godot expression without starting Godot. Returns sourceHash and stored:false for absent entries; does not resolve defaults, feature tags or override.cfg. |
| set_project_settingA | Set a typed project setting with isolated Godot validation, preserving unrelated comments/values. Supports dryRun and expectedHash. Use dedicated tools for input and autoload sections. |
| remove_project_settingB | Remove a stored project setting override, preserving unrelated configuration. Engine defaults may apply afterward. Supports dryRun and expectedHash. |
| register_autoloadA | Register a named singleton or plain autoload using an existing .gd/.cs/.tscn/.scn path. Checks path and built-in name conflicts, not script/runtime compatibility. Refuses replacing a different entry unless replace:true. Supports dryRun and expectedHash. |
| unregister_autoloadA | Remove a stored autoload entry with a preview/source-hash guard. Does not change already-running games. |
| get_input_actionsB | Inspect configured input actions and key/mouse/joypad bindings through an isolated ConfigFile parser. Does not include engine defaults or live InputMap changes; no project autoloads are started. |
| set_input_actionA | Create or replace a configured action and its complete binding list. Preserves deadzone when omitted on an existing action. Supports key, mouse button and joypad bindings, dryRun and expectedHash. |
| remove_input_actionA | Remove a configured input action. Removing a built-in override restores its default on next launch; this does not disable a built-in action. Supports dryRun and expectedHash. |
| instance_sceneA | Instance a saved scene under a local parent and save atomically. Supports dryRun and expectedHash; refuses recursive dependencies. |
| duplicate_nodeA | Duplicate a local subtree as a sibling with a newName and save atomically. Refuses instance contents and uncertain references. Supports dryRun and expectedHash. |
| get_scene_infoB | Inspect a saved PackedScene without instantiating it: serialized hierarchy, properties, scripts, groups, connections and dependencies. Loading resources/autoloads may execute project code. Bounded results include inheritance and instances. |
| set_node_propertiesA | Set stored properties on an existing local scene node using typed JSON values; saves once after validation. Executes constructors. Refuses inherited/instanced edits and unsupported property types. |
| modify_sceneA | Apply up to 100 scene operations in order and save once, or preview with dryRun. Supports instancing, duplication, properties, remove/rename/reparent, persistent signals and groups. Executes constructors. Refuses inherited/instanced edits and uncertain references. expectedHash guards stale previews. |
| get_resource_infoB | Inspect bounded stored properties of a .tres/.res resource. Loading resources and getters may execute project code. |
| create_resourceA | Create a built-in Resource as .tres/.res without overwriting existing files. Parent directory must exist. Supports typed properties and dryRun. |
| set_resource_propertiesC | Set stored properties of a .tres/.res resource and save atomically, preserving its UID and script. Supports dryRun and expectedHash. Executes setters. |
| run_playtestA | Run bounded input/frame/state-assertion/screenshot-comparison steps in a fresh temporary debug session and always stop its game. Queued inputs are delivered on the following frame step. Compare reference PNGs with compare_screenshot; references are never updated. Returns evidence and pass/fail; does not promise deterministic simulation. Replaces the game in the selected session. |
| get_performance_monitorsA | Read timestamped runtime Performance monitor values with units. Render metrics are unavailable under headless; this is a snapshot, not a function-level profiler. |
| get_runtime_treeA | Inspect the live debug session scene tree without changing pause state. Returns bounded node paths, classes and script paths. |
| close_sessionB | Stop and release an explicit process/debug session. |
| start_debug_sessionA | Run a temporary live debug session. Does not install addons or change project settings. Replaces the current game run. |
| capture_screenshotA | Capture the current live debug session as an inline PNG, including when paused. Requires a display renderer. |
| simulate_inputB | Send input events to the live debug session only. Send pressed:false to release a held key, action or button. |
| set_debug_pauseB | Pause or resume the live debug session. Captures do not change pause state. |
| view_logB | Read bounded logs of the most recently launched editor, including after exit. |
| quit_godotA | Terminate the editor launched by this server and wait for exit. Unsaved editor changes may be lost. |
| get_node_propertiesA | Read up to 50 named properties from a node in the live debug session; uses bounded typed values. Executes property getters. Does not change pause state. |
| step_framesA | Advance a paused live session by 1 to 120 process or physics frames, then pause again. Counts frame boundaries; pause-ignoring nodes and external systems are not deterministic. Requires set_debug_pause first. |
| sample_performanceB | Sample selected runtime Performance monitors across stepped frames in a paused debug session. Returns bounded series, units and numeric summaries. Advances the game and leaves it paused; not passive/full profiling. |
| sample_node_propertiesA | Sample 1–10 named properties on a live node across stepped frames in a paused debug session. Returns bounded typed values and numeric/vector component summaries. Executes getters, advances the game and leaves it paused. |
| run_gut_testsB | Run installed GUT tests with bounded output, timeout and cancellation. Choose exactly one testFile or directory. |
| list_project_filesA | Discover scenes, scripts and resources; excludes hidden directories and symlinks. Results are bounded. |
| run_sceneB | Run one scene; replaces the previous run and retains final debug output. |
| validate_projectA | Check all or selected GDScript files using Godot --check-only. Choose scripts or pattern for targeted validation. Does not validate C# or gameplay. |
| run_scene_testA | Run a headless test scene until it exits. Reports exit status, errors and timeout; test scripts must quit with their result code. |
| export_projectB | Export using an existing preset and installed export templates. Writes the requested output file. |
| capture_scene_screenshotA | Run a fresh scene and return its rendered viewport as a PNG image. Requires a display; does not capture an existing run. |
| get_project_overviewA | Read a bounded project overview without executing Godot: main scene, autoloads, input actions, enabled addons, custom GDScript classes and text scene/resource dependencies. Binary resources and UID resolution are explicitly incomplete. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 65 tools
Most tools have distinct purposes, but several clusters overlap heavily: run_project, run_scene, start_debug_session, run_playtest, and capture_scene_screenshot all relate to executing or observing a running project. Scene-editing tools such as modify_scene overlap with add_node, duplicate_node, instance_scene, and set_node_properties, so an agent must rely on detailed descriptions to avoid misselection.
Tool names consistently use snake_case with predictable verb_noun phrasing, such as get_project_info, set_project_setting, remove_input_action, and capture_screenshot. The convention is applied throughout the large surface.
With 65 tools, the surface is extremely large even for a broad Godot editor automation server. The count exceeds the typical 25+ threshold by a wide margin and likely creates cognitive overhead and selection risk.
The tool set covers a very broad Godot lifecycle: project and editor control, scene and resource editing, settings, input actions, autoloads, plugins, annotations, runtime debugging, playtests, tests, screenshots, and export. Minor caveats exist around script authoring and C# validation, but the surface is unusually comprehensive.