GameWorld Painter MCP vs Godot MCP Runtime

A side-by-side look at the GameWorld Painter MCP and Godot MCP Runtime MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

GameWorld Painter MCP logoGameWorld Painter MCPGaming · Local subprocess (stdio)MCP server for GameWorld Painter, the layered game world map editor: AI agents (Claude Code, Codex, GitHub Copilot, VS Code, Cursor, Gemini CLI) read, analyze and edit the map open in the app.63GoodAuth: no auth requiredGodot MCP Runtime logoGodot MCP RuntimeGaming · Local subprocess (stdio)MCP server for Godot 4.x with runtime control via injected UDP bridge: input simulation, screenshots, UI discovery, and live GDScript execution while the game is running.69GreatAuth: no auth required

Verdict: choose GameWorld Painter MCP for gaming work as a local process; choose Godot MCP Runtime for gaming as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

GameWorld Painter MCP logoChoose GameWorld Painter MCP when

  • You need dedicated capabilities in the Gaming domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: No auth required.
  • You want tools like get_map_info, open_map, create_map.
Explore GameWorld Painter MCP

Godot MCP Runtime logoChoose Godot MCP Runtime when

  • You need dedicated capabilities in the Gaming domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: No auth required.
  • You want tools like launch_editor, run_project, attach_project.
Explore Godot MCP Runtime

Feature & specification comparison

Rows where the two servers differ are marked.

SpecGameWorld Painter MCP logoGameWorld Painter MCPGodot MCP Runtime logoGodot MCP Runtime
CategoryGamingGaming
Quality signal63/100 · Good69/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNo auth requiredNo auth required
PricingFreeFree
Required env varsNone listedNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars093
Directory activity 1 views 0 installs 0 upvotes 6 views 0 installs 0 upvotes
Tools2839

Tools & capabilities

GameWorld Painter MCP tools 28

  • get_map_infoStart here. The open map: title, unit, bounds, cell size, every layer with what it holds (mask coverage, categories classes and their shares, height range, object kinds and property keys, notes, vector paths), the zones, conventions, and what the user is looking at. Coordinates: x grows east, z grows south, north is up.
  • open_mapOpens the map in the folder at "path" (the folder with metadata.json) in GameWorld Painter. The app then reads and writes that folder through this MCP server, without the user picking it. When no app is connected, the server opens it in the default browser with a link that connects it and opens the map (the user may have to allow Chrome to reach this device). The map open before is saved first.
  • create_mapCreates a new map in the folder at "path" (made if missing; it must not have a map yet) and opens it in the app: the bounds and cell size in the unit of the map, and a set of layers — "basic" (terrain height, ground, zones, water, roads, rivers, borders, rocks, grass, bushes, trees, buildings, enemies, chests, hiding spots, notes), "none" (no layers: make them with create_layer), "notes" (only notes), or "same" (the layers of the map open now, empty). Then shape it with the other tools.
  • get_user_contextWhat the user is pointing at now: the selected area (its bounds and size), the selected items (their layer, kinds, ids), the selected layers, the active layer and tool, the view, the cursor, and what became of your latest changes. The user selects objects with Select (click, box) or the Select area tools (rectangle, ellipse, lasso, polygon, same kind) to show you what they mean. Use it for requests like "this area", "here", "these", "the selected ones".
  • get_project_pathThe full path of the project folder open in the app on this computer (the folder with metadata.json and layers/), the path of every layer file, and what the app has not saved yet. Use it to read or change the files with other tools (scripts, image tools, exporters). The browser does not reveal paths, so the server finds the folder — in your workspace, your working directory, then the home folder — and checks it is the same one (its metadata.json). If it is not found, ask the user for the path and pass it as "path".
  • render_mapAn image of the map from above (north up) with a coordinate grid: the whole map, the view, or a region. Look before and after changes. Optional highlight of a region.
  • describe_regionEverything in a region: its size and bounds, mask coverage, categories shares (zones, ground), heights and slopes, and the items of every layer by kind. Use it to check an area before and after changing it.
  • read_layerThe values of a mask (0–100 %), categories (class names) or height layer as a coarse grid over a region, row by row from north to south. For exact work use describe_region, find_spots or the edit tools instead of reading every cell.
  • find_itemsItems of objects, notes and vector layers with filters: region, kind, properties, distance to a point. measure adds facts per item: the distance to the nearest feature of other layers (e.g. roads, water), the height, the slope, the zone.
  • analyze_itemsHow items are spread in a region: nearest-neighbor distances, pairs closer than min_distance, groups (items within cluster_distance of each other) and the largest empty gaps. Use it to check or even out placements while keeping groups.
  • find_spotsFinds the best spots in a region by a measure of the terrain and the layers, as ranked areas with a center point. open: far from cover (open, exposed ground); enclosed: much cover around (poor view, hidden); high / low: above / below the surroundings (viewpoints, hollows); flat / steep: slope; empty: far from any item and cover (looks empty); far_from / near_to: distance to given layers.
  • analyze_walkabilityWalkable ground in a region (slope below max_slope, outside blocking layers such as water, cliffs, buildings) split into connected parts: the main part (from start, else the largest), isolated pockets where a player could get stuck or never get to, narrow passages, and items standing on blocked or isolated ground.
  • +16 more on the listing page

Godot MCP Runtime tools 39

  • launch_editorOpen the Godot editor GUI for a project for the human user. Use only when the user explicitly asks to "open the editor"; for any agent-driven work, use the headless scene/node tools (add_node, set_node_properties, etc.) instead - the editor cannot be controlled programmatically. Returns plain-text confirmation after spawning the editor process. Errors if projectPath has no project.godot.
  • run_projectSpawn a Godot project as a child process with stdout/stderr captured. Required before take_screenshot, simulate_input, get_ui_elements, run_script, or get_debug_output. Set profiling: true at launch to enable the profiler tools. Use attach_project for one you launched yourself. Verifies MCP bridge readiness before returning success. Returns status with the assigned bridge port. Call stop_project when done. Errors if projectPath is not a Godot project or another session is already active.
  • attach_projectInject the MCP bridge into a Godot process you launch yourself, then wait up to 20s for the bridge to start listening and up to 45s total once it has, so a large project's cold start is absorbed; a port that listens but answers no ping gives up sooner. Call BEFORE Godot launches - Godot reads autoloads only at process start, so a late call returns "bridge did not respond." Recommended pattern: kick off the Godot launch in parallel with this call so the wait absorbs startup. Prefer run_project unless MCP must not spawn Godot. Only one attach session is supported per project at a time (attach mode has no env-var channel, so port and token must be baked into the one shared script); a second attach_project on a project another session already attached to is refused, naming that session. Returns plain-text status with the resolved bridge port. Call detach_project or stop_project when done.
  • detach_projectClear attached-mode runtime state and remove the injected McpBridge autoload. Does NOT stop the manually launched Godot process - that stays running. Use after attach_project when you are done driving the game from MCP. For spawned sessions (run_project), use stop_project instead. Mostly optional now: when the bridge disconnects (you closed Godot), the next runtime tool call probes once and ends the attached session itself, removing the autoload. Calling it afterwards still succeeds idempotently, wording the message to distinguish "an attached session existed and already ended" from "this server never attached to a project". Returns: message confirming detach plus externalProcessPreserved (always true here - that is the point of detach vs stop_project). Errors only when a spawned session is what is active; use stop_project for those.
  • get_debug_outputGet captured stdout/stderr from a spawned Godot project. Use whenever runtime tools fail unexpectedly - script errors, missing nodes, and crash backtraces all surface here. Still works after the process exits or crashes: the session clears itself on exit but the captured logs are retained until stop_project. Requires run_project (not attach_project; attached mode does not capture output). Returns: output/errors (last `limit` lines each, default 200), running (false after exit, null when attached), exitCode after exit, attached:true with empty arrays in attached mode.
  • stop_projectStop the spawned Godot project and clean up bridge state. Call when done with runtime testing, even after a crash, and even if you closed the Godot window yourself: it frees the process slot and clears the flag blocking scene-editing tools. A process that exited on its own already removed the bridge autoload at that moment, and this still succeeds - it reports alreadyExited:true with the exit code and the logs captured before the exit, and leaves a finished profiler capture readable. Attached sessions detach without killing the external process. Returns: message, mode, externalProcessPreserved, alreadyExited, exitCode (already-exited case), and condensed finalOutput/finalErrors (capped at 200); get_debug_output has the full log. Errors only when there is no session and no exited process to report.
  • take_screenshotCapture a PNG of the running viewport. responseMode: preview (default - saves full PNG, returns bounded inline preview at 960x540), full (full inline PNG; use for small text or pixel-level inspection), path_only (saved-path only, no inline image). Saved under .mcp/godot-runtime/screenshots/ (persists after stop_project). Returns: inline image block (full/preview modes), plus path and size of the saved PNG; previewPath/previewSize in preview mode; warnings for non-fatal runtime errors. Errors if no session or bridge times out (default 10000ms).
  • simulate_inputSimulate sequential input in a running project and report what each action did. Action `type`: key, mouse_button, mouse_motion, click_element, action, text, wait. For key/mouse_button/action, omit `pressed` to tap (press+release); set it to hold or release. click_element resolves by node path/name (see get_ui_elements), not visible text. Returns: results[] per action with ok, timing, signals fired, the Control hit, UI `changes` (appeared/disappeared/changed), `watch` samples, and `errors` from input handlers (spawned sessions only). Invalid batches inject nothing; a runtime failure stops the batch and skips the rest.
  • get_ui_elementsWalk the running scene tree and return all Control nodes with positions, sizes, types, and text content. Always call this before simulate_input click_element actions to discover valid element names and paths. Requires an active runtime session (run_project or attach_project). visibleOnly defaults true; pass false to include hidden Controls. filter narrows by class. Returns: elements[] with path/type/rect/visible plus optional text/disabled/tooltip.
  • run_scriptExecute a custom GDScript in the live running project with full scene tree access. Requires an active runtime session. Script must extend RefCounted and define func execute(scene_tree: SceneTree) -> Variant. Return values are JSON-serialized (primitives, Vector2/3, Color, Dictionary, Array, and Node path strings). Use print() for debug output - it appears in get_debug_output, not in the result. In spawned mode, stderr runtime errors escalate to errors (when the script returns null) or surface as warnings. Returns: { success, result, warnings?, tip? } where result is the JSON-serialized return value of execute().
  • list_autoloadsList all registered autoloads in a project with paths and singleton status. Use first when diagnosing headless failures - broken autoloads crash all headless ops, so this tells you what is loaded. No Godot process required (reads project.godot directly). Returns: [{ name, path, singleton }].
  • add_autoloadRegister a new autoload in a project. autoloadPath accepts "res://..." or a project-relative path (auto-prefixed). singleton defaults true (accessible globally by name). No Godot process required. Warning: autoloads initialize in headless mode - a broken script will crash every subsequent headless op; validate before adding. Returns plain-text confirmation with the registered name, path, and singleton flag. Errors if an autoload with the same name already exists; use update_autoload to modify.
  • +27 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

GameWorld Painter MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "game-world-painter-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "game-world-painter-mcp"
      ]
    }
  }
}

Godot MCP Runtime

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "erodenn-godot-mcp-runtime": {
      "command": "npx",
      "args": [
        "-y",
        "godot-mcp-runtime"
      ]
    }
  }
}

Frequently asked questions

GameWorld Painter MCP is categorized under Gaming and uses a local stdio subprocess. Godot MCP Runtime belongs to Gaming and uses a local stdio subprocess. Pick GameWorld Painter MCP for gaming work and Godot MCP Runtime for gaming.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

GameWorld Painter MCP is listed as free. Auth: no auth required. Godot MCP Runtime is listed as free. Auth: no auth required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add game-world-painter-mcp and erodenn-godot-mcp-runtime as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, GameWorld Painter MCP has a quality signal of 63/100 (Good) with 1 views, 0 installs and 0 GitHub stars. Godot MCP Runtime has 69/100 (Great) with 6 views, 0 installs and 93 GitHub stars.