Skip to main content
Glama

Godot MCP Server

Connect Claude to your Godot 4 project. Claude can read and manipulate scenes, nodes, scripts, and assets directly in your editor.


Architecture

Claude (claude.ai)
    │  MCP (stdio)
    ▼
godot-mcp-server  (Node.js, runs locally)
    │  HTTP  localhost:9080
    ▼
MCP Bridge Plugin  (GDScript, runs inside Godot editor)
    │
    ▼
Godot Editor

Related MCP server: Godot MCP Server

Setup

1. Install the MCP Server

cd godot-mcp-server
npm install
npm run build

2. Install the Godot Plugin

Copy the godot-plugin/addons/mcp_bridge folder into your Godot project's addons/ directory:

your-godot-project/
└── addons/
    └── mcp_bridge/
        ├── plugin.cfg
        ├── mcp_bridge.gd
        └── mcp_http_server.gd

Then in Godot: Project → Project Settings → Plugins → enable MCP Bridge.

You should see: [MCP Bridge] Listening on http://127.0.0.1:9080 in the Output panel.

3. Configure Claude

Add to your Claude MCP config (claude_desktop_config.json or equivalent):

{
  "mcpServers": {
    "godot": {
      "command": "node",
      "args": ["/absolute/path/to/godot-mcp-server/dist/index.js"],
      "env": {
        "GODOT_PORT": "9080"
      }
    }
  }
}

Environment Variables

Variable

Default

Description

GODOT_HOST

127.0.0.1

Host where Godot is running

GODOT_PORT

9080

Port the MCP Bridge plugin listens on


Available Tools

Scene Tools

Tool

Description

godot_list_scenes

List all open scenes

godot_get_scene_tree

Get full node hierarchy

godot_get_node

Get all properties of a specific node

godot_add_node

Add a new node to a scene

godot_remove_node

Remove a node and its children

godot_set_node_property

Set one or more properties on a node

godot_reparent_node

Move a node to a new parent

godot_instantiate_scene

Add a .tscn as an instance in a scene

godot_save_scene

Save the current scene to disk

Script Tools

Tool

Description

godot_read_script

Read a .gd file

godot_write_script

Write/create a .gd file

godot_run_script

Execute a GDScript expression in the editor

Asset / Filesystem Tools

Tool

Description

godot_list_files

List files in the project

godot_get_resource

Get metadata about a resource

godot_assign_resource

Assign a resource to a node property

godot_create_scene

Create a new empty .tscn file


Example Prompts

Once connected, you can ask Claude things like:

  • "Show me the scene tree of the current scene"

  • "Add a Sprite2D called PlayerSprite as a child of /root/Main/Player"

  • "Set the position of the Enemy node to (400, 300)"

  • "Instantiate res://enemies/goblin.tscn under /root/Level at position (200, 150)"

  • "List all .tscn files in the project"

  • "Read the player.gd script"

  • "Create a new scene at res://levels/level2.tscn with a Node2D root"


Notes

  • The MCP Bridge plugin must be active and Godot must be open for any tools to work.

  • godot_run_script executes arbitrary GDScript — use with care.

  • Scene edits are live in the editor but not saved automatically. Use godot_save_scene to persist changes.

  • The plugin binds to 127.0.0.1 only (no external access).

Available Tools

16 tools
godot_add_nodeAdd Node to SceneA

Adds a new node of the specified type as a child of the given parent node.

Args:

  • parent_path (string): Node path of the parent e.g. "/root/Main"

  • node_type (string): Godot class name e.g. "Sprite2D", "CharacterBody2D", "Label", "AudioStreamPlayer"

  • node_name (string): Name for the new node

  • scene_path (string, optional): Scene to modify. Defaults to active scene.

  • properties (object, optional): Initial property values to set on the new node.

Returns: { name, type, path } of the created node.

Examples:

  • Use when: "Add a Sprite2D called PlayerSprite under /root/Main"

  • Use when: "Add a Label node to the HUD with text 'Score: 0'"

Inputs: parent_path (required), node_type (required), node_name (required), scene_path, +1 more.

godot_assign_resourceAssign Resource to Node PropertyA
Idempotent

Loads a resource and assigns it to a property of a node. Useful for setting textures, materials, audio streams, etc.

Args:

  • node_path (string): Node path e.g. "/root/Main/Player/Sprite2D"

  • property (string): Property name e.g. "texture", "material", "stream"

  • resource_path (string): res:// path to the resource to assign

  • scene_path (string, optional): Scene to modify. Defaults to active scene.

Returns: Confirmation of the assignment.

Examples:

  • Use when: "Set the player sprite texture to res://assets/player.png" -> node_path: "/root/Main/Player/Sprite2D", property: "texture", resource_path: "res://assets/player.png"

Inputs: node_path (required), property (required), resource_path (required), scene_path.

godot_create_sceneCreate New Scene FileA

Creates a new empty scene file (.tscn) with a specified root node type.

Args:

  • scene_path (string): res:// path for the new scene e.g. "res://levels/level2.tscn"

  • root_type (string): Godot class for the root node e.g. "Node2D", "Node3D", "Control", "CharacterBody2D"

  • root_name (string, optional): Name for the root node (defaults to the scene file stem)

  • open_in_editor (boolean, optional): Open the new scene in the editor (default: true)

Returns: { path, root_node, root_type } of the created scene.

Inputs: scene_path (required), root_type (required), root_name, open_in_editor.

godot_get_nodeGet Node PropertiesA
Read-onlyIdempotent

Returns all properties of a specific node by its scene path.

Args:

  • node_path (string): Full node path e.g. "/root/Main/Player" or "Player/Sprite2D"

  • scene_path (string, optional): Scene to look in. Defaults to active scene.

Returns: { name, type, path, properties: Record<string, unknown> }

Examples:

  • Use when: "What are the properties of the Player node?"

  • Use when: "Get transform of res://enemy.tscn root node"

Inputs: node_path (required), scene_path.

godot_get_resourceGet Resource InfoA
Read-onlyIdempotent

Returns metadata about a specific resource file (texture, audio, mesh, etc.).

Args:

  • resource_path (string): res:// path to the resource e.g. "res://assets/player.png"

Returns: { path, type, name, metadata: object }

Inputs: resource_path (required).

godot_get_scene_treeGet Scene TreeA
Read-onlyIdempotent

Returns the full node hierarchy of the specified scene (or the currently active scene if no path given).

Args:

  • scene_path (string, optional): Path to the scene file e.g. "res://levels/main.tscn". Defaults to the active scene.

  • depth (number, optional): Maximum recursion depth (default: 10, max: 50).

Returns: Nested node tree: { name, type, path, children[], properties? }

Examples:

  • Use when: "Show me the scene tree" or "What nodes are in res://player.tscn?"

Inputs: scene_path, depth.

godot_instantiate_sceneInstantiate Scene as NodeA

Instantiates an existing .tscn file as a child node inside another scene.

Args:

  • scene_to_instantiate (string): res:// path of the scene to instance e.g. "res://enemies/goblin.tscn"

  • parent_path (string): Node path of the parent in the target scene e.g. "/root/Main"

  • node_name (string, optional): Override the instance name. Defaults to the scene file's stem.

  • target_scene_path (string, optional): Scene that will receive the instance. Defaults to active scene.

  • properties (object, optional): Properties to override on the root node of the instance.

Returns: { name, type, path } of the instantiated node.

Examples:

  • Use when: "Add a Goblin enemy to the level at position (300, 100)" -> scene_to_instantiate: "res://enemies/goblin.tscn", parent_path: "/root/Level" properties: { "position": {"x": 300, "y": 100} }

Inputs: scene_to_instantiate (required), parent_path (required), node_name, target_scene_path, +1 more.

godot_list_filesList Project FilesA
Read-onlyIdempotent

Lists files in the Godot project filesystem under a given directory.

Args:

  • directory (string, optional): res:// directory path (default: "res://")

  • filter_type (string, optional): Filter by extension e.g. "tscn", "gd", "png", "tres". Omit for all.

  • recursive (boolean, optional): Include subdirectories (default: false)

  • limit (number, optional): Max results (default: 50, max: 200)

  • offset (number, optional): Pagination offset (default: 0)

Returns: { total, count, offset, has_more, items: [{ path, type, name }] }

Inputs: directory, filter_type, recursive, limit, +1 more.

godot_list_scenesList Open ScenesA
Read-onlyIdempotent

Returns all scenes currently open in the Godot editor, including the active scene.

Returns: Array of scene objects: { path: string, root_node: string, root_type: string, node_count: number }

Examples:

  • Use when: "What scenes are open?" or "List all scenes"

Inputs: no named parameters.

godot_read_scriptRead GDScript FileA
Read-onlyIdempotent

Reads the content of a GDScript (.gd) or other text-based resource file.

Args:

  • file_path (string): res:// path e.g. "res://player/player.gd"

Returns: { path: string, content: string }

Inputs: file_path (required).

godot_remove_nodeRemove Node from SceneA
Destructive

Removes a node (and all its children) from the scene. This is destructive and cannot be undone via MCP.

Args:

  • node_path (string): Full node path to remove e.g. "/root/Main/OldEnemy"

  • scene_path (string, optional): Scene to modify. Defaults to active scene.

Returns: Confirmation message.

Inputs: node_path (required), scene_path.

godot_reparent_nodeReparent NodeA

Moves a node to a new parent within the same scene, preserving its world transform.

Args:

  • node_path (string): Node to move e.g. "/root/Main/Enemy"

  • new_parent_path (string): Destination parent e.g. "/root/Main/EnemyGroup"

  • scene_path (string, optional): Scene to modify. Defaults to active scene.

  • keep_global_transform (boolean, optional): Whether to preserve world-space transform (default: true)

Returns: New node path after reparenting.

Inputs: node_path (required), new_parent_path (required), scene_path, keep_global_transform.

godot_run_scriptRun GDScript ExpressionA
Destructive

Executes a GDScript expression or block in the Godot editor context (via EditorScript). Useful for querying engine state or performing quick operations.

Args:

  • code (string): GDScript code to execute. Should be a valid expression or a series of statements. Has access to: Engine, ProjectSettings, EditorInterface (in editor context).

  • timeout_ms (number, optional): Max execution time in milliseconds (default: 5000, max: 30000).

Returns: { success: boolean, output: string, error?: string }

Examples:

  • Use when: "What is the current project name?" -> code: "ProjectSettings.get_setting('application/config/name')"

  • Use when: "List all files in res://levels/" -> code: "DirAccess.get_files_at('res://levels/')"

Warning: This runs arbitrary code in the editor. Use with care.

Inputs: code (required), timeout_ms.

godot_save_sceneSave SceneA
Idempotent

Saves the specified scene (or active scene) to disk.

Args:

  • scene_path (string, optional): res:// path of the scene to save. Omit for active scene.

  • save_as (string, optional): New res:// path to save a copy to (like Save As).

Returns: Confirmation with the saved path.

Inputs: scene_path, save_as.

godot_set_node_propertySet Node PropertyA

Sets one or more properties on an existing node.

Args:

  • node_path (string): Full node path e.g. "/root/Main/Player"

  • properties (object): Key/value pairs to set. Values must be JSON-serialisable Godot variants. Common keys: "position", "rotation", "scale", "visible", "modulate", "text", "texture"

  • scene_path (string, optional): Scene to modify. Defaults to active scene.

Returns: Updated property values.

Examples:

  • Use when: "Move the Player to position (100, 200)" -> properties: { "position": {"x": 100, "y": 200} }

  • Use when: "Hide the HUD node" -> properties: { "visible": false }

Inputs: node_path (required), properties (required), scene_path.

godot_write_scriptWrite GDScript FileA
Idempotent

Writes (creates or overwrites) a GDScript file at the given path.

Args:

  • file_path (string): res:// path e.g. "res://player/player.gd"

  • content (string): Full GDScript source code to write.

Returns: Confirmation with the file path.

Examples:

  • Use when: "Create a new movement script for the Player"

Inputs: file_path (required), content (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.3/5.0

    Scored across 16 tools

    Disambiguation5/5

    Each tool has a distinct purpose with clear boundaries: node operations (add, get, remove, reparent, set property), scene operations (create, get tree, instantiate, save, list), resource operations (assign, get), file operations (list files, read/write script), and a general-purpose run_script. No significant overlap exists; descriptions clarify specific use cases.

    Naming Consistency5/5

    All tools follow a consistent 'godot_verb_noun' pattern with snake_case throughout. The verb-noun structure is predictable (e.g., godot_add_node, godot_get_scene_tree), making the set easy to navigate and understand.

    Tool Count4/5

    16 tools is slightly high but reasonable for a Godot editor server covering nodes, scenes, resources, files, and scripts. Each tool serves a specific function, though some could potentially be consolidated (e.g., list_files and list_scenes). The count aligns well with the domain's complexity.

    Completeness5/5

    The toolset provides comprehensive coverage for Godot editor interactions: full CRUD for nodes (add, get, remove, reparent, set property), scene lifecycle (create, instantiate, save, list), resource handling (assign, get), file management (list, read/write scripts), and advanced operations (run_script). No obvious gaps exist for typical agent workflows.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      F
      maintenance
      Enables complete natural language control of Godot Engine 4.5+ with 76 tools for managing scripts, scenes, nodes, animations, physics, tilemaps, audio, shaders, navigation, particles, UI, lighting, assets, and exports. Integrates with Claude Desktop, VS Code, and Ollama for AI-assisted game development.
      192 npm
      2
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Bridges Claude Code with the Godot editor via WebSocket, enabling AI-driven game development commands such as scene tree inspection and code generation.
      807 npm
      3
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to read and edit Godot 4.x scenes and resources, introspect the class API, run the game in a managed headless process with frame stepping, input injection and screenshots, validate scripts, and diagnose code via a built-in GDScript LSP plus a bridge to an already open editor.
      23
      MIT