GDotMCP
MCP server providing 174 tools for AI-powered Godot 4 development, enabling scene manipulation, scripting, animation, runtime analysis, and more.
README
<p align="center"> <img src="img/banner.png" alt="GDotMCP" width="100%"> </p>
<h1 align="center">GDotMCP</h1>
<p align="center"> <strong>174 MCP tools for AI-powered Godot 4 development.</strong><br> Scene manipulation, scripting, animation, 3D, physics, particles, audio, shaders, runtime analysis, navigation, testing & more. </p>
<p align="center"> <a href="#quick-start">Quick Start</a> • <a href="#all-174-tools">Tools</a> • <a href="#features">Features</a> • <a href="#troubleshooting">Troubleshooting</a> </p>
Architecture
AI Assistant ←—stdio/MCP—→ Node.js Server ←—WebSocket:6505-6514—→ Godot Editor Plugin
- Real-time: WebSocket connection means instant feedback, no file polling
- Editor Integration: Full access to Godot's editor API, UndoRedo system, and scene tree
- JSON-RPC 2.0: Standard protocol with proper error codes and suggestions
- Runtime Inspection: Live game scene tree, property monitoring, input recording/replay
Quick Start
1. Install the Godot Plugin
Copy addons/gdotmcp/ into your Godot project's addons/ directory.
Enable the plugin: Project → Project Settings → Plugins → GDotMCP → Enable
The plugin will auto-inject 3 autoloads for runtime game inspection:
MCPScreenshot— captures game viewportMCPInputService— injects input events into the running gameMCPGameInspector— runtime scene tree, properties, recording
2. Build the MCP Server
cd godot-mcp-server
npm install
npm run build
3. Configure Your MCP Client
Claude Desktop — Edit %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"gdotmcp": {
"command": "node",
"args": ["D:\\GDotMCP\\godot-mcp-server\\dist\\index.js"]
}
}
}
Cursor — Edit .cursor/mcp.json:
{
"mcpServers": {
"gdotmcp": {
"command": "node",
"args": ["D:\\GDotMCP\\godot-mcp-server\\dist\\index.js"]
}
}
}
OpenCode — Edit ~/.config/opencode/opencode.json:
{
"mcp": {
"gdotmcp": {
"type": "local",
"command": ["node", "D:\\GDotMCP\\godot-mcp-server\\dist\\index.js"],
"enabled": true
}
}
}
Claude Code (CLI):
claude mcp add gdotmcp -- node D:\GDotMCP\godot-mcp-server\dist\index.js
4. Use It
- Open Godot with the GDotMCP plugin enabled
- Start your MCP client (Claude Desktop, Cursor, OpenCode, etc.)
- The MCP server connects to Godot automatically on ports 6505-6514
5. Install the AI Skill (Optional)
GDotMCP includes a skill file that gives AI assistants detailed guidance on how to use all 174 tools effectively. Install it for better AI assistance:
Claude Code:
# Copy skill to your project
cp -r skills/gdotmcp ~/.claude/skills/
Other AI Clients:
Copy skills/gdotmcp/SKILL.md to your AI client's skill/context directory.
The skill covers:
- Essential workflows (2D/3D scene building, scripting, playtesting)
- Property value formats and GDScript gotchas
- Advanced patterns (shaders, navigation, AnimationTree)
- Runtime debugging and testing
- Troubleshooting common issues
All 174 Tools
Project Tools (10)
| Tool | Description |
|---|---|
get_project_info |
Project metadata, version, viewport, autoloads |
get_filesystem_tree |
Recursive file tree with filtering |
search_files |
Fuzzy/glob file search |
search_in_files |
Search content in project files |
get_project_settings |
Read project.godot settings |
set_project_setting |
Set project settings via editor API |
uid_to_project_path |
UID → res:// conversion |
project_path_to_uid |
res:// → UID conversion |
add_autoload |
Register autoload singleton |
remove_autoload |
Remove autoload singleton |
Scene Tools (10)
| Tool | Description |
|---|---|
get_scene_tree |
Live scene tree with hierarchy |
get_scene_file_content |
Raw .tscn file content |
create_scene |
Create new scene files |
open_scene |
Open scene in editor |
delete_scene |
Delete scene file |
add_scene_instance |
Instance scene as child node |
play_scene |
Run scene (main/current/custom) |
stop_scene |
Stop running scene |
save_scene |
Save current scene to disk |
get_scene_exports |
Get @export variables from scene |
Node Tools (17)
| Tool | Description |
|---|---|
add_node |
Add node with type and properties |
delete_node |
Delete node (with undo support) |
duplicate_node |
Duplicate node and children |
move_node |
Move/reparent node |
update_property |
Set any property (auto type parsing) |
get_node_properties |
Get all node properties |
add_resource |
Add Shape/Material/etc to node |
set_anchor_preset |
Set Control anchor preset |
rename_node |
Rename a node in the scene |
connect_signal |
Connect signal between nodes |
disconnect_signal |
Disconnect signal connection |
get_node_groups |
Get groups a node belongs to |
set_node_groups |
Set node group membership |
find_nodes_in_group |
Find all nodes in a group |
get_editor_selection |
Get currently selected scene nodes |
select_nodes |
Select, focus, and inspect scene nodes |
clear_editor_selection |
Clear the editor scene selection |
Script Tools (7)
| Tool | Description |
|---|---|
list_scripts |
List all scripts with class info |
read_script |
Read script content |
create_script |
Create new script with template |
edit_script |
Search/replace or full edit |
attach_script |
Attach script to node |
get_open_scripts |
List scripts open in editor |
validate_script |
Validate GDScript syntax |
Editor Tools (13)
| Tool | Description |
|---|---|
get_editor_errors |
Get errors and warnings |
get_output_log |
Read output panel content |
get_editor_screenshot |
Capture editor viewport |
get_game_screenshot |
Capture running game viewport |
execute_editor_script |
Run arbitrary GDScript in editor |
clear_output |
Clear output panel |
reload_plugin |
Reload the MCP plugin |
reload_project |
Rescan filesystem and reload scripts |
get_signals |
Get all signals of a node with connections |
compare_screenshots |
Diff two images pixel-by-pixel |
set_auto_dismiss |
Toggle dialog auto-dismiss |
get_editor_camera |
Get 3D editor camera transform |
set_editor_camera |
Set 3D editor camera position/rotation |
Input Tools (5)
| Tool | Description |
|---|---|
simulate_key |
Simulate keyboard key press/release |
simulate_mouse_click |
Simulate mouse click at position |
simulate_mouse_move |
Simulate mouse movement |
simulate_action |
Simulate Godot Input Action |
simulate_sequence |
Sequence of input events with frame delays |
Runtime Tools (19)
| Tool | Description |
|---|---|
get_game_scene_tree |
Scene tree of running game |
get_game_node_properties |
Node properties in running game |
set_game_node_property |
Set node property in running game |
execute_game_script |
Run GDScript in game context |
capture_frames |
Multi-frame screenshot capture |
monitor_properties |
Record property values over time |
start_recording |
Start input recording |
stop_recording |
Stop input recording |
replay_recording |
Replay recorded input |
find_nodes_by_script |
Find game nodes by script |
get_autoload |
Get autoload node properties |
batch_get_properties |
Batch get multiple node properties |
find_ui_elements |
Find UI elements in game |
click_button_by_text |
Click button by text content |
wait_for_node |
Wait for node to appear |
find_nearby_nodes |
Find nodes near position |
navigate_to |
Navigate to target position |
move_to |
Walk character to target |
watch_signals |
Monitor signal emissions |
Animation Tools (6)
| Tool | Description |
|---|---|
list_animations |
List all animations in AnimationPlayer |
create_animation |
Create new animation |
add_animation_track |
Add track (value/position/rotation/method/bezier) |
set_animation_keyframe |
Insert keyframe into track |
get_animation_info |
Detailed animation info with all tracks/keys |
remove_animation |
Remove an animation |
AnimationTree Tools (8)
| Tool | Description |
|---|---|
create_animation_tree |
Create AnimationTree |
get_animation_tree_structure |
Get tree structure |
add_state_machine_state |
Add state to state machine |
remove_state_machine_state |
Remove state from state machine |
add_state_machine_transition |
Add transition between states |
remove_state_machine_transition |
Remove state transition |
set_blend_tree_node |
Configure blend tree nodes |
set_tree_parameter |
Set AnimationTree parameter |
TileMap Tools (6)
| Tool | Description |
|---|---|
tilemap_set_cell |
Set a single tile cell |
tilemap_fill_rect |
Fill rectangular region with tiles |
tilemap_get_cell |
Get tile data at cell |
tilemap_clear |
Clear all cells |
tilemap_get_info |
TileMapLayer info and tile set sources |
tilemap_get_used_cells |
List of used cells |
Theme Tools (7)
| Tool | Description |
|---|---|
create_theme |
Create Theme resource file |
set_theme_color |
Set theme color override |
set_theme_constant |
Set theme constant override |
set_theme_font_size |
Set theme font size override |
set_theme_stylebox |
Set StyleBoxFlat override |
setup_control |
Configure Control layout (anchors, size flags) |
get_theme_info |
Get theme overrides info |
Shader Tools (6)
| Tool | Description |
|---|---|
create_shader |
Create shader with template |
read_shader |
Read shader file |
edit_shader |
Edit shader (replace/search-replace) |
assign_shader_material |
Assign ShaderMaterial to node |
set_shader_param |
Set shader parameter |
get_shader_params |
Get all shader parameters |
Resource Tools (4)
| Tool | Description |
|---|---|
read_resource |
Read .tres resource properties |
edit_resource |
Edit resource properties |
create_resource |
Create new .tres resource |
get_resource_preview |
Get resource thumbnail |
Batch & Refactoring Tools (7)
| Tool | Description |
|---|---|
find_nodes_by_type |
Find all nodes of a type |
find_signal_connections |
Find all signal connections in scene |
batch_set_property |
Set property on all nodes of a type |
batch_add_nodes |
Add multiple nodes at once |
find_node_references |
Search project files for pattern |
get_scene_dependencies |
Get resource dependencies |
cross_scene_set_property |
Set property across all scenes |
Physics Tools (6)
| Tool | Description |
|---|---|
setup_collision |
Add collision shapes to nodes |
set_physics_layers |
Set collision layer/mask |
get_physics_layers |
Get collision layer/mask info |
add_raycast |
Add RayCast2D/3D node |
setup_physics_body |
Configure physics body properties |
get_collision_info |
Get collision shape details |
3D Scene Tools (6)
| Tool | Description |
|---|---|
add_mesh_instance |
Add MeshInstance3D with primitive mesh |
setup_camera_3d |
Configure Camera3D properties |
setup_lighting |
Add/configure light nodes |
setup_environment |
Configure WorldEnvironment |
add_gridmap |
Set up GridMap node |
set_material_3d |
Set StandardMaterial3D properties |
Audio Tools (6)
| Tool | Description |
|---|---|
add_audio_player |
Add AudioStreamPlayer node |
add_audio_bus |
Add audio bus |
add_audio_bus_effect |
Add effect to audio bus |
set_audio_bus |
Configure audio bus properties |
get_audio_bus_layout |
Get audio bus layout info |
get_audio_info |
Get audio-related node info |
Navigation Tools (5)
| Tool | Description |
|---|---|
setup_navigation_region |
Configure NavigationRegion |
setup_navigation_agent |
Configure NavigationAgent |
bake_navigation_mesh |
Bake navigation mesh |
set_navigation_layers |
Set navigation layers |
get_navigation_info |
Get navigation setup info |
Particle Tools (5)
| Tool | Description |
|---|---|
create_particles |
Create GPUParticles2D/3D |
set_particle_material |
Configure ParticleProcessMaterial |
set_particle_color_gradient |
Set color gradient for particles |
apply_particle_preset |
Apply preset (fire, smoke, sparks, etc.) |
get_particle_info |
Get particle system details |
Input Map Tools (2)
| Tool | Description |
|---|---|
get_input_actions |
List all input actions |
set_input_action |
Create/modify input action |
Analysis Tools (6)
| Tool | Description |
|---|---|
find_unused_resources |
Find unreferenced resources |
analyze_signal_flow |
Map signal connections |
analyze_scene_complexity |
Analyze scene performance |
find_script_references |
Find where script/resource is used |
detect_circular_dependencies |
Find circular scene dependencies |
get_project_statistics |
Get project-wide statistics |
Profiling Tools (2)
| Tool | Description |
|---|---|
get_performance_monitors |
All performance monitors (FPS, memory, physics, etc.) |
get_editor_performance |
Quick performance summary |
Export Tools (3)
| Tool | Description |
|---|---|
list_export_presets |
List export presets |
export_project |
Get export command for preset |
get_export_info |
Export-related project info |
Test Tools (5)
| Tool | Description |
|---|---|
run_test_scenario |
Run automated test scenario |
assert_node_state |
Assert node property values |
assert_screen_text |
Check for text on screen |
run_stress_test |
Run performance stress test |
get_test_report |
Get test results report |
Android Tools (3)
| Tool | Description |
|---|---|
list_android_devices |
List ADB connected devices |
get_android_preset_info |
Get Android export preset info |
deploy_to_android |
Export and deploy APK to device |
Features
- UndoRedo Integration: All node/property operations support Ctrl+Z
- Smart Type Parsing:
"Vector2(100, 200)","#ff0000","Color(1,0,0)"auto-converted - Auto-Reconnect: Exponential backoff reconnection (1s → 2s → 4s ... → 60s max)
- Heartbeat: 5s ping/pong keeps connection alive
- Helpful Errors: Error responses include suggestions for next steps
- Runtime Inspection: Live game scene tree, property monitoring, input recording/replay
- 174 Tools: Comprehensive coverage of Godot's API
Troubleshooting
"No connection available to Godot editor"
The MCP server can't reach Godot. Check:
- Godot is running with the GDotMCP plugin enabled
- No stale processes — Kill all
nodeprocesses and restart your MCP client:# Windows Get-Process -Name "node" | Stop-Process -Force # Linux/macOS pkill -f node - Ports not blocked — The server uses ports 6505-6514. Ensure no firewall is blocking them.
"Command timed out after 30000ms"
The Godot editor didn't respond in time. This can happen if:
- The game is paused or blocked by a debugger breakpoint
- A heavy operation is running in the editor
- The WebSocket connection dropped (check Godot output panel for reconnection messages)
Runtime tools return empty {}
The game autoloads aren't responding. This usually means:
- The game scene isn't playing — use
play_scenefirst - The MCP autoloads weren't injected — restart Godot with the plugin enabled
- An async handler issue — ensure you're running the latest build
Dictionary parameters fail with "got type: 4"
The MCP protocol sends nested objects as JSON strings. The server now handles this automatically with JSON.parse() fallback. If you see this error, rebuild the server:
cd godot-mcp-server
npm run build
Plugin not loading
- Check Project → Project Settings → Plugins for GDotMCP
- Look at the Godot output panel for error messages
- Ensure the
addons/gdotmcp/folder contains all required files
Multiple MCP server instances
If you see connection issues, ensure only one MCP server instance is running:
# Check for multiple node processes
Get-Process -Name "node" | Select-Object Id, StartTime
# Kill all and restart your MCP client
Get-Process -Name "node" | Stop-Process -Force
Development
# TypeScript MCP server
npm run dev # Watch mode
npm run build # Build
npm test # Run tests
npm run typecheck # Type check
npm run lint # Lint
Requirements
- Node.js >= 18
- Godot 4.x (tested with 4.7-stable)
Credits
Inspired by Godot MCP Pro by youichi-uda. GDotMCP is an open-source implementation built on similar architectural principles.
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.