Check out our latest project ✨ OpenChapter.io: free ebooks the way its meant to be 📖

Agent Tools

An asset by blakebuk
The page banner background of a mountain and forest
Agent Tools hero image

Quick Information

0 ratings
Agent Tools icon image
blakebuk
Agent Tools

Opens the Godot editor to any MCP-capable coding agent — Claude Code, Claude Desktop, Cursor, Cline, Windsurf, Continue, Zed, and more. 48 tools across 13 namespaces let the agent edit scenes, wire signals, create and style resources, invoke methods, rename classes, run scripted-input scene tests with screenshot + state verification, and more — all through the editor's real APIs instead of hand-editing .tscn/.tres/project.godot files (which is fragile because of UIDs, sub-resource IDs, and signal connection blocks).SETUP REQUIRED AFTER INSTALLEnabling the plugin is not enough — you also need to configure your MCP client to talk to it. Full per-client instructions (Claude Code, Claude Desktop, Cursor, Windsurf, Cline, VS Code, Continue, Zed) are in the README:https://github.com/BlakeBukowsky/GodotTools#configure-your-agentThe MCP bridge is published to npm as godot-agent-tools-mcp. For most clients the config snippet is:command: npxargs: ["-y", "godot-agent-tools-mcp"]WHAT YOU GET (48 TOOLS)scene: new, open, save, current, inspect, add_node, build_tree, remove_node, reparent, duplicate_node, set_property, get_property, call_method, instance_packed, capture_screenshotsignal: connect, disconnect, listscript: create, attachresource: create, set_property, call_methodrefs: validate_project, find_usages, rename, rename_classproject: get_setting, set_settingautoload: add, remove, listinput_map: add_action, add_event, remove_event, list, remove_actionanimation: list, add_animation, remove_animation, add_value_trackdocs: class_ref (query any Godot class's methods/properties/signals from ClassDB)fs: list files by type with globuser_fs: read, list (for the user:// data directory — save files, custom-level JSON, settings)run: scene_headless (input simulation, multi-frame screenshots, state dump, seed, structured errors)editor: reload_filesystem, save_all_scenesWHY THIS OVER HAND-EDITING.tscn, .tres, and project.godot are Godot-specific text formats that break silently when AI agents edit them as plain text. UIDs desync, sub-resource IDs collide, signal connections dangle, inherited-scene overrides malform. This plugin routes every write through Godot's own PackedScene, ResourceSaver, ClassDB, and ResourceUID APIs so round-tripping stays clean.REQUIREMENTSGodot 4.3+ (developed against 4.6)Node.js 18+ for the MCP bridge (npx fetches it automatically on first use)Any MCP-capable agentLICENSEMIT. Source, issues, and full documentation:https://github.com/BlakeBukowsky/GodotTools

Supported Engine Version
4.3
Version String
0.2.1
License Version
MIT
Support Level
community
Modified Date
7 hours ago
Git URL
Issue URL

Godot Agent Tools

Let coding agents (Claude Code, Cursor, Cline, Windsurf, Claude Desktop, etc.) work inside your Godot project safely — editing scenes, wiring signals, creating resources, validating references, and running headless smoke tests through the editor's real APIs instead of hand-editing .tscn / .tres / project.godot as text.

48 tools across 13 namespaces. Works with any MCP-capable agent. Godot 4.3+.


The 2-minute install

  1. Install the addon in your Godot project.
    • Project → AssetLib tab → search Agent ToolsDownloadInstall
    • Project → Project Settings → Plugins → tick Agent Tools
  2. Point your agent at it. Pick your agent below and paste the snippet into the right config file.
  3. Restart your agent and call scene_current to sanity-check. Done.

No Node.js install required — npx downloads the MCP shim on first use.


Why this exists

.tscn, .tres, and project.godot are Godot-specific text formats with fragile invariants: UIDs, sub-resource IDs, inherited-scene overrides, signal [connection] blocks, autoload metadata. An agent editing these as plain text will silently corrupt them. This plugin routes every write through Godot's own PackedScene / ResourceSaver / ClassDB / ResourceUID APIs, so UIDs stay stable, IDs stay unique, and scenes survive round-tripping.


Requirements

  • Godot 4.3+ (developed and tested on 4.6)
  • Node.js 18+ — only needed the first time npx runs the MCP shim; no manual install
  • Any MCP-capable agent

Install

Addon (per Godot project)

Asset Library (recommended):

  1. Open your project in Godot
  2. Click the AssetLib tab at the top of the editor
  3. Search for Agent Tools, hit DownloadInstall
  4. Project Settings → Plugins → enable Agent Tools

Manual (if the Asset Library entry is unavailable):

# From this repo:
cp -r addons/agent_tools /path/to/your/godot/project/addons/

Then enable in Project Settings → Plugins.

MCP shim

No install. The shim is published to npm as godot-agent-tools-mcp. The config snippets below use npx -y godot-agent-tools-mcp, which fetches and caches on first run.


Configure your agent

Pick your agent below. Every snippet is the same two lines ("command": "npx" + "args": ["-y", "godot-agent-tools-mcp"]) — only the file path differs.

Two scopes to choose from:

  • Project-scoped: config lives in your Godot project; only that project sees the tools.
  • User-scoped: config lives in your home directory; every project on the machine sees the tools.
Claude Code

Project-scoped — create .mcp.json at your project root with:

{
  "mcpServers": {
    "godot-agent-tools": {
      "command": "npx",
      "args": ["-y", "godot-agent-tools-mcp"]
    }
  }
}

User-scoped (works in every project) — add the same godot-agent-tools entry under mcpServers in:

  • macOS / Linux: ~/.claude.json
  • Windows: %USERPROFILE%\.claude.json

Restart Claude Code after editing.

Claude Desktop

Edit the config file for your OS:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "godot-agent-tools": {
      "command": "npx",
      "args": ["-y", "godot-agent-tools-mcp"]
    }
  }
}

Quit and relaunch Claude Desktop (the tray icon; not just the window).

Cursor

Project-scoped: .cursor/mcp.json at the project root. User-scoped: ~/.cursor/mcp.json.

{
  "mcpServers": {
    "godot-agent-tools": {
      "command": "npx",
      "args": ["-y", "godot-agent-tools-mcp"]
    }
  }
}

Reload Cursor (Cmd/Ctrl+Shift+P → "Reload Window").

Windsurf

File: ~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "godot-agent-tools": {
      "command": "npx",
      "args": ["-y", "godot-agent-tools-mcp"]
    }
  }
}
Cline (VS Code extension)

Open the Cline sidebar → click the MCP Servers icon → Configure MCP Servers. That opens the settings file; add:

{
  "mcpServers": {
    "godot-agent-tools": {
      "command": "npx",
      "args": ["-y", "godot-agent-tools-mcp"]
    }
  }
}
VS Code (native MCP support)

Project-scoped: .vscode/mcp.json at the project root. User-scoped: in VS Code settings.json under "mcp.servers".

{
  "servers": {
    "godot-agent-tools": {
      "command": "npx",
      "args": ["-y", "godot-agent-tools-mcp"]
    }
  }
}
Continue.dev

File: ~/.continue/config.json. Add under experimental.modelContextProtocolServers:

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "npx",
          "args": ["-y", "godot-agent-tools-mcp"]
        }
      }
    ]
  }
}
Zed

In Zed's settings.json (Cmd/Ctrl+,):

{
  "context_servers": {
    "godot-agent-tools": {
      "command": {
        "path": "npx",
        "args": ["-y", "godot-agent-tools-mcp"]
      }
    }
  }
}

Environment variables (shim side, optional)

Var Default Purpose
GODOT_AGENT_HOST 127.0.0.1 Host the shim dials
GODOT_AGENT_PORT 9920 Port the addon listens on
GODOT_AGENT_TIMEOUT_MS 15000 Per-call timeout

Verify

  1. Open your Godot project in the editor; confirm the Output panel shows:
    [agent_tools] listening on 127.0.0.1:9920
    
  2. In your agent, run scene_current — should return {"open": true, ...} if a scene is open, or {"open": false} otherwise.
  3. Run refs_validate_project — should return {"checked": N, "issues": []} (give or take — issues are real findings).

If either of those returns an error, see Troubleshooting.


Usage

A typical agent-driven flow ("create a main scene with a player"):

scene_new           path=res://Main.tscn root_type=Node2D
scene_add_node      type=CharacterBody2D name=Player
script_create       path=res://scripts/player.gd extends=CharacterBody2D attach_to_node=Player
signal_connect      from=Player signal=body_entered to=. method=_on_player_body_entered
scene_save
refs_validate_project
run_scene_headless  path=res://Main.tscn quit_after_seconds=1

Tool catalog

48 tools across 13 namespaces:

Namespace Tools
scene new, open, current, save, inspect, add_node, build_tree, remove_node, reparent, duplicate_node, set_property, get_property, call_method, instance_packed, capture_screenshot
signal connect, disconnect, list
script create, attach
resource create, set_property, call_method
refs validate_project, find_usages, rename, rename_class
project get_setting, set_setting
autoload add, remove, list
input_map add_action, add_event, list, remove_action, remove_event
animation list, add_animation, remove_animation, add_value_track
docs class_ref
fs list
user_fs read, list
run scene_headless (supports scripted input + screenshot capture)
editor reload_filesystem, save_all_scenes

Full JSON schemas live in mcp/server.mjs.

Highlights

  • refs.find_usages searches for both the path form and the uid:// form of a target, catching UID-indirected references a plain grep would miss.
  • refs.rename moves a file + its .uid and .import sidecars, and rewrites every path-form reference (including project.godot autoload entries). Supports dry_run.
  • signal.connect validates that the signal exists on the source, the method exists on the target, and arity matches — before persisting the connection.
  • docs.class_ref returns a class's methods / properties / signals / constants straight from ClassDB so agents plan against real API, not hallucinated API.
  • run.scene_headless spawns a child godot --headless process and returns exit code + combined stdout/stderr — the only way to catch runtime errors the static validator can't see.
  • scene.capture_screenshot saves a PNG of the editor viewport (clean — no grid/gizmos) so agents can verify visual layout. Empty scenes render as the viewport background color.
  • refs.rename_class rewrites class_name X and every word-boundary reference across .gd/.tscn/.tres. Complements refs.rename (which is file-based).
  • animation.* manipulates AnimationPlayer resources — animations in .tscn text form are one of the least agent-friendly surfaces in Godot.
  • scene.build_tree collapses "build a 30-node UI" from dozens of add_node + set_property round trips into a single recursive spec. Atomic: full rollback on any failure.
  • scene.call_method / resource.call_method invoke any method with argument coercion — so helpers like StyleBoxFlat.set_border_width_all(4) don't force agents to write a .gd script just to call them.

Skipping MCP — raw TCP protocol

The addon's TCP server speaks line-delimited JSON-RPC. Useful for scripting or non-MCP clients.

Request:

{"id": 1, "method": "scene.current", "params": {}}

Response:

{"id": 1, "result": {"open": false}}

Error:

{"id": 1, "error": {"code": -32001, "message": "no scene open"}}

Quick probe from PowerShell (no deps):

$c=[Net.Sockets.TcpClient]::new('127.0.0.1',9920); $s=$c.GetStream(); $w=[IO.StreamWriter]::new($s); $r=[IO.StreamReader]::new($s); $w.WriteLine('{"id":1,"method":"scene.current","params":{}}'); $w.Flush(); $r.ReadLine(); $c.Close()

Development

If you're hacking on the plugin itself, see CONTRIBUTING.md for conventions. Short version:

  1. Adding a tool = three edits (tool file, registry.gd, mcp/server.mjs).
  2. After editing GDScript, toggle the plugin off/on in Project Settings → Plugins — hot-reload doesn't always refresh preloaded modules.
  3. After editing server.mjs, reload the MCP connection in your agent — the tool list is cached at startup.

To run the shim from source (instead of npm) for dev:

git clone https://github.com/BlakeBukowsky/GodotTools.git
cd GodotTools/mcp
npm install
# Then point your agent's MCP config at:
# "command": "node", "args": ["/abs/path/to/GodotTools/mcp/server.mjs"]

To smoke-test the plugin end-to-end (needs the editor running with plugin enabled):

node tests/smoke.mjs

Exercises ~25 tool calls covering create/read/update/delete flows, cleans up res://__smoketest/ after itself, exits non-zero on the first failure.


Troubleshooting

Symptom Cause / fix
Agent can't see any godot_* or scene_* tools MCP config not picked up. Check that the snippet landed in the right file for your agent (see config table), then restart the agent.
Godot editor not reachable on 127.0.0.1:9920 Editor isn't running, or the plugin isn't enabled. Confirm the [agent_tools] listening... line in the Output panel.
Tool call returns method not found: <name> Either the plugin is out of date (update the addon) or the registry cached the old dispatch table — toggle the plugin.
Every tool in a module returns null Parse error in that module's .gd file. Toggle the plugin and watch the Output panel for the actual error.
npx errors with ENOTFOUND registry.npmjs.org Network / firewall issue. Try npx -y godot-agent-tools-mcp manually from a terminal first to confirm.
Port 9920 already in use Another process has it. Edit plugin.gd's DEFAULT_PORT constant and set GODOT_AGENT_PORT in your agent's MCP env.

License

MIT — see LICENSE.


Links

Opens the Godot editor to any MCP-capable coding agent — Claude Code, Claude Desktop, Cursor, Cline, Windsurf, Continue, Zed, and more. 48 tools across 13 namespaces let the agent edit scenes, wire signals, create and style resources, invoke methods, rename classes, run scripted-input scene tests with screenshot + state verification, and more — all through the editor's real APIs instead of hand-editing .tscn/.tres/project.godot files (which is fragile because of UIDs, sub-resource IDs, and signal connection blocks).

SETUP REQUIRED AFTER INSTALL

Enabling the plugin is not enough — you also need to configure your MCP client to talk to it. Full per-client instructions (Claude Code, Claude Desktop, Cursor, Windsurf, Cline, VS Code, Continue, Zed) are in the README:

https://github.com/BlakeBukowsky/GodotTools#configure-your-agent

The MCP bridge is published to npm as godot-agent-tools-mcp. For most clients the config snippet is:

command: npx
args: ["-y", "godot-agent-tools-mcp"]

WHAT YOU GET (48 TOOLS)

scene: new, open, save, current, inspect, add_node, build_tree, remove_node, reparent, duplicate_node, set_property, get_property, call_method, instance_packed, capture_screenshot
signal: connect, disconnect, list
script: create, attach
resource: create, set_property, call_method
refs: validate_project, find_usages, rename, rename_class
project: get_setting, set_setting
autoload: add, remove, list
input_map: add_action, add_event, remove_event, list, remove_action
animation: list, add_animation, remove_animation, add_value_track
docs: class_ref (query any Godot class's methods/properties/signals from ClassDB)
fs: list files by type with glob
user_fs: read, list (for the user:// data directory — save files, custom-level JSON, settings)
run: scene_headless (input simulation, multi-frame screenshots, state dump, seed, structured errors)
editor: reload_filesystem, save_all_scenes

WHY THIS OVER HAND-EDITING

.tscn, .tres, and project.godot are Godot-specific text formats that break silently when AI agents edit them as plain text. UIDs desync, sub-resource IDs collide, signal connections dangle, inherited-scene overrides malform. This plugin routes every write through Godot's own PackedScene, ResourceSaver, ClassDB, and ResourceUID APIs so round-tripping stays clean.

REQUIREMENTS

Godot 4.3+ (developed against 4.6)
Node.js 18+ for the MCP bridge (npx fetches it automatically on first use)
Any MCP-capable agent

LICENSE

MIT. Source, issues, and full documentation:
https://github.com/BlakeBukowsky/GodotTools

Reviews

0 ratings

Your Rating

Headline must be at least 3 characters but not more than 50
Review must be at least 5 characters but not more than 500
Please sign in to add a review

Quick Information

0 ratings
Agent Tools icon image
blakebuk
Agent Tools

Opens the Godot editor to any MCP-capable coding agent — Claude Code, Claude Desktop, Cursor, Cline, Windsurf, Continue, Zed, and more. 48 tools across 13 namespaces let the agent edit scenes, wire signals, create and style resources, invoke methods, rename classes, run scripted-input scene tests with screenshot + state verification, and more — all through the editor's real APIs instead of hand-editing .tscn/.tres/project.godot files (which is fragile because of UIDs, sub-resource IDs, and signal connection blocks).SETUP REQUIRED AFTER INSTALLEnabling the plugin is not enough — you also need to configure your MCP client to talk to it. Full per-client instructions (Claude Code, Claude Desktop, Cursor, Windsurf, Cline, VS Code, Continue, Zed) are in the README:https://github.com/BlakeBukowsky/GodotTools#configure-your-agentThe MCP bridge is published to npm as godot-agent-tools-mcp. For most clients the config snippet is:command: npxargs: ["-y", "godot-agent-tools-mcp"]WHAT YOU GET (48 TOOLS)scene: new, open, save, current, inspect, add_node, build_tree, remove_node, reparent, duplicate_node, set_property, get_property, call_method, instance_packed, capture_screenshotsignal: connect, disconnect, listscript: create, attachresource: create, set_property, call_methodrefs: validate_project, find_usages, rename, rename_classproject: get_setting, set_settingautoload: add, remove, listinput_map: add_action, add_event, remove_event, list, remove_actionanimation: list, add_animation, remove_animation, add_value_trackdocs: class_ref (query any Godot class's methods/properties/signals from ClassDB)fs: list files by type with globuser_fs: read, list (for the user:// data directory — save files, custom-level JSON, settings)run: scene_headless (input simulation, multi-frame screenshots, state dump, seed, structured errors)editor: reload_filesystem, save_all_scenesWHY THIS OVER HAND-EDITING.tscn, .tres, and project.godot are Godot-specific text formats that break silently when AI agents edit them as plain text. UIDs desync, sub-resource IDs collide, signal connections dangle, inherited-scene overrides malform. This plugin routes every write through Godot's own PackedScene, ResourceSaver, ClassDB, and ResourceUID APIs so round-tripping stays clean.REQUIREMENTSGodot 4.3+ (developed against 4.6)Node.js 18+ for the MCP bridge (npx fetches it automatically on first use)Any MCP-capable agentLICENSEMIT. Source, issues, and full documentation:https://github.com/BlakeBukowsky/GodotTools

Supported Engine Version
4.3
Version String
0.2.1
License Version
MIT
Support Level
community
Modified Date
7 hours ago
Git URL
Issue URL

Open Source

Released under the AGPLv3 license

Plug and Play

Browse assets directly from Godot

Community Driven

Created by developers for developers