On this page

Editor bridge (MCP)

An editor MCP server lets an agent see and drive the live Godot editor and a running game. This suite stays the verification gate: headless, reproducible, JSON. They are complementary, and the godot-editor-bridge skill tells the agent how to use both.

Which server

Checked against each project's README in October 2026. Not run in this repository's CI.

satelliteoflove/godot-mcp (default) hi-godot/godot-ai
Licence MIT MIT
Godot 4.5+ 4.7+
Needs Node 20+ and the editor addon uv (Python) and the editor addon
Strength Verifying its own work: freeze game time, step it, read live state as JSON, real input, run GDScript in the game Breadth: 46 tools, many editing helpers, one-click client configuration
C# Not a build tool Text-only: writes .cs files, reports no compiler errors
Clients Any MCP client; config snippet in its INSTALL.md Claude Code, Codex, Cursor, VS Code and others via its dock

Why satelliteoflove is the default: its design goal (letting an agent prove its change) matches this suite's, and it asks for the lower Godot version. Pick godot-ai for its tool breadth or if you already use it.

Install

pwsh ci/godot/hyperdot.ps1 init -Agents -Mcp godot-mcp     # adds godot-mcp to .mcp.json; existing servers are kept

Pinned: the npx -y entries init -Mcp writes name a version (@satelliteoflove/godot-mcp@4.1.11, @ryanmazzolini/minimal-godot-mcp@0.1.6), as the uvx Aseprite server below does, so a new release cannot reach a project unread. Update-Versions.ps1 reads the newest of each from the npm registry and the weekly canary proposes the bump; to move one by hand, edit the version in ci/godot/lib/Init.ps1 and here. Entries already in a project's .mcp.json are never edited: change the version there yourself.

init never edits an existing server entry and backs up .mcp.json as .mcp.json.bak before adding one. It then prints the steps it does not run: install the addon (npx @satelliteoflove/godot-mcp@4.1.11 --install-addon <project>), enable it under Project Settings > Plugins, restart the agent. -Mcp godot-ai prints the manual steps, because that server configures clients from its own dock.

Companion: GDScript diagnostics and the game console

minimal-godot-mcp (MIT, Node 22+) is a small second server the bridge's own docs recommend. It talks to the editor's built-in language server and debug adapter, so it needs no addon, only the editor open on the project.

pwsh ci/godot/hyperdot.ps1 init -Mcp godot-mcp -McpDiagnostics     # both; -McpDiagnostics also works on its own
Tool Does
get_diagnostics errors in one .gd file, with line, column and message, in seconds
scan_workspace_diagnostics the same for every .gd file (skips addons/ and .godot/)
get_console_output what the running game printed, with file and line where known; needs a running scene (F5)
clear_console_output empties that buffer

It speeds up the loop while editing; the gate is still test -Json (the validate runner loads every script headless). It checks GDScript only, so for a C# game only the console tool helps; C# errors come from build -Json. It is registered as minimal-godot-mcp in .mcp.json so it is not confused with godot-mcp. Not run in this repository's CI.

Pixel art: Aseprite

aseprite-mcp (MIT, Python 3.13 through uv) lets an agent draw and animate in Aseprite: 123 tools for canvas, layers, drawing, palettes and ramps, dithering, outlines, frames and tags, sprite sheets, and view_sprite, which shows the agent its own picture zoomed with a pixel grid. It runs Aseprite in batch mode (--batch --script), so Aseprite needs no window and no plugin.

pwsh ci/godot/hyperdot.ps1 init -McpAseprite "C:\Program Files\Aseprite"     # or the path to Aseprite.exe; Steam's is ...\steamapps\common\Aseprite

init finds Aseprite.exe (or aseprite, or the binary inside Aseprite.app), stops with aseprite-not-found when there is none, and adds this to .mcp.json:

"aseprite": {
  "command": "uvx",
  "args": ["--from", "git+https://github.com/diivi/aseprite-mcp@a89b205bed31930ee141edf319e78c71ef16bba6",
           "--with", "mcp[cli]==1.30.0", "python", "-m", "aseprite_mcp"],
  "env": { "ASEPRITE_PATH": "C:\\Program Files\\Aseprite\\Aseprite.exe" }
}

It needs uv (winget install astral-sh.uv), which fetches Python 3.13 and the server on first use.

Why the pins, measured with uvx 0.8 on 2026-10-22: the server has no release, so the commit is pinned. Installed from git, uvx ignores its uv.lock, and its mcp[cli]>=1.6.0 resolved to MCP SDK 2.x, which renamed the FastMCP class the server imports, so it did not start; the locked 1.6.0 failed to import with current pydantic. With 1.30.0 it starts, lists 123 tools and runs them: create_canvas reached a stand-in Aseprite (in a folder whose name has a space) as --batch --script <file>.lua. Its .env file is not read once installed this way, which is why ASEPRITE_PATH is set in env.

The weekly canary keeps both pins current (ci/godot/tools/Update-Versions.ps1, Invoke-Canary.ps1): the commit follows the newest commit on the server's default branch (read with git ls-remote, as it has no releases), the SDK the newest mcp release on PyPI within its major, since 2.x renamed FastMCP (a newer major is reported, not proposed). Each new pin is tried by starting the server through uvx exactly as .mcp.json runs it and listing its tools; only pins that start it are proposed, in the canary's pull request, which rewrites lib/Init.ps1 and the entry above.

Two cautions. run_lua_script runs any Lua the agent writes, with your user's rights: keep the agent asking before it calls it. And Aseprite's .aseprite files are sources, not something Godot imports: keep them outside res:// (or in a folder with a .gdignore), export PNGs or sprite sheets into the project, and give each an assets.json entry (asset-pipeline).

The loop

Author or inspect through the bridge, save, then test -Json. The editor is not the build: CI and exports read files on disk, and neither server compiles your C#. Details in the skill.

Not covered

Running either server in CI (they need the editor), and screenshot regression. aseprite-mcp was not run against a real Aseprite here (it is paid software); the self-test checks the .mcp.json entry it writes on Windows.