Godot MCP
Drives an open Godot 4 editor: scenes, nodes, GDScript, project settings and test runs of the game
Drives the Godot 4 C# editor from an AI agent through RQL queries, scripts and screenshots
By Ivan Murzak (individual) C# Remote (hosted) · Streamable HTTPLocal · stdio Developer tools
63 popularity score ★ 326 ↓ 1.0k/wk
Opens the app, which asks before it adds the server.
claude mcp add --transport http godot https://ai-game.dev/mcphttps://ai-game.dev/mcp{
"mcpServers": {
"godot": {
"url": "https://ai-game.dev/mcp"
}
}
}{
"servers": {
"godot": {
"type": "http",
"url": "https://ai-game.dev/mcp"
}
}
}[mcp_servers.godot]
url = "https://ai-game.dev/mcp"Opens the app, which asks before it adds the server.
claude mcp add godot -- docker run -i --rm -p 8080:8080 aigamedeveloper/mcp-server{
"mcpServers": {
"godot": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-p",
"8080:8080",
"aigamedeveloper/mcp-server"
]
}
}
}{
"mcpServers": {
"godot": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-p",
"8080:8080",
"aigamedeveloper/mcp-server"
]
}
}
}{
"servers": {
"godot": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-p",
"8080:8080",
"aigamedeveloper/mcp-server"
]
}
}
}[mcp_servers.godot]
command = "docker"
args = ["run", "-i", "--rm", "-p", "8080:8080", "aigamedeveloper/mcp-server"]gemini mcp add --scope user godot docker -- run -i --rm -p 8080:8080 aigamedeveloper/mcp-serverOpens the app, which asks before it adds the server.
dotnet tool install --global com.IvanMurzak.GameDev.MCP.Serverclaude mcp add godot -- gamedev-mcp-server --client-transport stdio --port 8080{
"mcpServers": {
"godot": {
"command": "gamedev-mcp-server",
"args": [
"--client-transport",
"stdio",
"--port",
"8080"
]
}
}
}{
"mcpServers": {
"godot": {
"command": "gamedev-mcp-server",
"args": [
"--client-transport",
"stdio",
"--port",
"8080"
]
}
}
}{
"servers": {
"godot": {
"type": "stdio",
"command": "gamedev-mcp-server",
"args": [
"--client-transport",
"stdio",
"--port",
"8080"
]
}
}
}[mcp_servers.godot]
command = "gamedev-mcp-server"
args = ["--client-transport", "stdio", "--port", "8080"]gemini mcp add --scope user godot gamedev-mcp-server -- --client-transport stdio --port 8080| Set together: connection | |
|---|---|
GODOT_MCP_CONNECTION_MODE |
Optional: Cloud or Custom, read by the Godot editor process. |
GODOT_MCP_CLOUD_URL |
Optional: Cloud base URL override, a trailing /mcp is dropped. |
GODOT_MCP_HOST |
Optional: URL of your own GameDev-MCP-Server. |
GODOT_MCP_AUTH_OPTION |
Optional: none, oauth or token, picks how the editor signs in to a custom server. |
GODOT_MCP_TOKEN secret |
Optional: Bearer token, applied to whichever mode is active. |
GODOT_MCP_TOOL_FORMAT |
Optional: Rql, or Json to keep the older ReflectorNet JSON format. |
GODOT_MCP_LOG_LEVEL |
Optional: Log level from Trace to None. |
| Set together: local server | |
GODOT_MCP_START_SERVER |
Optional: true or 1 starts the local server when the editor opens. |
GODOT_MCP_SERVER_PATH |
Optional: Path to a server binary to launch instead of the pinned download, for dev or CI. |
In a container, a setting goes in with -e NAME=value after docker run.
Godot MCP is a C# addon for the .NET (mono) build of Godot 4.3 and newer. It lets an agent work inside the open editor. Most of the work goes through three RQL tools. rql-query reads nodes, resources, files and editor state, while rql-mutate changes them, and rql-schema tells the agent what it can ask for. A mutation either applies in full or not at all, it lands on the editor's undo stack, and dry_run shows what it would do first. Beside RQL sit tools for C# and GDScript files, script-build to compile the project's C#, a script-execute tool that compiles and runs C# in the editor, and three kinds of screenshot.
Optional extensions widen what RQL can reach without adding tools of their own. The addon's catalog lists ten of them, covering animation, navigation, particles, CSG, GridMap, TileMapLayer and the Beehave, Dialogic, Phantom Camera and Terrain3D addons. You add one with `godot-cli install-extension` and rebuild. For the four addon extensions you still install that third-party addon yourself.
The addon never talks to the AI client directly. It keeps a SignalR link open to an MCP server, and the client connects to that server. In Cloud mode, the default, that server is ai-game.dev and you sign in through the npm helper godot-cli. Custom mode points at GameDev-MCP-Server, the author's shared server for Godot, Unity and Unreal, which you run yourself or let the editor dock fetch and start. GodotMcpServerView.cs pins server 9.3.0, and the addon checks the downloaded zip against the release's SHA256SUMS before unpacking it.
The released tag registers 24 tools, as the README says. Four of them are system tools that the agent's tool list leaves out. You can also build the addon into a running or exported game. There it stays offline and serves no tools until your code adds them.
| To run it yourself | .NET 8+Node.js 20.19+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| ai-game.dev | Cloud mode only, signed into with godot-cli login. Custom mode with a self-hosted server needs no account. |
| Also |
|
Node is only for godot-cli. `godot-cli install-plugin` copies the addon into addons/godot_mcp/, adds the NuGet references and the extension-catalog EmbeddedResource to your .csproj, and enables the plugin. By hand you add six PackageReferences (ReflectorNet, McpPlugin, Rql, CodeExec, CodeExec.Roslyn and Microsoft.CodeAnalysis.CSharp) at the versions in the addon's Godot-MCP.csproj, the EmbeddedResource with LogicalName Godot-MCP.extensions.catalog.json, and EnableDynamicLoading set to true. Without the embed the Extensions panel stays empty. `godot-cli install-extension <id>` adds an extension, then `godot-cli build` rebuilds. `godot-cli setup-mcp <agent>` writes the client config.
Only the mono/C# build of Godot works. The released tag registers 24 tools, and ping, godot-skill-create, godot-skill-generate and session-close among them are system tools on the server's /api/system-tools/ HTTP route, so an agent sees 20. runtime-errors-get and runtime-errors-clear exist only in a game build whose code calls WithRuntimeErrorCapture(), which is off by default. The NuGet versions in your .csproj must match the addon's own Godot-MCP.csproj exactly, and the README's table currently lists a newer McpPlugin than the released csproj does, so take the numbers from the csproj or let godot-cli install-plugin write them.
It fits a developer with a Godot 4 C# project who wants an agent to query and edit scenes, write scripts and check the result in screenshots. Cloud mode is the quickest start, but traffic goes through ai-game.dev and you need an account there. Running GameDev-MCP-Server yourself keeps it all on your machine. Projects on the standard GDScript-only build cannot use it. We also hold Coding-Solo's godot-mcp (godot-mcp-9), which is worth a look for projects without C#. Unity users can try the same author's Unity-MCP, which talks to the same server.
11 only read, 7 change things, 6 can delete or overwrite. A ? marks an optional parameter.
rql-queryquery: stringrql-mutate deletesquery: stringdry_run?: booleanrql-schematype?: stringscript-readscriptPath: stringlineFrom?: integerlineTo?: integerscript-create changesscriptPath: stringcontent: stringscript-update deletesscriptPath: stringcontent: stringscript-delete deletesscriptPath: stringscript-attach-to-node changesnodeRef: objectscriptPath?: stringscript-validatescriptPath?: stringscript-build changesscript-execute changescsharpCode: stringclassName?: stringmethodName?: stringparameters?: objectisMethodBody?: booleanusings?: arrayinclude?: arrayscreenshot-viewportmode?: stringscreenshot-cameranodeRef: objectwidth?: integerheight?: integerscreenshot-isolatednodeRef: objectcameraView?: enumbackground?: enumbackgroundColor?: stringfieldOfView?: numbernearClipPlane?: numberfarClipPlane?: numberpadding?: numberresolution?: integerconsole-get-logsmaxEntries?: integerlogTypeFilter?: enumincludeStackTrace?: booleanlastMinutes?: integersinceSequence?: integerconsole-clear-logs deletesreflection-method-findfilter: objectknownNamespace?: booleantypeNameMatchLevel?: integermethodNameMatchLevel?: integerparametersMatchLevel?: integerreflection-method-call changesfilter: objectknownNamespace?: booleantypeNameMatchLevel?: integermethodNameMatchLevel?: integerparametersMatchLevel?: integertargetObject?: objectinputParameters?: objectexecuteInMainThread?: booleanruntime-errors-getsinceSequence?: integermaxEntries?: integerruntime-errors-clear deletespingmessage?: stringgodot-skill-create changespath: stringcode: stringgodot-skill-generate changespath?: stringsession-close deletesnonce: string