@baixfeng/godot-mcp-cli 1.0.11

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.
Files changed (115) hide show
  1. package/README.md +187 -0
  2. package/addons/godot_mcp/command_handler.gd +161 -0
  3. package/addons/godot_mcp/command_handler.gd.uid +1 -0
  4. package/addons/godot_mcp/commands/base_command_processor.gd +221 -0
  5. package/addons/godot_mcp/commands/base_command_processor.gd.uid +1 -0
  6. package/addons/godot_mcp/commands/debugger_commands.gd +221 -0
  7. package/addons/godot_mcp/commands/debugger_commands.gd.uid +1 -0
  8. package/addons/godot_mcp/commands/editor_commands.gd +237 -0
  9. package/addons/godot_mcp/commands/editor_commands.gd.uid +1 -0
  10. package/addons/godot_mcp/commands/editor_script_commands.gd +365 -0
  11. package/addons/godot_mcp/commands/editor_script_commands.gd.uid +1 -0
  12. package/addons/godot_mcp/commands/input_commands.gd +337 -0
  13. package/addons/godot_mcp/commands/input_commands.gd.uid +1 -0
  14. package/addons/godot_mcp/commands/node_commands.gd +222 -0
  15. package/addons/godot_mcp/commands/node_commands.gd.uid +1 -0
  16. package/addons/godot_mcp/commands/project_commands.gd +298 -0
  17. package/addons/godot_mcp/commands/project_commands.gd.uid +1 -0
  18. package/addons/godot_mcp/commands/scene_commands.gd +337 -0
  19. package/addons/godot_mcp/commands/scene_commands.gd.uid +1 -0
  20. package/addons/godot_mcp/commands/script_commands.gd +349 -0
  21. package/addons/godot_mcp/commands/script_commands.gd.uid +1 -0
  22. package/addons/godot_mcp/mcp_asset_commands.gd +153 -0
  23. package/addons/godot_mcp/mcp_asset_commands.gd.uid +1 -0
  24. package/addons/godot_mcp/mcp_debug_output_publisher.gd +1669 -0
  25. package/addons/godot_mcp/mcp_debug_output_publisher.gd.uid +1 -0
  26. package/addons/godot_mcp/mcp_debugger_bridge.gd +1455 -0
  27. package/addons/godot_mcp/mcp_debugger_bridge.gd.uid +1 -0
  28. package/addons/godot_mcp/mcp_enhanced_commands.gd +1083 -0
  29. package/addons/godot_mcp/mcp_enhanced_commands.gd.uid +1 -0
  30. package/addons/godot_mcp/mcp_input_handler.gd +545 -0
  31. package/addons/godot_mcp/mcp_input_handler.gd.uid +1 -0
  32. package/addons/godot_mcp/mcp_runtime_debugger_bridge.gd +464 -0
  33. package/addons/godot_mcp/mcp_runtime_debugger_bridge.gd.uid +1 -0
  34. package/addons/godot_mcp/mcp_script_resource_commands.gd +165 -0
  35. package/addons/godot_mcp/mcp_script_resource_commands.gd.uid +1 -0
  36. package/addons/godot_mcp/mcp_server.gd +260 -0
  37. package/addons/godot_mcp/mcp_server.gd.uid +1 -0
  38. package/addons/godot_mcp/plugin.cfg +7 -0
  39. package/addons/godot_mcp/runtime_debugger.gd +81 -0
  40. package/addons/godot_mcp/runtime_debugger.gd.uid +1 -0
  41. package/addons/godot_mcp/ui/mcp_panel.gd +94 -0
  42. package/addons/godot_mcp/ui/mcp_panel.gd.uid +1 -0
  43. package/addons/godot_mcp/ui/mcp_panel.tscn +96 -0
  44. package/addons/godot_mcp/utils/node_utils.gd +82 -0
  45. package/addons/godot_mcp/utils/node_utils.gd.uid +1 -0
  46. package/addons/godot_mcp/utils/resource_utils.gd +81 -0
  47. package/addons/godot_mcp/utils/resource_utils.gd.uid +1 -0
  48. package/addons/godot_mcp/utils/script_utils.gd +114 -0
  49. package/addons/godot_mcp/utils/script_utils.gd.uid +1 -0
  50. package/addons/godot_mcp/websocket_server.gd +197 -0
  51. package/addons/godot_mcp/websocket_server.gd.uid +1 -0
  52. package/dist/cli.d.ts +2 -0
  53. package/dist/cli.js +561 -0
  54. package/dist/cli.js.map +1 -0
  55. package/dist/index.d.ts +1 -0
  56. package/dist/index.js +156 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/resources/asset_resources.d.ts +29 -0
  59. package/dist/resources/asset_resources.js +145 -0
  60. package/dist/resources/asset_resources.js.map +1 -0
  61. package/dist/resources/debug_resources.d.ts +11 -0
  62. package/dist/resources/debug_resources.js +106 -0
  63. package/dist/resources/debug_resources.js.map +1 -0
  64. package/dist/resources/debugger_resources.d.ts +62 -0
  65. package/dist/resources/debugger_resources.js +201 -0
  66. package/dist/resources/debugger_resources.js.map +1 -0
  67. package/dist/resources/editor_resources.d.ts +47 -0
  68. package/dist/resources/editor_resources.js +155 -0
  69. package/dist/resources/editor_resources.js.map +1 -0
  70. package/dist/resources/project_resources.d.ts +33 -0
  71. package/dist/resources/project_resources.js +137 -0
  72. package/dist/resources/project_resources.js.map +1 -0
  73. package/dist/resources/scene_resources.d.ts +33 -0
  74. package/dist/resources/scene_resources.js +160 -0
  75. package/dist/resources/scene_resources.js.map +1 -0
  76. package/dist/resources/script_resources.d.ts +51 -0
  77. package/dist/resources/script_resources.js +203 -0
  78. package/dist/resources/script_resources.js.map +1 -0
  79. package/dist/tools/asset_tools.d.ts +5 -0
  80. package/dist/tools/asset_tools.js +125 -0
  81. package/dist/tools/asset_tools.js.map +1 -0
  82. package/dist/tools/debugger_tools.d.ts +2 -0
  83. package/dist/tools/debugger_tools.js +342 -0
  84. package/dist/tools/debugger_tools.js.map +1 -0
  85. package/dist/tools/editor_tools.d.ts +2 -0
  86. package/dist/tools/editor_tools.js +165 -0
  87. package/dist/tools/editor_tools.js.map +1 -0
  88. package/dist/tools/enhanced_tools.d.ts +5 -0
  89. package/dist/tools/enhanced_tools.js +706 -0
  90. package/dist/tools/enhanced_tools.js.map +1 -0
  91. package/dist/tools/input_tools.d.ts +2 -0
  92. package/dist/tools/input_tools.js +408 -0
  93. package/dist/tools/input_tools.js.map +1 -0
  94. package/dist/tools/node_tools.d.ts +5 -0
  95. package/dist/tools/node_tools.js +217 -0
  96. package/dist/tools/node_tools.js.map +1 -0
  97. package/dist/tools/project_tools.d.ts +5 -0
  98. package/dist/tools/project_tools.js +162 -0
  99. package/dist/tools/project_tools.js.map +1 -0
  100. package/dist/tools/scene_tools.d.ts +5 -0
  101. package/dist/tools/scene_tools.js +260 -0
  102. package/dist/tools/scene_tools.js.map +1 -0
  103. package/dist/tools/script_resource_tools.d.ts +5 -0
  104. package/dist/tools/script_resource_tools.js +5 -0
  105. package/dist/tools/script_resource_tools.js.map +1 -0
  106. package/dist/tools/script_tools.d.ts +5 -0
  107. package/dist/tools/script_tools.js +154 -0
  108. package/dist/tools/script_tools.js.map +1 -0
  109. package/dist/utils/godot_connection.d.ts +30 -0
  110. package/dist/utils/godot_connection.js +285 -0
  111. package/dist/utils/godot_connection.js.map +1 -0
  112. package/dist/utils/types.d.ts +16 -0
  113. package/dist/utils/types.js +2 -0
  114. package/dist/utils/types.js.map +1 -0
  115. package/package.json +58 -0
@@ -0,0 +1,153 @@
1
+ @tool
2
+ class_name MCPAssetCommands
3
+ extends Node
4
+
5
+ var _websocket_server = null
6
+
7
+ func process_command(client_id: int, command_type: String, params: Dictionary, command_id: String) -> bool:
8
+ match command_type:
9
+ "list_project_files":
10
+ _handle_list_project_files(client_id, params, command_id)
11
+ return true
12
+ "list_assets_by_type":
13
+ _handle_list_assets_by_type(client_id, params, command_id)
14
+ return true
15
+
16
+ # Command not handled by this processor
17
+ return false
18
+
19
+ # ---- Project File Listing ----
20
+
21
+ func _handle_list_project_files(client_id: int, params: Dictionary, command_id: String) -> void:
22
+ var extensions = params.get("extensions", [])
23
+
24
+ var result = list_project_files(extensions)
25
+
26
+ var response = {
27
+ "status": "success",
28
+ "result": result
29
+ }
30
+
31
+ if not command_id.is_empty():
32
+ response["commandId"] = command_id
33
+
34
+ _websocket_server.send_response(client_id, response)
35
+
36
+ func list_project_files(extensions: Array) -> Dictionary:
37
+ var result = []
38
+
39
+ # Get all files recursively
40
+ var dir = DirAccess.open("res://")
41
+ if dir:
42
+ _list_files_recursive(dir, "res://", extensions, result)
43
+
44
+ return {
45
+ "files": result
46
+ }
47
+
48
+ # Helper function to recursively list files
49
+ func _list_files_recursive(dir: DirAccess, path: String, extensions: Array, result: Array) -> void:
50
+ # Open the directory
51
+ dir.list_dir_begin()
52
+
53
+ # Loop through all files and directories
54
+ var file_name = dir.get_next()
55
+ while file_name != "":
56
+ if file_name != "." and file_name != "..":
57
+ var full_path = path.path_join(file_name)
58
+ if dir.current_is_dir():
59
+ # Recursively process subdirectories
60
+ var subdir = DirAccess.open(full_path)
61
+ if subdir:
62
+ _list_files_recursive(subdir, full_path, extensions, result)
63
+ else:
64
+ # If extensions are specified, filter by them
65
+ if extensions.size() == 0:
66
+ result.append(full_path)
67
+ else:
68
+ for ext in extensions:
69
+ if file_name.ends_with(ext):
70
+ result.append(full_path)
71
+ break
72
+
73
+ file_name = dir.get_next()
74
+
75
+ dir.list_dir_end()
76
+
77
+ # ---- Asset Type Listing ----
78
+
79
+ func _handle_list_assets_by_type(client_id: int, params: Dictionary, command_id: String) -> void:
80
+ var type = params.get("type", "all")
81
+
82
+ var result = list_assets_by_type(type)
83
+
84
+ var response = {
85
+ "status": "success",
86
+ "result": result
87
+ }
88
+
89
+ if not command_id.is_empty():
90
+ response["commandId"] = command_id
91
+
92
+ _websocket_server.send_response(client_id, response)
93
+
94
+ func list_assets_by_type(type: String) -> Dictionary:
95
+ # Define file extensions for each asset type
96
+ var extension_map = {
97
+ "images": [".png", ".jpg", ".jpeg", ".webp", ".svg", ".bmp", ".tga"],
98
+ "audio": [".ogg", ".mp3", ".wav", ".opus"],
99
+ "fonts": [".ttf", ".otf", ".fnt", ".font"],
100
+ "models": [".glb", ".gltf", ".obj", ".fbx"],
101
+ "shaders": [".gdshader", ".shader"],
102
+ "resources": [".tres", ".res", ".theme", ".material"],
103
+ "scripts": [".gd"],
104
+ "scenes": [".tscn"],
105
+ "all": [] # Will retrieve everything
106
+ }
107
+
108
+ # Get extensions for the requested type
109
+ var extensions = []
110
+ if extension_map.has(type):
111
+ extensions = extension_map[type]
112
+ else:
113
+ # If type not found, return empty result
114
+ return {
115
+ "assetType": type,
116
+ "extensions": [],
117
+ "count": 0,
118
+ "files": [],
119
+ "organizedFiles": {},
120
+ "error": "Unknown asset type: %s. Valid types are: %s" % [type, ", ".join(extension_map.keys())]
121
+ }
122
+
123
+ # Get files
124
+ var file_result = list_project_files(extensions)
125
+ var files = file_result.get("files", [])
126
+
127
+ # Group by folder structure for better navigation
128
+ var organized_files = {}
129
+ for file_path in files:
130
+ var parts = file_path.split("/")
131
+ var current = organized_files
132
+
133
+ # Skip the first "res://" part if present
134
+ var start_idx = 1 if parts[0] == "res:" else 0
135
+
136
+ # Process path parts
137
+ for i in range(start_idx, parts.size() - 1):
138
+ var part = parts[i]
139
+ if not current.has(part):
140
+ current[part] = {}
141
+ current = current[part]
142
+
143
+ # For the leaf/filename
144
+ var file_name = parts[parts.size() - 1]
145
+ current[file_name] = file_path
146
+
147
+ return {
148
+ "assetType": type,
149
+ "extensions": extensions,
150
+ "count": files.size(),
151
+ "files": files,
152
+ "organizedFiles": organized_files
153
+ }
@@ -0,0 +1 @@
1
+ uid://bwwfto3i8qyjy