Godot MCP (Vollkorn-Games/godot-mcp) is an MCP server listed on the M8ven Trust Index. It scores 54 out of 100, grade D. It declares 75 tools. No publisher has claimed this listing.

D
Caution
54/100

Godot MCP

An MCP server that gives AI assistants full control over the Godot game engine, enabling scene building, script writing, game running, and more through natural language.

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

Vollkorn-Games

Source: Glama

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
🚨
Known vulnerabilities in dependencies: 1 critical, 13 high
Affects packages this MCP installs at runtime. Upgrade or remove the affected dependency.
// tools this server exposes75 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

launch_editor

Launch the Godot editor GUI for a project. Does not run the game — use run_project or run_interactive for that.

run_project

Run the Godot project non-interactively and capture console output. No input, screenshots, or state queries — use run_interactive for those.

get_debug_output

Get console output (stdout/stderr) from a running Godot project. Supports errors_only and tail filters. For structured errors with stack traces, use get_runtime_errors.

stop_project

Stop the currently running Godot project. Does not affect the editor launched via launch_editor.

get_godot_version

Get the installed Godot version

list_projects

List Godot projects in a directory

get_project_info

Retrieve metadata about a Godot project

create_scene

Create a new Godot scene (.tscn) file with a root node. Specify rootNodeType (e.g., 'Node2D', 'Node3D', 'Control'; defaults to 'Node2D').

add_node

Add a child node to a scene file on disk. Defaults to root if parentNodePath is omitted. For sub-scene instances, use instantiate_scene.

load_sprite

Load a sprite into a Sprite2D node

export_mesh_library

Export a scene as a MeshLibrary resource

save_scene

Save a scene file, optionally to a new path via newPath (creating a copy). Most editing tools save automatically; use this primarily for saving copies.

set_cells

Set tile cells on a TileMapLayer node in a scene

get_scene_tree

Read a scene's node tree from a .tscn file on disk as JSON (names, types, properties, hierarchy). No running game required. For architecture analysis, use get_scene_insights.

set_node_properties

Set properties on a node in a saved scene file (.tscn) on disk permanently. For live runtime changes, use set_property instead.

attach_script

Attach a GDScript file to an existing node in a scene

create_resource

Create a .tres resource file with typed properties

edit_project_settings

Modify project.godot settings (input actions, display, rendering, physics, etc.). For autoload singletons, prefer manage_autoloads.

remove_node

Remove a node (and its children) from a scene

reparent_node

Move a node to a different parent within the same scene

connect_signal

Connect a signal from one node to a method on another node in a scene file (.tscn) on disk. For runtime signal monitoring, use subscribe_signals or send_key_sequence.

get_tile_data

Read existing tile cells from a TileMapLayer node in a scene

create_tileset

Create a TileSet resource with atlas sources from texture files

export_project

Export a Godot project for a target platform using a configured export preset

validate_scene

Validate a scene for common issues (missing scripts, broken references, orphan nodes)

batch_operations

Execute multiple scene operations in a single Godot process invocation. Much faster than individual tool calls since each spawns a separate process. Use for 3+ operations.

get_uid

Get the UID for a specific file in a Godot project (for Godot 4.4+)

update_project_uids

Update UID references in a Godot project by resaving resources (for Godot 4.4+)

add_to_group

Add a node to one or more groups in a scene

remove_from_group

Remove a node from one or more groups in a scene

instantiate_scene

Add a scene as a child instance of another scene (e.g., spawn a player scene inside a level)

add_animation

Add an animation with tracks and keyframes to an existing AnimationPlayer node. To create the AnimationPlayer itself, use create_animation_player first.

read_script

Read the contents of a GDScript file from a Godot project. Returns the full source code as text.

write_script

Write or overwrite a GDScript file in a Godot project. Creates parent directories if needed. Use validate_script afterward to check for syntax errors.

set_custom_tile_data

Set custom data layer values on specific tile cells in a TileMapLayer

duplicate_node

Duplicate a node within a scene, optionally with a new name or different parent

rename_node

Rename a node in a scene file. Updates the node's name while keeping all properties, children, and connections intact.

get_node_properties

Read properties from a node in a saved scene file (.tscn) on disk. Returns all non-default properties, or specific ones if listed. For runtime properties, use evaluate_expression.

create_animation_player

Create an AnimationPlayer node in a scene with optional pre-configured animations. To add animations to an existing player, use add_animation.

manage_autoloads

Add, remove, or list autoload singletons in project.godot

set_collision_layer_mask

Set collision layer and/or mask on a physics node. Accepts layer numbers (1-32) as array or raw bitmask.

capture_screenshot

Render a scene file statically and save the viewport as a PNG. No running game needed. For live game captures, use game_screenshot or run_and_capture. Requires a display server.

run_and_capture

Run the project for a duration, capture a screenshot, then stop. Runs the full game (unlike capture_screenshot) without needing run_interactive (unlike game_screenshot). Requires a display server.

send_input

Send a single Godot InputMap action (e.g., 'move_up', 'jump') to a running interactive project. Returns delivery confirmation only, not the effect — for multi-step testing prefer send_key_sequence with {"action": ...} items, which batches inputs, waits, and state/screenshot checkpoints into one roun

list_input_actions

List all input actions defined in a project's project.godot (the InputMap). Useful before using send_input. No running game required.

run_interactive

Run a Godot project with MCP input receiver injected. Enables send_key_sequence (batched inputs + checkpoints), game_state, get_runtime_errors, and screenshots via TCP. Use instead of run_project for interactive testing.

game_state

Fast structured verification (preferred over game_screenshot for gameplay logic): returns current scene name, script variables of all autoload singletons, and Player position if a Player node exists. For state not exposed via autoloads, use evaluate_expression or get_node_properties. For inline stat

call_method

Invoke a method on a live node in a running interactive Godot project. Resolves the node by path relative to the current scene (e.g., "Player", "World/Enemies/Boss") and calls the named method with optional arguments. Returns the serialized result. The project must be running via run_interactive.

find_nodes

Search the live runtime scene tree by name pattern and/or type, including dynamically spawned nodes. For static .tscn analysis, use get_scene_tree. Requires run_interactive.

evaluate_expression

Execute an arbitrary GDScript expression at runtime and return the result. The expression runs in the context of the current scene (e.g., "get_tree().current_scene.name", "Vector2(1,2).length()"). Useful for debugging, querying state, and one-off calculations. The project must be running via run_int

game_screenshot

Capture a screenshot from a running interactive project. Slowest verification path — use only when visual appearance itself matters (rendering, layout, animation). For gameplay/logic checks prefer game_state, evaluate_expression, or get_runtime_errors: structured, and much faster than writing and re

send_key

Send a single keyboard key event to a running interactive Godot project. Supports any key name recognized by Godot (e.g., "space", "a", "escape", "f1") and modifier keys. For sending multiple keys, prefer send_key_sequence — it processes all keys server-side in one round-trip with optional state/scr

send_mouse_click

Send a mouse click (press+release) at specific coordinates. For cursor movement, use send_mouse_motion. For dragging, use send_mouse_drag. Requires run_interactive.

send_mouse_motion

Move the mouse cursor to specific coordinates without clicking. Use for hover effects, aiming, and cursor tracking. Requires run_interactive.

send_mouse_drag

Send a mouse drag (press, move, release) from one position to another. For simple clicks, use send_mouse_click. Requires run_interactive.

wait_for_signal

Block until a signal is emitted on a node in the running game. Useful for sequencing test steps (e.g., wait for "animation_finished" or "died"). Returns whether the signal was received or the wait timed out. The project must be running via run_interactive.

wait_for_node

Block until a node appears in the scene tree. Useful for waiting on dynamically spawned nodes (e.g., wait for "Player/Sword" to appear after equip). Returns whether the node was found or the wait timed out. The project must be running via run_interactive.

get_performance_metrics

Retrieve performance metrics (FPS, draw calls, memory, node count, etc.) from a running project. Optionally filter to specific metrics. Requires run_interactive.

reset_scene

Reload the current scene in a running interactive Godot project. Useful for resetting game state during test loops. The project must be running via run_interactive.

get_runtime_errors

Retrieve runtime errors, warnings, and backtraces since the last call. Returns structured entries with error type, source, and stack traces. Requires Godot 4.5+ and run_interactive.

get_scene_insights

Analyze a scene's architecture: type distribution, signals, sub-scenes, scripts, groups, and tree depth. Runs headless (no game needed).

get_node_insights

Analyze a GDScript file: classify methods, identify signals, map dependencies, and list exports. Takes a scriptPath, not a nodePath. Runs headless (no game needed).

run_tests

Run GUT (Godot Unit Testing) tests via headless Godot. Requires GUT installed (addons/gut/). Returns pass/fail summary and console output.

send_key_sequence

Primary gameplay testing tool. Sends multiple raw keys and/or InputMap actions in one round-trip with inline checkpoints: {"wait": ms} delays, {"state": true} state snapshots, {"screenshot": "path"} captures, collectSignals for signal events. Replaces send_input/send_key loops with shell sleeps and

send_joypad_button

Send a gamepad button event (A, B, X, Y, shoulders, dpad, start, etc.) to a running project. For input actions, prefer send_input. Requires run_interactive.

send_joypad_motion

Send a gamepad analog stick or trigger axis event. Simulates analog input with float precision. For input actions, prefer send_input. Requires run_interactive.

pause_game

Pause or unpause a running project. MCP receiver stays active for screenshots, state queries, and property changes while paused. Requires run_interactive.

set_property

Set a property on a live node at runtime. Changes are immediate but NOT saved to disk — use set_node_properties for permanent changes. Requires run_interactive.

validate_script

Validate a GDScript file for syntax errors using Godot's parser in headless mode. No running game needed.

execute_script

Execute a multi-line GDScript block at runtime in the current scene context. Unlike evaluate_expression, supports variables, loops, and control flow. Requires run_interactive.

subscribe_signals

Subscribe to signals on a node for persistent monitoring. Retrieve with get_signal_events. For single-sequence monitoring, prefer send_key_sequence with collectSignals. Requires run_interactive.

get_signal_events

Retrieve buffered signal events from subscribe_signals. Returns signal name, arguments, and timestamp; clears buffer by default. Requires run_interactive.

search_assets

Search the Godot Asset Library for addons and project templates. Returns matching assets with the asset_id you pass to install_asset. Read-only network call to the public Asset Library REST API.

install_asset

Download an asset from the Godot Asset Library and extract it into a project. Provide assetId (download URL and sha256 are resolved and verified via the Asset Library) or a direct downloadUrl. The archive's single wrapping folder is stripped by default so addons land under res://addons/. Files are w

discover_tools

List available tools by category. Categories: process, project, scene, node, animation, tilemap, resource, script, signal_group, uid, settings, interactive, screenshot, analysis, testing, assets, meta.

// known CVEs in dependencies1 critical13 high5 medium12 low

Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.

criticalvitest@4.0.18GHSA-5xrq-8626-4rwp

When Vitest UI server is listening, arbitrary file can be read and executed

highaxios@1.7.9GHSA-35jp-ww65-95wh

axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `config.proxy`

highaxios@1.7.9GHSA-3g43-6gmg-66jw

axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollution Gadget in Config Merge

highaxios@1.7.9GHSA-43fc-jf86-j433

Axios is Vulnerable to Denial of Service via __proto__ Key in mergeConfig

highaxios@1.7.9GHSA-4hjh-wcwx-xvwj

Axios is vulnerable to DoS attack through lack of data size check

Depend on this server? Get alerted when its CVEs change.Watch this server free →
// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configGODOT_ASSET_LIBRARY_URL
configGODOT_PATH2. The environment variable pointing to your Godot executable
configMCP_EXCLUDE_TOOLSComma-separated tool names to exclude (e.g., "export_project,manage_autoloads")
configMCP_READ_ONLYSet to "true" to block all write operations
configMCP_TOOLSETSComma-separated tool categories to enable (e.g., "scene,interactive,analysis")
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

75/75 tools missing one or more hints — launch_editor (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); run_project (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_debug_output (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +72 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Tool test coverage

51/75 tools referenced in tests (68%)

Write tests that reference each tool by name so every tool has at least one test.

Shell command execution

18 child_process calls — runs shell commands

Prefer library functions over shell-outs. If you must shell out, ensure all inputs are properly escaped.

Production dependencies are patched

0 critical, 13 high severity in production deps — axios@1.7.9 (high), axios@1.7.9 (high)

Run npm audit fix, or upgrade the affected packages to a non-vulnerable version.

Dev dependencies

1 critical/high in dev-only deps (does not ship to users)

Upgrade dev dependencies when convenient.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 6 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/vollkorn-games/godot-mcp?variant=verified)](https://m8ven.ai/mcp/vollkorn-games/godot-mcp)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 43860a83dcbfba6456ed00af42917bf506a24e14
code hash: cc29d789ff453dd1d16686826304e3dffe2d7733923d392e7e6080d99546fc2c
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client