Godai
NPM · @SNOPEK-GAMES/GODAI · SCANNED SEP 21
Automate the Godot Engine editor: edit scenes and scripts, run projects, manage engine versions
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 0 of 5 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to snopek-games/godai). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 13 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability64
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 9738 tokens (~198/item across 49 items; 49 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 50 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Godai MCP server?
Godai runs locally as an npm package, launched with npx -y @snopek-games/godai. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @snopek-games/godai
claude mcp add com-snopekgames-godai -- npx -y @snopek-games/godai
{
"mcpServers": {
"com-snopekgames-godai": {
"command": "npx",
"args": [
"-y",
"@snopek-games/godai"
]
}
}
} {
"servers": {
"com-snopekgames-godai": {
"command": "npx",
"args": [
"-y",
"@snopek-games/godai"
]
}
}
} codex mcp add com-snopekgames-godai -- npx -y @snopek-games/godai
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-snopekgames-godai": {
"type": "local",
"command": [
"npx",
"-y",
"@snopek-games/godai"
],
"enabled": true
}
}
} openclaw mcp add com-snopekgames-godai --command npx --arg -y --arg @snopek-games/godai
mcp_servers:
com-snopekgames-godai:
command: "npx"
args: ["-y", "@snopek-games/godai"] {
"McpServers": {
"com-snopekgames-godai": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@snopek-games/godai"
]
}
}
} assistant mcp add com-snopekgames-godai -t stdio -c npx -a -y @snopek-games/godai
{
"mcpServers": {
"com-snopekgames-godai": {
"command": "npx",
"args": [
"-y",
"@snopek-games/godai"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 21 Sept 26 0
- Stability: 0.97 → pass security
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 10 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
- 8 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 21 Sept 2026 · Analysed npm/@snopek-games/godai@0.5.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | snopek-games/godai |
| Certificate issuer | https://gitlab.com |
| Certificate SAN | https://gitlab.com/snopek-games/godai//.gitlab-ci.yml@refs/tags/v0.5.0 |
| Rekor log index | 2751375268 |
| Predicate type | https://slsa.dev/provenance/v0.2 |
| Subject digest | sha512:6ddf671f9bf891b89f3abd01e7dac42019bd19ec0574debeb28320525e6558a775108c4809d69f5f065c53096d56e0dfad9e950578d90f595d793cb57 |
Background: How many MCP packages publish verified provenance →
Dependencies 5 packages
| Packages resolved | 5 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_node Add Node ~521
Creates a new node in the current scene, with the given properties set. Property values are strings in Godot variant syntax: - String properties take the raw string, with NO extra quotes (e.g. "name": "MyNode") - Other types use Godot syntax, e.g. `0.5`, `true`, `Vector2(1, 2)`, `Color(1, 0, 0, 1)`, `NodePath("../Other")` - Packed arrays take a flat list of components, so: `PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1)` is two colors (r,g,b,a, r,g,b,a), `PackedVector2Array(1, 2, 3, 4)` is two vectors - To reference a saved resource: `Resource("res://path/to/file.tres")` - To create an embedded resource: `Object(ClassName, "prop": value, ...)`, e.g. `Object(SphereMesh,"radius":2.0)`, or `Object(SphereMesh)` for one with every property at its default. Do NOT use SubResource() or ExtResource() - those only work inside .tscn files. - Integer enum properties take the option name (e.g. `Nearest`) or the integer value; setting one by integer returns a note with the matching option name, and an integer matching no option is still applied, with a warning Like all scene edits, the new node is in-memory until save_scene: call it once you're done editing, or it is lost. Every property is verified by reading it back after setting, like set_node_properties. The node is still created even when a property fails: properties that could not be set, or that ended up with a different value than requested, are reported in 'warnings' (with anything Godot printed in 'output'), and 'node_path' says where the node ended up. Do NOT retry the call over a warning - that would create a second node; fix the property with set_node_properties instead.
| Name | Type | Req | Description |
|---|---|---|---|
| node_type | string | yes | The name of the node class to create |
| parent_path | string | – | Path to the parent node, relative to the scene root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| properties | object | – | Keys are the Godot property names to set |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did, in which case the node was NOT created |
| node_path | string | – | The path of the new node, relative to the scene root |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene, or the option name matching an integer enum value that was set |
| output | array | – | Messages Godot printed while the node was being created |
| success | boolean | – | True if the node was created; property problems are reported in 'warnings' and do not affect this - do NOT retry the call for them, fix them with set_node_properties instead |
| warnings | array | – | Properties that could not be set, or ended up with a different value than requested; any property not listed here was set to the requested value |
No examples provided.
add_to_group Add Node to Groups ~106
Adds a node in the current scene to one or more groups. Like all scene edits, the change is in-memory until save_scene: call it once you're done editing, or it is lost.
| Name | Type | Req | Description |
|---|---|---|---|
| groups | array | yes | The groups to add the node to |
| node_path | string | yes | Path to the node, relative to the scene root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene |
| success | boolean | – | True if the node was added to the groups |
No examples provided.
attach_script Attach Script ~136
Attaches an existing script file to a node in the current scene. The script's base type must be compatible with the node's type. Use create_script first if the script doesn't exist yet. Like all scene edits, the attachment is in-memory until save_scene: call it once you're done editing, or it is lost.
| Name | Type | Req | Description |
|---|---|---|---|
| node_path | string | yes | Path to the node, relative to the scene root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| script_path | string | yes | Path to the script file, relative to the project root |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene |
| success | boolean | – | True if the script was attached |
No examples provided.
clear_log_messages Clear Log Messages ~73
Clears the log messages captured so far, so subsequent get_log_messages calls only return output from after this point. This only affects the captured messages; the editor's own Output panel is untouched.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the captured log messages were cleared |
No examples provided.
close_editor Close Editor ~125
Closes the Godot editor for the project. The user is asked to confirm first, and the call fails if they decline. A headless editor closes without asking. By default, unsaved changes are saved before closing; pass 'skip_save' as true to discard them instead. If the project is running, it is stopped first.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| skip_save | boolean | – | Discard unsaved changes instead of saving them before closing (default: false) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True once the user has accepted and the editor is closing |
No examples provided.
connect_signal Connect Signal ~177
Connects a signal on one node to a method on another node, in the current scene. Both nodes must be in the current scene. The signal must exist on 'from_node', and the method on 'to_node'. Like all scene edits, the connection is in-memory until save_scene: call it once you're done editing, or it is lost.
| Name | Type | Req | Description |
|---|---|---|---|
| from_node | string | yes | Path to the node emitting the signal, relative to the scene root |
| method | string | yes | Name of the method to call on the receiving node |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| signal | string | yes | Name of the signal to connect |
| to_node | string | yes | Path to the node receiving the signal, relative to the scene root |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene |
| success | boolean | – | True if the signal was connected |
No examples provided.
create_resource Create Resource ~470
Creates a new resource. Does NOT open it automatically. Property values are strings in Godot variant syntax: - String properties take the raw string, with NO extra quotes (e.g. "resource_name": "My Resource") - Other types use Godot syntax, e.g. `0.5`, `true`, `Vector2(1, 2)`, `Color(1, 0, 0, 1)` - Packed arrays take a flat list of components, so: `PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1)` is two colors (r,g,b,a, r,g,b,a), `PackedVector2Array(1, 2, 3, 4)` is two vectors - To reference a saved resource: `Resource("res://path/to/file.tres")` - To create an embedded resource: `Object(ClassName, "prop": value, ...)`, e.g. `Object(SphereMesh,"radius":2.0)`, or `Object(SphereMesh)` for one with every property at its default. Do NOT use SubResource() or ExtResource() - those only work inside .tscn files. - Integer enum properties take the option name (e.g. `Nearest`) or the integer value; setting one by integer returns a note with the matching option name, and an integer matching no option is still applied, with a warning Every property is verified by reading it back after setting, like set_resource_properties. The resource is still created and saved even when a property fails: properties that could not be set, or that ended up with a different value than requested, are reported in 'warnings' (with anything Godot printed in 'output'). Do NOT retry the call over a warning - the file now exists; fix the property with set_resource_properties instead.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the .tres file to create, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| properties | object | – | Keys are the Godot property names to set |
| resource_type | string | yes | The resource type |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did, in which case the resource was NOT created |
| notes | array | – | Notes that don't indicate a problem, e.g. the option name matching an integer enum value that was set |
| output | array | – | Messages Godot printed while the resource was being created |
| success | boolean | – | True if the resource was created and saved; property problems are reported in 'warnings' and do not affect this - do NOT retry the call for them, fix them with set_resource_properties instead |
| warnings | array | – | Properties that could not be set, or ended up with a different value than requested; any property not listed here was set to the requested value |
No examples provided.
create_scene Create Scene ~86
Creates a new scene and opens it in the editor.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the .tscn file to create, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| root_node_type | string | yes | The node type of the scene's root node |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the scene was created and opened |
No examples provided.
create_script Create Script ~146
Creates a new GDScript file. Does NOT open or attach it. If 'content' is given, it is used as the file's contents. Otherwise, a minimal script extending 'base_class' is generated.
| Name | Type | Req | Description |
|---|---|---|---|
| base_class | string | – | Base class for the generated script when 'content' is omitted (default: Node) |
| content | string | – | Full contents of the script file. If omitted, a minimal template is generated. |
| file_path | string | yes | Path to the .gd file to create, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the script file was created |
No examples provided.
detach_script Detach Script ~90
Removes the script attached to a node in the current scene. Like all scene edits, the change is in-memory until save_scene: call it once you're done editing, or it is lost.
| Name | Type | Req | Description |
|---|---|---|---|
| node_path | string | yes | Path to the node, relative to the scene root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene |
| success | boolean | – | True if the script was detached |
No examples provided.
disconnect_signal Disconnect Signal ~145
Disconnects a previously-connected signal between two nodes in the current scene. Like all scene edits, the change is in-memory until save_scene: call it once you're done editing, or it is lost.
| Name | Type | Req | Description |
|---|---|---|---|
| from_node | string | yes | Path to the node emitting the signal, relative to the scene root |
| method | string | yes | Name of the connected method on the receiving node |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| signal | string | yes | Name of the signal to disconnect |
| to_node | string | yes | Path to the node receiving the signal, relative to the scene root |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene |
| success | boolean | – | True if the signal was disconnected |
No examples provided.
execute_editor_script Execute Editor Script ~341
Executes the given GDScript code in the editor, in the context of a Node that is a child of the scene currently being edited. For modifying the current scene, use the other tools when possible. However, if you do use a script to modify the current scene, you MUST use `EditorUndoRedoManager` from `EditorInterface.get_editor_undo_redo()`, and the action name MUST end with "(Godai)". You can find nodes relative to the scene root using `EditorInterface.get_edited_scene_root().get_node_or_null(node_path)`. Two helper methods have been provided: - `func editor_undo_redo_create_node(p_undo_redo: EditorUndoRedoManager, p_parent: Node, p_child: Node) -> void` - `func editor_undo_redo_remove_node(p_undo_redo: EditorUndoRedoManager, p_parent: Node, p_child: Node) -> void` If you are using `EditorUndoRedoManager` to add or remove a node, you MUST call one of those helper methods before calling `commit_action()`. This will add some `add_do_method()` and `add_undo_method()` calls to ensure the changes are synchronized to the live game if the game is running. If the script successfully runs, the output from `print()` will be returned.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | A snippet of GDScript code. It should use tabs rather than spaces for indentation. Don't wrap the code in a `_ready()` function. |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| output | array | – | The lines printed by the script via print() |
| success | boolean | – | True if the script ran successfully |
No examples provided.
get_current_scene Get Current Scene ~50
Gets information about the scene that is currently opened in the Godot editor.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| root_node_name | string | – | The name of the root Node |
| root_node_type | string | – | The class of the root Node |
| scene_path | string | – | The path to the scene file, or '[unsaved]' for a never-saved scene |
No examples provided.
get_current_scene_tree Get Scene Tree ~52
Gets the tree for the scene that is currently opened in the Godot editor.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| children | array | – | The child nodes; omitted if the node has no children |
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| name | string | – | The Node name |
| path | string | – | The path of the node within the scene, relative to the scene root |
| script | string | – | The path to the script file, if this node has a script attached; otherwise omitted |
| type | string | – | The class of the Node |
No examples provided.
get_editor_settings Get Editor Settings ~305
Gets settings from the Godot editor itself (the values stored in the global editor configuration, e.g. 'text_editor/behavior/indent/size' or 'text_editor/appearance/whitespace/draw_tabs'). These are editor-wide preferences, not project settings. Pass 'names' to get specific settings by name (returned regardless of whether they match their default). Otherwise, all settings are returned, but only those whose value differs from the default; pass 'include_defaults' as true to also include settings left at their default value. Setting values are strings in Godot variant syntax. Integer enum settings are returned as their option name (e.g. `Nearest` instead of `0`), with a note pointing out the translation; pass 'enums_as_ints' as true to get the raw integer values instead. Settings under 'godai/' are Godai's own configuration and are never returned; only the user can see them, via Editor Settings.
| Name | Type | Req | Description |
|---|---|---|---|
| enums_as_ints | boolean | – | Return integer enum settings as their raw integer value, instead of translated to the option name (default: false) |
| include_defaults | boolean | – | When getting all settings, also include those left at their default value (default: false) |
| names | array | – | Specific setting names to get. If omitted, all settings are returned. |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. which integer enum settings were translated to their option name |
| settings | object | – | A map of setting name to value, in Godot variant syntax |
No examples provided.
get_godai_settings Get Godai Settings ~64
Gets Godai's own settings, which configure Godai itself rather than anything inside the Godot project or editor. Only the settings that can be changed at runtime are included; the rest come from command-line arguments. Use set_godai_settings to change them.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| godot_version | string | – | The version of Godot used by default, as named by list_installed_godot_versions; empty if none is configured |
| project_base_path | string | – | The base path where the user's Godot projects live; always empty unless MCP is running with --global |
| update_check | string | – | Whether godai checks for its own updates: "on", "off", or empty for the default (on) |
No examples provided.
get_import_settings Get Import Settings ~82
Gets the import settings for an imported asset (e.g. a texture or audio file). Option values are strings in Godot variant syntax.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the imported asset, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| importer | string | – | The name of the importer used for this asset |
| options | object | – | A map of import option names to values, in Godot variant syntax |
No examples provided.
get_log_messages Get Log Messages ~139
Gets recent log output from the editor (print() output, warnings, and errors) captured since the editor started. Messages are sorted oldest first. Includes messages from both the editor and games run via `run_project`. Each line is prefixed with the local time it was captured, as '[HH:MM:SS.mmm]', so identical lines from different moments can be told apart.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Maximum number of recent messages to return (default: 100). Use 0 for all retained messages. |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| messages | array | – | The most recent log lines, oldest first |
No examples provided.
get_node_groups Get Node Groups ~77
Gets the groups that nodes in the current scene belong to. The results are returned in 'nodes', keyed by the requested node path.
| Name | Type | Req | Description |
|---|---|---|---|
| node_paths | array | yes | The nodes to get the groups of |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| nodes | object | – | Maps each requested node path to an array of its group names (internal engine groups omitted). |
No examples provided.
get_node_properties Get Node Properties ~547
Gets the values of properties on specific nodes in the current scene. Only properties whose value differs from the node's default are returned; pass 'include_defaults' as true to also include properties left at their default value. Properties that Godot neither saves nor shows in the inspector are left out, since they're derived from other properties (e.g. `global_position` comes from `transform`) or inactive given the node's other properties; ask for one by name (e.g. `MyNode:global_position`) to read it anyway. Property values are strings in Godot variant syntax: - String properties are returned raw, without quotes - Other types use Godot syntax, e.g. `0.5`, `true`, `Vector2(1, 2)`, `Color(1, 0, 0, 1)` - Packed arrays take a flat list of components, so: `PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1)` is two colors (r,g,b,a, r,g,b,a), `PackedVector2Array(1, 2, 3, 4)` is two vectors - A property referencing a saved resource is returned as `Resource("res://path/to/file.tres")` - A property holding an embedded resource is summarized as `Object(ClassName)`, e.g. `Object(SphereMesh)` - Integer enum properties are returned as their option name (e.g. `Nearest` instead of `0`), with a note pointing out the translation; pass 'enums_as_ints' as true to get the raw integer values instead To inspect the properties of an embedded resource, append a colon-separated property path to the node path: `MyMesh:mesh` returns the properties of the mesh resource, and `MyMesh:mesh:radius` returns just that value. The per-node results are returned in 'nodes', keyed by the requested node path. If any of the node paths can't be found, an error is returned and no properties are read. If a property path can't be resolved, its value will be an object with an `error` key.
| Name | Type | Req | Description |
|---|---|---|---|
| enums_as_ints | boolean | – | Return integer enum properties as their raw integer value, instead of translated to the option name (default: false) |
| include_defaults | boolean | – | Also include properties left at their default value (default: false) |
| node_paths | array | yes | The nodes to get properties from |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| nodes | object | – | Maps each requested node path to its result. |
| notes | array | – | Notes that don't indicate a problem, e.g. which integer enum properties were translated to their option name |
No examples provided.
get_project_settings Get Project Settings ~258
Gets settings from the project (the values stored in 'project.godot', e.g. 'application/config/name' or 'display/window/size/viewport_width'). Pass 'names' to get specific settings by name (returned regardless of whether they match their default). Otherwise, all settings are returned, but only those whose value differs from the default; pass 'include_defaults' as true to also include settings left at their default value. Setting values are strings in Godot variant syntax. Integer enum settings are returned as their option name (e.g. `Nearest` instead of `0`), with a note pointing out the translation; pass 'enums_as_ints' as true to get the raw integer values instead.
| Name | Type | Req | Description |
|---|---|---|---|
| enums_as_ints | boolean | – | Return integer enum settings as their raw integer value, instead of translated to the option name (default: false) |
| include_defaults | boolean | – | When getting all settings, also include those left at their default value (default: false) |
| names | array | – | Specific setting names to get. If omitted, all settings are returned. |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. which integer enum settings were translated to their option name |
| settings | object | – | A map of setting name to value, in Godot variant syntax |
No examples provided.
get_resource_properties Get Resource Properties ~575
Gets the values of properties on a saved resource file (e.g. a .tres file). Only properties whose value differs from the resource's default are returned; pass 'include_defaults' as true to also include properties left at their default value. Properties that Godot neither saves nor shows in the inspector are left out, since they're inactive given the resource's other properties (e.g. `alpha_scissor_threshold` on a material that isn't using alpha scissor); name one in 'properties' to read it anyway. Property values are strings in Godot variant syntax: - String properties are returned raw, without quotes - Other types use Godot syntax, e.g. `0.5`, `true`, `Vector2(1, 2)`, `Color(1, 0, 0, 1)` - Packed arrays take a flat list of components, so: `PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1)` is two colors (r,g,b,a, r,g,b,a), `PackedVector2Array(1, 2, 3, 4)` is two vectors - A property referencing another saved resource is returned as `Resource("res://path/to/file.tres")` - A property holding an embedded resource is summarized as `Object(ClassName)`, e.g. `Object(FastNoiseLite)` - Integer enum properties are returned as their option name (e.g. `Nearest` instead of `0`), with a note pointing out the translation; pass 'enums_as_ints' as true to get the raw integer values instead Requested properties may use colon-separated sub-paths to address properties nested inside embedded resources or other properties, e.g. `noise:frequency` or `albedo_color:r`. The results are returned in 'properties', keyed by property name (or requested property path). If a requested property holds an embedded resource (e.g. `noise`), all of that resource's properties are returned for it, instead of just a summary. If a requested property can't be resolved, its value will be an object with an `error` key.
| Name | Type | Req | Description |
|---|---|---|---|
| enums_as_ints | boolean | – | Return integer enum properties as their raw integer value, instead of translated to the option name (default: false) |
| file_path | string | yes | Path to the resource file, relative to the project root |
| include_defaults | boolean | – | Also include properties left at their default value (default: false) |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| properties | array | – | The properties to get. If omitted, all of the resource's properties are returned. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. which integer enum properties were translated to their option name |
| properties | object | – | If 'properties' was omitted, a map of all the resource's property names to values. If 'properties' was given, a map of each requested property path to its result. |
No examples provided.
get_selected_nodes Get Selected Nodes ~62
Gets the nodes currently selected in the editor for the current scene. If nothing is selected, 'node_paths' is an empty array.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| node_paths | array | – | Paths of the selected nodes, relative to the scene root |
No examples provided.
instantiate_scene Instantiate Scene ~145
Instantiates a saved scene (.tscn/.scn) as a child node in the current scene, like adding an instanced scene in the editor. Like all scene edits, the new instance is in-memory until save_scene: call it once you're done editing, or it is lost.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Name for the new instance node |
| parent_path | string | – | Path to the parent node, relative to the scene root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| scene_path | string | yes | Path to the scene file to instantiate, relative to the project root |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| node_path | string | – | The path of the new instance node, relative to the scene root |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene |
| success | boolean | – | True if the scene was instantiated |
No examples provided.
list_open_projects List Open Godot Projects ~39
Lists the projects currently open in a Godot editor, which version of Godot each one is open in, and whether that editor is headless.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| projects | array | – | The projects that are currently open in a Godot editor |
No examples provided.
list_projects List Godot Projects ~55
Lists the Godot projects that are available to open. When the MCP is running with --global, this includes the projects registered in the project manager and those under the project base path. Otherwise, this recursively searches the allowed root paths.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| projects | array | – | The Godot projects that were found |
No examples provided.
open_godot_project Open Godot Project ~257
Opens a Godot project in a new Godot editor instance, if it isn't already open. Safe to call first for any project, open or not: one that is already open returns its running editor rather than starting a second one, so there is no need to check with list_open_projects beforehand. An editor that is already open keeps the version of Godot and the headless setting it was started with: headless is ignored for it, and asking for a godot_version it isn't running is an error rather than a silent no-op. Check already_open in the result to see whether an editor was already there.
| Name | Type | Req | Description |
|---|---|---|---|
| godot_version | string | – | Open the project with this version of Godot, regardless of the version the project itself asks for, installing it if it isn't installed yet. Use a version from list_installed_godot_versions. Leave th… |
| headless | boolean | – | Launch the editor without visual or audio output (default: false) |
| project_path | string | yes | The absolute path to the project directory |
| Name | Type | Req | Description |
|---|---|---|---|
| already_open | boolean | – | True if an editor was already running for this project, in which case headless was ignored and godot_version, if it was given, matched what that editor is running |
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the project was already open, or a new editor instance was started for it |
No examples provided.
open_resource Open Resource ~64
Opens a resource in the inspector.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the .tres file to open, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the resource was opened in the inspector |
No examples provided.
open_scene Open Scene ~64
Opens a scene in the editor.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the .tscn file to open, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the scene was opened |
No examples provided.
open_script Open Script ~67
Opens a script file in the editor's script editor.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the .gd file to open, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the script was opened in the script editor |
No examples provided.
pin_project_to_godot_version Pin Project to Godot Version ~111
Records in the project which version of Godot it is built with, so that Godai always opens it with that version. This is written to a .godai.json config file in the project, which is meant to be committed, so that everyone working on it opens the same editor.
| Name | Type | Req | Description |
|---|---|---|---|
| godot_version | string | yes | The version or linked name to pin the project to, which must already be installed |
| project_path | string | yes | The absolute path to the project directory |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| godot_version | string | – | The version the project is now pinned to |
| success | boolean | – | True if the project was pinned to that version |
No examples provided.
read_script Read Script ~99
Reads the contents of a script file. If the script is currently open in the editor, its live (possibly unsaved) buffer is returned and 'open_in_editor' is true. Otherwise the contents are read from disk.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the .gd file, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | The contents of the script (the live editor buffer if open, otherwise the file on disk) |
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| open_in_editor | boolean | – | True if the script is currently open in the editor (so 'content' is the live buffer) |
No examples provided.
reimport Reimport Assets ~94
Reimports one or more asset files (e.g. after changing the source file or its import settings). Each path must be an imported asset (i.e. have a .import file). On error, nothing is reimported.
| Name | Type | Req | Description |
|---|---|---|---|
| file_paths | array | yes | The assets to reimport |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the assets were reimported |
No examples provided.
remove_from_group Remove Node from Groups ~106
Removes a node in the current scene from one or more groups. Like all scene edits, the change is in-memory until save_scene: call it once you're done editing, or it is lost.
| Name | Type | Req | Description |
|---|---|---|---|
| groups | array | yes | The groups to remove the node from |
| node_path | string | yes | Path to the node, relative to the scene root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene |
| success | boolean | – | True if the node was removed from the groups |
No examples provided.
remove_node Remove Node ~93
Removes the given node (and all its children) from the current scene. Like all scene edits, the change is in-memory until save_scene: call it once you're done editing, or it is lost.
| Name | Type | Req | Description |
|---|---|---|---|
| node_path | string | yes | Path to the node, relative to the scene root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene |
| success | boolean | – | True if the node was removed |
No examples provided.
restart_editor Restart Editor ~126
Restarts the Godot editor for the project. The user is asked to confirm first, and the call fails if they decline. A headless editor restarts without asking. By default, unsaved changes are saved before restarting; pass 'skip_save' as true to discard them instead. If the project is running, it is stopped first.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| skip_save | boolean | – | Discard unsaved changes instead of saving them before restarting (default: false) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True once the editor has restarted and reconnected |
No examples provided.
run_project Run Project ~143
Runs the project from the editor. 'scene' controls what runs: omit it or use 'main' to run the project's main scene, 'current' to run the scene open in the editor, or a path to run a specific scene file.
| Name | Type | Req | Description |
|---|---|---|---|
| clear_log_messages | boolean | – | Clear the captured log messages before running, so get_log_messages only returns output from this run onward (default: false) |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| scene | string | – | What to run: 'main' (default), 'current', or a path to a scene file |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the project started running |
No examples provided.
save_scene Save Scene ~60
Saves the scene currently open in the editor to its file. If the scene has never been saved, use save_scene_as instead.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| scene_path | string | – | The path the scene was saved to |
| success | boolean | – | True if the scene was saved |
No examples provided.
save_scene_as Save Scene As ~93
Saves the scene currently open in the editor to the given path, changing the path of the current scene, such that subsequent save_scene calls would save to the new path.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the .tscn file to save to, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| scene_path | string | – | The path the scene was saved to |
| success | boolean | – | True if the scene was saved |
No examples provided.
save_script Save Script ~107
Saves a script's unsaved changes from the editor to its file. If the script is open in the editor, its current (possibly unsaved) contents are written to disk. If it isn't open, there is nothing to save and this is a no-op.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the .gd file, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| saved | boolean | – | True if the script was open and its contents were written to disk; false if it wasn't open (nothing to save) |
| success | boolean | – | True if the operation succeeded |
No examples provided.
set_editor_settings Set Editor Settings ~401
Changes settings in the Godot editor itself (editor-wide preferences, not project settings). Pass 'settings': a map of setting name (e.g. 'text_editor/behavior/indent/size') to value. Values are strings in Godot variant syntax (e.g. `16`, `true`, `2.0`); a value that isn't valid variant syntax is taken as a raw string. An integer enum setting takes the option name (e.g. `Nearest`) or the integer value; setting one by integer returns a note with the matching option name, and an integer matching no option is still applied, with a warning. Setting names must already exist; unknown names are rejected. Pass "create_missing": true to create a setting that doesn't exist yet (e.g. one belonging to a plugin that isn't currently loaded). Every setting is verified by reading it back after setting. Settings are set independently: when one fails, the rest are still applied. Settings that could not be set are reported in 'errors', and settings that ended up with a different value than requested are reported in 'warnings', along with the actual resulting value. Anything Godot printed while setting is returned in 'output'. Some settings only take effect after the editor restarts; changing one returns a warning, and the restart_editor tool can perform the restart. If none of the settings can even be attempted, the call fails and nothing is changed. Use get_editor_settings to see the available setting names and their current values. Settings under 'godai/' are Godai's own configuration and can't be changed; only the user can, via Editor Settings.
| Name | Type | Req | Description |
|---|---|---|---|
| create_missing | boolean | – | Allow creating settings that don't exist yet; without it, unknown setting names are rejected |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| settings | object | yes | Settings to set (keys are setting names) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | When the call failed, the errors that made it fail (nothing was changed). Otherwise, settings that could not be set; any setting not listed here or in 'warnings' was set to the requested value |
| notes | array | – | Notes that don't indicate a problem, e.g. the option name matching an integer enum value that was set |
| output | array | – | Messages Godot printed while the settings were being set |
| success | boolean | – | True if every setting was verified to have taken the requested value (a setting that only triggered a warning still counts as success) |
| warnings | array | – | Settings that were changed, but ended up with a different value than requested, or that require an editor restart to take effect |
No examples provided.
set_godai_settings Set Godai Settings ~149
Changes Godai's own settings, which configure Godai itself rather than anything inside the Godot project or editor. Only the settings that can be changed at runtime can be set here; the rest come from command-line arguments. Use get_godai_settings to see the current values.
| Name | Type | Req | Description |
|---|---|---|---|
| godot_version | string | – | The version of Godot to use by default; it must already be installed, which list_installed_godot_versions shows |
| project_base_path | string | – | The base path where the user's Godot projects live; can only be set when MCP is running with --global |
| update_check | string | – | Whether godai checks for its own updates |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the settings were changed and saved |
No examples provided.
set_import_settings Set Import Settings ~177
Changes the import settings for an imported asset, and reimports it. Only pass the options you wish to change. Option values are strings in Godot variant syntax (e.g. `2`, `true`, `2.0`); a value that isn't valid variant syntax is taken as a raw string. An unknown option name fails the whole call. On error, nothing is changed. Use get_import_settings to see the available option names and the current importer.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the imported asset, relative to the project root |
| importer | string | – | Change the importer used for this asset |
| options | object | – | Import options to set (keys are option names) |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the import settings were changed and the asset was reimported |
No examples provided.
set_node_properties Set Node Properties ~789
Sets the values of properties on specific nodes in the current scene. Only pass the properties you wish to change. To discover the properties a node supports (and their current values), call get_node_properties with "include_defaults": true. EXAMPLE: {"action": "Move node", "nodes": {"path/to/node": {"position": "Vector2(1, 2)"}}} Property values are strings in Godot variant syntax: - String properties take the raw string, with NO extra quotes (e.g. "text": "Hello") - Other types use Godot syntax, e.g. `0.5`, `true`, `Vector2(1, 2)`, `Color(1, 0, 0, 1)`, `NodePath("../Other")` - Packed arrays take a flat list of components, so: `PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1)` is two colors (r,g,b,a, r,g,b,a), `PackedVector2Array(1, 2, 3, 4)` is two vectors - To reference a saved resource: `Resource("res://path/to/file.tres")` - To create an embedded resource: `Object(ClassName, "prop": value, ...)`, e.g. `Object(SphereMesh,"radius":2.0)`, or `Object(SphereMesh)` for one with every property at its default. Do NOT use SubResource() or ExtResource() - those only work inside .tscn files. - Careful: `Object(ClassName)` is also how an existing embedded resource reads back, so passing that in replaces it with a new one, losing whatever it held. - Integer enum properties take the option name (e.g. `Nearest`) or the integer value; setting one by integer returns a note with the matching option name, and an integer matching no option is still applied, with a warning Property names may use colon-separated sub-paths to set properties nested inside resources or other properties, e.g. `mesh:radius`, `material:albedo_color`, `position:x`. Note: changing a sub-property of a saved resource (`Resource("res://...")`) affects every scene using that resource. This uses the Godot editor's undo/redo system to set the properties, so as many set operations as possible should be done in a single call, so they can all be undone at once. Like all scene edits, the changes are in-memory until sa…
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Human-readable description of the action that will be shown in Godot's undo/redo history |
| nodes | object | yes | Keys are the paths of the nodes to change, within the scene and relative to its root. A key may include a colon-separated property path (e.g. `MyMesh:mesh`) to address a resource or other sub-object. |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | When the call failed, the errors that made it fail (nothing was changed). Otherwise, properties that could not be set; any property not listed here or in 'warnings' was set to the requested value |
| notes | array | – | Notes that don't indicate a problem, e.g. that the scene has unsaved changes until save_scene, or the option name matching an integer enum value that was set |
| output | array | – | Messages Godot printed while the properties were being set |
| success | boolean | – | True if every property was verified to have taken the requested value (a property that only triggered a warning still counts as success) |
| warnings | array | – | Properties that were changed, but ended up with a different value than requested |
No examples provided.
set_project_settings Set Project Settings ~415
Changes settings in the project and saves 'project.godot'. Pass 'settings': a map of setting name (e.g. 'display/window/size/viewport_width') to value. Values are strings in Godot variant syntax (e.g. `1280`, `true`, `2.0`); a value that isn't valid variant syntax is taken as a raw string. An integer enum setting takes the option name (e.g. `Nearest`) or the integer value; setting one by integer returns a note with the matching option name, and an integer matching no option is still applied, with a warning. Setting names must already exist; unknown names are rejected. Pass "create_missing": true to create new settings, e.g. custom game settings, 'autoload/...', 'input/...', 'shader_globals/...' or 'global_group/...'. A feature-tag override of an existing setting (e.g. 'application/config/name.web') counts as existing, and its value is validated against the base setting. Every setting is verified by reading it back after setting. Settings are set independently: when one fails, the rest are still applied (and saved). Settings that could not be set are reported in 'errors', and settings that ended up with a different value than requested are reported in 'warnings', along with the actual resulting value. Anything Godot printed while setting is returned in 'output'. Some settings only take effect after the editor restarts; changing one returns a warning, and the restart_editor tool can perform the restart. If none of the settings can even be attempted, the call fails and nothing is changed. Use get_project_settings to see the available setting names and their current values.
| Name | Type | Req | Description |
|---|---|---|---|
| create_missing | boolean | – | Allow creating settings that don't exist yet; without it, unknown setting names are rejected |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| settings | object | yes | Settings to set (keys are setting names) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | When the call failed, the errors that made it fail (nothing was changed). Otherwise, settings that could not be set; any setting not listed here or in 'warnings' was set to the requested value |
| notes | array | – | Notes that don't indicate a problem, e.g. the option name matching an integer enum value that was set |
| output | array | – | Messages Godot printed while the settings were being set |
| success | boolean | – | True if every setting was verified to have taken the requested value and the project was saved (a setting that only triggered a warning still counts as success) |
| warnings | array | – | Settings that were changed, but ended up with a different value than requested, or that require an editor restart to take effect |
No examples provided.
set_resource_properties Set Resource Properties ~755
Sets the values of properties on a saved resource file (.tres or .res), and saves the changes to the file. Only pass the properties you wish to change. To discover the properties a resource supports (and their current values), call get_resource_properties with "include_defaults": true. EXAMPLE: {"action": "Change color", "file_path": "res://thing.tres", "properties": {"albedo_color": "Color(1, 0, 0, 1)"}} Property values are strings in Godot variant syntax: - String properties take the raw string, with NO extra quotes (e.g. "resource_name": "My Resource") - Other types use Godot syntax, e.g. `0.5`, `true`, `Vector2(1, 2)`, `Color(1, 0, 0, 1)` - Packed arrays take a flat list of components, so: `PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1)` is two colors (r,g,b,a, r,g,b,a), `PackedVector2Array(1, 2, 3, 4)` is two vectors - To reference another saved resource: `Resource("res://path/to/file.tres")` - To create an embedded resource: `Object(ClassName, "prop": value, ...)`, e.g. `Object(FastNoiseLite,"frequency":0.1)`, or `Object(FastNoiseLite)` for one with every property at its default. Do NOT use SubResource() or ExtResource() - those only work inside .tscn files. - Careful: `Object(ClassName)` is also how an existing embedded resource reads back, so passing that in replaces it with a new one, losing whatever it held. - Integer enum properties take the option name (e.g. `Nearest`) or the integer value; setting one by integer returns a note with the matching option name, and an integer matching no option is still applied, with a warning Property names may use colon-separated sub-paths to set properties nested inside embedded resources or other properties, e.g. `noise:frequency`, `albedo_color:r`. Note: the changes are saved to the file immediately, and affect every scene using the resource. This uses the Godot editor's undo/redo system to set the properties, so as many set operations as possible should be done in a single call, so they can all be undone at once (undo…
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Human-readable description of the action that will be shown in Godot's undo/redo history |
| file_path | string | yes | Path to the .tres or .res file, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| properties | object | – | Keys are the Godot property names to set (colon-separated sub-paths allowed, e.g. `albedo_color:r`) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | When the call failed, the errors that made it fail (nothing was changed). Otherwise, properties that could not be set; any property not listed here or in 'warnings' was set to the requested value |
| notes | array | – | Notes that don't indicate a problem, e.g. the option name matching an integer enum value that was set |
| output | array | – | Messages Godot printed while the properties were being set |
| success | boolean | – | True if every property was verified to have taken the requested value (a property that only triggered a warning still counts as success) |
| warnings | array | – | Properties that were changed, but ended up with a different value than requested |
No examples provided.
stop_project Stop Project ~42
Stops the running project, if any.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True (the running project, if any, was stopped) |
No examples provided.
unpin_project_from_godot_version Unpin Project from Godot Version ~63
Removes the version of Godot recorded in the project's .godai.json config file, leaving Godai to work out which version to open it with from the project itself.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | yes | The absolute path to the project directory |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| success | boolean | – | True if the project is no longer pinned to a version of Godot |
| was_pinned | boolean | – | True if the project was pinned to begin with |
No examples provided.
write_script Write Script ~220
Replaces the entire contents of an existing script file. You must read the script with read_script first: this fails if the script has changed since you last read it (or created/wrote it), so you don't overwrite edits you haven't seen. If it fails for that reason, read the script again and reapply your change. If the script is open in the editor, its editor buffer is updated instead of the file on disk (so unsaved edits aren't silently clobbered); 'saved' will be false, and you can call save_script to write it to disk. If it isn't open, the file is written directly and 'saved' is true. Use create_script to make a new script.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | The full new contents of the script, which may be empty to blank the script out |
| file_path | string | yes | Path to the .gd file, relative to the project root |
| project_path | string | – | The path to the Godot project. It must already be open in the Godot editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | The errors that caused the call to fail; present instead of the other properties when it did |
| notes | array | – | Notes that don't indicate a problem, e.g. that the script has unsaved changes until save_script |
| open_in_editor | boolean | – | True if the script was open, so its editor buffer was updated rather than the file on disk |
| saved | boolean | – | True if the new contents were written to disk; false if only the editor buffer was updated (call save_script to flush it) |
| success | boolean | – | True if the script was written |
No examples provided.
What is the Godai MCP server?
Godai is an MCP server listed in the public MCP registry as com.snopekgames/godai. Automate the Godot Engine editor: edit scenes and scripts, run projects, manage engine versions. This page covers its npm package (@snopek-games/godai).
Is the Godai MCP server safe to use?
Godai scores 93 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Godai MCP server expose?
Godai exposes 49 tools: open_godot_project, list_open_projects, get_godai_settings, set_godai_settings, pin_project_to_godot_version, and 44 more. Their descriptions and schemas cost roughly 9,361 tokens of context every time the server is loaded.
Is the Godai MCP server still maintained?
Godai is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Godai MCP server under?
Godai declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.