A comprehensive integration between Godot Engine and AI assistants using the Model Context Protocol (MCP). This plugin allows AI assistants to interact with your Godot projects, providing powerful capabilities for code assistance, scene manipulation, and project management.
- Full Godot Project Access: AI assistants can access and modify scripts, scenes, nodes, and project resources
- Two-way Communication: Send project data to AI and apply suggested changes directly in the editor
- Capability-Aware Editing: Patch application is scoped to an allowlisted set of directories, file types, and critical assets for safer automation
- Project Indexing & Query: Cached project map with glob-style queries for quick discovery of files and directories
- Node Workflow Enhancements: Rename nodes, manage group membership, and enumerate group contents with full undo/redo support
- Input Map Automation: Inspect, add, and remove input actions or individual input events without leaving the editor
- Headless Execution & Profiling: Launch deterministic headless runs, capture editor performance snapshots, and manage plugin state with audit-friendly logs
- Command Categories:
- Node Commands: Create, modify, and manage nodes in your scenes
- Script Commands: Edit, analyze, and create GDScript files
- Scene Commands: Manipulate scenes and their structure
- Physics Configuration: Configure physics bodies, areas, and joints with transaction-aware updates
- CSG & GridMap Helpers: Prototype boolean geometry and GridMap layouts with undo-safe editing primitives
- Project Commands: Access project settings and resources
- Editor Commands: Control various editor functionality
- XR Commands: Inspect interfaces, initialize platforms, and persist XR project settings
- Multiplayer Commands: Spin up ENet/WebSocket/WebRTC peers and spawn network-ready scenes
- Compression Commands: Manage GPU texture presets, import profiles, and batch reimports
git clone https://github.com/ee0pdt/godot-mcp.git
cd godot-mcpcd server
npm install
npm run build
# Return to project root
cd ..-
Edit or create the Claude Desktop config file:
# For macOS nano ~/Library/Application\ Support/Claude/claude_desktop_config.json
-
Add the following configuration (or use the included
claude_desktop_config.jsonas a reference):{ "mcpServers": { "godot-mcp": { "command": "node", "args": [ "PATH_TO_YOUR_PROJECT/server/dist/index.js" ], "env": { "MCP_TRANSPORT": "stdio" } } } }Note: Replace
PATH_TO_YOUR_PROJECTwith the absolute path to where you have this repository stored. -
Restart Claude Desktop
- Open Godot Engine
- Select "Import" and navigate to the cloned repository
- Open the
project.godotfile - The MCP plugin is already enabled in this example project
After setup, you can work with your Godot project directly from Claude using natural language. Here are some examples:
@mcp godot-mcp read godot://script/current
I need help optimizing my player movement code. Can you suggest improvements?
@mcp godot-mcp run get-scene-tree
Add a cube in the middle of the scene and then make a camera that is looking at the cube.
@mcp godot-mcp read godot://scene/current
Create an enemy AI that patrols between waypoints and attacks the player when in range.
- "Create a main menu with play, options, and quit buttons"
- "Add collision detection to the player character"
- "Implement a day/night cycle system"
- "Refactor this code to use signals instead of direct references"
- "Debug why my player character falls through the floor sometimes"
godot://script/current- The currently open scriptgodot://scene/current- The currently open scenegodot://project/info- Project metadata and settingsgodot://project/index- Cached project file and directory index snapshotgodot://audio/buses- Project audio bus layout, routing metadata, and effect stacksgodot://physics/world- Live snapshot of 2D/3D physics spaces with per-space gravity, body/area/joint inventories, and configuration metadata.godot://animation/state-machines- Inspect AnimationTree graphs, blend spaces, and transitions for the active scene.godot://animation/tracks- Read AnimationPlayer timelines, tracks, and keyframes with keyframe metadata.godot://xr/interfaces- Report available XR interfaces, initialization state, and capabilities.godot://multiplayer/state- Summarize the active SceneTree multiplayer peer, connectivity, and authority configuration.godot://assets/compression-presets- Surface configured texture compression presets and import profiles.
godot://ui/theme- Surface the currently applied UI Theme resources, styles, and fonts for audit.
create_node- Create a new node under a specified parent pathdelete_node- Delete a node from the edited sceneupdate_node_property- Change a node property with undo supportget_node_properties- Inspect every exposed property on a nodelist_nodes- Enumerate the children of a node in the scene treerename_node- Rename a node while preserving undo historyadd_node_to_group- Add a node to a named group (optionally persisting to the scene file)remove_node_from_group- Remove a node from a group with undo/redocreate_theme_override- Author Control theme overrides with undo-safe transactionswire_signal_handler- Connect node signals to scripted methods with optional stub generationlayout_ui_grid- Apply column-based layouts to Control containers with consistent spacingvalidate_accessibility- Inspect Control nodes for missing focus, labels, or accessible descriptionslist_node_groups- List all groups the node currently belongs tolist_nodes_in_group- Enumerate nodes that are members of a group in the edited scene
create_script- Create a new GDScript file and optionally attach it to a nodeedit_script- Replace the contents of an existing script fileget_script- Fetch a script by file path or by attached nodecreate_script_template- Generate a GDScript skeleton with common callbacks
create_scene- Create a new scene with an optional root node typesave_scene- Save the currently edited scene to diskopen_scene- Open a scene in the editorget_current_scene- Report information about the open sceneget_project_info- Return the project name, version, and active scene detailscreate_resource- Create and serialize a new resource assetbegin_scene_transaction- Start a named transaction for batching scene editscommit_scene_transaction- Commit a pending scene transactionrollback_scene_transaction- Roll back a transaction (even after commit)list_scene_transactions- List transaction identifiers that are currently trackedconfigure_physics_body- Adjust PhysicsBody2D/3D properties with undo/redoconfigure_physics_area- Update Area2D/Area3D monitoring, gravity, and masksconfigure_physics_joint- Rewire Joint2D/3D connections and constraint limitslink_joint_bodies- Connect joints to specific physics bodies and optionally tweak constraint settingsrebuild_physics_shapes- Regenerate CollisionShape3D resources from Mesh nodes or assetsprofile_physics_step- Capture PhysicsServer and Performance metrics for quick diagnosticsconfigure_csg_shape- Tweak CSG combiners and primitives with undo/redo supportconfigure_material_resource- Create/update Material resources, apply glslang shader code, bind lightmapper textures, and persist meshoptimizer metadatapaint_gridmap_cells- Stamp MeshLibrary items into GridMap coordinates in batchesclear_gridmap_cells- Remove items from GridMap cells while preserving undo historyauthor_audio_stream_player- Create or configure AudioStreamPlayer nodes with stream assignments and playback settingsauthor_interactive_music_graph- Build or update AudioStreamInteractive resources with layered clips and transition logicgenerate_dynamic_music_layer- Layer a new clip onto an interactive music resource with configurable entry/exit transitionsanalyze_waveform- Produce amplitude, RMS, and crest factor summaries for AudioStream resources with optional envelope binsbatch_import_audio_assets- Apply import presets or parameter overrides to audio files and trigger a batch reimport
list_animation_players- Enumerate AnimationPlayer nodes, active playback settings, and contained animations.describe_animation_tracks- Inspect AnimationPlayer track configurations with optional keyframe timing and values.describe_animation_state_machines- Summarize AnimationTree state machines, nested graphs, and transition metadata.edit_animation- Apply structured operations to animation resources (tracks, keys, properties) with undo/redo support.configure_animation_tree- Update AnimationTree properties, blend parameters, and state playback targets.bake_skeleton_pose- Capture Skeleton2D/3D poses into an Animation resource at a specified timestamp.generate_tween_sequence- Build Animation timelines from tween-style step definitions.sync_particles_with_animation- Align particle emission properties and animation keys with an animation clip.
list_navigation_maps- Summarize NavigationRegion2D/3D nodes and their resourceslist_navigation_agents- Inspect NavigationAgent2D/3D avoidance and target settingsbake_navigation_region- Trigger baking on a navigation region (threaded by default)update_navigation_region- Change navigation region node properties with undo/redoupdate_navigation_resource- Edit NavigationPolygon or NavigationMesh resource propertiesupdate_navigation_agent- Adjust NavigationAgent parameters with undo/redosynchronize_navmesh_with_tilemap- Rebake TileMap navigation layers and optional navigation regions
refresh_project_index- Rebuild the cached project index snapshotquery_project_index- Query the cached project index with glob patternslist_input_actions- List every input action and associated eventsadd_input_action- Create or overwrite an input action definitionremove_input_action- Delete an input action from the project settingsadd_input_event_to_action- Register an additional event on an existing input actionremove_input_event_from_action- Remove an input event by index or matching fieldsconfigure_input_action_context- Batch manage related input actions and persist context metadatalist_audio_buses- Enumerate the audio bus graph with volume, routing, and effect statusconfigure_audio_bus- Adjust audio bus volume, routing, and effect enablement with optional persistenceconfigure_project_setting- Guard-railed ProjectSettings writes with type-aware validation and optional persistence
list_xr_interfaces- Enumerate XR interfaces, initialization state, and capabilities exposed by the project build.initialize_xr_interface- Initialize a named XR interface and optionally promote it to the primary interface.shutdown_xr_interface- Gracefully end the XR session for a specific interface and release resources.save_xr_project_settings- Persist XR-related ProjectSettings entries for deterministic editor configuration.
get_multiplayer_state- Capture the SceneTree multiplayer snapshot including connected peers and authority metadata.create_multiplayer_peer- Configure ENet, WebSocket, or WebRTC peers in server/client mode for playtesting.teardown_multiplayer_peer- Disconnect and clear the active multiplayer peer returning the scene to single-player mode.spawn_multiplayer_scene- Instantiate a PackedScene and optionally assign multiplayer authority for quick session setup.
configure_texture_compression- Apply GPU compression options scoped to a platform and optionally save to disk.batch_reimport_textures- Reimport a batch of textures so new compression presets are applied consistently.create_texture_import_preset- Register reusable import presets for ASTC/KTX/WebP oriented workflows.list_texture_compression_settings- Inspect the current compression presets and import settings stored in ProjectSettings.
generate_material_variant- Duplicate a Material resource, apply property and shader overrides, and optionally save it to disk.compile_shader_preview- Compile Godot shader source and surface uniform/default texture metadata without touching files.unwrap_lightmap_uv2- Invoke ArrayMesh lightmap unwrapping for a Mesh resource or MeshInstance3D node with optional saving.optimize_mesh_lods- Produce simplified meshes for requested LOD ratios and optionally assign or persist the generated meshes.configure_environment- Update Environment ambient light, fog, sky, and sun scattering properties with undo transactions.preview_environment_sun_settings- Inspect current fog sun values and preview overrides before committing configuration changes.
preview_patch- Preview a diff before it is appliedapply_patch- Apply a previously previewed diff (requires admin approval)cancel_patch- Discard a pending diff preview
list_permission_escalations- List pending and resolved permission escalation requestsresolve_permission_escalation- Approve or deny a recorded escalation request (requires admin approval)
execute_editor_script- Run arbitrary GDScript in the editor context (requires admin approval)run_godot_headless- Launch the Godot editor binary headlessly and capture combined output for deterministic test runscapture_editor_profile- Gather CPU, rendering, and memory metrics from the active editor sessionmanage_editor_plugins- Enable or disable project addons with optional persistence and structured loggingsnapshot_scene_state- Capture the edited scene tree, node metadata, and key properties for pre-change review
- Animation & VFX (delivered):
edit_animation,configure_animation_tree,bake_skeleton_pose,generate_tween_sequence,sync_particles_with_animation. - Physics & Navigation:
configure_physics_body,link_joint_bodies,rebuild_physics_shapes,profile_physics_step,synchronize_navmesh_with_tilemap. - UI & Interaction:
create_theme_override,configure_input_action_context,wire_signal_handler,layout_ui_grid,validate_accessibility. - Audio & Media:
configure_audio_bus,analyze_waveform,batch_import_audio_assets. - Rendering & Assets (delivered):
generate_material_variant,compile_shader_preview,unwrap_lightmap_uv2,optimize_mesh_lods,configure_environment,preview_environment_sun_settings. - Project & Editor Automation (delivered):
configure_project_setting,run_godot_headless,capture_editor_profile,manage_editor_plugins,snapshot_scene_state.
Every tool is tagged with a required role that indicates the level of trust needed to run it:
- read – Safe, read-only commands that never mutate project state.
- edit – Commands that edit project files or the scene tree under the existing capability allowlist.
- admin – High-risk commands that can execute arbitrary code or bypass guardrails.
The MCP server automatically records an escalation request for any command whose required role is not in the default auto-approved set (currently read and edit). When an escalation is required, the tool returns the escalation identifier along with a suggested natural-language prompt that a human reviewer can use to approve the action. Reviewers can inspect and resolve queued requests via the list_permission_escalations and resolve_permission_escalation tools.
Commands that currently require admin approval include:
apply_patchexecute_editor_scriptresolve_permission_escalation
- Ensure the plugin is enabled in Godot's Project Settings
- Check the Godot console for any error messages
- Verify the server is running when Claude Desktop launches it
- Reload Godot project after any configuration changes
- Check for error messages in the Godot console
- Make sure all paths in your Claude Desktop config are absolute and correct
If you want to use the MCP plugin in your own Godot project:
- Copy the
addons/godot_mcpfolder to your Godot project'saddonsdirectory - Open your project in Godot
- Go to Project > Project Settings > Plugins
- Enable the "Godot MCP" plugin
Contributions are welcome! Please feel free to submit a Pull Request.
For more detailed information, check the documentation in the docs folder:
This project is licensed under the MIT License - see the LICENSE file for details.