godot-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEBUG | No | Set to "true" to enable verbose stderr logging | false |
| GODOT_PATH | No | Path to the Godot 4 executable (auto-detected if unset) |
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 | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_godot_versionA | Return the installed Godot 4 version string. |
| launch_editorA | Launch the Godot editor for the given project (non-blocking). Args: project_path: Absolute path to the Godot project directory. |
| run_projectA | Run a Godot project in debug mode and capture output. Args: project_path: Absolute path to the Godot project directory. scene: Optional specific scene file to run. |
| get_debug_outputA | Retrieve current stdout/stderr from the running Godot project. |
| stop_projectA | Stop the currently running Godot project and return its final output. |
| list_projectsA | Find Godot projects under a directory. Args: directory: Root directory to search. recursive: If True, search all subdirectories. |
| get_project_infoA | Return metadata about a Godot project (name, structure, Godot version). Args: project_path: Absolute path to the Godot project directory. |
| create_sceneB | Create a new Godot scene file via the GDScript engine. Args: project_path: Absolute path to the Godot project directory. scene_path: Scene path relative to the project (e.g. 'scenes/player.tscn'). root_node_type: Godot class name for the root node (default: Node2D). |
| add_nodeA | Add a node to an existing Godot scene via the GDScript engine. Args: project_path: Absolute path to the Godot project directory. scene_path: Scene path relative to project. node_type: Godot class name for the new node (e.g. Sprite2D). node_name: Name for the new node. parent_node_path: Node path of the parent (default: 'root'). properties: Optional dict of property_name -> value. |
| load_spriteA | Load a texture onto a Sprite2D/TextureRect node inside a scene. Args: project_path: Absolute path to the Godot project directory. scene_path: Scene path relative to project. node_path: Path to the Sprite2D node (e.g. 'root/Player/Sprite2D'). texture_path: Texture path relative to project. |
| export_mesh_libraryB | Export a 3D scene as a MeshLibrary .res resource for GridMap. Args: project_path: Absolute path to the Godot project directory. scene_path: Source .tscn scene path relative to project. output_path: Output .res path relative to project. mesh_item_names: Optional list of mesh items to include (all if omitted). |
| save_sceneA | Save (or save-as) a Godot scene file. Args: project_path: Absolute path to the Godot project directory. scene_path: Scene path relative to project. new_path: If provided, save to this alternate path. |
| get_uidB | Get the UID for a Godot 4.4+ resource file. Args: project_path: Absolute path to the Godot project directory. file_path: File path relative to project. |
| update_project_uidsB | Resave all resources to regenerate UID files (Godot 4.4+). Args: project_path: Absolute path to the Godot project directory. |
| quantize_animation_keyframesA | Stepped Framerate Quantizer: Round keyframe timestamps inside a .tscn/.tres file to fixed frame intervals -- e.g. 0.0833s for 12-fps anime look, 0.0417s for 24-fps film. Args: file_path: Absolute path to the .tscn or .tres animation file. target_fps: Target framerate to quantize to (12 for anime, 24 for film). animation_name: Reserved for future filtering by animation name. |
| set_animation_interpolation_modeB | Interpolation Mode Swapper: Bulk-edit keyframe easing modes in a .tscn/.tres file. Flip between linear, smooth bezier (cubic), or constant (stepped/nearest). Args: file_path: Absolute path to the .tscn or .tres file. mode: Interpolation mode -- 'nearest'/'constant' (0), 'linear' (1), 'cubic' (2), 'linear_angle' (3), 'cubic_angle' (4). track_index: If >= 0, only patch this track index. -1 means all tracks. |
| stitch_animation_libraryA | Animation Library Stitcher: Generate a master AnimationLibrary .tres file that references external animation clips by clean string names (idle, run, attack). Each clip dict must have:
Args: output_res_path: Absolute filesystem path for the output .tres file. clips: List of {'name': str, 'path': str} dicts. |
| generate_track_filterA | Track Filtering & Blending: Generate GDScript and resource text for an AnimationNodeBlendFilter that locks specific bone chains while letting upper-body bones follow a separate overlay animation. Args: scene_path: Absolute path to the .tscn scene file (appended if exists). locked_bone_paths: Bone NodePaths to exclude, e.g. ['Skeleton3D:Bone/Hip']. blend_node_name: Name for the AnimationNodeBlendFilter node. |
| generate_state_machineA | State Machine Graph Generator: Inject an AnimationNodeStateMachine sub-resource block into a .tscn file -- define visual state blocks without opening the editor. Each state dict must have:
Args: scene_path: Absolute path to the .tscn scene file. node_name: Name for the AnimationTree node (e.g. 'AnimationTree'). states: List of state definition dicts. anim_player_path: NodePath to the AnimationPlayer. start_state: Start state name (defaults to first state). |
| compile_state_transitionsA | Transition Logic Compiler: Write transition arrow connections between state blocks, attaching evaluation parameters like 'speed > 0.1' or 'is_attacking == true'. Each transition dict must have:
Args: scene_path: Absolute path to the .tscn scene file. state_machine_resource_id: Sub-resource id of the AnimationNodeStateMachine. transitions: List of transition dicts. |
| calculate_blend_space_2dB | 2D Blend Space Grid Calculator: Compute and inject an AnimationNodeBlendSpace2D for directional locomotion blending (N/S/E/W + idle) based on a controller vector. Each blend_point dict must have:
Args: scene_path: Absolute path to the .tscn scene file. node_name: Name for the AnimationTree node. blend_points: List of blend point dicts. x_label: Horizontal axis label. y_label: Vertical axis label. anim_player_path: NodePath to the AnimationPlayer. |
| generate_bezier_camera_pathA | Bezier Camera Path Generator: Calculate Catmull-Rom bezier handles from world-space waypoints and serialize them as Path3D + Curve3D node blocks in a .tscn file. Supports arc pans, dolly zooms, hyper-fast cinematic swoops, and orbital moves. Each waypoint dict must have:
Args: scene_path: Absolute path to the .tscn scene file. path_node_name: Name for the Path3D node (e.g. 'CameraRail'). waypoints: List of waypoint dicts. add_path_follow: If True, add a PathFollow3D child. add_camera: If True, add a Camera3D child under PathFollow3D. tension: Tension / speed-curve multiplier (-1.0 to 1.0, default 0.0). Use negative values (e.g. -0.5) for wide sweeping cinematic moves; positive values (e.g. 0.5) for crisp, tight corners. |
| inject_lookat_trackingB | Tracking & LookAt Injector: Generate a GDScript that procedurally tracks a target node's transform vector every frame, with smooth slerp interpolation. Args: scene_path: Absolute path to the .tscn scene file. camera_node_path: NodePath of the Camera3D to control. target_node_path: NodePath of the node to track (e.g. 'Player/Body'). script_output_path: Where to write the .gd script. Empty = next to scene file. |
| build_camera_switcher_timelineA | Camera Switcher Timeline Builder: Write an Animation resource block that toggles Camera3D.current at exact timestamps for multi-angle cinematic cuts. Each switch dict must have:
Args: scene_path: Absolute path to the .tscn scene file. anim_player_node: Name of the AnimationPlayer node in the scene. switches: List of camera switch event dicts. animation_name: Name for the generated animation clip. timeline_length: Total animation length in seconds. |
| batch_shader_uniformsA | Uniform Parameter Batcher: Scan ShaderMaterial .tres files and bulk-override shader_parameter/* values -- change cell-shading threshold, outline thickness, ink color across hundreds of assets in one call. uniform_overrides maps param names to new value strings: {'outline_thickness': '2.0', 'light_threshold': '0.5'} Args: directory: Directory to scan for .tres files. uniform_overrides: Dict of {param_name: new_value_string}. recursive: If True, scan all subdirectories (default True). dry_run: If True, report changes without writing files. |
| remap_texture_channelsA | Texture Channel Remapper: Link hand-painted image textures into specific material property slots by altering ext_resource references in a .tres file. channel_map maps Godot property names to new res:// paths: { 'albedo_texture': 'res://textures/hero_albedo.png', 'normal_texture': 'res://textures/hero_normal.png', 'shader_parameter/base_tex': 'res://textures/hero_hand_painted.png' } Args: material_path: Absolute path to the .tres material file. channel_map: Dict of {property_name: res_path}. |
| toggle_movie_makerA | Movie Maker Engine Activator: Edit project.godot to toggle Godot's built-in uncompressed video recorder, locking the render time-step to a perfect fps loop. Args: project_path: Absolute path to the Godot project directory. enable: True to activate Movie Maker, False to disable. output_file: res:// output video path (e.g. 'res://render/movie.avi'). fps: Capture framerate (default 60). Only used when enable=True. |
| run_headless_diagnosticsA | Headless Project Diagnostics: Invoke Godot CLI to validate imports, check UID linkages, detect broken shader entry points, and output a structured diagnostic log. Args: project_path: Absolute path to the Godot project directory. checks: Checks to run: 'import', 'uids', 'shaders', 'all'. Default: ['import','uids']. timeout_seconds: Max seconds to wait for Godot (default 120). |
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 28 tools
Each tool targets a distinct action-resource pair: project lifecycle, scene editing, animation graph generation, camera work, and diagnostics are cleanly separated. Even similar animation/camera tools (e.g., generate_state_machine vs compile_state_transitions) have clearly different purposes and arguments.
All tool names follow a consistent verb_first_snake_case pattern (launch_editor, get_godot_version, run_project, generate_track_filter, batch_shader_uniforms). Verb choices are generally descriptive and uniform, with no camelCase or mixed naming conventions.
With 28 tools, the server exceeds the 25+ threshold for 'too many' and would overwhelm an agent. While Godot is a broad domain, many tools are highly specialized (e.g., quantize_animation_keyframes, generate_bezier_camera_path) and could be consolidated or scoped down.
The server heavily favors creation/generation workflows but lacks basic editing operations like node deletion, scene tree inspection, property updates, or script file creation. This causes dead-ends: users can add nodes but not list or remove them, and cannot update existing scene resources beyond saving.