@satelliteoflove/godot-mcp 2.5.1 → 2.5.3
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/addon/command_router.gd +0 -1
- package/addon/commands/script_commands.gd +0 -84
- package/addon/plugin.cfg +1 -1
- package/addon/plugin.gd +1 -1
- package/addon/websocket_server.gd +78 -2
- package/dist/connection/websocket.d.ts +17 -0
- package/dist/connection/websocket.d.ts.map +1 -1
- package/dist/connection/websocket.js +106 -6
- package/dist/connection/websocket.js.map +1 -1
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +6 -1
- package/dist/core/registry.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/addon/commands/file_commands.gd +0 -95
- package/addon/commands/file_commands.gd.uid +0 -1
package/addon/command_router.gd
CHANGED
|
@@ -13,7 +13,6 @@ func setup(plugin: EditorPlugin) -> void:
|
|
|
13
13
|
_register_handler(MCPScriptCommands.new(), plugin)
|
|
14
14
|
_register_handler(MCPSelectionCommands.new(), plugin)
|
|
15
15
|
_register_handler(MCPProjectCommands.new(), plugin)
|
|
16
|
-
_register_handler(MCPFileCommands.new(), plugin)
|
|
17
16
|
_register_handler(MCPDebugCommands.new(), plugin)
|
|
18
17
|
_register_handler(MCPScreenshotCommands.new(), plugin)
|
|
19
18
|
_register_handler(MCPAnimationCommands.new(), plugin)
|
|
@@ -5,33 +5,12 @@ class_name MCPScriptCommands
|
|
|
5
5
|
|
|
6
6
|
func get_commands() -> Dictionary:
|
|
7
7
|
return {
|
|
8
|
-
"read_script": read_script,
|
|
9
8
|
"get_current_script": get_current_script,
|
|
10
|
-
"create_script": create_script,
|
|
11
|
-
"edit_script": edit_script,
|
|
12
9
|
"attach_script": attach_script,
|
|
13
10
|
"detach_script": detach_script
|
|
14
11
|
}
|
|
15
12
|
|
|
16
13
|
|
|
17
|
-
func read_script(params: Dictionary) -> Dictionary:
|
|
18
|
-
var script_path: String = params.get("script_path", "")
|
|
19
|
-
if script_path.is_empty():
|
|
20
|
-
return _error("INVALID_PARAMS", "script_path is required")
|
|
21
|
-
|
|
22
|
-
if not FileAccess.file_exists(script_path):
|
|
23
|
-
return _error("FILE_NOT_FOUND", "Script file not found: %s" % script_path)
|
|
24
|
-
|
|
25
|
-
var file := FileAccess.open(script_path, FileAccess.READ)
|
|
26
|
-
if not file:
|
|
27
|
-
return _error("READ_FAILED", "Failed to read script: %s" % script_path)
|
|
28
|
-
|
|
29
|
-
var content := file.get_as_text()
|
|
30
|
-
file.close()
|
|
31
|
-
|
|
32
|
-
return _success({"content": content})
|
|
33
|
-
|
|
34
|
-
|
|
35
14
|
func get_current_script(_params: Dictionary) -> Dictionary:
|
|
36
15
|
var script_editor := EditorInterface.get_script_editor()
|
|
37
16
|
if not script_editor:
|
|
@@ -47,67 +26,6 @@ func get_current_script(_params: Dictionary) -> Dictionary:
|
|
|
47
26
|
})
|
|
48
27
|
|
|
49
28
|
|
|
50
|
-
func create_script(params: Dictionary) -> Dictionary:
|
|
51
|
-
var script_path: String = params.get("script_path", "")
|
|
52
|
-
var content: String = params.get("content", "")
|
|
53
|
-
var attach_to: String = params.get("attach_to", "")
|
|
54
|
-
|
|
55
|
-
if script_path.is_empty():
|
|
56
|
-
return _error("INVALID_PARAMS", "script_path is required")
|
|
57
|
-
if content.is_empty():
|
|
58
|
-
return _error("INVALID_PARAMS", "content is required")
|
|
59
|
-
|
|
60
|
-
var dir_path := script_path.get_base_dir()
|
|
61
|
-
if not MCPUtils.dir_exists(dir_path):
|
|
62
|
-
var err := MCPUtils.ensure_dir_exists(dir_path)
|
|
63
|
-
if err != OK:
|
|
64
|
-
return _error("DIR_CREATE_FAILED", "Failed to create directory: %s" % dir_path)
|
|
65
|
-
|
|
66
|
-
var file := FileAccess.open(script_path, FileAccess.WRITE)
|
|
67
|
-
if not file:
|
|
68
|
-
return _error("WRITE_FAILED", "Failed to create script: %s" % script_path)
|
|
69
|
-
|
|
70
|
-
file.store_string(content)
|
|
71
|
-
file.close()
|
|
72
|
-
|
|
73
|
-
EditorInterface.get_resource_filesystem().scan()
|
|
74
|
-
|
|
75
|
-
if not attach_to.is_empty():
|
|
76
|
-
var attach_result := attach_script({"node_path": attach_to, "script_path": script_path})
|
|
77
|
-
if attach_result["status"] == "error":
|
|
78
|
-
return attach_result
|
|
79
|
-
|
|
80
|
-
return _success({"path": script_path})
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
func edit_script(params: Dictionary) -> Dictionary:
|
|
84
|
-
var script_path: String = params.get("script_path", "")
|
|
85
|
-
var content: String = params.get("content", "")
|
|
86
|
-
|
|
87
|
-
if script_path.is_empty():
|
|
88
|
-
return _error("INVALID_PARAMS", "script_path is required")
|
|
89
|
-
if content.is_empty():
|
|
90
|
-
return _error("INVALID_PARAMS", "content is required")
|
|
91
|
-
|
|
92
|
-
if not FileAccess.file_exists(script_path):
|
|
93
|
-
return _error("FILE_NOT_FOUND", "Script file not found: %s" % script_path)
|
|
94
|
-
|
|
95
|
-
var file := FileAccess.open(script_path, FileAccess.WRITE)
|
|
96
|
-
if not file:
|
|
97
|
-
return _error("WRITE_FAILED", "Failed to write script: %s" % script_path)
|
|
98
|
-
|
|
99
|
-
file.store_string(content)
|
|
100
|
-
file.close()
|
|
101
|
-
|
|
102
|
-
EditorInterface.get_resource_filesystem().scan()
|
|
103
|
-
|
|
104
|
-
var script := load(script_path) as Script
|
|
105
|
-
if script:
|
|
106
|
-
script.reload()
|
|
107
|
-
|
|
108
|
-
return _success({"path": script_path})
|
|
109
|
-
|
|
110
|
-
|
|
111
29
|
func attach_script(params: Dictionary) -> Dictionary:
|
|
112
30
|
var node_path: String = params.get("node_path", "")
|
|
113
31
|
var script_path: String = params.get("script_path", "")
|
|
@@ -153,5 +71,3 @@ func detach_script(params: Dictionary) -> Dictionary:
|
|
|
153
71
|
node.set_script(null)
|
|
154
72
|
|
|
155
73
|
return _success({})
|
|
156
|
-
|
|
157
|
-
|
package/addon/plugin.cfg
CHANGED
package/addon/plugin.gd
CHANGED
|
@@ -7,11 +7,16 @@ signal client_connected()
|
|
|
7
7
|
signal client_disconnected()
|
|
8
8
|
|
|
9
9
|
const DEFAULT_PORT := 6550
|
|
10
|
+
const CLOSE_CODE_ALREADY_CONNECTED := 4001
|
|
11
|
+
const CLOSE_REASON_ALREADY_CONNECTED := "Another client is already connected"
|
|
10
12
|
|
|
11
13
|
var _server: TCPServer
|
|
12
14
|
var _peer: StreamPeerTCP
|
|
13
15
|
var _ws_peer: WebSocketPeer
|
|
14
16
|
var _is_connected := false
|
|
17
|
+
var _rejected_connections := 0
|
|
18
|
+
var _pending_rejection: WebSocketPeer = null
|
|
19
|
+
var _pending_rejection_peer: StreamPeerTCP = null
|
|
15
20
|
|
|
16
21
|
|
|
17
22
|
func _process(_delta: float) -> void:
|
|
@@ -25,6 +30,8 @@ func _process(_delta: float) -> void:
|
|
|
25
30
|
_ws_peer.poll()
|
|
26
31
|
_process_websocket()
|
|
27
32
|
|
|
33
|
+
_process_pending_rejection()
|
|
34
|
+
|
|
28
35
|
|
|
29
36
|
func start_server(port: int = DEFAULT_PORT) -> Error:
|
|
30
37
|
_server = TCPServer.new()
|
|
@@ -38,6 +45,14 @@ func start_server(port: int = DEFAULT_PORT) -> Error:
|
|
|
38
45
|
|
|
39
46
|
|
|
40
47
|
func stop_server() -> void:
|
|
48
|
+
if _pending_rejection:
|
|
49
|
+
_pending_rejection.close()
|
|
50
|
+
_pending_rejection = null
|
|
51
|
+
|
|
52
|
+
if _pending_rejection_peer:
|
|
53
|
+
_pending_rejection_peer.disconnect_from_host()
|
|
54
|
+
_pending_rejection_peer = null
|
|
55
|
+
|
|
41
56
|
if _ws_peer:
|
|
42
57
|
_ws_peer.close()
|
|
43
58
|
_ws_peer = null
|
|
@@ -50,6 +65,11 @@ func stop_server() -> void:
|
|
|
50
65
|
_server.stop()
|
|
51
66
|
|
|
52
67
|
_is_connected = false
|
|
68
|
+
_rejected_connections = 0
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
func get_rejected_connection_count() -> int:
|
|
72
|
+
return _rejected_connections
|
|
53
73
|
|
|
54
74
|
|
|
55
75
|
func send_response(response: Dictionary) -> void:
|
|
@@ -62,10 +82,16 @@ func send_response(response: Dictionary) -> void:
|
|
|
62
82
|
|
|
63
83
|
|
|
64
84
|
func _accept_connection() -> void:
|
|
65
|
-
|
|
66
|
-
if not
|
|
85
|
+
var incoming := _server.take_connection()
|
|
86
|
+
if not incoming:
|
|
87
|
+
return
|
|
88
|
+
|
|
89
|
+
# Reject if we already have an active or pending connection
|
|
90
|
+
if _ws_peer != null:
|
|
91
|
+
_reject_connection(incoming)
|
|
67
92
|
return
|
|
68
93
|
|
|
94
|
+
_peer = incoming
|
|
69
95
|
_ws_peer = WebSocketPeer.new()
|
|
70
96
|
_ws_peer.outbound_buffer_size = 16 * 1024 * 1024 # 16MB for screenshot data
|
|
71
97
|
var err := _ws_peer.accept_stream(_peer)
|
|
@@ -78,6 +104,56 @@ func _accept_connection() -> void:
|
|
|
78
104
|
print("[godot-mcp] TCP connection received, awaiting WebSocket handshake...")
|
|
79
105
|
|
|
80
106
|
|
|
107
|
+
func _reject_connection(incoming: StreamPeerTCP) -> void:
|
|
108
|
+
_rejected_connections += 1
|
|
109
|
+
|
|
110
|
+
# If we're already processing a rejection, just drop this one at TCP level
|
|
111
|
+
if _pending_rejection != null:
|
|
112
|
+
incoming.disconnect_from_host()
|
|
113
|
+
print("[godot-mcp] Rejected connection at TCP level (busy processing previous rejection) - total rejections: %d" % _rejected_connections)
|
|
114
|
+
return
|
|
115
|
+
|
|
116
|
+
# Accept WebSocket to send proper close code with reason
|
|
117
|
+
_pending_rejection_peer = incoming
|
|
118
|
+
_pending_rejection = WebSocketPeer.new()
|
|
119
|
+
var err := _pending_rejection.accept_stream(_pending_rejection_peer)
|
|
120
|
+
if err != OK:
|
|
121
|
+
# Fall back to TCP disconnect
|
|
122
|
+
incoming.disconnect_from_host()
|
|
123
|
+
_pending_rejection = null
|
|
124
|
+
_pending_rejection_peer = null
|
|
125
|
+
print("[godot-mcp] Rejected connection at TCP level (WebSocket accept failed) - total rejections: %d" % _rejected_connections)
|
|
126
|
+
return
|
|
127
|
+
|
|
128
|
+
print("[godot-mcp] Rejecting connection (another client already connected) - total rejections: %d" % _rejected_connections)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
func _process_pending_rejection() -> void:
|
|
132
|
+
if _pending_rejection == null:
|
|
133
|
+
return
|
|
134
|
+
|
|
135
|
+
_pending_rejection.poll()
|
|
136
|
+
var state := _pending_rejection.get_ready_state()
|
|
137
|
+
|
|
138
|
+
match state:
|
|
139
|
+
WebSocketPeer.STATE_CONNECTING:
|
|
140
|
+
# Still waiting for handshake, will send close once ready
|
|
141
|
+
pass
|
|
142
|
+
|
|
143
|
+
WebSocketPeer.STATE_OPEN:
|
|
144
|
+
# Handshake complete, now send close with our custom code
|
|
145
|
+
_pending_rejection.close(CLOSE_CODE_ALREADY_CONNECTED, CLOSE_REASON_ALREADY_CONNECTED)
|
|
146
|
+
|
|
147
|
+
WebSocketPeer.STATE_CLOSING:
|
|
148
|
+
# Waiting for close to complete
|
|
149
|
+
pass
|
|
150
|
+
|
|
151
|
+
WebSocketPeer.STATE_CLOSED:
|
|
152
|
+
# Done, clean up
|
|
153
|
+
_pending_rejection = null
|
|
154
|
+
_pending_rejection_peer = null
|
|
155
|
+
|
|
156
|
+
|
|
81
157
|
func _process_websocket() -> void:
|
|
82
158
|
if not _ws_peer:
|
|
83
159
|
return
|
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
+
export type DisconnectReason = 'never_connected' | 'rejected_another_client' | 'connection_refused' | 'connection_lost' | 'closed_normally' | 'error';
|
|
3
|
+
export interface ConnectionDiagnostics {
|
|
4
|
+
currentState: 'connected' | 'disconnected' | 'connecting' | 'reconnecting';
|
|
5
|
+
lastDisconnectReason: DisconnectReason;
|
|
6
|
+
rejectionCount: number;
|
|
7
|
+
reconnectAttempts: number;
|
|
8
|
+
lastErrorMessage: string | null;
|
|
9
|
+
url: string;
|
|
10
|
+
}
|
|
11
|
+
export type HandshakeStatus = 'pending' | 'success' | 'failed' | 'timeout';
|
|
2
12
|
export interface HandshakeResult {
|
|
3
13
|
addonVersion: string;
|
|
4
14
|
godotVersion: string;
|
|
5
15
|
projectPath: string;
|
|
6
16
|
projectName: string;
|
|
17
|
+
handshakeStatus: HandshakeStatus;
|
|
7
18
|
}
|
|
8
19
|
export interface GodotConnectionOptions {
|
|
9
20
|
host?: string;
|
|
@@ -19,6 +30,10 @@ export declare class GodotConnection extends EventEmitter {
|
|
|
19
30
|
private pongTimeout;
|
|
20
31
|
private isClosing;
|
|
21
32
|
private handshakeResult;
|
|
33
|
+
private lastDisconnectReason;
|
|
34
|
+
private rejectionCount;
|
|
35
|
+
private lastErrorMessage;
|
|
36
|
+
private currentState;
|
|
22
37
|
private readonly host;
|
|
23
38
|
private readonly port;
|
|
24
39
|
private readonly autoReconnect;
|
|
@@ -31,6 +46,8 @@ export declare class GodotConnection extends EventEmitter {
|
|
|
31
46
|
get godotVersion(): string | null;
|
|
32
47
|
get serverVersion(): string;
|
|
33
48
|
get versionsMatch(): boolean;
|
|
49
|
+
getDiagnostics(): ConnectionDiagnostics;
|
|
50
|
+
getDiagnosticMessage(): string;
|
|
34
51
|
connect(): Promise<void>;
|
|
35
52
|
disconnect(): void;
|
|
36
53
|
sendCommand<T = unknown>(command: string, params?: Record<string, unknown>): Promise<T>;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/connection/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AA0BtC,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,yBAAyB,GACzB,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;CACb;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,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,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;gBAE5B,OAAO,GAAE,sBAA2B;IAOhD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;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;IAWvC,oBAAoB,IAAI,MAAM;IAgDxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA6E9B,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;IAazB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,OAAO;CAehB;AAmBD,wBAAgB,kBAAkB,IAAI,eAAe,CAQpD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkC1D"}
|
|
@@ -10,6 +10,7 @@ const HANDSHAKE_TIMEOUT_MS = 5000;
|
|
|
10
10
|
const RECONNECT_DELAYS = [1000, 2000, 4000, 8000, 16000, 30000];
|
|
11
11
|
const PING_INTERVAL_MS = 30000;
|
|
12
12
|
const PONG_TIMEOUT_MS = 10000;
|
|
13
|
+
const CLOSE_CODE_ALREADY_CONNECTED = 4001;
|
|
13
14
|
export class GodotConnection extends EventEmitter {
|
|
14
15
|
ws = null;
|
|
15
16
|
pendingRequests = new Map();
|
|
@@ -19,6 +20,10 @@ export class GodotConnection extends EventEmitter {
|
|
|
19
20
|
pongTimeout = null;
|
|
20
21
|
isClosing = false;
|
|
21
22
|
handshakeResult = null;
|
|
23
|
+
lastDisconnectReason = 'never_connected';
|
|
24
|
+
rejectionCount = 0;
|
|
25
|
+
lastErrorMessage = null;
|
|
26
|
+
currentState = 'disconnected';
|
|
22
27
|
host;
|
|
23
28
|
port;
|
|
24
29
|
autoReconnect;
|
|
@@ -54,21 +59,76 @@ export class GodotConnection extends EventEmitter {
|
|
|
54
59
|
return false;
|
|
55
60
|
return this.handshakeResult.addonVersion === this.serverVersion;
|
|
56
61
|
}
|
|
62
|
+
getDiagnostics() {
|
|
63
|
+
return {
|
|
64
|
+
currentState: this.currentState,
|
|
65
|
+
lastDisconnectReason: this.lastDisconnectReason,
|
|
66
|
+
rejectionCount: this.rejectionCount,
|
|
67
|
+
reconnectAttempts: this.reconnectAttempt,
|
|
68
|
+
lastErrorMessage: this.lastErrorMessage,
|
|
69
|
+
url: this.url,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
getDiagnosticMessage() {
|
|
73
|
+
const diag = this.getDiagnostics();
|
|
74
|
+
const lines = [];
|
|
75
|
+
switch (diag.lastDisconnectReason) {
|
|
76
|
+
case 'rejected_another_client':
|
|
77
|
+
lines.push('Status: Connection rejected (another client already connected)');
|
|
78
|
+
if (diag.rejectionCount > 1) {
|
|
79
|
+
lines.push(`Details: ${diag.rejectionCount} connection attempts rejected`);
|
|
80
|
+
}
|
|
81
|
+
lines.push('Suggestion: Multiple MCP server processes may be running.');
|
|
82
|
+
lines.push(' Check: ps aux | grep godot-mcp (macOS/Linux)');
|
|
83
|
+
lines.push(' Check: Get-Process -Name node | ? CommandLine -Like "*godot-mcp*" (Windows)');
|
|
84
|
+
lines.push(' Fix: Kill all godot-mcp processes and restart your MCP client');
|
|
85
|
+
break;
|
|
86
|
+
case 'connection_refused':
|
|
87
|
+
lines.push(`Status: Cannot reach Godot at ${diag.url}`);
|
|
88
|
+
lines.push('Suggestion: Ensure Godot is running with the MCP addon enabled.');
|
|
89
|
+
break;
|
|
90
|
+
case 'connection_lost':
|
|
91
|
+
lines.push('Status: Connection to Godot was lost');
|
|
92
|
+
if (diag.reconnectAttempts > 0) {
|
|
93
|
+
lines.push(`Details: ${diag.reconnectAttempts} reconnection attempts made`);
|
|
94
|
+
}
|
|
95
|
+
lines.push('Suggestion: Check if Godot is still running.');
|
|
96
|
+
break;
|
|
97
|
+
case 'never_connected':
|
|
98
|
+
lines.push(`Status: Never successfully connected to Godot at ${diag.url}`);
|
|
99
|
+
lines.push('Suggestion: Ensure Godot is running with the MCP addon enabled.');
|
|
100
|
+
break;
|
|
101
|
+
case 'error':
|
|
102
|
+
lines.push('Status: Connection error');
|
|
103
|
+
if (diag.lastErrorMessage) {
|
|
104
|
+
lines.push(`Details: ${diag.lastErrorMessage}`);
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
default:
|
|
108
|
+
lines.push(`Status: Disconnected (${diag.lastDisconnectReason})`);
|
|
109
|
+
}
|
|
110
|
+
return lines.join('\n');
|
|
111
|
+
}
|
|
57
112
|
async connect() {
|
|
58
113
|
if (this.isConnected) {
|
|
59
114
|
return;
|
|
60
115
|
}
|
|
61
116
|
return new Promise((resolve, reject) => {
|
|
62
117
|
this.isClosing = false;
|
|
118
|
+
this.currentState = this.reconnectAttempt > 0 ? 'reconnecting' : 'connecting';
|
|
63
119
|
this.ws = new WebSocket(this.url);
|
|
64
120
|
this.ws.on('open', async () => {
|
|
65
121
|
this.reconnectAttempt = 0;
|
|
66
122
|
this.startPingInterval();
|
|
67
123
|
try {
|
|
68
124
|
await this.performHandshake();
|
|
125
|
+
this.currentState = 'connected';
|
|
69
126
|
}
|
|
70
127
|
catch (error) {
|
|
71
|
-
|
|
128
|
+
this.currentState = 'connected';
|
|
129
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
130
|
+
console.error('[godot-mcp] Handshake failed (addon may be outdated):', errorMessage);
|
|
131
|
+
this.emit('handshake_failed', { error: errorMessage });
|
|
72
132
|
}
|
|
73
133
|
this.emit('connected');
|
|
74
134
|
resolve();
|
|
@@ -79,7 +139,25 @@ export class GodotConnection extends EventEmitter {
|
|
|
79
139
|
this.ws.on('pong', () => {
|
|
80
140
|
this.clearPongTimeout();
|
|
81
141
|
});
|
|
82
|
-
this.ws.on('close', () => {
|
|
142
|
+
this.ws.on('close', (code, reason) => {
|
|
143
|
+
const wasConnected = this.currentState === 'connected';
|
|
144
|
+
this.currentState = 'disconnected';
|
|
145
|
+
if (code === CLOSE_CODE_ALREADY_CONNECTED) {
|
|
146
|
+
this.lastDisconnectReason = 'rejected_another_client';
|
|
147
|
+
this.rejectionCount++;
|
|
148
|
+
const reasonStr = reason?.toString() || 'Another client is already connected';
|
|
149
|
+
console.error(`[godot-mcp] Connection rejected: ${reasonStr}`);
|
|
150
|
+
console.error('[godot-mcp] This usually means multiple MCP server processes are running.');
|
|
151
|
+
console.error('[godot-mcp] Check for duplicate processes:');
|
|
152
|
+
console.error('[godot-mcp] macOS/Linux: ps aux | grep godot-mcp');
|
|
153
|
+
console.error('[godot-mcp] Windows: Get-Process -Name node | ? CommandLine -Like "*godot-mcp*"');
|
|
154
|
+
}
|
|
155
|
+
else if (wasConnected) {
|
|
156
|
+
this.lastDisconnectReason = 'connection_lost';
|
|
157
|
+
}
|
|
158
|
+
else if (this.lastDisconnectReason === 'never_connected') {
|
|
159
|
+
this.lastDisconnectReason = 'connection_refused';
|
|
160
|
+
}
|
|
83
161
|
this.cleanup();
|
|
84
162
|
this.emit('disconnected');
|
|
85
163
|
if (this.autoReconnect && !this.isClosing) {
|
|
@@ -87,6 +165,13 @@ export class GodotConnection extends EventEmitter {
|
|
|
87
165
|
}
|
|
88
166
|
});
|
|
89
167
|
this.ws.on('error', (error) => {
|
|
168
|
+
this.lastErrorMessage = error.message;
|
|
169
|
+
if (error.message.includes('ECONNREFUSED')) {
|
|
170
|
+
this.lastDisconnectReason = 'connection_refused';
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.lastDisconnectReason = 'error';
|
|
174
|
+
}
|
|
90
175
|
this.emit('error', error);
|
|
91
176
|
if (!this.isConnected) {
|
|
92
177
|
reject(new GodotConnectionError(`Failed to connect: ${error.message}`));
|
|
@@ -96,6 +181,8 @@ export class GodotConnection extends EventEmitter {
|
|
|
96
181
|
}
|
|
97
182
|
disconnect() {
|
|
98
183
|
this.isClosing = true;
|
|
184
|
+
this.lastDisconnectReason = 'closed_normally';
|
|
185
|
+
this.currentState = 'disconnected';
|
|
99
186
|
this.cleanup();
|
|
100
187
|
if (this.ws) {
|
|
101
188
|
this.ws.close();
|
|
@@ -104,7 +191,8 @@ export class GodotConnection extends EventEmitter {
|
|
|
104
191
|
}
|
|
105
192
|
async sendCommand(command, params = {}) {
|
|
106
193
|
if (!this.isConnected) {
|
|
107
|
-
|
|
194
|
+
const diagnosticMessage = this.getDiagnosticMessage();
|
|
195
|
+
throw new GodotConnectionError(`Not connected to Godot\n${diagnosticMessage}`);
|
|
108
196
|
}
|
|
109
197
|
const request = createRequest(command, params);
|
|
110
198
|
return new Promise((resolve, reject) => {
|
|
@@ -127,7 +215,13 @@ export class GodotConnection extends EventEmitter {
|
|
|
127
215
|
return new Promise((resolve, reject) => {
|
|
128
216
|
const timeoutId = setTimeout(() => {
|
|
129
217
|
this.pendingRequests.delete(request.id);
|
|
130
|
-
this.handshakeResult =
|
|
218
|
+
this.handshakeResult = {
|
|
219
|
+
addonVersion: 'unknown',
|
|
220
|
+
godotVersion: 'unknown',
|
|
221
|
+
projectPath: '',
|
|
222
|
+
projectName: '',
|
|
223
|
+
handshakeStatus: 'timeout',
|
|
224
|
+
};
|
|
131
225
|
reject(new GodotTimeoutError('mcp_handshake', HANDSHAKE_TIMEOUT_MS));
|
|
132
226
|
}, HANDSHAKE_TIMEOUT_MS);
|
|
133
227
|
this.pendingRequests.set(request.id, {
|
|
@@ -138,6 +232,7 @@ export class GodotConnection extends EventEmitter {
|
|
|
138
232
|
godotVersion: data.godot_version ?? 'unknown',
|
|
139
233
|
projectPath: data.project_path ?? '',
|
|
140
234
|
projectName: data.project_name ?? '',
|
|
235
|
+
handshakeStatus: 'success',
|
|
141
236
|
};
|
|
142
237
|
if (!this.versionsMatch) {
|
|
143
238
|
this.emit('version_mismatch', {
|
|
@@ -231,8 +326,9 @@ export class GodotConnection extends EventEmitter {
|
|
|
231
326
|
try {
|
|
232
327
|
await this.connect();
|
|
233
328
|
}
|
|
234
|
-
catch {
|
|
235
|
-
|
|
329
|
+
catch (error) {
|
|
330
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
331
|
+
console.error(`[godot-mcp] Reconnection attempt ${this.reconnectAttempt} failed: ${errorMessage}`);
|
|
236
332
|
}
|
|
237
333
|
}, delay);
|
|
238
334
|
}
|
|
@@ -293,6 +389,10 @@ export async function initializeConnection() {
|
|
|
293
389
|
console.error(`[godot-mcp] Version mismatch: server=${serverVersion}, addon=${addonVersion}`);
|
|
294
390
|
console.error(`[godot-mcp] Update addon with: npx @satelliteoflove/godot-mcp --install-addon "${projectPath}"`);
|
|
295
391
|
});
|
|
392
|
+
connection.on('handshake_failed', ({ error }) => {
|
|
393
|
+
console.error(`[godot-mcp] Handshake failed: ${error}`);
|
|
394
|
+
console.error('[godot-mcp] The addon may be outdated or incompatible. Connection will continue but some features may not work.');
|
|
395
|
+
});
|
|
296
396
|
try {
|
|
297
397
|
await connection.connect();
|
|
298
398
|
}
|
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AASjG,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,SAAS,CAA8C;IAE/D,YAAY,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAO3C,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAI/C,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAOpD,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAIxD,WAAW,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAQhF,eAAe,IAAI,KAAK,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAWI,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;IAoBzB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAQlE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIjC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;CAG9D;AAED,eAAO,MAAM,QAAQ,cAAqB,CAAC"}
|
package/dist/core/registry.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { toInputSchema } from './schema.js';
|
|
2
|
-
import { formatError } from '../utils/errors.js';
|
|
2
|
+
import { formatError, GodotCommandError, GodotConnectionError, GodotTimeoutError, } from '../utils/errors.js';
|
|
3
3
|
class ToolRegistry {
|
|
4
4
|
tools = new Map();
|
|
5
5
|
resources = new Map();
|
|
@@ -46,6 +46,11 @@ class ToolRegistry {
|
|
|
46
46
|
return await tool.execute(validated, ctx);
|
|
47
47
|
}
|
|
48
48
|
catch (error) {
|
|
49
|
+
if (error instanceof GodotCommandError ||
|
|
50
|
+
error instanceof GodotConnectionError ||
|
|
51
|
+
error instanceof GodotTimeoutError) {
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
49
54
|
throw new Error(formatError(error));
|
|
50
55
|
}
|
|
51
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,wBAAsB,IAAI,kBA0EzB"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { initializeConnection, getGodotConnection } from './connection/websocket
|
|
|
5
5
|
import { registry } from './core/registry.js';
|
|
6
6
|
import { registerAllTools } from './tools/index.js';
|
|
7
7
|
import { registerAllResources } from './resources/index.js';
|
|
8
|
+
import { GodotCommandError } from './utils/errors.js';
|
|
8
9
|
registerAllTools();
|
|
9
10
|
registerAllResources();
|
|
10
11
|
export async function main() {
|
|
@@ -35,7 +36,16 @@ export async function main() {
|
|
|
35
36
|
};
|
|
36
37
|
}
|
|
37
38
|
catch (error) {
|
|
38
|
-
|
|
39
|
+
let message;
|
|
40
|
+
if (error instanceof GodotCommandError) {
|
|
41
|
+
message = `[${error.code}] ${error.message}`;
|
|
42
|
+
}
|
|
43
|
+
else if (error instanceof Error) {
|
|
44
|
+
message = error.message;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
message = String(error);
|
|
48
|
+
}
|
|
39
49
|
return {
|
|
40
50
|
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
41
51
|
isError: true,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
@tool
|
|
2
|
-
extends MCPBaseCommand
|
|
3
|
-
class_name MCPFileCommands
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
func get_commands() -> Dictionary:
|
|
7
|
-
return {
|
|
8
|
-
"list_project_files": list_project_files,
|
|
9
|
-
"search_files": search_files
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
func list_project_files(params: Dictionary) -> Dictionary:
|
|
14
|
-
var file_type: String = params.get("file_type", "all")
|
|
15
|
-
var directory: String = params.get("directory", "res://")
|
|
16
|
-
var recursive: bool = params.get("recursive", true)
|
|
17
|
-
|
|
18
|
-
var extensions: PackedStringArray
|
|
19
|
-
match file_type:
|
|
20
|
-
"scripts":
|
|
21
|
-
extensions = PackedStringArray(["gd", "cs"])
|
|
22
|
-
"scenes":
|
|
23
|
-
extensions = PackedStringArray(["tscn", "scn"])
|
|
24
|
-
"resources":
|
|
25
|
-
extensions = PackedStringArray(["tres", "res"])
|
|
26
|
-
"images":
|
|
27
|
-
extensions = PackedStringArray(["png", "jpg", "jpeg", "webp", "svg"])
|
|
28
|
-
"audio":
|
|
29
|
-
extensions = PackedStringArray(["ogg", "mp3", "wav"])
|
|
30
|
-
"all":
|
|
31
|
-
extensions = PackedStringArray()
|
|
32
|
-
_:
|
|
33
|
-
return _error("INVALID_TYPE", "Unknown file type: %s" % file_type)
|
|
34
|
-
|
|
35
|
-
var files := _scan_directory(directory, extensions, recursive)
|
|
36
|
-
return _success({"files": files})
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
func search_files(params: Dictionary) -> Dictionary:
|
|
40
|
-
var pattern: String = params.get("pattern", "")
|
|
41
|
-
var directory: String = params.get("directory", "res://")
|
|
42
|
-
|
|
43
|
-
if pattern.is_empty():
|
|
44
|
-
return _error("INVALID_PARAMS", "pattern is required")
|
|
45
|
-
|
|
46
|
-
var all_files := _scan_directory(directory, PackedStringArray(), true)
|
|
47
|
-
var matching: Array[String] = []
|
|
48
|
-
|
|
49
|
-
for file_path in all_files:
|
|
50
|
-
var file_name := file_path.get_file()
|
|
51
|
-
if _matches_pattern(file_name, pattern):
|
|
52
|
-
matching.append(file_path)
|
|
53
|
-
|
|
54
|
-
return _success({"files": matching})
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
func _scan_directory(path: String, extensions: PackedStringArray, recursive: bool) -> Array[String]:
|
|
58
|
-
var files: Array[String] = []
|
|
59
|
-
var dir := DirAccess.open(path)
|
|
60
|
-
|
|
61
|
-
if not dir:
|
|
62
|
-
return files
|
|
63
|
-
|
|
64
|
-
dir.list_dir_begin()
|
|
65
|
-
var file_name := dir.get_next()
|
|
66
|
-
|
|
67
|
-
while not file_name.is_empty():
|
|
68
|
-
var full_path := path.path_join(file_name)
|
|
69
|
-
|
|
70
|
-
if dir.current_is_dir():
|
|
71
|
-
if recursive and not file_name.begins_with("."):
|
|
72
|
-
files.append_array(_scan_directory(full_path, extensions, recursive))
|
|
73
|
-
else:
|
|
74
|
-
if extensions.is_empty():
|
|
75
|
-
files.append(full_path)
|
|
76
|
-
else:
|
|
77
|
-
var ext := file_name.get_extension().to_lower()
|
|
78
|
-
if ext in extensions:
|
|
79
|
-
files.append(full_path)
|
|
80
|
-
|
|
81
|
-
file_name = dir.get_next()
|
|
82
|
-
|
|
83
|
-
dir.list_dir_end()
|
|
84
|
-
return files
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
func _matches_pattern(text: String, pattern: String) -> bool:
|
|
88
|
-
if not "*" in pattern:
|
|
89
|
-
return pattern.to_lower() in text.to_lower()
|
|
90
|
-
|
|
91
|
-
var regex_pattern := "^" + pattern.replace(".", "\\.").replace("*", ".*") + "$"
|
|
92
|
-
var regex := RegEx.new()
|
|
93
|
-
regex.compile(regex_pattern)
|
|
94
|
-
|
|
95
|
-
return regex.search(text.to_lower()) != null
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
uid://cfxkg4lhdnxgw
|