Godot MCP

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

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http godot https://ai-game.dev/mcp
Claude (desktop and web)Settings → Connectors → Add custom connector
https://ai-game.dev/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "godot": {
      "url": "https://ai-game.dev/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "godot": {
      "type": "http",
      "url": "https://ai-game.dev/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.godot]
url = "https://ai-game.dev/mcp"
Local (container)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add godot -- docker run -i --rm -p 8080:8080 aigamedeveloper/mcp-server
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "godot": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-p",
        "8080:8080",
        "aigamedeveloper/mcp-server"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "godot": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-p",
        "8080:8080",
        "aigamedeveloper/mcp-server"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "godot": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-p",
        "8080:8080",
        "aigamedeveloper/mcp-server"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.godot]
command = "docker"
args = ["run", "-i", "--rm", "-p", "8080:8080", "aigamedeveloper/mcp-server"]
Gemini CLITerminal
gemini mcp add --scope user godot docker -- run -i --rm -p 8080:8080 aigamedeveloper/mcp-server
Local (from source)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
dotnet tool install --global com.IvanMurzak.GameDev.MCP.Server
Claude CodeTerminal
claude mcp add godot -- gamedev-mcp-server --client-transport stdio --port 8080
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "godot": {
      "command": "gamedev-mcp-server",
      "args": [
        "--client-transport",
        "stdio",
        "--port",
        "8080"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "godot": {
      "command": "gamedev-mcp-server",
      "args": [
        "--client-transport",
        "stdio",
        "--port",
        "8080"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "godot": {
      "type": "stdio",
      "command": "gamedev-mcp-server",
      "args": [
        "--client-transport",
        "stdio",
        "--port",
        "8080"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.godot]
command = "gamedev-mcp-server"
args = ["--client-transport", "stdio", "--port", "8080"]
Gemini CLITerminal
gemini mcp add --scope user godot gamedev-mcp-server -- --client-transport stdio --port 8080

Settings 9

Set together: connection
GODOT_MCP_CONNECTION_MODE Optional: Cloud or Custom, read by the Godot editor process. Default Cloud.
GODOT_MCP_CLOUD_URL Optional: Cloud base URL override, a trailing /mcp is dropped. Default https://ai-game.dev.
GODOT_MCP_HOST Optional: URL of your own GameDev-MCP-Server. For Custom mode.
GODOT_MCP_AUTH_OPTION Optional: none, oauth or token, picks how the editor signs in to a custom server. For Custom mode.
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. Default Rql.
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. For Custom mode.
GODOT_MCP_SERVER_PATH Optional: Path to a server binary to launch instead of the pinned download, for dev or CI. For Custom mode.

In a container, a setting goes in with -e NAME=value after docker run.

What it does

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.

What it needs

To run it yourself.NET 8+Node.js 20.19+
Runs onmacOS, Windows, Linux
ai-game.devCloud mode only, signed into with godot-cli login. Custom mode with a self-hosted server needs no account.
Also
  • Godot 4.3+ .NET (mono) build
  • GameDev-MCP-Server for Custom mode (Docker or dotnet tool)

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.

Limits

  • Platform Only the .NET (mono) build of Godot compiles the addon, so GDScript-only installs cannot use it.
  • Not covered ping, godot-skill-create, godot-skill-generate and session-close are served on /api/system-tools/ and do not appear in tools/list.
  • Not covered runtime-errors-get and runtime-errors-clear work only in a game build that calls WithRuntimeErrorCapture(), which is off by default.
  • Not covered Screenshots need a real GPU. Under --headless they return an error.
  • Limit script-build returns its result only after Godot reloads the C# assembly. Tool calls sent while that reload is pending are refused and must be retried.
  • Limit The README's manual NuGet table pins McpPlugin 8.19.0, but the released Godot-MCP.csproj pins 8.14.0. Copy the versions from the csproj.
  • Limit Extensions for Beehave, Dialogic, Phantom Camera and Terrain3D need that addon installed in the project first. The installer adds only the extension package.
  • Limit Rql and CodeExec ship under the PolyForm Shield 1.0.0 licence, which bars building a product that competes with the licensor's.
  • Limit The Godot Asset Library entry shows up only after moderator approval. Until then install from the GitHub release or with godot-cli.
  • Limit A custom tool from godot-skill-create works only after the C# project is rebuilt.

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.

Who it suits

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.

Tools 24

11 only read, 7 change things, 6 can delete or overwrite. A ? marks an optional parameter.

rql-query
Read scene nodes, resources, project files and editor state with an RQL queryquery: string
rql-mutate deletes
Change, add or remove nodes, resources and settings in one all-or-nothing, undoable stepquery: stringdry_run?: boolean
rql-schema
Describe the RQL types and fields an agent can querytype?: string
script-read
Read a script file, whole or a range of linesscriptPath: stringlineFrom?: integerlineTo?: integer
script-create changes
Write a new C# or GDScript file into the projectscriptPath: stringcontent: string
script-update deletes
Replace the content of an existing scriptscriptPath: stringcontent: string
script-delete deletes
Delete a script file from the projectscriptPath: string
script-attach-to-node changes
Attach a script to a node, or detach it when no path is givennodeRef: objectscriptPath?: string
script-validate
Check one script, or the whole project, for compile errorsscriptPath?: string
script-build changes
Run a Debug dotnet build of the project's C# and report warnings or errors after Godot reloads the assembly
script-execute changes
Compile and run a piece of C# inside the editor processcsharpCode: stringclassName?: stringmethodName?: stringparameters?: objectisMethodBody?: booleanusings?: arrayinclude?: array
screenshot-viewport
Capture the editor's 3D or 2D viewportmode?: string
screenshot-camera
Render an image through a chosen Camera nodenodeRef: objectwidth?: integerheight?: integer
screenshot-isolated
Render one node alone against a plain background from a set anglenodeRef: objectcameraView?: enumbackground?: enumbackgroundColor?: stringfieldOfView?: numbernearClipPlane?: numberfarClipPlane?: numberpadding?: numberresolution?: integer
console-get-logs
Return recent log entries, filtered by type, age or sequence numbermaxEntries?: integerlogTypeFilter?: enumincludeStackTrace?: booleanlastMinutes?: integersinceSequence?: integer
console-clear-logs deletes
Empty the stored log buffer
reflection-method-find
Search the loaded .NET assemblies for methods by type, name and parametersfilter: objectknownNamespace?: booleantypeNameMatchLevel?: integermethodNameMatchLevel?: integerparametersMatchLevel?: integer
reflection-method-call changes
Call any method found by reflection, private ones included, on the main thread by defaultfilter: objectknownNamespace?: booleantypeNameMatchLevel?: integermethodNameMatchLevel?: integerparametersMatchLevel?: integertargetObject?: objectinputParameters?: objectexecuteInMainThread?: boolean
runtime-errors-get
Return errors captured in a running game buildsinceSequence?: integermaxEntries?: integer
runtime-errors-clear deletes
Drop the captured runtime errors
ping
System tool that answers to show the connection is alivemessage?: string
godot-skill-create changes
System tool that saves a new custom tool as C# code in the projectpath: stringcode: string
godot-skill-generate changes
System tool that writes skill files describing the project's tools for an agentpath?: string
session-close deletes
System tool that shuts a godot-cli session down, given its noncenonce: string

Similar servers