@satelliteoflove/godot-mcp 3.9.0 → 3.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,6 +14,8 @@ This MCP gives Claude direct access to your Godot editor. It can see your scene
14
14
 
15
15
  Add godot-mcp to your MCP client. See the [Installation Guide](INSTALL.md) for config examples (Claude Desktop, Claude Code, VSCode/Copilot, and more).
16
16
 
17
+ While you're at it, add [minimal-godot-mcp](https://github.com/ryanmazzolini/minimal-godot-mcp) too — it's a complementary server that covers static GDScript diagnostics and the running game's console output. See [Works Well With](#works-well-with).
18
+
17
19
  ### 2. Install the Godot addon
18
20
 
19
21
  ```bash
@@ -28,7 +30,7 @@ Open your Godot project, restart your AI assistant, and start building.
28
30
 
29
31
  ## What Claude Can Do
30
32
 
31
- - **See** your editor, scenes, running game, errors, and performance
33
+ - **See** your editor, scenes, running game, editor errors, and performance
32
34
  - **Inspect** nodes, resources, animations, tilemaps, 3D spatial data
33
35
  - **Modify** scenes, nodes, scripts, animations, tilemaps directly
34
36
  - **Test** by running the game and injecting input
@@ -36,9 +38,11 @@ Open your Godot project, restart your AI assistant, and start building.
36
38
 
37
39
  ## Works Well With
38
40
 
39
- [minimal-godot-mcp](https://github.com/ryanmazzolini/minimal-godot-mcp) by [@ryanmazzolini](https://github.com/ryanmazzolini) is another MCP server for Godot. It focuses on language server diagnostics and console output via DAP, with no addon required. This project focuses on runtime control, scene manipulation, and everything that needs a direct line into the editor.
41
+ [minimal-godot-mcp](https://github.com/ryanmazzolini/minimal-godot-mcp) by [@ryanmazzolini](https://github.com/ryanmazzolini) is another MCP server for Godot, and it's worth running alongside this one. This server drives the editor through an addon scene and node manipulation, running the game, input injection, runtime state, screenshots, and editor-side errors (`@tool`, import, and addon failures). minimal-godot-mcp needs no addon and provides exactly the functionality this server does not implement: LSP diagnostics for fast static `.gd` checking, and the running game's console output and stderr over DAP.
42
+
43
+ Neither duplicates the other, and they don't conflict. Install both and you get static analysis and the live game console alongside full editor and runtime control.
40
44
 
41
- They don't overlap much, and they don't conflict. Run them side by side for the best coverage.
45
+ **One godot-mcp client at a time, though.** A Godot editor bridge serves a single godot-mcp connection. If a second godot-mcp client connects - for example, a subagent that inherited the same MCP config - it is rejected while the first is active rather than displacing it, so the original session keeps working. The second client retries and connects automatically once the first disconnects. A client that crashes without closing its socket is taken over after a short idle timeout, so a dead session never permanently blocks new connections.
42
46
 
43
47
  ## Documentation
44
48
 
@@ -116,24 +116,16 @@ func _on_debug_output_received(output: PackedStringArray) -> void:
116
116
 
117
117
  func get_log_messages(params: Dictionary) -> Dictionary:
118
118
  var clear: bool = params.get("clear", false)
119
- var limit: int = params.get("limit", 50)
119
+ var limit: int = int(params.get("limit", 50))
120
+ var severity: String = params.get("severity", "all")
121
+ var since: int = int(params.get("since", 0))
120
122
 
121
- var all_messages := MCPLogger.get_errors()
122
- var total_count := all_messages.size()
123
-
124
- var limited: Array[Dictionary] = []
125
- var start_index := maxi(0, total_count - limit)
126
- for i in range(start_index, total_count):
127
- limited.append(all_messages[i])
123
+ var result := MCPLogger.query(since, severity, limit)
128
124
 
129
125
  if clear:
130
126
  MCPLogger.clear_errors()
131
127
 
132
- return _success({
133
- "total_count": total_count,
134
- "returned_count": limited.size(),
135
- "messages": limited,
136
- })
128
+ return _success(result)
137
129
 
138
130
 
139
131
  func get_errors(params: Dictionary) -> Dictionary:
@@ -3,6 +3,11 @@ extends MCPBaseCommand
3
3
  class_name MCPInputCommands
4
4
 
5
5
  const INPUT_TIMEOUT := 30.0
6
+ # How long to wait for the game bridge to report it is ready to receive input
7
+ # before giving up. The natural workflow is run -> immediately drive the game;
8
+ # the session connects before the scene loads, so this short wait absorbs that
9
+ # gap (usually under a second) instead of dispatching input into a void (#241).
10
+ const READY_TIMEOUT := 10.0
6
11
 
7
12
  var _input_map_result: Dictionary = {}
8
13
  var _input_map_pending: bool = false
@@ -15,6 +20,9 @@ var _type_text_result: Dictionary = {}
15
20
  var _type_text_pending: bool = false
16
21
 
17
22
 
23
+ const _BRIDGE_NOT_READY_MSG := "Game is running but its MCP bridge is not ready to receive input yet (no scene up, or the game just launched). This usually clears within a second of run — retry shortly."
24
+
25
+
18
26
  func get_commands() -> Dictionary:
19
27
  return {
20
28
  "get_input_map": get_input_map,
@@ -23,6 +31,23 @@ func get_commands() -> Dictionary:
23
31
  }
24
32
 
25
33
 
34
+ # Block until the running game's bridge reports it can consume input, bounded by
35
+ # READY_TIMEOUT. Returns true once ready, false if the game stops or never comes
36
+ # up in time. In the common case (game already running) this returns immediately
37
+ # without waiting a frame. Gating input on this is the fix for #241: the debug
38
+ # session connects before the main scene loads, so input dispatched on
39
+ # has_active_session() alone lands in a game with nothing to receive it.
40
+ func _await_bridge_ready(debugger_plugin) -> bool:
41
+ var start_time := Time.get_ticks_msec()
42
+ while not debugger_plugin.is_bridge_ready():
43
+ if not EditorInterface.is_playing_scene():
44
+ return false # game stopped or crashed while we waited
45
+ await Engine.get_main_loop().process_frame
46
+ if (Time.get_ticks_msec() - start_time) / 1000.0 > READY_TIMEOUT:
47
+ return false
48
+ return true
49
+
50
+
26
51
  func get_input_map(_params: Dictionary) -> Dictionary:
27
52
  if not EditorInterface.is_playing_scene():
28
53
  return _get_editor_input_map()
@@ -113,8 +138,10 @@ func execute_input_sequence(params: Dictionary) -> Dictionary:
113
138
  return _error("NOT_RUNNING", "No game is currently running")
114
139
 
115
140
  var debugger_plugin = _plugin.get_debugger_plugin() if _plugin else null
116
- if debugger_plugin == null or not debugger_plugin.has_active_session():
141
+ if debugger_plugin == null:
117
142
  return _error("NO_SESSION", "No active debug session")
143
+ if not await _await_bridge_ready(debugger_plugin):
144
+ return _error("BRIDGE_NOT_READY", _BRIDGE_NOT_READY_MSG)
118
145
 
119
146
  var max_end_time: float = 0.0
120
147
  for input in inputs:
@@ -162,8 +189,10 @@ func type_text(params: Dictionary) -> Dictionary:
162
189
  return _error("NOT_RUNNING", "No game is currently running")
163
190
 
164
191
  var debugger_plugin = _plugin.get_debugger_plugin() if _plugin else null
165
- if debugger_plugin == null or not debugger_plugin.has_active_session():
192
+ if debugger_plugin == null:
166
193
  return _error("NO_SESSION", "No active debug session")
194
+ if not await _await_bridge_ready(debugger_plugin):
195
+ return _error("BRIDGE_NOT_READY", _BRIDGE_NOT_READY_MSG)
167
196
 
168
197
  var timeout := max(INPUT_TIMEOUT, (text.length() * delay_ms / 1000.0) + 5.0)
169
198
 
@@ -3,10 +3,14 @@ extends MCPBaseCommand
3
3
  class_name MCPSystemCommands
4
4
 
5
5
 
6
+ const RESTART_ACK_GRACE_SEC := 0.3
7
+
8
+
6
9
  func get_commands() -> Dictionary:
7
10
  return {
8
11
  "mcp_handshake": mcp_handshake,
9
12
  "heartbeat": heartbeat,
13
+ "restart_editor": restart_editor,
10
14
  }
11
15
 
12
16
 
@@ -29,6 +33,25 @@ func heartbeat(_params: Dictionary) -> Dictionary:
29
33
  return _success({"status": "ok"})
30
34
 
31
35
 
36
+ func restart_editor(params: Dictionary) -> Dictionary:
37
+ var save: bool = params.get("save", true)
38
+
39
+ # Restarting tears down this websocket along with the editor, so defer the
40
+ # actual restart by a short grace period. That lets this acknowledgement
41
+ # flush to the client first; the MCP server then auto-reconnects once the
42
+ # editor is back. (EditorInterface.restart_editor itself defers the quit to
43
+ # end-of-frame, which alone is too early for the response to make it out.)
44
+ var tree := Engine.get_main_loop() as SceneTree
45
+ if tree:
46
+ tree.create_timer(RESTART_ACK_GRACE_SEC).timeout.connect(
47
+ func() -> void: EditorInterface.restart_editor(save)
48
+ )
49
+ else:
50
+ EditorInterface.restart_editor(save)
51
+
52
+ return _success({"restarting": true, "save": save})
53
+
54
+
32
55
  func _get_addon_version() -> String:
33
56
  var config := ConfigFile.new()
34
57
  var err := config.load("res://addons/godot_mcp/plugin.cfg")
@@ -10,8 +10,13 @@ signal input_map_received(actions: Array, error: String)
10
10
  signal input_sequence_completed(result: Dictionary)
11
11
  signal type_text_completed(result: Dictionary)
12
12
  signal game_response(message_type: String, data: Variant)
13
+ signal bridge_ready()
13
14
 
14
15
  var _active_session_id: int = -1
16
+ # True once the running game's bridge has announced it is ready to receive input
17
+ # (its main scene is up). The debug session connects before the scene loads, so
18
+ # has_active_session() alone is not enough to know input will land (#241).
19
+ var _bridge_ready: bool = false
15
20
  var _pending_screenshot: bool = false
16
21
  var _pending_debug_output: bool = false
17
22
  var _pending_performance_metrics: bool = false
@@ -53,15 +58,30 @@ func _capture(message: String, data: Array, session_id: int) -> bool:
53
58
  "godot_mcp:game_response":
54
59
  _handle_game_response(data)
55
60
  return true
61
+ "godot_mcp:bridge_ready":
62
+ _handle_bridge_ready(session_id)
63
+ return true
56
64
  return false
57
65
 
58
66
 
67
+ func _handle_bridge_ready(session_id: int) -> void:
68
+ # Only the active session's bridge counts; ignore a late message from a prior
69
+ # run (a new _setup_session has already reset the flag for the current one).
70
+ if session_id != _active_session_id:
71
+ return
72
+ _bridge_ready = true
73
+ bridge_ready.emit()
74
+
75
+
59
76
  func _setup_session(session_id: int) -> void:
60
77
  _active_session_id = session_id
78
+ # New game session: its bridge has not announced readiness yet.
79
+ _bridge_ready = false
61
80
 
62
81
 
63
82
  func _session_stopped() -> void:
64
83
  _active_session_id = -1
84
+ _bridge_ready = false
65
85
  if _pending_screenshot:
66
86
  _pending_screenshot = false
67
87
  screenshot_received.emit(false, "", 0, 0, "Game session ended")
@@ -97,6 +117,13 @@ func has_active_session() -> bool:
97
117
  return true
98
118
 
99
119
 
120
+ # True only once the running game's bridge has reported its main scene is up and
121
+ # can consume input. Input commands gate on this (not just has_active_session) so
122
+ # a sequence injected right after run is not dispatched into a half-booted game.
123
+ func is_bridge_ready() -> bool:
124
+ return _bridge_ready and has_active_session()
125
+
126
+
100
127
  func request_screenshot(max_width: int = 1024, quality: float = 0.75) -> void:
101
128
  if _active_session_id < 0:
102
129
  screenshot_received.emit(false, "", 0, 0, "No active game session")
@@ -6,6 +6,11 @@ static var _errors: Array[Dictionary] = []
6
6
  static var _max_lines := 1000
7
7
  static var _max_errors := 100
8
8
  static var _mutex := Mutex.new()
9
+ # Monotonic sequence stamped on every retained error, never reset (not even by
10
+ # clear_errors). It is the cursor for incremental reads: a caller passes the
11
+ # `cursor` from a previous get_log_messages back as `since` to get only what is
12
+ # new. Independent of array index, so trimming the oldest entries is harmless.
13
+ static var _seq := 0
9
14
 
10
15
 
11
16
  static func _static_init() -> void:
@@ -50,6 +55,8 @@ func _log_error(function: String, file: String, line: int, code: String,
50
55
  "frames": frames,
51
56
  }
52
57
  if not _is_duplicate(error_entry):
58
+ _seq += 1
59
+ error_entry["seq"] = _seq
53
60
  _errors.append(error_entry)
54
61
  if _errors.size() > _max_errors:
55
62
  _errors.remove_at(0)
@@ -74,6 +81,58 @@ static func get_errors() -> Array[Dictionary]:
74
81
  return _errors
75
82
 
76
83
 
84
+ static func get_seq() -> int:
85
+ return _seq
86
+
87
+
88
+ # Filtered, incremental view of the retained errors. Pure (no side effects) so it
89
+ # can be unit-tested headless.
90
+ # since : return only entries with seq > since (0 = from the beginning)
91
+ # severity : "all" (default), "error" (drops warnings), or "warning" (only warnings)
92
+ # limit : keep at most this many of the most recent matches (<= 0 means all)
93
+ # `cursor` is always the highest seq issued so far; pass it back as `since` next
94
+ # time to read only what is new. `total_count` is the whole buffer (unfiltered),
95
+ # `match_count` is what passed the filters, `returned_count` is after the limit.
96
+ static func query(since: int, severity: String, limit: int) -> Dictionary:
97
+ _mutex.lock()
98
+ var cursor := _seq
99
+ var total_count := _errors.size()
100
+ var matched: Array[Dictionary] = []
101
+ for entry in _errors:
102
+ if int(entry.get("seq", 0)) <= since:
103
+ continue
104
+ if not _severity_matches(severity, int(entry.get("error_type", 0))):
105
+ continue
106
+ matched.append(entry)
107
+ _mutex.unlock()
108
+
109
+ var match_count := matched.size()
110
+ var start_index := 0
111
+ if limit > 0 and match_count > limit:
112
+ start_index = match_count - limit
113
+ var messages: Array[Dictionary] = matched.slice(start_index)
114
+
115
+ return {
116
+ "total_count": total_count,
117
+ "match_count": match_count,
118
+ "returned_count": messages.size(),
119
+ "cursor": cursor,
120
+ "messages": messages,
121
+ }
122
+
123
+
124
+ # Logger.ErrorType (inherited): ERROR_TYPE_ERROR=0, ERROR_TYPE_WARNING=1,
125
+ # ERROR_TYPE_SCRIPT=2, ERROR_TYPE_SHADER=3. Only WARNING is not an actual problem.
126
+ static func _severity_matches(severity: String, error_type: int) -> bool:
127
+ match severity:
128
+ "error":
129
+ return error_type != Logger.ERROR_TYPE_WARNING
130
+ "warning":
131
+ return error_type == Logger.ERROR_TYPE_WARNING
132
+ _:
133
+ return true
134
+
135
+
77
136
  static func get_last_stack_trace() -> Array[Dictionary]:
78
137
  if _errors.is_empty():
79
138
  return []
@@ -5,10 +5,20 @@ const DEFAULT_MAX_WIDTH := 1024
5
5
  const DEFAULT_JPEG_QUALITY := 0.75
6
6
  const Onscreen := preload("onscreen.gd")
7
7
 
8
+ # Cap on frames waited for the main scene to appear before announcing ready
9
+ # anyway. The scene is normally added within a frame or two of the bridge
10
+ # autoload's _ready; the cap only matters for a scene-less run (a SceneTree-only
11
+ # tool), so it never blocks readiness forever. ~10s at 60 fps.
12
+ const READY_SCENE_WAIT_FRAMES := 600
13
+
8
14
  var _logger: _MCPGameLogger
9
15
  var _profiler: MCPFrameProfiler
10
16
  var _sampler: MCPRuntimeStateSampler
11
17
 
18
+ # Set once the bridge has told the editor the game is ready to drive. Guards the
19
+ # announcement against firing twice and lets the headless test observe it.
20
+ var _ready_announced := false
21
+
12
22
 
13
23
  func _ready() -> void:
14
24
  # The bridge must keep processing while the scene tree is paused. Input
@@ -39,6 +49,10 @@ func _ready() -> void:
39
49
  _engage_freeze()
40
50
  MCPLog.info("Game bridge: launched frozen")
41
51
 
52
+ # Tell the editor when the game is actually drivable, so input injected right
53
+ # after `run` is not silently dropped into a half-booted game (see #241).
54
+ _announce_bridge_ready_when_drivable()
55
+
42
56
 
43
57
  func _exit_tree() -> void:
44
58
  # Guaranteed cleanup: never leave an action latched when the bridge node
@@ -50,6 +64,35 @@ func _exit_tree() -> void:
50
64
  EngineDebugger.unregister_profiler("mcp_frame_profiler")
51
65
 
52
66
 
67
+ # The bridge autoload's _ready runs BEFORE the main scene is added to the tree,
68
+ # so the debug session is live (and the editor sees has_active_session) while
69
+ # current_scene is still null. Input injected in that window is dispatched into a
70
+ # game that has nothing to consume it — reported as executed, but a silent no-op
71
+ # (#241). Wait for the scene to exist plus one frame (so its own _ready/input
72
+ # wiring has run), then announce readiness; the editor gates input on this signal.
73
+ func _announce_bridge_ready_when_drivable() -> void:
74
+ var tree := get_tree()
75
+ if tree == null:
76
+ return
77
+ var frames := 0
78
+ while tree.current_scene == null and frames < READY_SCENE_WAIT_FRAMES:
79
+ await tree.process_frame
80
+ frames += 1
81
+ # One more frame so a freshly-added scene has had its first _ready/process pass.
82
+ # process_frame fires even while paused, so launch-frozen runs still report ready.
83
+ await tree.process_frame
84
+ var scene_path := tree.current_scene.scene_file_path if tree.current_scene else ""
85
+ _emit_bridge_ready(scene_path)
86
+
87
+
88
+ func _emit_bridge_ready(scene_path: String) -> void:
89
+ if _ready_announced:
90
+ return
91
+ _ready_announced = true
92
+ EngineDebugger.send_message("godot_mcp:bridge_ready", [scene_path])
93
+ MCPLog.info("Game bridge: ready to drive (%s)" % scene_path)
94
+
95
+
53
96
  func _process(delta: float) -> void:
54
97
  _game_time_process(delta)
55
98
  _sequence_process()
package/addon/plugin.cfg CHANGED
@@ -3,6 +3,6 @@
3
3
  name="Godot MCP"
4
4
  description="Model Context Protocol server for AI assistant integration"
5
5
  author="godot-mcp"
6
- version="3.9.0"
6
+ version="3.10.1"
7
7
  script="plugin.gd"
8
8
  godot_version_min="4.5"
@@ -8,10 +8,14 @@ signal client_disconnected()
8
8
 
9
9
  const DEFAULT_PORT := 6550
10
10
  const STALE_CONNECTION_TIMEOUT_MSEC := 45000
11
+ # Upper bound on how long a rejected newcomer is kept around while we hand it a
12
+ # clean 4001 close. Caps the whole reject lifecycle (handshake + close flush) so
13
+ # a peer that never upgrades or never finishes closing can't leak.
14
+ const REJECT_TIMEOUT_MSEC := 5000
11
15
  const CLOSE_CODE_STALE := 4002
12
16
  const CLOSE_REASON_STALE := "Connection timed out (no activity)"
13
- const CLOSE_CODE_REPLACED := 4003
14
- const CLOSE_REASON_REPLACED := "Replaced by new client"
17
+ const CLOSE_CODE_ALREADY_CONNECTED := 4001
18
+ const CLOSE_REASON_ALREADY_CONNECTED := "Another client is already connected"
15
19
 
16
20
  var _server: TCPServer
17
21
  var _peer: StreamPeerTCP
@@ -21,6 +25,10 @@ var _connected_host: String = ""
21
25
  var _connected_port: int = 0
22
26
  var _last_activity_msec: int = 0
23
27
  var _stale_reason: String = ""
28
+ # Newcomers that arrived while a live client already held the bridge. Each entry
29
+ # is { "ws": WebSocketPeer, "tcp": StreamPeerTCP, "since_msec": int, "close_sent": bool }.
30
+ # They are handshaked just far enough to receive a clean 4001 close, then dropped.
31
+ var _rejecting_peers: Array = []
24
32
 
25
33
 
26
34
  func _process(_delta: float) -> void:
@@ -34,6 +42,9 @@ func _process(_delta: float) -> void:
34
42
  _ws_peer.poll()
35
43
  _process_websocket()
36
44
 
45
+ if not _rejecting_peers.is_empty():
46
+ _process_rejecting_peers()
47
+
37
48
 
38
49
  func start_server(port: int = DEFAULT_PORT, bind_address: String = "127.0.0.1") -> Error:
39
50
  _server = TCPServer.new()
@@ -55,6 +66,15 @@ func stop_server() -> void:
55
66
  _peer.disconnect_from_host()
56
67
  _peer = null
57
68
 
69
+ for entry in _rejecting_peers:
70
+ var rej_ws: WebSocketPeer = entry.get("ws")
71
+ if rej_ws:
72
+ rej_ws.close()
73
+ var rej_tcp: StreamPeerTCP = entry.get("tcp")
74
+ if rej_tcp:
75
+ rej_tcp.disconnect_from_host()
76
+ _rejecting_peers.clear()
77
+
58
78
  if _server:
59
79
  _server.stop()
60
80
  _server = null
@@ -89,11 +109,19 @@ func _accept_connection() -> void:
89
109
 
90
110
  if _ws_peer != null:
91
111
  if _is_stale_connection():
112
+ # The incumbent looks dead (TCP dropped, or no activity past the
113
+ # timeout). Hand the bridge to the newcomer so a crashed client can
114
+ # never permanently block reconnection.
92
115
  MCPLog.warn("Replacing stale connection with new client (%s)" % _stale_reason)
93
116
  _force_close_connection()
94
117
  else:
95
- MCPLog.warn("Replacing active connection with new client (previous server likely exited without closing)")
96
- _force_close_connection(CLOSE_CODE_REPLACED, CLOSE_REASON_REPLACED)
118
+ # A live client already holds the bridge. Protect the incumbent and
119
+ # reject the newcomer with a clean close code instead of displacing
120
+ # it. This keeps a transient second client (e.g. a subagent that
121
+ # inherited the same MCP config) from bricking the active session.
122
+ MCPLog.warn("Rejecting new connection from %s:%d: another client is already connected" % [incoming.get_connected_host(), incoming.get_connected_port()])
123
+ _begin_reject(incoming)
124
+ return
97
125
 
98
126
  _peer = incoming
99
127
  _ws_peer = WebSocketPeer.new()
@@ -112,6 +140,64 @@ func _accept_connection() -> void:
112
140
  MCPLog.info("TCP connection received from %s:%d, awaiting WebSocket handshake..." % [_connected_host, _connected_port])
113
141
 
114
142
 
143
+ func _begin_reject(incoming: StreamPeerTCP) -> void:
144
+ # Complete just enough of the WebSocket handshake on a throwaway peer to send
145
+ # a proper coded close frame (4001), so the rejected client gets a clear
146
+ # diagnostic rather than an opaque TCP reset. The incumbent's peer is never
147
+ # touched. Driven to completion in _process_rejecting_peers().
148
+ var ws := WebSocketPeer.new()
149
+ var err := ws.accept_stream(incoming)
150
+ if err != OK:
151
+ # Can't speak WebSocket to this peer; just drop the raw TCP connection.
152
+ incoming.disconnect_from_host()
153
+ return
154
+ _rejecting_peers.append({
155
+ "ws": ws,
156
+ "tcp": incoming,
157
+ "since_msec": Time.get_ticks_msec(),
158
+ "close_sent": false,
159
+ })
160
+
161
+
162
+ func _process_rejecting_peers() -> void:
163
+ var keep: Array = []
164
+ var now := Time.get_ticks_msec()
165
+ for entry in _rejecting_peers:
166
+ var ws: WebSocketPeer = entry["ws"]
167
+ ws.poll()
168
+ var state := ws.get_ready_state()
169
+
170
+ # Hard lifecycle cap: a reject peer should resolve in milliseconds.
171
+ # Anything still around past the timeout (never upgraded, or stuck
172
+ # mid-close because the client vanished) gets dropped so it can't leak.
173
+ if now - int(entry["since_msec"]) > REJECT_TIMEOUT_MSEC:
174
+ _drop_rejecting_peer(entry)
175
+ continue
176
+
177
+ match state:
178
+ WebSocketPeer.STATE_OPEN:
179
+ if not entry["close_sent"]:
180
+ ws.close(CLOSE_CODE_ALREADY_CONNECTED, CLOSE_REASON_ALREADY_CONNECTED)
181
+ entry["close_sent"] = true
182
+ # Keep polling so the close frame is actually flushed.
183
+ keep.append(entry)
184
+ WebSocketPeer.STATE_CLOSED:
185
+ _drop_rejecting_peer(entry)
186
+ _:
187
+ # STATE_CONNECTING (awaiting handshake) or STATE_CLOSING
188
+ # (flushing the close frame) - keep polling until the cap.
189
+ keep.append(entry)
190
+ _rejecting_peers = keep
191
+
192
+
193
+ func _drop_rejecting_peer(entry: Dictionary) -> void:
194
+ var tcp: StreamPeerTCP = entry.get("tcp")
195
+ if tcp:
196
+ tcp.disconnect_from_host()
197
+ entry["ws"] = null
198
+ entry["tcp"] = null
199
+
200
+
115
201
  func _process_websocket() -> void:
116
202
  if not _ws_peer:
117
203
  return
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=websocket.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/connection/websocket.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { once } from 'node:events';
3
+ import { WebSocketServer } from 'ws';
4
+ import { GodotConnection } from '../../connection/websocket.js';
5
+ // Keep diagnostics hermetic (no WSL detection / no child processes) and quiet.
6
+ vi.mock('../../utils/connection-strategy.js', () => ({
7
+ getTargetHost: () => '127.0.0.1',
8
+ getConnectionStrategy: (port) => ({
9
+ environment: 'native',
10
+ targetHost: '127.0.0.1',
11
+ wsUrl: `ws://127.0.0.1:${port}`,
12
+ }),
13
+ }));
14
+ vi.mock('../../utils/logger.js', () => ({
15
+ logger: {
16
+ debug: vi.fn(),
17
+ info: vi.fn(),
18
+ notice: vi.fn(),
19
+ warning: vi.fn(),
20
+ warningRateLimited: vi.fn(),
21
+ error: vi.fn(),
22
+ critical: vi.fn(),
23
+ },
24
+ }));
25
+ // Application close codes the Godot addon uses on the bridge.
26
+ const CLOSE_CODE_ALREADY_CONNECTED = 4001;
27
+ const CLOSE_CODE_REPLACED = 4003;
28
+ /**
29
+ * Stand up a throwaway WebSocket server that plays the role of the Godot bridge.
30
+ * The supplied handler decides what to do with each incoming client socket.
31
+ */
32
+ async function startFakeBridge(onConnection) {
33
+ const wss = new WebSocketServer({ host: '127.0.0.1', port: 0 });
34
+ await once(wss, 'listening');
35
+ wss.on('connection', onConnection);
36
+ const port = wss.address().port;
37
+ return { wss, port };
38
+ }
39
+ /** Resolve when `event` fires on `emitter`, reject if it doesn't within `ms`. */
40
+ function waitForEvent(emitter, event, ms = 3000) {
41
+ return new Promise((resolve, reject) => {
42
+ const timer = setTimeout(() => {
43
+ emitter.off(event, handler);
44
+ reject(new Error(`Timed out waiting for "${event}" event`));
45
+ }, ms);
46
+ const handler = () => {
47
+ clearTimeout(timer);
48
+ resolve();
49
+ };
50
+ emitter.once(event, handler);
51
+ });
52
+ }
53
+ describe('GodotConnection contention handling (#237)', () => {
54
+ let connection = null;
55
+ let wss = null;
56
+ beforeEach(() => {
57
+ vi.clearAllMocks();
58
+ });
59
+ afterEach(async () => {
60
+ // Tear the client down first so its reconnect timer is cleared before the
61
+ // bridge goes away (otherwise it would reconnect to a dead port).
62
+ connection?.disconnect();
63
+ connection = null;
64
+ if (wss) {
65
+ await new Promise((resolve) => wss.close(() => resolve()));
66
+ wss = null;
67
+ }
68
+ });
69
+ it('reconnects after being replaced by a newer client (4003), instead of latching dead', async () => {
70
+ // Bridge replaces whoever connects: closes the socket with the REPLACED code.
71
+ const bridge = await startFakeBridge((socket) => {
72
+ socket.on('message', () => socket.close(CLOSE_CODE_REPLACED, 'Replaced by new client'));
73
+ });
74
+ wss = bridge.wss;
75
+ connection = new GodotConnection({ host: '127.0.0.1', port: bridge.port });
76
+ const reconnecting = waitForEvent(connection, 'reconnecting');
77
+ await connection.connect().catch(() => { });
78
+ // The whole point of #237: a replaced client must schedule a reconnect.
79
+ await expect(reconnecting).resolves.toBeUndefined();
80
+ expect(connection.getDiagnostics().lastDisconnectReason).toBe('replaced_by_new_client');
81
+ });
82
+ it('keeps retrying when rejected because another client is connected (4001)', async () => {
83
+ const bridge = await startFakeBridge((socket) => {
84
+ socket.on('message', () => socket.close(CLOSE_CODE_ALREADY_CONNECTED, 'Another client is already connected'));
85
+ });
86
+ wss = bridge.wss;
87
+ connection = new GodotConnection({ host: '127.0.0.1', port: bridge.port });
88
+ const reconnecting = waitForEvent(connection, 'reconnecting');
89
+ await connection.connect().catch(() => { });
90
+ await expect(reconnecting).resolves.toBeUndefined();
91
+ expect(connection.getDiagnostics().lastDisconnectReason).toBe('rejected_another_client');
92
+ expect(connection.getDiagnostics().rejectionCount).toBe(1);
93
+ });
94
+ it('no longer tells a replaced client to restart; reports automatic recovery', async () => {
95
+ const bridge = await startFakeBridge((socket) => {
96
+ socket.on('message', () => socket.close(CLOSE_CODE_REPLACED, 'Replaced by new client'));
97
+ });
98
+ wss = bridge.wss;
99
+ connection = new GodotConnection({ host: '127.0.0.1', port: bridge.port });
100
+ const reconnecting = waitForEvent(connection, 'reconnecting');
101
+ await connection.connect().catch(() => { });
102
+ await reconnecting;
103
+ const message = connection.getDiagnosticMessage();
104
+ expect(message).not.toMatch(/no longer active/i);
105
+ expect(message).toMatch(/reconnect/i);
106
+ });
107
+ });
108
+ //# sourceMappingURL=websocket.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.test.js","sourceRoot":"","sources":["../../../src/__tests__/connection/websocket.test.ts"],"names":[],"mappings":"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"}
@@ -62,11 +62,42 @@ describe('editor tool', () => {
62
62
  expect(mock.calls[0].params.frozen).toBe(true);
63
63
  });
64
64
  });
65
+ describe('restart', () => {
66
+ it('sends restart_editor with save=true by default and confirms reconnect', async () => {
67
+ mock.mockResponse({ restarting: true, save: true });
68
+ const ctx = createToolContext(mock);
69
+ const result = await editor.execute({ action: 'restart' }, ctx);
70
+ expect(mock.calls[0].command).toBe('restart_editor');
71
+ expect(mock.calls[0].params.save).toBe(true);
72
+ expect(result).toContain('restarting');
73
+ expect(result).toContain('reconnect');
74
+ });
75
+ it('passes save=false through and says it will not save', async () => {
76
+ mock.mockResponse({ restarting: true, save: false });
77
+ const ctx = createToolContext(mock);
78
+ const result = await editor.execute({ action: 'restart', save: false }, ctx);
79
+ expect(mock.calls[0].params.save).toBe(false);
80
+ expect(result).toContain('without saving');
81
+ });
82
+ it('treats a dropped connection as success (fire-and-forget)', async () => {
83
+ // The editor tears the bridge down as it restarts; sendCommand rejects
84
+ // with "Connection closed" mid-flight. That is the expected success path.
85
+ mock.mockError(new Error('Connection closed'));
86
+ const ctx = createToolContext(mock);
87
+ const result = await editor.execute({ action: 'restart' }, ctx);
88
+ expect(result).toContain('restarting');
89
+ });
90
+ it('rethrows a real error (e.g. command unknown to an older addon)', async () => {
91
+ mock.mockError(new Error('Unknown command: restart_editor'));
92
+ const ctx = createToolContext(mock);
93
+ await expect(editor.execute({ action: 'restart' }, ctx)).rejects.toThrow('Unknown command');
94
+ });
95
+ });
65
96
  describe('get_log_messages', () => {
66
- it('returns "No log messages" when empty', async () => {
97
+ it('returns the cursor even when empty, so a first check can start polling', async () => {
67
98
  const ctx = createToolContext(mock);
68
- mock.mockResponse({ total_count: 0, returned_count: 0, messages: [] });
69
- expect(await editor.execute({ action: 'get_log_messages' }, ctx)).toBe('No log messages');
99
+ mock.mockResponse({ total_count: 0, match_count: 0, returned_count: 0, cursor: 0, messages: [] });
100
+ expect(await editor.execute({ action: 'get_log_messages' }, ctx)).toBe('No messages (cursor 0).');
70
101
  });
71
102
  it('returns JSON with messages when present', async () => {
72
103
  const ctx = createToolContext(mock);
@@ -88,6 +119,48 @@ describe('editor tool', () => {
88
119
  await editor.execute({ action: 'get_log_messages', limit: 10 }, ctx);
89
120
  expect(mock.calls[0].params.limit).toBe(10);
90
121
  });
122
+ it('defaults severity to "all" and since to 0', async () => {
123
+ const ctx = createToolContext(mock);
124
+ mock.mockResponse({ total_count: 0, match_count: 0, returned_count: 0, cursor: 0, messages: [] });
125
+ await editor.execute({ action: 'get_log_messages' }, ctx);
126
+ expect(mock.calls[0].params.severity).toBe('all');
127
+ expect(mock.calls[0].params.since).toBe(0);
128
+ });
129
+ it('passes severity and since filters through to Godot', async () => {
130
+ const ctx = createToolContext(mock);
131
+ mock.mockResponse({ total_count: 5, match_count: 0, returned_count: 0, cursor: 5, messages: [] });
132
+ await editor.execute({ action: 'get_log_messages', severity: 'error', since: 3 }, ctx);
133
+ expect(mock.calls[0].params.severity).toBe('error');
134
+ expect(mock.calls[0].params.since).toBe(3);
135
+ });
136
+ it('surfaces cursor and match_count in the structured response', async () => {
137
+ const ctx = createToolContext(mock);
138
+ const responseData = {
139
+ total_count: 7,
140
+ match_count: 2,
141
+ returned_count: 2,
142
+ cursor: 7,
143
+ messages: [
144
+ { timestamp: 1, type: 'Error', message: 'boom', file: 'res://a.gd', line: 1, error_type: 0, frames: [] },
145
+ { timestamp: 2, type: 'Error', message: 'bang', file: 'res://b.gd', line: 2, error_type: 0, frames: [] },
146
+ ],
147
+ };
148
+ mock.mockResponse(responseData);
149
+ const result = await editor.execute({ action: 'get_log_messages', severity: 'error' }, ctx);
150
+ expect(structuredOf(result)).toEqual(responseData);
151
+ });
152
+ it('reports "no new messages" with the cursor when reading incrementally and nothing matched', async () => {
153
+ const ctx = createToolContext(mock);
154
+ mock.mockResponse({ total_count: 4, match_count: 0, returned_count: 0, cursor: 4, messages: [] });
155
+ const result = await editor.execute({ action: 'get_log_messages', since: 4 }, ctx);
156
+ expect(result).toBe('No new messages since cursor 4.');
157
+ });
158
+ it('names the severity in the "no new messages" reply when filtering', async () => {
159
+ const ctx = createToolContext(mock);
160
+ mock.mockResponse({ total_count: 4, match_count: 0, returned_count: 0, cursor: 4, messages: [] });
161
+ const result = await editor.execute({ action: 'get_log_messages', since: 4, severity: 'error' }, ctx);
162
+ expect(result).toBe('No new error messages since cursor 4.');
163
+ });
91
164
  });
92
165
  describe('get_stack_trace', () => {
93
166
  it('returns "No stack trace available" when empty, JSON when present', async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"editor.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools/editor.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools/editor.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/connection/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAuBtC,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,yBAAyB,GACzB,wBAAwB,GACxB,oBAAoB,GACpB,iBAAiB,GACjB,iBAAiB,GACjB,OAAO,CAAC;AAEZ,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,WAAW,GAAG,cAAc,GAAG,YAAY,GAAG,cAAc,CAAC;IAC3E,oBAAoB,EAAE,gBAAgB,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC/B;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;CAClC;AAQD,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,eAAe,CAAgC;IAEvD,OAAO,CAAC,oBAAoB,CAAuC;IACnE,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,YAAY,CAAgF;IAEpG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;gBAE5B,OAAO,GAAE,sBAA2B;IAOhD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,aAAa,IAAI,OAAO,CAG3B;IAED,cAAc,IAAI,qBAAqB;IAavC,oBAAoB,IAAI,MAAM;IAqDxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgG9B,UAAU,IAAI,IAAI;IAWZ,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAwBnF,gBAAgB;IAqD9B,OAAO,CAAC,aAAa;IA2CrB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,OAAO;CAehB;AAcD,wBAAgB,kBAAkB,IAAI,eAAe,CAUpD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkD1D"}
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/connection/websocket.ts"],"names":[],"mappings":"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"}
@@ -84,18 +84,19 @@ export class GodotConnection extends EventEmitter {
84
84
  const lines = [];
85
85
  switch (diag.lastDisconnectReason) {
86
86
  case 'rejected_another_client':
87
- lines.push('Status: Connection rejected (another client already connected)');
87
+ lines.push('Status: Another client is already connected to Godot');
88
88
  if (diag.rejectionCount > 1) {
89
89
  lines.push(`Details: ${diag.rejectionCount} connection attempts rejected`);
90
90
  }
91
- lines.push('Suggestion: Multiple MCP server processes may be running.');
92
- lines.push(' Check: ps aux | grep godot-mcp (macOS/Linux)');
93
- lines.push(' Check: Get-Process -Name node | ? CommandLine -Like "*godot-mcp*" (Windows)');
94
- lines.push(' Fix: Kill all godot-mcp processes and restart your MCP client');
91
+ lines.push('Suggestion: Only one client can drive the Godot bridge at a time.');
92
+ lines.push(' This client keeps retrying and will connect once the other disconnects.');
93
+ lines.push(' If you did not expect another client, check for duplicate godot-mcp processes:');
94
+ lines.push(' macOS/Linux: ps aux | grep godot-mcp');
95
+ lines.push(' Windows: Get-Process -Name node | ? CommandLine -Like "*godot-mcp*"');
95
96
  break;
96
97
  case 'replaced_by_new_client':
97
- lines.push('Status: Another MCP server connected and replaced this one');
98
- lines.push('Suggestion: This server is no longer active. Restart it or close this session.');
98
+ lines.push('Status: Another client took over the Godot bridge');
99
+ lines.push('Suggestion: Reconnecting automatically; this recovers once the other client disconnects.');
99
100
  break;
100
101
  case 'connection_refused':
101
102
  lines.push(`Status: Cannot reach Godot at ${diag.url}`);
@@ -160,23 +161,25 @@ export class GodotConnection extends EventEmitter {
160
161
  if (code === CLOSE_CODE_ALREADY_CONNECTED) {
161
162
  this.lastDisconnectReason = 'rejected_another_client';
162
163
  this.rejectionCount++;
164
+ // Back off in proportion to how many times we've been rejected so a
165
+ // lingering second client doesn't busy-loop reconnecting every second
166
+ // (each brief 'open' resets reconnectAttempt before this close fires).
167
+ this.reconnectAttempt = Math.min(this.rejectionCount - 1, RECONNECT_DELAYS.length - 1);
163
168
  const reasonStr = reason?.toString() || 'Another client is already connected';
164
- logger.critical('Connection rejected: another client already connected', {
169
+ logger.warningRateLimited('rejected-another-client', 'Another client holds the Godot bridge; will keep retrying', {
165
170
  reason: reasonStr,
166
- suggestion: 'Multiple MCP server processes may be running',
167
- diagnostics: {
168
- macLinux: 'ps aux | grep godot-mcp',
169
- windows: 'Get-Process -Name node | ? CommandLine -Like "*godot-mcp*"',
170
- },
171
+ rejectionCount: this.rejectionCount,
171
172
  });
172
173
  }
173
174
  else if (code === CLOSE_CODE_REPLACED) {
175
+ // A newer client took over the bridge. Don't latch this connection
176
+ // dead - keep reconnecting so it recovers automatically once the
177
+ // other client disconnects (or is itself replaced).
174
178
  this.lastDisconnectReason = 'replaced_by_new_client';
175
- this.isClosing = true;
176
179
  const reasonStr = reason?.toString() || 'Replaced by new client';
177
- logger.warning('Another MCP server connected to Godot, this server will not reconnect', {
180
+ logger.warningRateLimited('replaced-by-new-client', 'Connection was replaced by another client; will attempt to reconnect', {
178
181
  reason: reasonStr,
179
- suggestion: 'This is normal when reconnecting. If unexpected, check for duplicate MCP server configurations.',
182
+ suggestion: 'This client reconnects when the Godot bridge is free again.',
180
183
  });
181
184
  }
182
185
  else if (code === CLOSE_CODE_STALE) {
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/connection/websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/connection/websocket.ts"],"names":[],"mappings":"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"}
@@ -13,10 +13,19 @@ export declare const editor: import("../core/types.js").ToolDefinition<z.ZodDisc
13
13
  frozen: z.ZodOptional<z.ZodBoolean>;
14
14
  }, z.core.$strip>, z.ZodObject<{
15
15
  action: z.ZodLiteral<"stop">;
16
+ }, z.core.$strip>, z.ZodObject<{
17
+ action: z.ZodLiteral<"restart">;
18
+ save: z.ZodOptional<z.ZodBoolean>;
16
19
  }, z.core.$strip>, z.ZodObject<{
17
20
  action: z.ZodLiteral<"get_log_messages">;
18
21
  clear: z.ZodOptional<z.ZodBoolean>;
19
22
  limit: z.ZodOptional<z.ZodNumber>;
23
+ severity: z.ZodOptional<z.ZodEnum<{
24
+ error: "error";
25
+ warning: "warning";
26
+ all: "all";
27
+ }>>;
28
+ since: z.ZodOptional<z.ZodNumber>;
20
29
  }, z.core.$strip>, z.ZodObject<{
21
30
  action: z.ZodLiteral<"get_stack_trace">;
22
31
  }, z.core.$strip>, z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/tools/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAyB,MAAM,kBAAkB,CAAC;AAsGjF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BA0GjB,CAAC;AAEH,eAAO,MAAM,WAAW,EAAe,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/tools/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAyB,MAAM,kBAAkB,CAAC;AAiIjF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAqIjB,CAAC;AAEH,eAAO,MAAM,WAAW,EAAe,iBAAiB,EAAE,CAAC"}
@@ -26,9 +26,30 @@ const EditorSchema = z
26
26
  }),
27
27
  z.object({ action: z.literal('stop').describe('Stop the running project') }),
28
28
  z.object({
29
- action: z.literal('get_log_messages').describe('Get editor/game log messages'),
30
- clear: z.boolean().optional().describe('Clear buffer after reading'),
29
+ action: z
30
+ .literal('restart')
31
+ .describe('Restart the editor, reloading project.godot (autoloads, input map), addon code, and plugins from disk. Use after external edits the running editor would otherwise keep stale. Fire-and-forget: the bridge drops and auto-reconnects within a few seconds. Does not start a cold editor - the editor must already be running.'),
32
+ save: z
33
+ .boolean()
34
+ .optional()
35
+ .describe('Save the project before restarting (default: true). Set false to discard unsaved editor changes.'),
36
+ }),
37
+ z.object({
38
+ action: z
39
+ .literal('get_log_messages')
40
+ .describe('Get errors and warnings from the EDITOR process - @tool script runtime errors, import failures, addon errors, and failures from editor-side operations (scene/resource edits, reloads). This is the feedback channel for editor-side changes: run it after a mutation to confirm it did not break the editor. It does NOT include errors from the running game - for those, use minimal-godot-mcp\'s get_console_output (game console via DAP). Filter by severity (errors-only = "did my change break the editor?") and use `since`/`cursor` to read only what is new; every response returns the current `cursor`, even when empty.'),
41
+ clear: z.boolean().optional().describe('Clear the editor error buffer after reading'),
31
42
  limit: z.number().int().positive().optional().describe('Maximum number of messages to return (default: 50)'),
43
+ severity: z
44
+ .enum(['all', 'error', 'warning'])
45
+ .optional()
46
+ .describe('Filter by severity: "error" drops warnings (the "did anything actually break?" check), "warning" returns only warnings, "all" (default) returns both.'),
47
+ since: z
48
+ .number()
49
+ .int()
50
+ .nonnegative()
51
+ .optional()
52
+ .describe('Return only messages newer than this cursor. Pass back the `cursor` from a prior response to see just what is new since then - the incremental check that avoids re-reading the whole buffer (0/omitted = from the beginning).'),
32
53
  }),
33
54
  z.object({ action: z.literal('get_stack_trace').describe('Get the most recent error stack trace') }),
34
55
  z.object({
@@ -56,7 +77,7 @@ const EditorSchema = z
56
77
  export const editor = defineTool({
57
78
  name: 'godot_editor',
58
79
  annotations: { title: 'Editor Control', readOnlyHint: false, destructiveHint: false, openWorldHint: false },
59
- description: 'Control the Godot editor: get state, manage selection, run/stop project, capture screenshots, read log messages and stack traces, control 2D viewport',
80
+ description: 'Control the Godot editor: get state, manage selection, run/stop project, restart the editor, capture screenshots, read log messages and stack traces, control 2D viewport',
60
81
  schema: EditorSchema,
61
82
  async execute(args, { godot }) {
62
83
  switch (args.action) {
@@ -86,13 +107,40 @@ export const editor = defineTool({
86
107
  await godot.sendCommand('stop_project');
87
108
  return 'Stopped project';
88
109
  }
110
+ case 'restart': {
111
+ const save = args.save ?? true;
112
+ // Restarting tears down the bridge, so this is fire-and-forget: send the
113
+ // request and tolerate the connection dropping before the ack returns.
114
+ // The connection auto-reconnects once the editor is back. A drop here is
115
+ // the expected outcome; anything else (not connected to begin with, or an
116
+ // older addon that doesn't know the command) is a real failure.
117
+ try {
118
+ await godot.sendCommand('restart_editor', { save });
119
+ }
120
+ catch (err) {
121
+ const message = err instanceof Error ? err.message : String(err);
122
+ if (!message.includes('Connection closed')) {
123
+ throw err;
124
+ }
125
+ }
126
+ return `Editor is restarting${save ? ' (project saved first)' : ' without saving'}. The bridge reconnects automatically in a few seconds - retry your next command then.`;
127
+ }
89
128
  case 'get_log_messages': {
90
129
  const result = await godot.sendCommand('get_log_messages', {
91
130
  clear: args.clear ?? false,
92
131
  limit: args.limit ?? 50,
132
+ severity: args.severity ?? 'all',
133
+ since: args.since ?? 0,
93
134
  });
94
135
  if (result.returned_count === 0) {
95
- return 'No log messages';
136
+ // Nothing matched - but always hand back the cursor so the caller can
137
+ // start (or continue) incremental reads from here. Without it, the
138
+ // common "first check after a clean run" case would have no cursor to
139
+ // poll from and would fall back to re-reading the whole buffer.
140
+ const sev = args.severity && args.severity !== 'all' ? `${args.severity} ` : '';
141
+ return args.since !== undefined
142
+ ? `No new ${sev}messages since cursor ${result.cursor}.`
143
+ : `No ${sev}messages (cursor ${result.cursor}).`;
96
144
  }
97
145
  return structured(result);
98
146
  }
@@ -1 +1 @@
1
- {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/tools/editor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/tools/editor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@satelliteoflove/godot-mcp",
3
- "version": "3.9.0",
3
+ "version": "3.10.1",
4
4
  "description": "MCP server for Godot Engine integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",