godot-mcp-bridge
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_project_infoA | Get Godot project name, engine version, main scene, viewport size, renderer and autoloads |
| get_filesystem_treeC | List the project filesystem as a nested tree of directories and files |
| search_filesB | Search project file names by case-insensitive substring or glob pattern |
| search_in_filesB | Grep project file contents and return matching file, 1-based line number and text |
| get_project_settingsA | Read one project setting by key, or dump all settings matching a section prefix |
| set_project_settingB | Set one project setting and save project.godot |
| uid_to_project_pathA | Resolve a uid:// identifier to its res:// project path |
| project_path_to_uidB | Resolve a res:// project path to its uid:// identifier |
| add_autoloadC | Register a scene or script as an autoload singleton and save project settings |
| remove_autoloadB | Remove an autoload singleton by name and save project settings |
| read_resourceB | Load a resource file and return its class and editor-visible properties |
| edit_resourceB | Set properties on an existing resource file and save it back to disk |
| create_resourceB | Create a resource of the given class, apply properties and save it to disk |
| get_resource_previewA | Render an image or texture resource to a base64 PNG, downscaled so its longest side is at most max_size pixels |
| get_scene_treeB | Get the node tree of the currently edited scene as nested name/type/path/script records |
| get_scene_file_contentA | Read the raw .tscn text of a scene file on disk |
| create_sceneA | Create a new scene file on disk with the given root node type, without opening it in the editor |
| open_sceneA | Open an existing scene file in the editor and make it the edited scene |
| delete_sceneB | Delete a scene file from disk together with its .import sidecar |
| add_scene_instanceA | Instance a packed scene as a child node of the currently edited scene |
| play_sceneA | Run the project: mode 'main', 'current', or a res:// scene path to play that scene |
| stop_sceneA | Stop the running game and clean up the bridge IPC temp files in its user dir |
| save_sceneA | Save the currently edited scene, optionally to a new res:// path (save-as); refuses to overwrite a scene open in another inactive tab |
| get_scene_exportsA | List every node's exported script variables in a scene file, with current values, Variant types and hints |
| add_mesh_instanceC | Add a MeshInstance3D using a primitive mesh_type or a mesh loaded from mesh_file; rotation is in degrees |
| setup_lightingB | Add a 3D light from a light_type or a preset (sun, indoor, dramatic); rotation and spot_angle are in degrees |
| set_material_3dA | Set a fresh StandardMaterial3D as a MeshInstance3D surface override — omitted params reset to class defaults, replacing any previous override |
| setup_environmentA | Create or reconfigure a WorldEnvironment with sky, ambient, tonemap, fog, glow, SSAO, SSR and SDFGI settings; reconfiguring an existing node is not undoable |
| setup_camera_3dA | Create or reconfigure a Camera3D; fov, rotation are in degrees and look_at is a world-space target; reconfiguring an existing node is not undoable |
| add_gridmapA | Create or reconfigure a GridMap with a MeshLibrary and paint cells; painted cells are not undoable |
| add_nodeC | Add a node of a ClassDB class or project class_name script under a parent in the edited scene |
| delete_nodeA | Delete a node from the edited scene (the scene root cannot be deleted) |
| duplicate_nodeA | Duplicate a node with its children under the same parent in the edited scene |
| move_nodeB | Reparent a node to a new parent in the edited scene |
| update_propertyA | Set one property on a node; compound values travel as constructor strings like Vector2(100, 200) or #ff0000 |
| get_node_propertiesA | List a node's editor-visible properties, optionally filtered by name prefix |
| add_resourceC | Create a Resource subclass instance and assign it to a node property |
| set_anchor_presetC | Apply a Control layout anchor preset to a Control node |
| rename_nodeB | Rename a node in the edited scene |
| connect_signalA | Connect a node signal to a method on a target node, persisted into the scene file |
| disconnect_signalB | Disconnect a node signal from a method on a target node |
| get_node_groupsA | List the groups a node belongs to |
| set_node_groupsA | Set a node's full group membership, adding and removing to match the desired set |
| find_nodes_in_groupA | Find every node in the edited scene that belongs to a group |
| get_editor_selectionC | List the nodes currently selected in the editor scene tree |
| select_nodesC | Select nodes in the editor scene tree and optionally show them in the Inspector |
| clear_editor_selectionA | Clear the editor scene tree selection |
| list_scriptsB | List .gd/.cs/.gdshader files under a project path with their class_name or extends |
| read_scriptB | Read the full text of a script or shader file from the project |
| create_scriptB | Create a .gd or .cs script file, generating a GDScript template when content is empty |
| edit_scriptB | Edit a script file using exactly one mode: replacements list, content+start_line line-range replace, content alone full replace, or insert_at_line+text |
| attach_scriptB | Attach an existing script resource to a node in the edited scene |
| get_open_scriptsA | List the scripts currently open in the Godot script editor |
| validate_scriptA | Compile-check a GDScript file without attaching it, returning validity as data |
| create_shaderB | Create a shader file, generating a template for the given shader_type when content is empty |
| read_shaderA | Read the full source code of a shader file |
| edit_shaderB | Edit a shader file using exactly one mode: content for a full replace, or a replacements list of literal search/replace items |
| assign_shader_materialB | Wrap a shader in a new ShaderMaterial and assign it to a node in the edited scene |
| set_shader_paramA | Set one shader uniform on a node's existing ShaderMaterial |
| get_shader_paramsA | List every shader uniform and its current value on a node's ShaderMaterial |
| get_editor_errorsA | Collect recent editor errors and warnings from the editor log file, script editor compile markers and the debugger Errors tab |
| get_output_logA | Tail the editor's log file (user://logs/godot.log), keeping only lines containing a case-sensitive substring filter |
| get_editor_screenshotA | Capture a PNG screenshot of the Godot editor window; empty save_path returns base64, otherwise the image is written to disk |
| get_game_screenshotA | Capture a PNG screenshot of the running game's viewport; empty save_path returns base64, otherwise the image is written to disk |
| execute_editor_scriptA | Run GDScript in the editor process as the body of run(); call _mcp_print(v) to emit output and return a value to send it back; file and resource write APIs are refused unless allow_unsafe_editor_io is true |
| clear_outputA | Push old content out of view in the editor Output panel by printing blank lines (cosmetic only, nothing is deleted) |
| reload_pluginA | Reload the Godot MCP Bridge plugin; the WebSocket connection drops briefly and auto-reconnects |
| reload_projectA | Trigger a rescan of the project filesystem in the editor |
| get_signalsA | List every signal declared by a node in the open scene with its argument types and current connections |
| compare_screenshotsA | Compare two PNG images (res:// or user:// path, or raw base64) pixel by pixel and return the change count plus a red-highlighted diff image |
| set_auto_dismissA | Enable or disable automatic dismissal of blocking modal dialogs in the editor |
| get_editor_cameraA | Get the 3D editor viewport camera global position, rotation in degrees, fov and clip planes |
| set_editor_cameraA | Move the 3D editor viewport camera in world space; look_at is applied after rotation_degrees and overrides it |
| simulate_keyA | Send a keyboard event to the running game by key name such as W, SPACE, ESCAPE or F1 (dropped if no game is running) |
| simulate_mouse_clickA | Click a mouse button at viewport pixel x,y in the running game, auto-releasing so UI buttons fire (dropped if no game is running) |
| simulate_mouse_moveB | Move the mouse to viewport pixel x,y in the running game with an optional motion delta and held-button mask (dropped if no game is running) |
| simulate_actionA | Press or release a named InputMap action in the running game (dropped if no game is running) |
| simulate_sequenceA | Send an ordered batch of input events to the running game, one event every frame_delay frames (dropped if no game is running) |
| get_input_actionsA | List InputMap actions with their deadzone and bound events, optionally including builtin ui_* actions |
| set_input_actionB | Create or replace an InputMap action's bindings in project settings and in the live editor InputMap |
| run_test_scenarioA | Run an ordered input/wait/assert/screenshot scenario against the running game, optionally launching a scene first |
| assert_node_stateB | Assert a property of a node in the running game against an expected value using the given operator |
| assert_screen_textB | Assert that text is visible in any Control element of the running game |
| run_stress_testA | Hammer the running game with random input actions for a duration in seconds and report crashes and new log errors |
| get_test_reportB | Summarize every assertion recorded this plugin session and optionally clear the collected results |
| get_game_scene_treeA | Dump the live scene tree of the running game from the tree root, including autoloads |
| get_game_node_propertiesA | Read live property values of a node in the running game |
| set_game_node_propertyA | Set one property on a live node in the running game and return its old and new value |
| capture_framesB | Capture a burst of viewport frames from the running game as base64 PNGs, spaced by frame_interval frames |
| monitor_propertiesA | Sample properties of a live node over several frames to observe how they change over time |
| execute_game_scriptA | Run GDScript inside the running game process; code runs as the body of run(root: Node), use print() for output, no top-level func definitions and no await |
| start_recordingA | Start recording player input events in the running game; mouse motion is recorded unfiltered and can be voluminous |
| stop_recordingA | Stop input recording in the running game and return the recorded event list |
| replay_recordingA | Replay recorded input events into the running game, honoring their time_ms timeline scaled by speed |
| find_nodes_by_scriptB | Find live nodes in the running game whose attached script path contains the given substring |
| get_autoloadB | Read an autoload singleton at /root/ in the running game |
| batch_get_propertiesA | Read properties of several live nodes in one round trip; missing nodes report inline instead of failing |
| find_ui_elementsB | List visible Control nodes in the running game with their text, global rect and center point in screen pixels |
| click_button_by_textA | Press the first visible button in the running game whose text matches, programmatically rather than via the mouse |
| wait_for_nodeA | Poll the running game until a node exists at the given path or the timeout in seconds elapses |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rezaahmadn/godot-mcp-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server