Godot MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEBUG | No | Set to 'true' for verbose server logging | |
| GODOT_PATH | Yes | Path to Godot executable (overrides auto-detection) | |
| MCP_TOOLSETS | No | Comma-separated tool categories to enable | |
| MCP_READ_ONLY | No | Set to 'true' to block all write operations | |
| MCP_EXCLUDE_TOOLS | No | Comma-separated tool names to exclude |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| launch_editorA | Launch the Godot editor GUI for a project. Does not run the game — use run_project or run_interactive for that. |
| run_projectA | Run the Godot project non-interactively and capture console output. No input, screenshots, or state queries — use run_interactive for those. |
| get_debug_outputA | Get console output (stdout/stderr) from a running Godot project. Supports errors_only and tail filters. For structured errors with stack traces, use get_runtime_errors. |
| stop_projectA | Stop the currently running Godot project. Does not affect the editor launched via launch_editor. |
| get_godot_versionA | Get the installed Godot version |
| list_projectsA | List Godot projects in a directory |
| get_project_infoC | Retrieve metadata about a Godot project |
| create_sceneA | Create a new Godot scene (.tscn) file with a root node. Specify rootNodeType (e.g., 'Node2D', 'Node3D', 'Control'; defaults to 'Node2D'). |
| add_nodeA | Add a child node to a scene file on disk. Defaults to root if parentNodePath is omitted. For sub-scene instances, use instantiate_scene. |
| load_spriteB | Load a sprite into a Sprite2D node |
| export_mesh_libraryB | Export a scene as a MeshLibrary resource |
| save_sceneA | Save a scene file, optionally to a new path via newPath (creating a copy). Most editing tools save automatically; use this primarily for saving copies. |
| set_cellsC | Set tile cells on a TileMapLayer node in a scene |
| get_scene_treeA | Read a scene's node tree from a .tscn file on disk as JSON (names, types, properties, hierarchy). No running game required. For architecture analysis, use get_scene_insights. |
| set_node_propertiesA | Set properties on a node in a saved scene file (.tscn) on disk permanently. For live runtime changes, use set_property instead. |
| attach_scriptA | Attach a GDScript file to an existing node in a scene |
| create_resourceB | Create a .tres resource file with typed properties |
| edit_project_settingsA | Modify project.godot settings (input actions, display, rendering, physics, etc.). For autoload singletons, prefer manage_autoloads. |
| remove_nodeA | Remove a node (and its children) from a scene |
| reparent_nodeA | Move a node to a different parent within the same scene |
| connect_signalA | Connect a signal from one node to a method on another node in a scene file (.tscn) on disk. For runtime signal monitoring, use subscribe_signals or send_key_sequence. |
| get_tile_dataA | Read existing tile cells from a TileMapLayer node in a scene |
| create_tilesetA | Create a TileSet resource with atlas sources from texture files |
| export_projectA | Export a Godot project for a target platform using a configured export preset |
| validate_sceneA | Validate a scene for common issues (missing scripts, broken references, orphan nodes) |
| batch_operationsA | Execute multiple scene operations in a single Godot process invocation. Much faster than individual tool calls since each spawns a separate process. Use for 3+ operations. |
| get_uidA | 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+) |
| add_to_groupB | Add a node to one or more groups in a scene |
| remove_from_groupA | Remove a node from one or more groups in a scene |
| instantiate_sceneA | Add a scene as a child instance of another scene (e.g., spawn a player scene inside a level) |
| add_animationA | Add an animation with tracks and keyframes to an existing AnimationPlayer node. To create the AnimationPlayer itself, use create_animation_player first. |
| read_scriptA | Read the contents of a GDScript file from a Godot project. Returns the full source code as text. |
| write_scriptA | Write or overwrite a GDScript file in a Godot project. Creates parent directories if needed. Use validate_script afterward to check for syntax errors. |
| set_custom_tile_dataB | Set custom data layer values on specific tile cells in a TileMapLayer |
| duplicate_nodeA | Duplicate a node within a scene, optionally with a new name or different parent |
| rename_nodeA | Rename a node in a scene file. Updates the node's name while keeping all properties, children, and connections intact. |
| get_node_propertiesA | Read properties from a node in a saved scene file (.tscn) on disk. Returns all non-default properties, or specific ones if listed. For runtime properties, use evaluate_expression. |
| create_animation_playerA | Create an AnimationPlayer node in a scene with optional pre-configured animations. To add animations to an existing player, use add_animation. |
| manage_autoloadsA | Add, remove, or list autoload singletons in project.godot |
| set_collision_layer_maskA | Set collision layer and/or mask on a physics node. Accepts layer numbers (1-32) as array or raw bitmask. |
| capture_screenshotA | Render a scene file statically and save the viewport as a PNG. No running game needed. For live game captures, use game_screenshot or run_and_capture. Requires a display server. |
| run_and_captureA | Run the project for a duration, capture a screenshot, then stop. Runs the full game (unlike capture_screenshot) without needing run_interactive (unlike game_screenshot). Requires a display server. |
| send_inputA | Send a single Godot InputMap action (e.g., 'move_up', 'jump') to a running interactive project. Returns delivery confirmation only, not the effect — for multi-step testing prefer send_key_sequence with {"action": ...} items, which batches inputs, waits, and state/screenshot checkpoints into one round-trip (no shell sleeps needed). Requires run_interactive. |
| list_input_actionsA | List all input actions defined in a project's project.godot (the InputMap). Useful before using send_input. No running game required. |
| run_interactiveA | Run a Godot project with MCP input receiver injected. Enables send_key_sequence (batched inputs + checkpoints), game_state, get_runtime_errors, and screenshots via TCP. Use instead of run_project for interactive testing. |
| game_stateA | Fast structured verification (preferred over game_screenshot for gameplay logic): returns current scene name, script variables of all autoload singletons, and Player position if a Player node exists. For state not exposed via autoloads, use evaluate_expression or get_node_properties. For inline state captures during input, use send_key_sequence with {"state": true}. Requires run_interactive. |
| call_methodA | Invoke a method on a live node in a running interactive Godot project. Resolves the node by path relative to the current scene (e.g., "Player", "World/Enemies/Boss") and calls the named method with optional arguments. Returns the serialized result. The project must be running via run_interactive. |
| find_nodesA | Search the live runtime scene tree by name pattern and/or type, including dynamically spawned nodes. For static .tscn analysis, use get_scene_tree. Requires run_interactive. |
| evaluate_expressionA | Execute an arbitrary GDScript expression at runtime and return the result. The expression runs in the context of the current scene (e.g., "get_tree().current_scene.name", "Vector2(1,2).length()"). Useful for debugging, querying state, and one-off calculations. The project must be running via run_interactive. |
| game_screenshotA | Capture a screenshot from a running interactive project. Slowest verification path — use only when visual appearance itself matters (rendering, layout, animation). For gameplay/logic checks prefer game_state, evaluate_expression, or get_runtime_errors: structured, and much faster than writing and reading an image. For inline captures during input, use send_key_sequence with {"screenshot": "path"}. Requires run_interactive. |
| send_keyA | Send a single keyboard key event to a running interactive Godot project. Supports any key name recognized by Godot (e.g., "space", "a", "escape", "f1") and modifier keys. For sending multiple keys, prefer send_key_sequence — it processes all keys server-side in one round-trip with optional state/screenshot checkpoints. The project must be running via run_interactive. |
| send_mouse_clickA | Send a mouse click (press+release) at specific coordinates. For cursor movement, use send_mouse_motion. For dragging, use send_mouse_drag. Requires run_interactive. |
| send_mouse_motionA | Move the mouse cursor to specific coordinates without clicking. Use for hover effects, aiming, and cursor tracking. Requires run_interactive. |
| send_mouse_dragA | Send a mouse drag (press, move, release) from one position to another. For simple clicks, use send_mouse_click. Requires run_interactive. |
| wait_for_signalA | Block until a signal is emitted on a node in the running game. Useful for sequencing test steps (e.g., wait for "animation_finished" or "died"). Returns whether the signal was received or the wait timed out. The project must be running via run_interactive. |
| wait_for_nodeA | Block until a node appears in the scene tree. Useful for waiting on dynamically spawned nodes (e.g., wait for "Player/Sword" to appear after equip). Returns whether the node was found or the wait timed out. The project must be running via run_interactive. |
| get_performance_metricsA | Retrieve performance metrics (FPS, draw calls, memory, node count, etc.) from a running project. Optionally filter to specific metrics. Requires run_interactive. |
| reset_sceneA | Reload the current scene in a running interactive Godot project. Useful for resetting game state during test loops. The project must be running via run_interactive. |
| get_runtime_errorsA | Retrieve runtime errors, warnings, and backtraces since the last call. Returns structured entries with error type, source, and stack traces. Requires Godot 4.5+ and run_interactive. |
| get_scene_insightsA | Analyze a scene's architecture: type distribution, signals, sub-scenes, scripts, groups, and tree depth. Runs headless (no game needed). |
| get_node_insightsA | Analyze a GDScript file: classify methods, identify signals, map dependencies, and list exports. Takes a scriptPath, not a nodePath. Runs headless (no game needed). |
| run_testsA | Run GUT (Godot Unit Testing) tests via headless Godot. Requires GUT installed (addons/gut/). Returns pass/fail summary and console output. |
| send_key_sequenceA | Primary gameplay testing tool. Sends multiple raw keys and/or InputMap actions in one round-trip with inline checkpoints: {"wait": ms} delays, {"state": true} state snapshots, {"screenshot": "path"} captures, collectSignals for signal events. Replaces send_input/send_key loops with shell sleeps and separate verification calls. Requires run_interactive. |
| send_joypad_buttonA | Send a gamepad button event (A, B, X, Y, shoulders, dpad, start, etc.) to a running project. For input actions, prefer send_input. Requires run_interactive. |
| send_joypad_motionA | Send a gamepad analog stick or trigger axis event. Simulates analog input with float precision. For input actions, prefer send_input. Requires run_interactive. |
| pause_gameA | Pause or unpause a running project. MCP receiver stays active for screenshots, state queries, and property changes while paused. Requires run_interactive. |
| set_propertyA | Set a property on a live node at runtime. Changes are immediate but NOT saved to disk — use set_node_properties for permanent changes. Requires run_interactive. |
| validate_scriptA | Validate a GDScript file for syntax errors using Godot's parser in headless mode. No running game needed. |
| execute_scriptA | Execute a multi-line GDScript block at runtime in the current scene context. Unlike evaluate_expression, supports variables, loops, and control flow. Requires run_interactive. |
| subscribe_signalsA | Subscribe to signals on a node for persistent monitoring. Retrieve with get_signal_events. For single-sequence monitoring, prefer send_key_sequence with collectSignals. Requires run_interactive. |
| get_signal_eventsA | Retrieve buffered signal events from subscribe_signals. Returns signal name, arguments, and timestamp; clears buffer by default. Requires run_interactive. |
| search_assetsA | Search the Godot Asset Library for addons and project templates. Returns matching assets with the asset_id you pass to install_asset. Read-only network call to the public Asset Library REST API. |
| install_assetA | Download an asset from the Godot Asset Library and extract it into a project. Provide assetId (download URL and sha256 are resolved and verified via the Asset Library) or a direct downloadUrl. The archive's single wrapping folder is stripped by default so addons land under res://addons/. Files are written into the project (existing files at the same path are overwritten) and imported the next time the project is opened or run. Archive entries that would escape the project directory are rejected. |
| discover_toolsA | List available tools by category. Categories: process, project, scene, node, animation, tilemap, resource, script, signal_group, uid, settings, interactive, screenshot, analysis, testing, assets, meta. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Vollkorn-Games/godot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server