Skip to main content
Glama
Godot MCP - Full Control
by cxb2523

Godot MCP - Full Control

Made with Godot

A comprehensive Model Context Protocol (MCP) server that gives AI assistants full control over the Godot game engine. 157 tools spanning networking, 3D/2D rendering, UI controls, audio effects, animation trees, file I/O, runtime code execution, property inspection, scene manipulation, signal management, physics, project creation, and more.

Acknowledgments

This project is built upon and extends godot-mcp by Solomon Elias (Coding-Solo). The original project provided the foundational architecture including the TypeScript MCP server, headless GDScript operations system, and TCP-based runtime interaction server. Thank you for making this possible with your excellent open-source work!

Related MCP server: Godot MCP Bridge

What's New (Improvements Over Original)

The original godot-mcp provided 20 tools for basic project management and scene creation. This fork extends it to 157 tools with the following major additions:

New in 3.1

  • validate_script autoload resolution - Script validation now compiles the target through a SceneTree at _initialize() (after project autoloads are registered) instead of --check-only at _init(). References to autoload singletons no longer produce false Identifier not found errors, while real syntax/type errors are still caught. Verified building a full game whose scripts reference several autoloads.

  • manage_input_map event merging - Adding a second key to an existing input action now merges it into that action's events array (with physical_keycode de-duplication) instead of writing a duplicate actionname= line, which previously left project.godot malformed and silently dropped earlier bindings.

New in 3.0

  • .NET / C# support - Scaffold C# projects and generate C# scripts (create_project with dotnet: true, create_csharp_script); the .csproj SDK version is matched to your installed Godot.

  • GDScript diagnostics - Validate scripts for syntax and type errors without running the game (validate_script, and validate_scripts for all git-changed or project-wide files).

  • Correctness and robustness fixes across the headless scene operations and the runtime interaction server (resource-typed properties now persist, reparenting works, runtime commands are correlated by request id, and the tools survive projects with warnings-as-errors). Requires Godot 4.4 or later; tested and working with the latest Godot 4.7.

Runtime Code Execution

  • game_eval - Execute arbitrary GDScript code in the running game with return values

  • Full await support for async GDScript code

  • Works even when the game is paused (PROCESS_MODE_ALWAYS)

Runtime Node Inspection & Manipulation

  • game_get_property / game_set_property - Read/write any property on any node by path

  • game_call_method - Call any method on any node with arguments

  • game_get_node_info - Full node introspection: properties, signals, methods, children

  • game_instantiate_scene - Dynamically add scenes to the running game

  • game_remove_node - Remove nodes at runtime

  • game_change_scene - Switch scenes at runtime

  • game_reparent_node - Move nodes between parents

Signal System

  • game_connect_signal - Wire up signal connections at runtime

  • game_disconnect_signal - Remove signal connections

  • game_emit_signal - Emit signals with arguments

Animation & Tweening

  • game_play_animation - Control AnimationPlayer (play, stop, pause, list)

  • game_tween_property - Smooth property animation with configurable easing

Game Control & Debugging

  • game_pause - Pause/unpause the game

  • game_performance - FPS, frame time, memory, object counts, draw calls

  • game_wait - Wait N frames (timing-sensitive operations)

  • game_get_nodes_in_group - Query nodes by group

  • game_find_nodes_by_class - Find all nodes of a specific class

Headless Scene Operations (No Running Game Needed)

  • read_scene - Parse any .tscn file and get full node tree with properties as JSON

  • modify_scene_node - Change node properties in scene files

  • remove_scene_node - Remove nodes from scene files

  • attach_script - Attach GDScript files to nodes in scenes

  • create_resource - Create .tres resource files (materials, themes, etc.)

Project Management

  • read_project_settings - Parse project.godot as structured JSON

  • modify_project_settings - Change project settings programmatically

  • list_project_files - List and filter project files by extension

File I/O

  • read_file / write_file / delete_file - Full file system access within Godot projects

  • create_directory - Create directory structures for scripts, scenes, assets

Error & Log Capture

  • game_get_errors - Get new push_error/push_warning messages since last call

  • game_get_logs - Get new print output from the running game since last call

Enhanced Input

  • game_key_hold / game_key_release - Hold keys down for movement testing (WASD etc.)

  • game_scroll - Mouse scroll wheel events

  • game_mouse_drag - Drag between two points over multiple frames

  • game_gamepad - Gamepad button and axis input events

Project Creation & Configuration

  • create_project - Create a new Godot project from scratch (pass dotnet: true to scaffold a .NET/C# project)

  • create_csharp_script - Create a C# script in a Godot .NET project

  • manage_autoloads - Add, remove, or list autoloads

  • manage_input_map - Add, remove, or list input actions and key bindings

  • manage_export_presets - Create or modify export preset configuration

.NET / C# Support

  • create_project with dotnet: true - Scaffold a Godot .NET project (.csproj with Godot.NET.Sdk matched to your Godot version, plus the "C#" feature flag)

  • create_csharp_script - Generate an idiomatic C# script (partial class, correct _Ready/_Process override signatures); the class name is kept in sync with the file name so Godot can attach it

  • get_project_info reports an isDotnet field

GDScript Diagnostics

  • validate_script - Check a single GDScript file for syntax and type errors headlessly, returning { valid, errors: [{ message, file, line }] }

  • validate_scripts - Batch-validate all git-changed .gd files (or the whole project), so an agent can verify its edits before running the game

Camera, Physics & Audio

  • game_get_camera / game_set_camera - Query and control 2D/3D cameras

  • game_raycast - Cast physics rays (auto-detects 2D vs 3D)

  • game_get_audio - Get audio bus layout and playing streams

  • game_spawn_node - Create any node type at runtime with properties

  • game_set_shader_param - Set shader parameters on materials

  • game_audio_play / game_audio_bus - Full audio playback and bus control

  • game_navigate_path - Query navigation paths (2D/3D)

  • game_tilemap - Get/set TileMapLayer cells

  • game_add_collision - Add collision shapes to physics bodies

  • game_environment - Configure post-processing (fog, glow, SSAO, tonemap, etc.)

  • game_manage_group - Add/remove nodes from groups

  • game_create_timer - Create timer nodes programmatically

  • game_set_particles - Configure GPUParticles2D/3D properties and process materials

  • game_create_animation - Create animations with value/method/bezier/audio tracks and keyframes

  • export_project - Trigger headless project export builds (CI/CD ready)

  • game_serialize_state - Save/load entire node tree state as JSON

  • game_physics_body - Configure mass, velocity, damping, friction, bounce

  • game_create_joint - Create physics joints (pin, spring, hinge, cone, slider)

  • game_bone_pose - Get/set skeleton bone poses for character animation

  • game_ui_theme - Apply color, constant, and font size theme overrides

  • game_viewport - Create/configure SubViewport nodes

  • game_debug_draw - Draw debug geometry (lines, spheres, boxes)

Networking

  • game_http_request - HTTP GET/POST/PUT/DELETE with headers and body

  • game_websocket - WebSocket client connect/disconnect/send messages

  • game_multiplayer - ENet multiplayer create server/client/disconnect

  • game_rpc - Call or configure RPC methods on nodes

System & Window Control

  • game_script - Attach, detach, or get source of node scripts at runtime

  • game_window - Get/set window size, fullscreen, title, position

  • game_os_info - Get platform, locale, screen, adapter, memory info

  • game_time_scale - Get/set Engine.time_scale and timing info

  • game_process_mode - Set node process mode (pausable/always/disabled)

  • game_world_settings - Get/set gravity, physics FPS, and world settings

Advanced Signals & Input

  • game_list_signals - List all signals on a node with connections

  • game_await_signal - Await a signal with timeout and return args

  • game_touch - Simulate touch press/release/drag and gestures

  • game_input_state - Query pressed keys, mouse position, connected pads

  • game_input_action - Manage runtime InputMap actions and strength

3D Rendering & Geometry

  • game_csg - Create/configure CSG nodes with boolean operations

  • game_multimesh - Create/configure MultiMeshInstance3D for instancing

  • game_procedural_mesh - Generate meshes via ArrayMesh from vertex data

  • game_light_3d - Create/configure 3D lights (directional/omni/spot)

  • game_mesh_instance - Create MeshInstance3D with primitive meshes

  • game_gridmap - GridMap set/get/clear cells and query used cells

  • game_3d_effects - Create ReflectionProbe, Decal, or FogVolume

  • game_gi - Create/configure VoxelGI or LightmapGI

  • game_path_3d - Create Path3D/Curve3D and manage curve points

  • game_sky - Create/configure Sky with procedural/physical sky

  • game_camera_attributes - Configure DOF, exposure, auto-exposure on camera

  • game_navigation_3d - Create/configure NavigationRegion3D and bake

  • game_physics_3d - Area3D queries and point/shape intersection tests

2D Systems

  • game_canvas - Create/configure CanvasLayer and CanvasModulate

  • game_canvas_draw - 2D drawing: line/rect/circle/polygon/text/clear

  • game_light_2d - Create/configure 2D lights and light occluders

  • game_parallax - Create/configure ParallaxBackground and layers

  • game_shape_2d - Line2D/Polygon2D point manipulation

  • game_path_2d - Path2D/Curve2D management and AnimatedSprite2D

  • game_physics_2d - Area2D queries and 2D point/shape intersections

Advanced Animation

  • game_animation_tree - AnimationTree state machine travel and params

  • game_animation_control - AnimationPlayer seek/queue/speed/info control

  • game_skeleton_ik - SkeletonIK3D start/stop/set target position

Advanced Audio

  • game_audio_effect - Add/remove/configure audio bus effects

  • game_audio_bus_layout - Create/remove/reorder audio buses and routing

  • game_audio_spatial - Configure AudioStreamPlayer3D spatial properties

Editor & Project Tools

  • rename_file - Rename or move a file within the project

  • manage_resource - Read or modify .tres/.res resource files

  • create_script - Create a GDScript file from a template

  • validate_script - Check a GDScript file for syntax/type errors headlessly (no run needed)

  • validate_scripts - Batch-check GDScript files: git-changed ones by default, or all

  • manage_scene_signals - List/add/remove signal connections in .tscn files

  • manage_layers - List/set named layer definitions in project

  • manage_plugins - List/enable/disable editor plugins

  • manage_shader - Create or read .gdshader files

  • manage_theme_resource - Create/read/modify Theme .tres resources

  • set_main_scene - Set the main scene in project.godot

  • manage_scene_structure - Rename/duplicate/move nodes within .tscn scenes

  • manage_translations - List/add/remove translation files in project

  • game_locale - Set/get locale and translate strings at runtime

UI Controls

  • game_ui_control - Set focus, anchors, tooltip, mouse filter on Control

  • game_ui_text - LineEdit/TextEdit/RichTextLabel text operations

  • game_ui_popup - Show/hide/popup for Popup/Dialog/Window nodes

  • game_ui_tree - Tree control: get/select/collapse/add/remove items

  • game_ui_item_list - ItemList/OptionButton: get/select/add/remove items

  • game_ui_tabs - TabContainer/TabBar: get/set current tab

  • game_ui_menu - PopupMenu/MenuBar: add/remove/get menu items

  • game_ui_range - ProgressBar/Slider/SpinBox/ColorPicker get/set

Rendering & Resources

  • game_render_settings - Get/set MSAA, FXAA, TAA, scaling mode/scale

  • game_resource - Runtime resource load, save, or preload

Robustness Improvements

  • Reentrancy guard - Prevents concurrent command processing during async operations

  • Full type conversion - Supports Vector2/3, Color, Quaternion, Basis, Transform2D/3D, AABB, Rect2, and all packed array types

  • Smart property type detection - Uses node's get_property_list() for automatic type conversion

  • PackedArray serialization - Proper JSON arrays instead of string fallback

  • Graceful error handling - Scene read fallback to raw .tscn text on missing dependencies

All 157 Tools

Project Management (7 tools)

Tool

Description

launch_editor

Launch Godot editor for a project

run_project

Run a Godot project and capture output

stop_project

Stop the running project

get_debug_output

Get console output and errors

get_godot_version

Get installed Godot version

list_projects

Find Godot projects in a directory

get_project_info

Get project metadata

Scene Management (7 tools)

Tool

Description

create_scene

Create a new scene with a root node type

add_node

Add a node to an existing scene

load_sprite

Load a texture into a Sprite2D node

export_mesh_library

Export a scene as MeshLibrary

save_scene

Save a scene (with optional variant path)

get_uid

Get UID for a file (Godot 4.4+)

update_project_uids

Resave resources to update UIDs

Headless Scene Operations (5 tools)

Tool

Description

read_scene

Read full scene tree as JSON

modify_scene_node

Modify node properties in a scene file

remove_scene_node

Remove a node from a scene file

attach_script

Attach a GDScript to a scene node

create_resource

Create a .tres resource file

Project Settings (3 tools)

Tool

Description

read_project_settings

Parse project.godot as JSON

modify_project_settings

Change a project setting

list_project_files

List/filter project files

Runtime Input (4 tools)

Tool

Description

game_screenshot

Capture a screenshot (base64 PNG)

game_click

Click at a position

game_key_press

Send key press or input action

game_mouse_move

Move the mouse

Runtime Inspection (3 tools)

Tool

Description

game_get_ui

Get all visible UI elements

game_get_scene_tree

Get full scene tree structure

game_get_node_info

Detailed node introspection

Runtime Code Execution (1 tool)

Tool

Description

game_eval

Execute arbitrary GDScript with return values

Runtime Node Manipulation (7 tools)

Tool

Description

game_get_property

Get any node property

game_set_property

Set any node property (auto type conversion)

game_call_method

Call any method on a node

game_instantiate_scene

Add a PackedScene to the running tree

game_remove_node

Remove a node from the tree

game_change_scene

Switch to a different scene

game_reparent_node

Move a node to a new parent

Runtime Signals (5 tools)

Tool

Description

game_connect_signal

Connect a signal to a method

game_disconnect_signal

Disconnect a signal

game_emit_signal

Emit a signal with arguments

game_list_signals

List all signals on a node with connections

game_await_signal

Await a signal with timeout and return args

Runtime Animation (2 tools)

Tool

Description

game_play_animation

Control AnimationPlayer

game_tween_property

Tween a property with easing

Runtime Utilities (5 tools)

Tool

Description

game_pause

Pause/unpause the game

game_performance

Get FPS, memory, draw calls

game_wait

Wait N frames

game_get_nodes_in_group

Query nodes by group

game_find_nodes_by_class

Find nodes by class type

File I/O (4 tools)

Tool

Description

read_file

Read a text file from a Godot project

write_file

Create or overwrite a text file

delete_file

Delete a file from a project

create_directory

Create a directory inside a project

Error & Log Capture (2 tools)

Tool

Description

game_get_errors

Get new errors/warnings since last call

game_get_logs

Get new print output since last call

Enhanced Input (8 tools)

Tool

Description

game_key_hold

Hold a key down (no auto-release)

game_key_release

Release a held key

game_scroll

Mouse scroll wheel event

game_mouse_drag

Drag between two points over N frames

game_gamepad

Gamepad button or axis input

game_touch

Simulate touch press/release/drag and gestures

game_input_state

Query pressed keys, mouse position, connected pads

game_input_action

Manage runtime InputMap actions and strength

Project Creation (5 tools)

Tool

Description

create_project

Create a new Godot project (supports dotnet: true for C#)

create_csharp_script

Create a C# script in a Godot .NET project

manage_autoloads

Add, remove, or list autoloads

manage_input_map

Add, remove, or list input actions

manage_export_presets

Create or modify export presets

Advanced Runtime (24 tools)

Tool

Description

game_get_camera

Get active camera position/rotation/zoom

game_set_camera

Move or rotate the active camera

game_raycast

Cast a ray and return collision results

game_get_audio

Get audio bus layout and playing streams

game_spawn_node

Create a new node of any type at runtime

game_set_shader_param

Set a shader parameter on a node's material

game_audio_play

Play, stop, or pause an AudioStreamPlayer node

game_audio_bus

Set volume, mute, or solo on an audio bus

game_navigate_path

Query a navigation path between two points

game_tilemap

Get or set cells in a TileMapLayer node

game_add_collision

Add a collision shape to a physics body node

game_environment

Get or set environment and post-processing settings

game_manage_group

Add or remove a node from a group, or list groups

game_create_timer

Create a Timer node with configuration

game_set_particles

Configure GPUParticles2D/3D node properties

game_create_animation

Create an animation with tracks and keyframes

game_serialize_state

Save or load node tree state as JSON

game_physics_body

Configure physics body properties (mass, velocity)

game_create_joint

Create a physics joint between two bodies

game_bone_pose

Get or set bone poses on a Skeleton3D node

game_ui_theme

Apply theme overrides to a Control node

game_viewport

Create or configure a SubViewport node

game_debug_draw

Draw debug lines, spheres, or boxes in 3D

Build & Export (1 tool)

Tool

Description

export_project

Export a Godot project using a preset

Networking (4 tools)

Tool

Description

game_http_request

HTTP GET/POST/PUT/DELETE with headers and body

game_websocket

WebSocket client connect/disconnect/send messages

game_multiplayer

ENet multiplayer create server/client/disconnect

game_rpc

Call or configure RPC methods on nodes

System & Window (6 tools)

Tool

Description

game_script

Attach, detach, or get source of node scripts

game_window

Get/set window size, fullscreen, title, position

game_os_info

Get platform, locale, screen, adapter, memory info

game_time_scale

Get/set Engine.time_scale and timing info

game_process_mode

Set node process mode (pausable/always/disabled)

game_world_settings

Get/set gravity, physics FPS, and world settings

3D Rendering & Geometry (13 tools)

Tool

Description

game_csg

Create/configure CSG nodes with boolean operations

game_multimesh

Create/configure MultiMeshInstance3D for instancing

game_procedural_mesh

Generate meshes via ArrayMesh from vertex data

game_light_3d

Create/configure 3D lights (directional/omni/spot)

game_mesh_instance

Create MeshInstance3D with primitive meshes

game_gridmap

GridMap set/get/clear cells and query used cells

game_3d_effects

Create ReflectionProbe, Decal, or FogVolume

game_gi

Create/configure VoxelGI or LightmapGI

game_path_3d

Create Path3D/Curve3D and manage curve points

game_sky

Create/configure Sky with procedural/physical sky

game_camera_attributes

Configure DOF, exposure, auto-exposure on camera

game_navigation_3d

Create/configure NavigationRegion3D and bake

game_physics_3d

Area3D queries and point/shape intersection tests

2D Systems (7 tools)

Tool

Description

game_canvas

Create/configure CanvasLayer and CanvasModulate

game_canvas_draw

2D drawing: line/rect/circle/polygon/text/clear

game_light_2d

Create/configure 2D lights and light occluders

game_parallax

Create/configure ParallaxBackground and layers

game_shape_2d

Line2D/Polygon2D point manipulation

game_path_2d

Path2D/Curve2D management and AnimatedSprite2D

game_physics_2d

Area2D queries and 2D point/shape intersections

Advanced Animation (3 tools)

Tool

Description

game_animation_tree

AnimationTree state machine travel and params

game_animation_control

AnimationPlayer seek/queue/speed/info control

game_skeleton_ik

SkeletonIK3D start/stop/set target position

Advanced Audio (3 tools)

Tool

Description

game_audio_effect

Add/remove/configure audio bus effects

game_audio_bus_layout

Create/remove/reorder audio buses and routing

game_audio_spatial

Configure AudioStreamPlayer3D spatial properties

Editor & Project Tools (14 tools)

Tool

Description

rename_file

Rename or move a file within the project

manage_resource

Read or modify .tres/.res resource files

create_script

Create a GDScript file from a template

validate_script

Check a GDScript file for syntax/type errors (headless)

validate_scripts

Batch-check GDScript files (git-changed by default, or all)

manage_scene_signals

List/add/remove signal connections in .tscn files

manage_layers

List/set named layer definitions in project

manage_plugins

List/enable/disable editor plugins

manage_shader

Create or read .gdshader files

manage_theme_resource

Create/read/modify Theme .tres resources

set_main_scene

Set the main scene in project.godot

manage_scene_structure

Rename/duplicate/move nodes within .tscn scenes

manage_translations

List/add/remove translation files in project

game_locale

Set/get locale and translate strings at runtime

UI Controls (8 tools)

Tool

Description

game_ui_control

Set focus, anchors, tooltip, mouse filter on Control

game_ui_text

LineEdit/TextEdit/RichTextLabel text operations

game_ui_popup

Show/hide/popup for Popup/Dialog/Window nodes

game_ui_tree

Tree control: get/select/collapse/add/remove items

game_ui_item_list

ItemList/OptionButton: get/select/add/remove items

game_ui_tabs

TabContainer/TabBar: get/set current tab

game_ui_menu

PopupMenu/MenuBar: add/remove/get menu items

game_ui_range

ProgressBar/Slider/SpinBox/ColorPicker get/set

Rendering & Resources (2 tools)

Tool

Description

game_render_settings

Get/set MSAA, FXAA, TAA, scaling mode/scale

game_resource

Runtime resource load, save, or preload

Requirements

  • Godot Engine 4.4 or later (the headless operations script and UID features require 4.4+); tested and working with the latest Godot 4.7

  • (Optional) .NET SDK 8.0+ and the Godot .NET (C#) build, only if you use create_project's dotnet: true flag or create_csharp_script

  • Node.js >= 18.0.0

  • An AI assistant that supports MCP (Claude Code, Cline, Cursor, etc.)

Installation

git clone https://github.com/tugcantopaloglu/godot-mcp.git
cd godot-mcp
npm install
npm run build

Configuration

Claude Code

Add to your Claude Code MCP settings:

{
  "mcpServers": {
    "godot": {
      "command": "node",
      "args": ["/absolute/path/to/godot-mcp/build/index.js"],
      "env": {
        "GODOT_PATH": "/path/to/godot",
        "DEBUG": "true"
      }
    }
  }
}

Cline (VS Code)

Add to your Cline MCP settings (cline_mcp_settings.json):

{
  "mcpServers": {
    "godot": {
      "command": "node",
      "args": ["/absolute/path/to/godot-mcp/build/index.js"],
      "disabled": false
    }
  }
}

Cursor

Create .cursor/mcp.json in your project:

{
  "mcpServers": {
    "godot": {
      "command": "node",
      "args": ["/absolute/path/to/godot-mcp/build/index.js"]
    }
  }
}

Runtime Tools Setup

To use the game_* runtime tools, your Godot project needs the MCP interaction server autoload. Copy build/scripts/mcp_interaction_server.gd to your project and register it as an autoload:

  1. Copy build/scripts/mcp_interaction_server.gd to your project's scripts folder

  2. In Godot: Project > Project Settings > Autoload

  3. Add the script with the name McpInteractionServer

The server listens on 127.0.0.1:9090 and accepts JSON commands over TCP when the game is running.

Environment Variables

Variable

Description

GODOT_PATH

Path to the Godot executable (overrides auto-detection)

DEBUG

Set to "true" for detailed server-side logging

GODOT_MCP_ALLOWED_DIRS

Optional. Restrict all project tools, project discovery and export destinations to these roots. Use ; or , on Windows, and : or , on other systems. Existing symbolic links are resolved before checking access. When unset, any project root is allowed.

File and scene paths must stay within their project directory, including paths under symbolic links. These checks cover MCP tool arguments. Runtime evaluation and generated scripts run with the Godot process account's permissions, so use a separate account or container when executing untrusted code.

Runtime log retention

game_get_logs and game_get_errors accept optional cursor and limit arguments. The default page size is 200 lines, with a maximum of 500. Responses include nextCursor, hasMore and dropped. Pass nextCursor back to continue from the same position. Calls without a cursor continue from the previous call. Each stream retains the newest 2,000 lines, with at most 4,096 characters per line. If a cursor predates retained output, dropped is true. get_debug_output returns the retained streams and their starting offsets.

Contributor validation

Development and CI require Node.js 22.12 or later. The server runtime requirement remains the version specified in package.json.

npm ci
npm test
npm audit --audit-level=moderate

CI runs on Node.js 22 and 24 without publishing packages or deploying services. npm test builds the server first so executable-entry tests use current code. Tests include real MCP requests over the SDK's in-memory transport, filesystem boundary checks, symbolic link escapes, project scaffolding, schema validation and cursor pagination. Running an actual Godot project remains an integration check that requires an installed engine. Set GODOT_SMOKE_PATH to the full path of its console executable to enable the temporary-project headless smoke test. It creates a project, creates and edits a scene, reads it through MCP, and saves a second scene. The test removes its temporary files afterward.

Architecture

The server uses two communication channels:

  1. Headless CLI - For operations that don't need a running game (scene reading, modification, resource creation). Runs Godot with --headless --script godot_operations.gd <operation> <json_params>.

  2. TCP Socket - For runtime interaction with a running game. The mcp_interaction_server.gd autoload listens on port 9090 and processes JSON commands sent by the TypeScript MCP server.

Source layout

Path

Description

src/index.ts

MCP server, tool definitions, and all handlers

src/utils.ts

Pure utility functions (parameter mapping, validation, error helpers)

src/scripts/godot_operations.gd

Headless GDScript operations runner

src/scripts/mcp_interaction_server.gd

TCP interaction server autoload

tests/

Vitest test suite

Testing

The project uses Vitest with 446 tests across 5 files:

File

Tests

What it covers

tests/utils.test.ts

31

Parameter mappings, normalization, path validation, error responses, version detection

tests/tool-definitions.test.ts

163

All 155 tools defined, schemas valid, names unique, descriptions < 80 chars

tests/handlers.test.ts

225

Game command arg transforms, required-param validation, headless op path checks, source structure

tests/dotnet.test.ts

20

.NET feature flag, .csproj generation, C# script template generation, identifier validation

tests/validate-script.test.ts

12

GDScript diagnostic parsing + git-changed file collection

npm test          # run once
npm run test:watch  # watch mode

Example Prompts

"Run my Godot project and check for errors"

"Eval this in my running game: return get_tree().current_scene.name"

"Get the player's position in the running game"

"Set the player's health to 100"

"Read the test_level.tscn scene and show me the node tree"

"Change the player's speed property in the player.tscn scene file"

"List all .gd files in my project"

"Connect the enemy's 'died' signal to the game manager's 'on_enemy_died' method"

"Tween the camera's position to (0, 10, -5) over 2 seconds with ease-out"

"Get performance metrics - what's my FPS and draw call count?"

"Pause the game and take a screenshot"

"Find all CharacterBody3D nodes in the scene"

"Create a new Godot project called 'MyGame' and write a player script"

"Create a new C# (.NET) Godot project and add a CharacterBody2D script"

"Validate player.gd for errors"

"Check all my changed GDScript files for syntax errors before I run the game"

"Hold down the W key for 2 seconds to test walking"

"Cast a ray from the player downward to check for ground"

"Get the camera position and move it to look at the player"

"Show me the latest error messages from the running game"

License

This project is licensed under the MIT License - see the LICENSE file for details.

Credits

  • Original project: godot-mcp by Solomon Elias (Coding-Solo) - provided the foundational MCP server architecture, headless operations system, and TCP interaction framework

  • Extended by: Tugcan Topaloglu - extended to 157 tools covering networking, 3D/2D rendering, UI controls, audio effects, animation trees, file I/O, runtime code execution, node manipulation, signals, project creation, camera control, physics, and comprehensive type conversion

Available Tools

157 tools
add_nodeC

Add a node to an existing scene

Inputs: nodeName (required), nodeType (required), scenePath (required), projectPath (required), +2 more.

attach_scriptB

Attach a GDScript to a scene node (headless)

Inputs: nodePath (required), scenePath (required), scriptPath (required), projectPath (required).

create_csharp_scriptA

Create a C# script file in a Godot .NET project

Inputs: scriptPath (required), projectPath (required), source, methods, +3 more.

create_directoryC

Create a directory inside a Godot project

Inputs: projectPath (required), directoryPath (required).

create_projectB

Create a new Godot project from scratch

Inputs: projectName (required), projectPath (required), dotnet.

create_resourceB

Create a .tres resource file (headless)

Inputs: projectPath (required), resourcePath (required), resourceType (required), properties.

create_sceneC

Create a new Godot scene file

Inputs: scenePath (required), projectPath (required), rootNodeType.

create_scriptC

Create a GDScript file from a template

Inputs: scriptPath (required), projectPath (required), source, extends, +2 more.

delete_fileB

Delete a file from a Godot project

Inputs: filePath (required), projectPath (required).

export_mesh_libraryB

Export a scene as a MeshLibrary resource

Inputs: scenePath (required), outputPath (required), projectPath (required), meshItemNames.

export_projectC

Export a Godot project using a preset

Inputs: outputPath (required), presetName (required), projectPath (required), debug.

game_3d_effectsB

Create ReflectionProbe, Decal, or FogVolume

Inputs: effectType (required), parentPath (required), name, size, +1 more.

game_add_collisionC

Add a collision shape to a physics body node

Inputs: shapeType (required), parentPath (required), disabled, shapeParams, +2 more.

game_animation_controlC

AnimationPlayer seek/queue/speed/info control

Inputs: action (required), nodePath (required), speed, position, +1 more.

game_animation_treeC

AnimationTree state machine travel and params

Inputs: action (required), nodePath (required), paramName, stateName, +1 more.

game_audio_busB

Set volume, mute, or solo on an audio bus

Inputs: mute, solo, volume, busName.

game_audio_bus_layoutC

Create/remove audio buses and routing

Inputs: action (required), sendTo, busName.

game_audio_effectC

Add/remove/configure audio bus effects

Inputs: action (required), index, busName, enabled, +2 more.

game_audio_playC

Play, stop, or pause an AudioStreamPlayer node

Inputs: nodePath (required), bus, pitch, action, +3 more.

game_audio_spatialC

Configure AudioStreamPlayer3D spatial properties

Inputs: action (required), nodePath (required), maxDb, unitSize, +2 more.

game_await_signalC

Await a signal with timeout and return args

Inputs: nodePath (required), signalName (required), timeout.

game_bone_poseB

Get or set bone poses on a Skeleton3D node

Inputs: nodePath (required), scale, action, boneName, +3 more.

game_call_methodC

Call a method on any node in the running game with optional arguments

Inputs: method (required), nodePath (required), args.

game_camera_attributesB

Configure DOF, exposure, auto-exposure on camera

Inputs: action, dofBlurFar, dofBlurNear, autoExposure, +3 more.

game_canvasC

Create/configure CanvasLayer and CanvasModulate

Inputs: action (required), name, color, layer, +4 more.

game_canvas_drawC

2D drawing: line/rect/circle/polygon/text/clear

Inputs: action (required), to, from, rect, +10 more.

game_change_sceneA

Switch to a different scene file in the running game

Inputs: scenePath (required).

game_clickA

Click at a position in the running Godot game window

Inputs: x (required), y (required), button.

game_connect_signalB

Connect a signal from one node to a method on another node in the running game

Inputs: method (required), nodePath (required), signalName (required), targetPath (required).

game_create_animationC

Create an animation with tracks and keyframes

Inputs: nodePath (required), animationName (required), length, tracks, +2 more.

game_create_jointC

Create a physics joint between two bodies

Inputs: jointType (required), parentPath (required), length, damping, +4 more.

game_create_timerC

Create a Timer node with configuration

Inputs: name, oneShot, waitTime, autostart, +1 more.

game_csgC

Create/configure CSG nodes with boolean operations

Inputs: action (required), name, size, height, +6 more.

game_debug_drawB

Draw debug lines, spheres, or boxes in 3D

Inputs: action (required), to, from, size, +4 more.

game_disconnect_signalB

Disconnect a signal connection in the running game

Inputs: method (required), nodePath (required), signalName (required), targetPath (required).

game_emit_signalC

Emit a signal on a node in the running game, optionally with arguments

Inputs: nodePath (required), signalName (required), args.

game_environmentC

Get or set environment and post-processing settings

Inputs: action, contrast, glowBloom, brightness, +15 more.

game_evalC

Execute GDScript in the running game. Use "return" for values.

Inputs: code (required).

game_find_nodes_by_classB

Find all nodes of a specific class type in the running game

Inputs: className (required), rootPath.

game_gamepadA

Send gamepad button or axis input event

Inputs: type (required), index (required), value (required), device.

game_get_audioB

Get audio bus layout and playing streams

Inputs: no named parameters.

game_get_cameraA

Get active camera position, rotation, and size

Inputs: no named parameters.

game_get_errorsB

Get new push_error/push_warning messages since last call

Inputs: limit, cursor.

game_get_logsA

Get new print output from the running game since last call

Inputs: limit, cursor.

game_get_node_infoB

Get node info: class, properties, signals, methods, children

Inputs: nodePath (required).

game_get_nodes_in_groupA

Get all nodes belonging to a specific group in the running game

Inputs: group (required).

game_get_propertyB

Get a property value from any node in the running game by its path

Inputs: nodePath (required), property (required).

game_get_scene_treeB

Get scene tree structure of the running game

Inputs: no named parameters.

game_get_uiB

Get visible UI elements from the running game

Inputs: no named parameters.

game_giB

Create/configure VoxelGI or LightmapGI

Inputs: giType (required), parentPath (required), name, size.

game_gridmapC

GridMap set/get/clear cells and query used cells

Inputs: action (required), nodePath (required), x, y, +3 more.

game_http_requestB

HTTP GET/POST/PUT/DELETE with headers and body

Inputs: url (required), body, method, headers, +1 more.

game_input_actionC

Manage runtime InputMap actions and strength

Inputs: action (required), key, strength, actionName.

game_input_stateC

Query pressed keys, mouse position, connected pads

Inputs: x, y, action, mouseMode.

game_instantiate_sceneA

Load a PackedScene and add it as a child of a node in the running game

Inputs: scenePath (required), parentPath.

game_key_holdA

Hold a key down without auto-releasing

Inputs: key, action.

game_key_pressC

Send a key press or input action to the running game

Inputs: key, action, pressed.

game_key_releaseA

Release a previously held key

Inputs: key, action.

game_light_2dC

Create/configure 2D lights and light occluders

Inputs: action (required), name, color, range, +4 more.

game_light_3dB

Create/configure 3D lights (directional/omni/spot)

Inputs: action (required), name, color, range, +6 more.

game_list_signalsC

List all signals on a node with connections

Inputs: nodePath (required).

game_localeB

Set/get locale and translate strings at runtime

Inputs: action (required), key, locale.

game_manage_groupC

Add or remove a node from a group, or list groups

Inputs: action (required), group, nodePath.

game_mesh_instanceC

Create MeshInstance3D with primitive meshes

Inputs: meshType (required), parentPath (required), name, size, +3 more.

game_mouse_dragC

Drag mouse between two points over N frames

Inputs: toX (required), toY (required), fromX (required), fromY (required), +2 more.

game_mouse_moveB

Move the mouse in the running Godot game

Inputs: x (required), y (required), relative_x, relative_y.

game_multimeshB

Create/configure MultiMeshInstance3D for instancing

Inputs: action (required), name, count, index, +4 more.

game_multiplayerC

ENet multiplayer create server/client/disconnect

Inputs: action (required), port, address, maxClients.

game_navigate_pathC

Query a navigation path between two points

Inputs: end (required), start (required), optimize.

game_navigation_3dB

Create/configure NavigationRegion3D and bake

Inputs: action (required), name, cellSize, nodePath, +3 more.

game_os_infoA

Get platform, locale, screen, adapter, memory info

Inputs: no named parameters.

game_parallaxB

Create/configure ParallaxBackground and layers

Inputs: action (required), name, nodePath, mirroring, +5 more.

game_path_2dD

Path2D/Curve2D management and AnimatedSprite2D

Inputs: action (required), name, point, points, +2 more.

game_path_3dC

Create Path3D/Curve3D and manage curve points

Inputs: action (required), name, point, points, +2 more.

game_pauseB

Pause or unpause the running game

Inputs: paused.

game_performanceA

Get performance metrics (FPS, memory, draw calls)

Inputs: no named parameters.

game_physics_2dB

Area2D queries and 2D point/shape intersections

Inputs: action (required), to, from, size, +6 more.

game_physics_3dC

Area3D queries and point/shape intersection tests

Inputs: action (required), to, from, nodePath, +1 more.

game_physics_bodyC

Configure physics body properties (mass, velocity, etc.)

Inputs: nodePath (required), mass, bounce, freeze, +7 more.

game_play_animationB

Control an AnimationPlayer node: play, stop, pause, or list animations

Inputs: nodePath (required), action, animation.

game_procedural_meshC

Generate meshes via ArrayMesh from vertex data

Inputs: vertices (required), parentPath (required), uvs, name, +2 more.

game_process_modeC

Set node process mode (pausable/always/disabled)

Inputs: mode (required), nodePath (required).

game_raycastB

Cast a ray and return collision results

Inputs: to (required), from (required), collisionMask.

game_remove_nodeB

Remove and free a node from the running game's scene tree

Inputs: nodePath (required).

game_render_settingsC

Get/set MSAA, FXAA, TAA, scaling mode/scale

Inputs: taa, fxaa, action, msaa2d, +3 more.

game_reparent_nodeA

Move a node to a new parent in the running game's scene tree

Inputs: nodePath (required), newParentPath (required), keepGlobalTransform.

game_resourceC

Runtime resource load, save, or preload

Inputs: path (required), action (required), nodePath, property.

game_rpcC

Call or configure RPC methods on nodes

Inputs: action (required), method (required), nodePath (required), args, +3 more.

game_screenshotA

Screenshot the running game (returns base64 PNG)

Inputs: no named parameters.

game_scriptC

Attach, detach, or get source of node scripts

Inputs: action (required), nodePath (required), source, className.

game_scrollC

Send mouse scroll wheel event at position

Inputs: x (required), y (required), amount, direction.

game_serialize_stateC

Save or load node tree state as JSON

Inputs: data, action, maxDepth, nodePath.

game_set_cameraC

Move or rotate the active camera

Inputs: fov, zoom, position, rotation.

game_set_particlesC

Configure GPUParticles2D/3D node properties

Inputs: nodePath (required), amount, oneShot, emitting, +5 more.

game_set_propertyC

Set a property on a node in the running game

Inputs: value (required), nodePath (required), property (required), typeHint.

game_set_shader_paramC

Set a shader parameter on a node's material

Inputs: value (required), nodePath (required), paramName (required), typeHint.

game_shape_2dC

Line2D/Polygon2D point manipulation

Inputs: action (required), nodePath (required), color, point, +2 more.

game_skeleton_ikC

SkeletonIK3D start/stop/set target position

Inputs: action (required), nodePath (required), target.

game_skyC

Create/configure Sky with procedural/physical sky

Inputs: action (required), skyType, topColor, sunEnergy, +2 more.

game_spawn_nodeB

Create a new node of any type at runtime

Inputs: type (required), name, parentPath, properties.

game_terrainC

Create/modify terrain meshes from heightmap data

Inputs: action (required), x, z, name, +9 more.

game_tilemapC

Get or set cells in a TileMapLayer node

Inputs: action (required), nodePath (required), x, y, +2 more.

game_time_scaleC

Get/set Engine.time_scale and timing info

Inputs: action, timeScale.

game_touchC

Simulate touch press/release/drag and gestures

Inputs: x (required), y (required), action (required), toX, +3 more.

game_tween_propertyC

Tween a node property in the running game

Inputs: nodePath (required), property (required), finalValue (required), duration, +2 more.

game_ui_controlB

Set focus, anchors, tooltip, mouse filter on Control

Inputs: action (required), nodePath (required), minSize, tooltip, +2 more.

game_ui_item_listB

ItemList/OptionButton: get/select/add/remove items

Inputs: action (required), nodePath (required), text, index.

game_ui_menuC

PopupMenu/MenuBar: add/remove/get menu items

Inputs: action (required), nodePath (required), id, text, +2 more.

game_ui_popupB

Show/hide/popup for Popup/Dialog/Window nodes

Inputs: action (required), nodePath (required), size, text, +1 more.

game_ui_rangeC

ProgressBar/Slider/SpinBox/ColorPicker get/set

Inputs: action (required), nodePath (required), step, color, +3 more.

game_ui_tabsC

TabContainer/TabBar: get/set current tab

Inputs: action (required), nodePath (required), index, title.

game_ui_textB

LineEdit/TextEdit/RichTextLabel text operations

Inputs: action (required), nodePath (required), text, selectionTo, +2 more.

game_ui_themeC

Apply theme overrides to a Control node

Inputs: nodePath (required), overrides (required).

game_ui_treeB

Tree control: get/select/collapse/add/remove items

Inputs: action (required), nodePath (required), text, column, +1 more.

game_videoB

Video playback control: play, pause, stop, seek on VideoStreamPlayer

Inputs: action (required), loop, name, volume, +5 more.

game_viewportC

Create or configure a SubViewport node

Inputs: msaa, name, width, action, +4 more.

game_visual_shaderC

Create and edit VisualShader graphs: add/connect/disconnect nodes

Inputs: action (required), toNode, toPort, fromNode, +6 more.

game_waitB

Wait N frames in the running game

Inputs: frames, frameType.

game_websocketC

WebSocket client connect/disconnect/send messages

Inputs: action (required), url, message.

game_windowC

Get/set window size, fullscreen, title, position

Inputs: title, vsync, width, action, +4 more.

game_world_settingsC

Get/set gravity, physics FPS, and world settings

Inputs: action, gravity, physicsFps, gravityDirection.

get_debug_outputB

Get the current debug output and errors

Inputs: no named parameters.

get_godot_versionA

Get the installed Godot version

Inputs: no named parameters.

get_project_infoC

Retrieve metadata about a Godot project

Inputs: projectPath (required).

get_uidB

Get the UID for a specific file in a Godot project (for Godot 4.4+)

Inputs: filePath (required), projectPath (required).

launch_editorB

Launch Godot editor for a specific project

Inputs: projectPath (required).

list_project_filesB

List project files, optionally filtered by extension

Inputs: projectPath (required), extensions, subdirectory.

list_projectsA

List Godot projects in a directory

Inputs: directory (required), recursive.

load_spriteC

Load a sprite into a Sprite2D node

Inputs: nodePath (required), scenePath (required), projectPath (required), texturePath (required).

manage_autoloadsB

Add, remove, or list autoloads in a Godot project

Inputs: action (required), projectPath (required), name, path.

manage_ci_pipelineB

Create/read GitHub Actions workflow for automated Godot exports

Inputs: action (required), projectPath (required), platforms, godotVersion.

manage_docker_exportC

Create Dockerfile for headless Godot export

Inputs: action (required), projectPath (required), baseImage, exportPreset, +1 more.

manage_export_presetsC

Create or modify export preset configuration

Inputs: action (required), projectPath (required), name, platform, +1 more.

manage_input_mapC

Add, remove, or list input actions and bindings

Inputs: action (required), projectPath (required), key, deadzone, +1 more.

manage_layersC

List/set named layer definitions in project

Inputs: action (required), projectPath (required), name, layer, +1 more.

manage_pluginsC

List/enable/disable editor plugins

Inputs: action (required), projectPath (required), pluginName.

manage_resourceC

Read or modify .tres/.res resource files

Inputs: action (required), projectPath (required), resourcePath (required), properties.

manage_scene_signalsB

List/add/remove signal connections in .tscn files

Inputs: action (required), scenePath (required), projectPath (required), method, +3 more.

manage_scene_structureC

Rename/duplicate/move nodes within .tscn scenes

Inputs: action (required), nodePath (required), scenePath (required), projectPath (required), +2 more.

manage_shaderC

Create or read .gdshader files

Inputs: action (required), shaderPath (required), projectPath (required), source, +1 more.

manage_theme_resourceB

Create/read/modify Theme .tres resources

Inputs: action (required), projectPath (required), resourcePath (required), properties.

manage_translationsC

List/add/remove translation files in project

Inputs: action (required), projectPath (required), translationPath.

modify_project_settingsC

Modify a project.godot setting

Inputs: key (required), value (required), section (required), projectPath (required).

modify_scene_nodeA

Modify node properties in a scene file (headless)

Inputs: nodePath (required), scenePath (required), properties (required), projectPath (required).

read_fileC

Read a text file from a Godot project

Inputs: filePath (required), projectPath (required).

read_project_settingsA

Read project.godot as structured JSON

Inputs: projectPath (required).

read_sceneB

Read scene file as JSON node tree (headless)

Inputs: scenePath (required), projectPath (required).

remove_scene_nodeB

Remove a node from a scene file (headless)

Inputs: nodePath (required), scenePath (required), projectPath (required).

rename_fileB

Rename or move a file within the project

Inputs: newPath (required), filePath (required), projectPath (required).

run_projectB

Run the Godot project and capture output

Inputs: projectPath (required), scene.

save_sceneC

Save changes to a scene file

Inputs: scenePath (required), projectPath (required), newPath.

set_main_sceneC

Set the main scene in project.godot

Inputs: scenePath (required), projectPath (required).

stop_projectA

Stop the currently running Godot project

Inputs: no named parameters.

update_project_uidsA

Update UID references by resaving resources (4.4+)

Inputs: projectPath (required).

validate_scriptA

Check a GDScript file for syntax/type errors (headless, no run)

Inputs: scriptPath (required), projectPath (required).

validate_scriptsB

Batch-check GDScript files (git-changed by default, or all)

Inputs: projectPath (required), scope, scriptPaths.

write_fileA

Create or overwrite a text file in a Godot project

Inputs: content (required), filePath (required), projectPath (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.6/5.0

    Scored across 157 tools

    Disambiguation2/5

    The 157-tool surface contains many overlapping runtime helpers: game_get_property vs game_get_node_info, game_script vs attach_script, game_audio_play vs game_audio_effect, and multiple scene/UI/light/path operations blur boundaries. Descriptions help somewhat, but an agent faces real misselection risk across similarly named game_* tools.

    Naming Consistency3/5

    All names use snake_case, which is good, but the set mixes several prefix conventions: plain verbs (create_scene), game_* runtime tools, manage_* editor tools, and ad hoc prefixes like validate_* and set_*. The pattern is readable but not fully predictable.

    Tool Count1/5

    157 tools is a severe overreach for practical agent use, far beyond the 3-15 sweet spot. Even with a broad 'full control' domain, this surface is too large to be navigated reliably and should be split into focused servers or grouped tools.

    Completeness4/5

    Coverage is extensive across editor, project files, runtime manipulation, UI, audio, 3D, networking, and export workflows. Minor gaps remain, such as full asset-import or project-deletion lifecycle, but the surface is broadly complete.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables AI agents to create, edit, and run Godot 4.5+ games by providing tools for project scaffolding, scene manipulation, and engine interaction. It supports full game development workflows including node editing, script attachment, and project execution with debugging capabilities.
      24
      5
      MIT
    • F
      license
      C
      quality
      D
      maintenance
      Enables AI assistants to control Godot game engine projects through a WebSocket bridge. Supports scene editing, node manipulation, script management, and project introspection via 163 registered tools.
      100
      1
      -
    • A
      license
      C
      quality
      C
      maintenance
      Enables AI agents to interact with the Godot game engine, including project inspection, scene/script parsing, headless exports, runtime control with live scene-tree inspection and evaluation, and API documentation search.
      100
      807 npm
      5
      MIT