Godot MCP
Provides AI assistants with full control over the Godot game engine, enabling natural language commands to build scenes, write scripts, run games, send input, capture screenshots, and query game state.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Godot MCPcreate a simple platformer level with a player and ground"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Godot MCP
Give your AI assistant full control over the Godot game engine.
Build scenes, write scripts, run games, send input, capture screenshots, and query live game state — all through natural language.
((((((( (((((((
((((((((((( (((((((((((
((((((((((((( (((((((((((((
(((((((((((((((((((((((((((((((((
((((( ((((((((((((((((((((((((((((((((((((((((( (((((
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(((((((((@@@@@@@(((((((((((((((((((((((((@@@@@@@@((((((((((
((((((@@@@,,,,,@@@((((((((((((((((((((@@@,,,,,@@@@(((((((((
(((((@@,,,,,,,,,@@(((((((@@@@@(((((((@@,,,,,,,,,@@@((((((((
((((((@@,,,,,,,@@(((((((@@@@@((((((((@@,,,,,,,@@@(((((((((
(((((((((@@@@@@(((((((((@@@@@(((((((((((@@@@@@((((((((((((
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
@@@@@@@@@@@@@(((((((((((@@@@@@@@@@@@@@(((((((((((@@@@@@@@@@@@@@
(((((((( @@@(((((((((((@@(((((((((((@@(((((((((((@@@ ((((((((
((((((((( @@(((((((((@@@(((((((((((@@@((((((((((@@ (((((((((
((((((((((@@@@@@@@@@@@@@(((((((((((@@@@@@@@@@@@@@((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(((((((((((((((((((((((((((((((((((((((((((((((((
(((((((((((((((((((((((((((((((((
G O D O T x M O D E L C O N T E X T P R O T O C O LFork of Coding-Solo/godot-mcp, extended with interactive game control, persistent TCP communication, script authoring, automated tests, and more.
Highlights
75 tools covering the full game-dev loop: projects, scenes, nodes, scripts, resources, tilemaps, animation, settings, exports
Interactive play-testing — run the game, send keyboard/mouse/gamepad input, query live state, wait for signals, capture the viewport
Batched test sequences — keys, waits, screenshots, state snapshots, and signal collection in a single round-trip
Stateless MCP
2026-07-28on SDK v2 — no handshake for modern clients, cached tool lists, automatic fallback for 2025-era clientsSafety controls — toolset filtering, read-only mode, and per-tool exclusion via environment variables
Fully tested — 184 automated tests against a real headless Godot engine, no mocks
Related MCP server: Gear
How It Works
MCP (Model Context Protocol) is a standard that lets AI assistants use external tools. Think of it like a USB port — your AI plugs into this server and gains the ability to control Godot.
You (natural language) --> AI Assistant --> MCP Server --> Godot Engine
"Add a player to | | |
the scene" interprets calls tool creates node
your request add_node() in .tscn fileYou talk to your AI assistant normally. When it needs to do something in Godot, it calls one of the 75 tools this server provides. You don't write any code yourself — the AI handles that.
Quickstart
1. Install prerequisites
Requirement | Notes |
Note the full path to the executable (e.g. | |
Runs the MCP server | |
pnpm |
|
An MCP-compatible AI assistant |
2. Clone and build
git clone https://github.com/Vollkorn-Games/godot-mcp.git
cd godot-mcp
pnpm install
pnpm run buildNote the full path to build/index.js — you'll need it below.
3. Configure your AI assistant
Every config needs the same two things: the command to start the server (node + path to build/index.js) and the GODOT_PATH environment variable pointing at your Godot executable.
Run this command in your terminal:
claude mcp add godot -- node /absolute/path/to/godot-mcp/build/index.jsOr add to your MCP settings JSON (~/.claude/settings.json or project-level .mcp.json):
{
"mcpServers": {
"godot": {
"command": "node",
"args": ["/absolute/path/to/godot-mcp/build/index.js"],
"env": {
"GODOT_PATH": "/absolute/path/to/godot/executable"
}
}
}
}Open the Cline MCP settings (Cline sidebar > MCP Servers > Configure) and add:
{
"mcpServers": {
"godot": {
"command": "node",
"args": ["/absolute/path/to/godot-mcp/build/index.js"],
"env": {
"GODOT_PATH": "/absolute/path/to/godot/executable"
},
"disabled": false
}
}
}Go to Settings > Features > MCP > + Add New MCP Server:
Name:
godotType:
commandCommand:
node /absolute/path/to/godot-mcp/build/index.js
Then set the environment variable GODOT_PATH in your system or shell profile.
Any application that supports MCP can use this server. The connection always works the same way:
Transport: stdio (the AI launches the server as a subprocess)
Command:
node /absolute/path/to/godot-mcp/build/index.jsEnvironment variables:
GODOT_PATH=/absolute/path/to/godot/executable
Check your client's documentation for where to add MCP server configs. Look for terms like "MCP", "tools", or "tool servers".
On Windows, use forward slashes in JSON paths:"C:/Users/you/godot-mcp/build/index.js".
4. Test it
Open your AI assistant and try:
"Use the get_godot_version tool to check if the MCP server is connected."
If it returns a version number, everything is working. Now try:
"Create a new Godot project at C:/Users/you/my-game with a Node2D main scene."
Tools
This isn't just "launch editor and read logs". The server can build an entire game from scratch — create scenes, add and configure nodes, write GDScript files, wire up signals, set up tilemaps — then run the game, play it via input commands, and observe the results through screenshots and state queries.
75 tools across 10 categories:
Tool | Description |
| Open the Godot editor for a project |
| Run a project in debug mode |
| Get console output/errors (supports filtering) |
| Stop a running project |
| Get installed Godot version |
| Find Godot projects in a directory |
| Analyze project structure |
Tool | Description |
| Create a new scene with a root node type |
| Add nodes with properties |
| Remove nodes from scenes |
| Rename a node in a scene |
| Move a node to a different parent |
| Duplicate a node (optionally to new parent) |
| Add a scene as a child instance |
| Set properties on nodes |
| Read node properties as JSON |
| Get full scene tree structure as JSON |
| Wire signals between nodes |
| Manage node groups |
| Save scene (or create variant) |
| Check for missing scripts, broken refs, etc. |
| Execute multiple scene operations in one Godot process (much faster) |
Tool | Description |
| Write or update a GDScript file (auto-creates directories) |
| Read GDScript file contents |
| Check a GDScript file for syntax errors (headless, no runtime needed) |
| Attach a script to a node in a scene |
Tool | Description |
| Load a texture into a Sprite2D node |
| Create .tres resource files with typed properties |
| Create TileSet with atlas sources and custom data layers |
| Place tiles on a TileMapLayer |
| Read tile data from a TileMapLayer |
| Set custom data on tile cells |
| Export 3D scenes as MeshLibrary for GridMap |
Tool | Description |
| Create AnimationPlayer with pre-configured animations |
| Add animations with tracks, keyframes, interpolation |
| Set collision layers/masks (layer numbers or bitmask) |
Tool | Description |
| Edit project.godot (display, input, etc.) |
| Add, remove, or list autoload singletons |
| Discover all input actions defined in a project |
| UID management (Godot 4.4+) |
| Export for target platform using presets |
Tool | Description |
| Start game with injected TCP input receiver |
| Send named input actions to the running game (move, jump, attack...) |
| Send keyboard key events with modifier support (shift, ctrl, alt) |
| Send mouse clicks at specific viewport coordinates |
| Simulate mouse drag operations from point A to B |
| Query live game state (HP, score, position, level, etc.) |
| Invoke a method on a live node (e.g., |
| Search the runtime scene tree by name pattern and/or type |
| Execute arbitrary GDScript expression at runtime and return result |
| Block until a signal is emitted (e.g., |
| Block until a node appears in the scene tree |
| Retrieve FPS, draw calls, memory, node count, physics stats |
| Reload the current scene (handy for test loops) |
| Retrieve runtime errors/warnings with backtraces (Godot 4.5+ Logger API) |
| Send key presses and InputMap actions with inline waits, screenshots, state snapshots, and signal events |
| Send gamepad button events (A, B, X, Y, shoulders, dpad, start, etc.) |
| Send gamepad analog stick/trigger axis events with float precision |
| Pause/unpause game time (MCP receiver stays active for queries) |
| Set a property on a live node (auto-converts arrays to Vector2/Vector3/Color) |
| Run multi-line GDScript code blocks at runtime with autoload access |
| Subscribe to node signals for async event monitoring |
| Retrieve buffered signal events captured since last read |
| Capture the live game viewport as PNG |
| Run game for N seconds, capture screenshot, stop |
| Render a scene to PNG (static, no runtime) |
Tool | Description |
| Analyze scene architecture: node types, signals, sub-scenes, groups, depth |
| Profile a script: methods, signals, dependencies, exports |
Tool | Description |
| Run GUT unit tests headlessly and return pass/fail results |
Tool | Description |
| Search the Godot Asset Library for addons/templates (read-only network call) |
| Download an asset (by |
Interactive Mode
The standout feature. run_interactive injects a TCP server into the running game as a temporary autoload, giving the AI a live, two-way channel to the game:
You want to... | Use |
Drive the game |
|
Batch a test run |
|
Inspect live state |
|
Mutate live state |
|
Synchronize on events |
|
See / control time |
|
The TCP connection is persistent (single socket reused across commands). Everything is cleaned up automatically when the game stops — the injected autoload is removed and project.godot is restored.
Efficient Testing Patterns
send_key_sequence is the primary tool for gameplay testing. It bundles keys, InputMap actions, waits, state snapshots, screenshots, and signal collection into a single round-trip — much faster than calling individual tools in a loop.
Fast gameplay test (1 round-trip):
send_key_sequence({
keys: ["1", {"action": "move_right", "hold_ms": 300}, {"state": true}, "o", {"wait": 2000}, {"screenshot": "mid.png"}, "s"],
collectSignals: [{nodePath: "/root/EventBus", signals: ["task_completed", "score_changed"]}]
})
// Response includes:
// keys_sent: 4
// states: [{state: {scene: "Desktop", score: 100}, index: 2}]
// screenshots: [{path: "mid.png", size: "1024x768", index: 3}]
// events: [{signal: "score_changed", node: "/root/EventBus", args: [200]}]Avoid these slower patterns:
// BAD: 3 round-trips for the same result
subscribe_signals({nodePath: "/root/EventBus", signals: ["task_completed"]})
send_key_sequence({keys: ["1", "a", "o", "s"]})
get_signal_events()
// BAD: N round-trips instead of 1
send_key({key: "a"})
game_state()
send_key({key: "b"})
game_screenshot()
// BAD: shell sleeps between inputs — use {"wait": ms} checkpoints instead
send_input({action: "move_right"})
Bash("sleep 2")
send_input({action: "jump"})
game_screenshot()Prefer structured checks over screenshots. game_state, evaluate_expression, and get_runtime_errors return text in milliseconds; a screenshot costs a viewport capture, a PNG write, and an image read. Reach for game_screenshot only when the visual result itself is what needs verifying (rendering, layout, animation).
When to use subscribe_signals instead: Only when you need to monitor signals across multiple separate commands (e.g., subscribe once, then issue several unrelated tool calls and check accumulated events later).
Configuration
All configuration happens through environment variables in your MCP client config:
Variable | Description |
| Path to Godot executable (overrides auto-detection) |
| Set to |
| Comma-separated tool categories to enable (e.g., |
| Comma-separated tool names to exclude (e.g., |
| Set to |
The server tries to auto-detect Godot in common install locations. If it can't find it, set GODOT_PATH explicitly.
Tool filtering
Reduce token overhead and add safety by controlling which tools are exposed. All three filters can be combined:
Toolsets — only expose specific categories:
"MCP_TOOLSETS": "scene,node,script,analysis". Available:process,project,scene,node,animation,tilemap,resource,script,signal_group,uid,settings,interactive,screenshot,analysis,testing.Read-only mode —
"MCP_READ_ONLY": "true"blocks every tool that creates, modifies, or deletes files or game state, leaving only readers likeget_scene_tree,read_script,validate_scene,game_state,find_nodes.Exclusion — remove individual tools by name:
"MCP_EXCLUDE_TOOLS": "export_project,manage_autoloads".
{
"godot": {
"command": "node",
"args": ["/path/to/godot-mcp/build/index.js"],
"env": {
"GODOT_PATH": "/path/to/godot",
"MCP_TOOLSETS": "scene,node,script,analysis",
"MCP_READ_ONLY": "true"
}
}
}Supported Clients
MCP is an open standard. Any AI assistant that supports MCP can use this server:
Client | MCP Support | Notes |
Built-in | First-class MCP support via | |
Built-in | VS Code extension, configure in sidebar | |
Built-in | Settings > Features > MCP | |
Built-in | Settings > MCP | |
Built-in | config.json MCP section | |
Plugin | Check MCP plugin availability |
The server speaks the stateless MCP 2026-07-28 protocol revision (built on MCP SDK v2): modern clients call tools directly with no initialize handshake, and the tool list ships cache hints so clients don't re-fetch it. Older 2025-era clients work too — the server auto-detects the client's protocol era per connection and serves the legacy handshake when needed.
You don't connect the LLM to the MCP server directly. Instead, you need an MCP client (an app that speaks the MCP protocol) sitting between your LLM and the MCP server:
Your local LLM (LlamaCPP) --> MCP Client (e.g., Cline) --> Godot MCP Server
runs on localhost:8080 handles tool calls controls GodotHere's how to set it up with LlamaCPP + Cline (the easiest path):
1. Start LlamaCPP with a tool-capable model
llama-server -m your-model.gguf --port 8080Use a model that supports function/tool calling (e.g., Qwen 2.5, Mistral, Llama 3.1+). Smaller models may struggle with complex tool use.
2. Install Cline in VS Code
Install the Cline extension from the VS Code marketplace.
3. Point Cline to your local LLM
In Cline settings, configure the API provider:
API Provider: OpenAI Compatible
Base URL:
http://localhost:8080/v1API Key:
not-needed(any non-empty string)Model ID: the model name your server reports
4. Add the Godot MCP server to Cline (see Quickstart)
5. Test it
Ask Cline: "Use the get_godot_version tool" — if it returns a version, the full chain is working.
Other local LLM setups:
Ollama: Same as above, but base URL is
http://localhost:11434/v1LM Studio: Has built-in MCP support via plugins — check their docs
Custom client: Implement the MCP client spec yourself — the server uses stdio transport and doesn't care what LLM is behind the client
Architecture
The server uses three execution strategies:
Direct CLI — Simple operations (launch editor, get version, read files) call Godot CLI commands or manipulate files directly from TypeScript.
Bundled GDScript — Complex scene operations use
godot_operations.gd, a comprehensive script that runs viagodot --headless --scriptto manipulate scene trees, nodes, and resources through the Godot API.TCP Input Receiver — Interactive mode injects
input_receiver.gdas a temporary autoload that listens on port 9876 for JSON commands (input injection, state queries, viewport capture).
Troubleshooting
Problem | Solution |
"Godot not found" | Set |
Tools not showing up | Restart your AI assistant after adding the MCP config |
"Not a valid Godot project" | Ensure the path you give contains a |
Interactive mode not responding | Check that port 9876 is not in use by another process |
Build errors after cloning | Run |
Permission errors (macOS/Linux) | Make sure |
Contributing
pnpm install
pnpm run build
pnpm test # run all tests (requires Godot installed)
pnpm lint # eslint
pnpm format:check # prettier
pnpm typecheck # tsc --noEmitCI runs all five checks on every push — please run them locally before opening a PR.
License
MIT — see LICENSE.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that gives AI assistants direct control over Godot 4 game development projects. It enables launching the editor, running projects, creating and editing scenes, writing GDScript, and inspecting assets through natural language commands.44304MIT
- AlicenseAqualityBmaintenanceAn MCP server that enables AI assistants to directly run, inspect, modify, and debug Godot game development projects through 110+ tools covering scenes, scripts, resources, runtime debugging, and asset management.33212MIT
- AlicenseAqualityDmaintenanceAn enhanced MCP server for interacting with the Godot game engine, enabling AI assistants to launch the editor, run projects, manage scenes and nodes, and handle scripts.16MIT
- AlicenseCqualityAmaintenanceAn MCP server providing AI assistants with 149 tools to fully control the Godot game engine, including runtime code execution, scene manipulation, physics, audio, networking, animation, and more.10089442MIT
Related MCP Connectors
An MCP server that integrates with Discord to provide AI-powered features.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
An MCP server that gives your AI access to the source code and docs of all public github repos
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Vollkorn-Games/godot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server