godot-mcp-bridge
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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