Connects Claude or Cursor directly to the Godot 4.x editor via WebSocket, exposing 42 tools across scene manipulation, script editing, project settings, and runtime control. You can create nodes, attach scripts, modify properties, run scenes, and query the ClassDB without leaving your AI chat. Ships with a browser based project visualizer that maps script relationships and lets you edit code with live sync back to Godot. Installation is a plugin drop in plus an npx command in your MCP config. Best when you're prototyping game mechanics, refactoring GDScript, or need AI to read and modify scene trees while you work. No remote connections, one instance at a time, changes save directly.
claude mcp add godot-mcp -- npx -y godot-mcp-serverRun in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.
Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.
Verified live against the running server on Jun 11, 2026.
get_godot_statusCheck if Godot editor is connected to the MCP server.Check if Godot editor is connected to the MCP server.
No parameters — call it with no arguments.
get_guideRead a short markdown guide from the server. Same content as the MCP resources/read protocol, exposed as a tool so it works in MCP clients that do not support resources (e.g. Claude Desktop, Cursor chat). Call with no args to list available guides: testing-loop, scene-editing,...1 paramsRead a short markdown guide from the server. Same content as the MCP resources/read protocol, exposed as a tool so it works in MCP clients that do not support resources (e.g. Claude Desktop, Cursor chat). Call with no args to list available guides: testing-loop, scene-editing,...
slugstringlist_dirList files and folders under a Godot project path (e.g., res://). Returns arrays of files and folders in the specified directory.1 paramsList files and folders under a Godot project path (e.g., res://). Returns arrays of files and folders in the specified directory.
root*stringread_fileRead a text file from the Godot project, optionally a specific line range. Useful for reading GDScript files, scene files, or any text-based content.3 paramsRead a text file from the Godot project, optionally a specific line range. Useful for reading GDScript files, scene files, or any text-based content.
path*stringend_linenumberstart_linenumbersearch_projectSearch the Godot project for a substring and return file hits with line numbers. Useful for finding usages of functions, variables, or any text pattern.2 paramsSearch the Godot project for a substring and return file hits with line numbers. Useful for finding usages of functions, variables, or any text pattern.
globstringquery*stringcreate_scriptCreate a NEW GDScript file (.gd) that does not exist yet. Use this for creating new scripts, NOT for editing existing files (use edit_script for edits). Use classdb_query to verify unfamiliar Godot class methods. After creating a script, consider using run_scene to test and ge...2 paramsCreate a NEW GDScript file (.gd) that does not exist yet. Use this for creating new scripts, NOT for editing existing files (use edit_script for edits). Use classdb_query to verify unfamiliar Godot class methods. After creating a script, consider using run_scene to test and ge...
path*stringcontent*stringcreate_sceneCreate a new Godot scene (.tscn) file with nodes. Use this to create player scenes, UI screens, game objects, etc.5 paramsCreate a new Godot scene (.tscn) file with nodes. Use this to create player scenes, UI screens, game objects, etc.
nodesarrayscene_path*stringattach_scriptstringroot_node_namestringroot_node_type*stringread_sceneRead and parse a scene file to get its full node structure and properties. Use this to understand a scene before editing.2 paramsRead and parse a scene file to get its full node structure and properties. Use this to understand a scene before editing.
scene_path*stringinclude_propertiesbooleanadd_nodeAdd a node to an existing scene file. Supports an optional script attachment, group memberships, and a tree of children created in the same call (1 tool call instead of N). Children format: {name|node_name, type|node_type, properties?, script?, groups?, children?}. Both key st...8 paramsAdd a node to an existing scene file. Supports an optional script attachment, group memberships, and a tree of children created in the same call (1 tool call instead of N). Children format: {name|node_name, type|node_type, properties?, script?, groups?, children?}. Both key st...
groupsarrayscriptstringchildrenarraynode_name*stringnode_type*stringpropertiesobjectscene_path*stringparent_pathstringremove_nodeRemove a node from an existing scene file.2 paramsRemove a node from an existing scene file.
node_path*stringscene_path*stringmodify_node_propertyModify a single property on a node in a .tscn scene file. For multiple properties at once use set_node_properties. ALWAYS use a tool to modify .tscn files — NEVER edit them as text. To attach or change a script, use attach_script (NOT modify_node_property with property="script...4 paramsModify a single property on a node in a .tscn scene file. For multiple properties at once use set_node_properties. ALWAYS use a tool to modify .tscn files — NEVER edit them as text. To attach or change a script, use attach_script (NOT modify_node_property with property="script...
value*valuenode_pathstringscene_path*stringproperty_name*stringrename_nodeRename a node in a scene.3 paramsRename a node in a scene.
new_name*stringnode_path*stringscene_path*stringmove_nodeMove a node to a different parent in a scene and optionally control its position among siblings.4 paramsMove a node to a different parent in a scene and optionally control its position among siblings.
node_path*stringscene_path*stringsibling_indexnumbernew_parent_path*stringattach_scriptAttach or change a script on a node in a scene.3 paramsAttach or change a script on a node in a scene.
node_pathstringscene_path*stringscript_path*stringdetach_scriptRemove a script from a node in a scene.2 paramsRemove a script from a node in a scene.
node_path*stringscene_path*stringset_collision_shapeCreate and assign a collision shape resource to a CollisionShape2D or CollisionShape3D node. Supports: CircleShape2D, RectangleShape2D, CapsuleShape2D, SphereShape3D, BoxShape3D, etc.4 paramsCreate and assign a collision shape resource to a CollisionShape2D or CollisionShape3D node. Supports: CircleShape2D, RectangleShape2D, CapsuleShape2D, SphereShape3D, BoxShape3D, etc.
node_pathstringscene_path*stringshape_type*stringshape_paramsobjectset_sprite_textureAssign a texture resource to a Sprite2D / Sprite3D / TextureRect node in a .tscn scene file. Modes: • FromPath — load any texture file from disk (png/jpg/webp/svg/.tres) via load(). Returns whatever Texture2D the importer produced (usually CompressedTexture2D). Most common aft...4 paramsAssign a texture resource to a Sprite2D / Sprite3D / TextureRect node in a .tscn scene file. Modes: • FromPath — load any texture file from disk (png/jpg/webp/svg/.tres) via load(). Returns whatever Texture2D the importer produced (usually CompressedTexture2D). Most common aft...
node_pathstringscene_path*stringtexture_type*stringFromPath · ImageTexture · NewImageTexture · PlaceholderTexture2D · GradientTexture2D · NoiseTexture2Dtexture_paramsobjectinstance_sceneAdd an instance of another scene (.tscn) as a child node. This is how you compose scenes from reusable parts (like prefabs). The instance maintains a live reference to the source scene. Use this instead of add_node when you want to reuse an existing scene.5 paramsAdd an instance of another scene (.tscn) as a child node. This is how you compose scenes from reusable parts (like prefabs). The instance maintains a live reference to the source scene. Use this instead of add_node when you want to reuse an existing scene.
node_namestringpropertiesobjectscene_path*stringparent_pathstringinstance_path*stringset_meshCreate and assign a mesh resource to a MeshInstance3D node. REQUIRED to make 3D geometry visible. Primitive types: BoxMesh, SphereMesh, CylinderMesh, CapsuleMesh, PlaneMesh, PrismMesh, TorusMesh, QuadMesh, TextMesh. Or load from file.4 paramsCreate and assign a mesh resource to a MeshInstance3D node. REQUIRED to make 3D geometry visible. Primitive types: BoxMesh, SphereMesh, CylinderMesh, CapsuleMesh, PlaneMesh, PrismMesh, TorusMesh, QuadMesh, TextMesh. Or load from file.
mesh_type*stringnode_pathstringscene_path*stringmesh_paramsobjectset_materialCreate and assign a material to a MeshInstance3D, CSG, or GeometryInstance3D node. Supports StandardMaterial3D or loading from file.5 paramsCreate and assign a material to a MeshInstance3D, CSG, or GeometryInstance3D node. Supports StandardMaterial3D or loading from file.
node_pathstringscene_path*stringmaterial_type*stringsurface_indexnumbermaterial_paramsobjectget_node_spatial_infoQuery computed 3D spatial data for a Node3D in a scene file. Returns local/global positions, scales, rotation quaternions, and subtree bounding boxes (AABB) when available. Use this before making precise 3D placement decisions.3 paramsQuery computed 3D spatial data for a Node3D in a scene file. Returns local/global positions, scales, rotation quaternions, and subtree bounding boxes (AABB) when available. Use this before making precise 3D placement decisions.
node_pathstringscene_path*stringinclude_boundsbooleanmeasure_node_distanceMeasure the world-space distance between two Node3D nodes in a scene file. Returns both the full 3D delta and the horizontal XZ distance.3 paramsMeasure the world-space distance between two Node3D nodes in a scene file. Returns both the full 3D delta and the horizontal XZ distance.
scene_path*stringto_node_path*stringfrom_node_path*stringsnap_node_to_gridSnap a Node3D position to a grid in local or global space. Useful for modular level building and keeping 3D scenes aligned.5 paramsSnap a Node3D position to a grid in local or global space. Useful for modular level building and keeping 3D scenes aligned.
axesarrayspacestringgrid_size*valuenode_pathstringscene_path*stringset_node_propertiesSet MULTIPLE properties on a node in a single tool call. Non-atomic: each property is applied independently; the response separates "applied" from "failed" so partial success surfaces clearly. Saves the scene once at the end. Resource-typed properties must use set_resource_pro...3 paramsSet MULTIPLE properties on a node in a single tool call. Non-atomic: each property is applied independently; the response separates "applied" from "failed" so partial success surfaces clearly. Saves the scene once at the end. Resource-typed properties must use set_resource_pro...
node_pathstringproperties*objectscene_path*stringset_node_groupsSet, add, or remove a node's group memberships in a .tscn scene file. Groups persist to disk so the running game can call get_tree().get_nodes_in_group(name).4 paramsSet, add, or remove a node's group memberships in a .tscn scene file. Groups persist to disk so the running game can call get_tree().get_nodes_in_group(name).
modestringreplace · add · removegroups*arraynode_pathstringscene_path*stringget_node_groupsRead the list of groups a node belongs to in a .tscn scene file.2 paramsRead the list of groups a node belongs to in a .tscn scene file.
node_pathstringscene_path*stringfind_nodes_in_groupFind every node in a .tscn that belongs to a given group. Returns paths, names, and types. Useful for verifying that level.gd will actually pick up the right nodes via get_tree().get_nodes_in_group().2 paramsFind every node in a .tscn that belongs to a given group. Returns paths, names, and types. Useful for verifying that level.gd will actually pick up the right nodes via get_tree().get_nodes_in_group().
group*stringscene_path*stringset_resource_propertyModify a property on a Resource that is currently held by a node (or by another resource attached to that node). Use this to tweak shape radii, material colors, gradient stops, etc., WITHOUT recreating the resource. resource_path walks from the node down to the resource using...5 paramsModify a property on a Resource that is currently held by a node (or by another resource attached to that node). Use this to tweak shape radii, material colors, gradient stops, etc., WITHOUT recreating the resource. resource_path walks from the node down to the resource using...
value*valuenode_pathstringscene_path*stringproperty_name*stringresource_path*stringsave_resource_to_fileSave a Resource currently held by a node (or sub-resource) to a standalone .tres file so it can be referenced by other scenes / shared / committed. The node's property is then re-pointed to the loaded-from-disk version, so future set_resource_property calls write through to th...4 paramsSave a Resource currently held by a node (or sub-resource) to a standalone .tres file so it can be referenced by other scenes / shared / committed. The node's property is then re-pointed to the loaded-from-disk version, so future set_resource_property calls write through to th...
save_to*stringnode_pathstringscene_path*stringresource_path*stringget_resource_infoInspect ANY Godot Resource. Two modes: • path mode: pass {path: "res://foo.png"} for a resource on disk (.tres / .res / image / .glb / .ogg / .tscn / etc.) • node mode: pass {scene_path, node_path, resource_property} to inspect a resource attached to a node WITHOUT having to s...4 paramsInspect ANY Godot Resource. Two modes: • path mode: pass {path: "res://foo.png"} for a resource on disk (.tres / .res / image / .glb / .ogg / .tscn / etc.) • node mode: pass {scene_path, node_path, resource_property} to inspect a resource attached to a node WITHOUT having to s...
pathstringnode_pathstringscene_pathstringresource_propertystringlist_signal_connectionsList signal connections involving a node. source="scene_file" (default) reads connections persisted to a .tscn. source="runtime" requires the game to be running and reads live connections from the SceneTree. Use the runtime mode to verify dynamically-connected signals (those c...5 paramsList signal connections involving a node. source="scene_file" (default) reads connections persisted to a .tscn. source="runtime" requires the game to be running and reads live connections from the SceneTree. Use the runtime mode to verify dynamically-connected signals (those c...
sourcestringscene_file · runtimenode_path*stringscene_pathstringinclude_incomingbooleaninclude_outgoingbooleanconnect_signalConnect a signal between two nodes inside a .tscn scene file. The target script must define the method (will refuse otherwise). Equivalent to clicking the "+" in the editor's Node > Signals panel and persists the connection to the .tscn. NOTE: scripts must be attached via atta...6 paramsConnect a signal between two nodes inside a .tscn scene file. The target script must define the method (will refuse otherwise). Equivalent to clicking the "+" in the editor's Node > Signals panel and persists the connection to the .tscn. NOTE: scripts must be attached via atta...
flagsnumbermethod*stringsignal*stringto_node*stringfrom_node*stringscene_path*stringdisconnect_signalRemove a signal connection from a .tscn scene file. No-op if the connection doesn't exist.5 paramsRemove a signal connection from a .tscn scene file. No-op if the connection doesn't exist.
method*stringsignal*stringto_node*stringfrom_node*stringscene_path*stringedit_scriptApply a SMALL, SURGICAL code edit (1-10 lines) to GDScript files. Auto-applies changes. For large changes, call multiple times. ONLY for .gd files - NEVER for .tscn scene files. Use classdb_query to verify unfamiliar Godot class methods. After making changes, consider using ru...1 paramsApply a SMALL, SURGICAL code edit (1-10 lines) to GDScript files. Auto-applies changes. For large changes, call multiple times. ONLY for .gd files - NEVER for .tscn scene files. Use classdb_query to verify unfamiliar Godot class methods. After making changes, consider using ru...
edit*objectvalidate_scriptValidate a GDScript file for syntax errors using Godot's built-in parser. Call after creating or modifying scripts to ensure they are error-free.1 paramsValidate a GDScript file for syntax errors using Godot's built-in parser. Call after creating or modifying scripts to ensure they are error-free.
path*stringcreate_folderCreate a directory (with parent directories if needed).1 paramsCreate a directory (with parent directories if needed).
path*stringdelete_filePermanently delete a file from the project. REQUIRES confirm=true as an explicit safety gate — omitting confirm returns an error. Creates a .bak backup alongside the original by default (disable with create_backup=false). REFUSES if the file is currently open in the editor (an...4 paramsPermanently delete a file from the project. REQUIRES confirm=true as an explicit safety gate — omitting confirm returns an error. Creates a .bak backup alongside the original by default (disable with create_backup=false). REFUSES if the file is currently open in the editor (an...
path*stringforcebooleanconfirm*booleancreate_backupbooleanrename_fileRename or move a file, optionally updating references in other files.3 paramsRename or move a file, optionally updating references in other files.
new_path*stringold_path*stringupdate_referencesbooleanlist_scriptsList all GDScript files in the project with basic metadata.List all GDScript files in the project with basic metadata.
No parameters — call it with no arguments.
get_project_settingsConcise project settings summary: main_scene, window size/stretch, physics tick rate, and render basics.2 paramsConcise project settings summary: main_scene, window size/stretch, physics tick rate, and render basics.
include_renderbooleaninclude_physicsbooleanget_input_mapReturn the full InputMap: built-in actions (ui_*, spatial_editor/*) plus all project-defined actions from project.godot. Each action maps to an object with "events" (array of key/mouse/gamepad bindings) and optionally "deadzone". Use this before configure_input_map to see curr...1 paramsReturn the full InputMap: built-in actions (ui_*, spatial_editor/*) plus all project-defined actions from project.godot. Each action maps to an object with "events" (array of key/mouse/gamepad bindings) and optionally "deadzone". Use this before configure_input_map to see curr...
include_deadzonesbooleanget_collision_layersReturn named 2D/3D physics collision layers from ProjectSettings.Return named 2D/3D physics collision layers from ProjectSettings.
No parameters — call it with no arguments.
get_node_propertiesGet available properties for a Godot node type. Use this to discover what properties exist on a node type (e.g., anchors_preset for Control, position for Node2D).1 paramsGet available properties for a Godot node type. Use this to discover what properties exist on a node type (e.g., anchors_preset for Control, position for Node2D).
node_type*stringget_console_logReturn the latest lines from the Godot editor output log.1 paramsReturn the latest lines from the Godot editor output log.
max_linesnumberget_errorsGet errors and warnings from both the Godot Output panel and the Debugger > Errors tab. Returns file paths, line numbers, severity, stack traces, and which source each error came from. If errors mention a missing method or property, use classdb_query to verify the correct API...2 paramsGet errors and warnings from both the Godot Output panel and the Debugger > Errors tab. Returns file paths, line numbers, severity, stack traces, and which source each error came from. If errors mention a missing method or property, use classdb_query to verify the correct API...
max_errorsnumberinclude_warningsbooleanclear_console_logMark the current position in the Godot editor log. Subsequent get_console_log and get_errors calls will only return output after this point.Mark the current position in the Godot editor log. Subsequent get_console_log and get_errors calls will only return output after this point.
No parameters — call it with no arguments.
open_in_godotOpen a file in the Godot editor at a specific line (side-effect only).2 paramsOpen a file in the Godot editor at a specific line (side-effect only).
linenumberpath*stringscene_tree_dumpDump the scene tree of the scene currently open in the Godot editor (node names, types, and attached scripts).Dump the scene tree of the scene currently open in the Godot editor (node names, types, and attached scripts).
No parameters — call it with no arguments.
list_settingsBrowse Godot project settings by category. Returns values from the editor's in-memory state — this matches project.godot after a normal Godot save, but direct edits to project.godot on disk are not reflected until the editor restarts (rescan_filesystem does not help). Call wit...1 paramsBrowse Godot project settings by category. Returns values from the editor's in-memory state — this matches project.godot after a normal Godot save, but direct edits to project.godot on disk are not reflected until the editor restarts (rescan_filesystem does not help). Call wit...
categorystringupdate_project_settingsUpdate one or more Godot project settings. Pass a dictionary of setting paths to their new values. Use list_settings first to discover available setting paths, current values, and valid options for a category. For input action bindings, prefer configure_input_map — if you do p...1 paramsUpdate one or more Godot project settings. Pass a dictionary of setting paths to their new values. Use list_settings first to discover available setting paths, current values, and valid options for a category. For input action bindings, prefer configure_input_map — if you do p...
settings*objectconfigure_input_mapAdd, remove, or replace input actions and their key/button bindings. Use get_input_map to see current actions before modifying.4 paramsAdd, remove, or replace input actions and their key/button bindings. Use get_input_map to see current actions before modifying.
action*stringeventsarraydeadzonenumberoperation*stringrun_sceneLaunch a scene in the Godot editor. By default the call BLOCKS until the editor flips to playing state (so the next get_errors / take_screenshot / send_input call sees a real game). The response includes started, runtime_connected, wait_for_started_ms, wait_for_runtime_ms, sce...4 paramsLaunch a scene in the Godot editor. By default the call BLOCKS until the editor flips to playing state (so the next get_errors / take_screenshot / send_input call sees a real game). The response includes started, runtime_connected, wait_for_started_ms, wait_for_runtime_ms, sce...
scenestringwait_for_runtimebooleanstartup_timeout_msnumberblock_until_startedbooleanstop_sceneStop the currently running scene in the Godot editor. Always stop the scene before editing code to avoid errors repeating every frame.Stop the currently running scene in the Godot editor. Always stop the scene before editing code to avoid errors repeating every frame.
No parameters — call it with no arguments.
is_playingCompatibility shim: returns {playing, scene}. For richer info (uptime, runtime helper connectivity, last-launched target) prefer get_runtime_status.Compatibility shim: returns {playing, scene}. For richer info (uptime, runtime helper connectivity, last-launched target) prefer get_runtime_status.
No parameters — call it with no arguments.
get_runtime_statusCombined editor + runtime status snapshot. Returns playing, playing_scene, last_launched ("current"|"main"|res-path), uptime_ms since the most recent run_scene, and runtime_helper_connected (true once the in-game MCPRuntime autoload is talking to the MCP server).Combined editor + runtime status snapshot. Returns playing, playing_scene, last_launched ("current"|"main"|res-path), uptime_ms since the most recent run_scene, and runtime_helper_connected (true once the in-game MCPRuntime autoload is talking to the MCP server).
No parameters — call it with no arguments.
waitSleep server-side. Useful between input events to let the game process them. Capped at 30000ms / 30s. Pass either ms or seconds (ms wins if both given).2 paramsSleep server-side. Useful between input events to let the game process them. Capped at 30000ms / 30s. Pass either ms or seconds (ms wins if both given).
msnumbersecondsnumbertake_screenshotCapture the current viewport of the running game and save it as a PNG. REQUIRES the game to be running with the MCPRuntime autoload connected (run_scene with wait_for_runtime=true first). Returns resource_path, absolute_path, width, height, and (optionally) base64_png. Default...2 paramsCapture the current viewport of the running game and save it as a PNG. REQUIRES the game to be running with the MCPRuntime autoload connected (run_scene with wait_for_runtime=true first). Returns resource_path, absolute_path, width, height, and (optionally) base64_png. Default...
save_tostringreturn_base64booleansend_inputSynthesize an InputEvent and dispatch it to the running game via Input.parse_input_event. REQUIRES the game to be running with the MCPRuntime autoload connected. Use this to drive automated tests: click buttons, press keys, fire input actions. For multi-step interactions, alte...1 paramsSynthesize an InputEvent and dispatch it to the running game via Input.parse_input_event. REQUIRES the game to be running with the MCPRuntime autoload connected. Use this to drive automated tests: click buttons, press keys, fire input actions. For multi-step interactions, alte...
event*objectquery_runtime_nodeQuery a live node in the running scene tree. REQUIRES the game to be running with the MCPRuntime autoload connected. Returns class, path, valid, groups, and a map of property values. By default returns position, global_position, rotation, scale, visible, modulate — pass `prope...4 paramsQuery a live node in the running scene tree. REQUIRES the game to be running with the MCPRuntime autoload connected. Returns class, path, valid, groups, and a map of property values. By default returns position, global_position, rotation, scale, visible, modulate — pass `prope...
node_path*stringpropertiesarrayinclude_groupsbooleaninclude_childrenbooleanget_runtime_logReturn entries from the MCPRuntime in-game ring buffer. The buffer holds the last ~500 lines pushed via MCPRuntime.push_runtime_log(level, text) from your scripts plus internal connection events. For full engine stdout (script prints, errors, warnings) use get_console_log — th...2 paramsReturn entries from the MCPRuntime in-game ring buffer. The buffer holds the last ~500 lines pushed via MCPRuntime.push_runtime_log(level, text) from your scripts plus internal connection events. For full engine stdout (script prints, errors, warnings) use get_console_log — th...
limitnumbersince_msnumberclassdb_queryQuery Godot's ClassDB for class information: properties, methods, signals, and inheritance. Use this to verify that a class, method, or property actually exists in the running Godot engine before writing code. Prevents using wrong method names, outdated Godot 3 API, or incorre...3 paramsQuery Godot's ClassDB for class information: properties, methods, signals, and inheritance. Use this to verify that a class, method, or property actually exists in the running Godot engine before writing code. Prevents using wrong method names, outdated Godot 3 API, or incorre...
querystringclass_name*stringinclude_virtualbooleanrescan_filesystemTrigger a full filesystem rescan in the Godot editor. Use after creating, deleting, or modifying files externally (e.g. from the terminal or another tool). The scan is asynchronous and returns immediately.Trigger a full filesystem rescan in the Godot editor. Use after creating, deleting, or modifying files externally (e.g. from the terminal or another tool). The scan is asynchronous and returns immediately.
No parameters — call it with no arguments.
setup_autoloadRegister, unregister, or list autoload singletons. Autoloads are scripts/scenes loaded automatically at project start.3 paramsRegister, unregister, or list autoload singletons. Autoloads are scripts/scenes loaded automatically at project start.
namestringpathstringoperation*stringgenerate_2d_assetRender an SVG to a PNG asset on disk via Image.load_svg_from_buffer. The SVG is rendered directly from bytes — no temp file is created, so concurrent calls are safe and project-rename quirks (user:// rebinding) cannot break it. Returns resource_path, absolute_path, dimensions...6 paramsRender an SVG to a PNG asset on disk via Image.load_svg_from_buffer. The SVG is rendered directly from bytes — no temp file is created, so concurrent calls are safe and project-rename quirks (user:// rebinding) cannot break it. Returns resource_path, absolute_path, dimensions...
scalenumberwidthnumberheightnumberfilename*stringsvg_code*stringsave_pathstringmap_projectCrawl the entire Godot project and build an interactive visual map of all scripts showing their structure (variables, functions, signals), connections (extends, preloads, signal connections), and descriptions. Opens an interactive browser-based visualization.2 paramsCrawl the entire Godot project and build an interactive visual map of all scripts showing their structure (variables, functions, signals), connections (extends, preloads, signal connections), and descriptions. Opens an interactive browser-based visualization.
rootstringinclude_addonsbooleanGive your AI assistant full access to the Godot editor.
Build games faster with Claude, Cursor, or any MCP-compatible AI — no copy-pasting, no context switching. AI reads, writes, and manipulates your scenes, scripts, nodes, and project settings directly.
Godot 4.x · 42 tools · Interactive project visualizer · MIT license
Download and run the installer from nodejs.org (LTS version). It's a standard installer — no terminal needed.
Inside the Godot editor, click the AssetLib tab at the top → search "mcp" → find "Godot AI Assistant tools MCP" → Install.
Then go to Project → Project Settings → Plugins and enable the Godot MCP plugin.
Claude Desktop — Settings → Developer → Edit Config → open the config file and paste:
Mac / Linux:
{
"mcpServers": {
"godot": {
"command": "npx",
"args": ["-y", "godot-mcp-server"]
}
}
}
Windows:
{
"mcpServers": {
"godot": {
"command": "cmd",
"args": ["/c", "npx", "-y", "godot-mcp-server"]
}
}
}
Cursor — Settings → MCP → Add Server:
Mac / Linux:
{
"mcpServers": {
"godot": {
"command": "npx",
"args": ["-y", "godot-mcp-server"]
}
}
}
Windows:
{
"mcpServers": {
"godot": {
"command": "cmd",
"args": ["/c", "npx", "-y", "godot-mcp-server"]
}
}
}
Claude Code — run in terminal:
claude mcp add godot -- npx -y godot-mcp-server
Works with any MCP-compatible client (Cline, Windsurf, etc.)
Close and reopen Claude Desktop / Cursor / your client so it picks up the new config.
Hit Restart Project in the Godot editor. Check the top-right corner — you should see MCP Connected in green. You're ready to go.
| Category | Tools | Examples |
|---|---|---|
| File Operations | 4 | Browse directories, read files, search project, create scripts |
| Scene Operations | 11 | Create scenes, add/remove/move nodes, set properties, attach scripts, assign collision shapes and textures |
| Script Operations | 6 | Apply code edits, validate syntax, rename/move files with reference updates |
| Project Tools | 14 | Run/stop scenes, query ClassDB, read errors from Output + Debugger, project settings, input map, collision layers, scene tree dumps, rescan filesystem |
| Asset Generation | 1 | Generate 2D sprites from SVG |
| Visualization | 6 | Interactive browser-based project map, scene graph explorer |
Run map_project and get a browser-based explorer at localhost:6510:
AI cannot create 100% of a game by itself — it struggles with complex UI layouts, compositing scenes, and some node property manipulation. It's still in active development, so feedback is very welcome!
┌─────────────┐ MCP (stdio) ┌──────────────┐ WebSocket ┌──────────────┐
│ AI Client │◄────────────────►│ MCP Server │◄─────────────►│ Godot Editor │
│ (Claude, │ │ (Node.js) │ port 6505 │ (Plugin) │
│ Cursor) │ │ │ │ │
└─────────────┘ │ Visualizer │ │ 42 tool │
│ HTTP :6510 │ │ handlers │
└──────┬───────┘ └──────────────┘
│
┌──────▼───────┐
│ Browser │
│ Visualizer │
└──────────────┘
To build from source instead of using npm:
cd mcp-server
npm install
npm run build
Then point your AI client at mcp-server/dist/index.js instead of using npx.
Narrative write-ups of each release live in release-notes/ (starting with v0.5.0). For the full change history, see CHANGELOG.md.
MIT
miapre/html-to-figma-design-system
ie3jp/illustrator-mcp-server
coding-solo/godot-mcp
ivanmurzak/unity-mcp
yctimlin/mcp_excalidraw
figma/mcp-server-guide