unreal-engine-mcp-server 0.5.0 → 0.5.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.
Files changed (139) hide show
  1. package/.env.example +1 -1
  2. package/.github/release-drafter-config.yml +51 -0
  3. package/.github/workflows/greetings.yml +5 -1
  4. package/.github/workflows/labeler.yml +2 -1
  5. package/.github/workflows/publish-mcp.yml +1 -0
  6. package/.github/workflows/release-drafter.yml +1 -1
  7. package/.github/workflows/release.yml +3 -3
  8. package/CHANGELOG.md +71 -0
  9. package/CONTRIBUTING.md +1 -1
  10. package/GEMINI.md +115 -0
  11. package/Public/Plugin_setup_guide.mp4 +0 -0
  12. package/README.md +166 -200
  13. package/dist/config.d.ts +0 -1
  14. package/dist/config.js +0 -1
  15. package/dist/constants.d.ts +4 -0
  16. package/dist/constants.js +4 -0
  17. package/dist/graphql/loaders.d.ts +64 -0
  18. package/dist/graphql/loaders.js +117 -0
  19. package/dist/graphql/resolvers.d.ts +3 -3
  20. package/dist/graphql/resolvers.js +33 -30
  21. package/dist/graphql/server.js +3 -1
  22. package/dist/graphql/types.d.ts +2 -0
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.js +13 -2
  25. package/dist/server-setup.d.ts +0 -1
  26. package/dist/server-setup.js +0 -40
  27. package/dist/tools/actors.d.ts +40 -24
  28. package/dist/tools/actors.js +8 -2
  29. package/dist/tools/assets.d.ts +19 -71
  30. package/dist/tools/assets.js +28 -22
  31. package/dist/tools/base-tool.d.ts +4 -4
  32. package/dist/tools/base-tool.js +1 -1
  33. package/dist/tools/blueprint.d.ts +33 -61
  34. package/dist/tools/consolidated-tool-handlers.js +96 -110
  35. package/dist/tools/dynamic-handler-registry.d.ts +11 -9
  36. package/dist/tools/dynamic-handler-registry.js +17 -95
  37. package/dist/tools/editor.d.ts +19 -193
  38. package/dist/tools/editor.js +8 -0
  39. package/dist/tools/environment.d.ts +8 -14
  40. package/dist/tools/foliage.d.ts +18 -143
  41. package/dist/tools/foliage.js +4 -2
  42. package/dist/tools/handlers/actor-handlers.js +0 -5
  43. package/dist/tools/handlers/asset-handlers.js +454 -454
  44. package/dist/tools/landscape.d.ts +16 -116
  45. package/dist/tools/landscape.js +7 -3
  46. package/dist/tools/level.d.ts +22 -103
  47. package/dist/tools/level.js +24 -16
  48. package/dist/tools/lighting.js +5 -1
  49. package/dist/tools/materials.js +5 -1
  50. package/dist/tools/niagara.js +37 -2
  51. package/dist/tools/performance.d.ts +0 -1
  52. package/dist/tools/performance.js +0 -1
  53. package/dist/tools/physics.js +5 -1
  54. package/dist/tools/sequence.d.ts +24 -24
  55. package/dist/tools/sequence.js +13 -0
  56. package/dist/tools/ui.d.ts +0 -2
  57. package/dist/types/automation-responses.d.ts +115 -0
  58. package/dist/types/automation-responses.js +2 -0
  59. package/dist/types/responses.d.ts +249 -0
  60. package/dist/types/responses.js +2 -0
  61. package/dist/types/tool-interfaces.d.ts +135 -135
  62. package/dist/utils/command-validator.js +3 -2
  63. package/dist/utils/path-security.d.ts +2 -0
  64. package/dist/utils/path-security.js +24 -0
  65. package/dist/utils/response-factory.d.ts +4 -4
  66. package/dist/utils/response-factory.js +15 -21
  67. package/docs/Migration-Guide-v0.5.0.md +1 -9
  68. package/docs/testing-guide.md +2 -2
  69. package/package.json +12 -6
  70. package/scripts/run-all-tests.mjs +25 -20
  71. package/server.json +3 -2
  72. package/src/config.ts +1 -1
  73. package/src/constants.ts +7 -0
  74. package/src/graphql/loaders.ts +244 -0
  75. package/src/graphql/resolvers.ts +47 -49
  76. package/src/graphql/server.ts +3 -1
  77. package/src/graphql/types.ts +3 -0
  78. package/src/index.ts +15 -2
  79. package/src/resources/assets.ts +5 -4
  80. package/src/server-setup.ts +3 -37
  81. package/src/tools/actors.ts +36 -28
  82. package/src/tools/animation.ts +1 -0
  83. package/src/tools/assets.ts +74 -63
  84. package/src/tools/base-tool.ts +3 -3
  85. package/src/tools/blueprint.ts +59 -59
  86. package/src/tools/consolidated-tool-handlers.ts +129 -150
  87. package/src/tools/dynamic-handler-registry.ts +22 -140
  88. package/src/tools/editor.ts +39 -26
  89. package/src/tools/environment.ts +21 -27
  90. package/src/tools/foliage.ts +28 -25
  91. package/src/tools/handlers/actor-handlers.ts +2 -8
  92. package/src/tools/handlers/asset-handlers.ts +484 -484
  93. package/src/tools/handlers/sequence-handlers.ts +1 -1
  94. package/src/tools/landscape.ts +34 -28
  95. package/src/tools/level.ts +96 -76
  96. package/src/tools/lighting.ts +6 -1
  97. package/src/tools/materials.ts +8 -2
  98. package/src/tools/niagara.ts +44 -2
  99. package/src/tools/performance.ts +1 -2
  100. package/src/tools/physics.ts +7 -1
  101. package/src/tools/sequence.ts +41 -25
  102. package/src/tools/ui.ts +0 -2
  103. package/src/types/automation-responses.ts +119 -0
  104. package/src/types/responses.ts +355 -0
  105. package/src/types/tool-interfaces.ts +135 -135
  106. package/src/utils/command-validator.ts +3 -2
  107. package/src/utils/normalize.test.ts +162 -0
  108. package/src/utils/path-security.ts +43 -0
  109. package/src/utils/response-factory.ts +29 -24
  110. package/src/utils/safe-json.test.ts +90 -0
  111. package/src/utils/validation.test.ts +184 -0
  112. package/tests/test-animation.mjs +358 -33
  113. package/tests/test-asset-graph.mjs +311 -0
  114. package/tests/test-audio.mjs +314 -116
  115. package/tests/test-behavior-tree.mjs +327 -144
  116. package/tests/test-blueprint-graph.mjs +343 -12
  117. package/tests/test-control-editor.mjs +85 -53
  118. package/tests/test-graphql.mjs +58 -8
  119. package/tests/test-input.mjs +349 -0
  120. package/tests/test-inspect.mjs +291 -61
  121. package/tests/test-landscape.mjs +304 -48
  122. package/tests/test-lighting.mjs +428 -0
  123. package/tests/test-manage-level.mjs +70 -51
  124. package/tests/test-performance.mjs +539 -0
  125. package/tests/test-sequence.mjs +82 -46
  126. package/tests/test-system.mjs +72 -33
  127. package/tests/test-wasm.mjs +98 -8
  128. package/vitest.config.ts +35 -0
  129. package/.github/release-drafter.yml +0 -148
  130. package/dist/prompts/index.d.ts +0 -21
  131. package/dist/prompts/index.js +0 -217
  132. package/dist/tools/blueprint/helpers.d.ts +0 -29
  133. package/dist/tools/blueprint/helpers.js +0 -182
  134. package/src/prompts/index.ts +0 -249
  135. package/src/tools/blueprint/helpers.ts +0 -189
  136. package/tests/test-blueprint-events.mjs +0 -35
  137. package/tests/test-extra-tools.mjs +0 -38
  138. package/tests/test-render.mjs +0 -33
  139. package/tests/test-search-assets.mjs +0 -66
@@ -0,0 +1,311 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Material Graph & Advanced Asset Test Suite
4
+ * Tool: manage_asset (material graph operations)
5
+ * Coverage: Material graph nodes, search, analyze, nanite
6
+ */
7
+
8
+ import { runToolTests } from './test-runner.mjs';
9
+
10
+ const testCases = [
11
+ // === PRE-CLEANUP ===
12
+ {
13
+ scenario: 'Pre-cleanup: Delete test materials',
14
+ toolName: 'manage_asset',
15
+ arguments: { action: 'delete', assetPaths: ['/Game/Tests/Materials/M_GraphTest', '/Game/Tests/Materials/M_NaniteTest'] },
16
+ expected: 'success|not_found'
17
+ },
18
+ {
19
+ scenario: 'Create test folder',
20
+ toolName: 'manage_asset',
21
+ arguments: { action: 'create_folder', path: '/Game/Tests/Materials' },
22
+ expected: 'success'
23
+ },
24
+
25
+ // === SEARCH ASSETS ===
26
+ {
27
+ scenario: 'Search assets by name',
28
+ toolName: 'manage_asset',
29
+ arguments: { action: 'search_assets', filter: 'Cube', packagePaths: ['/Engine'] },
30
+ expected: 'success'
31
+ },
32
+ {
33
+ scenario: 'Search assets by class',
34
+ toolName: 'manage_asset',
35
+ arguments: { action: 'search_assets', classNames: ['Material'], packagePaths: ['/Engine'], limit: 10 },
36
+ expected: 'success'
37
+ },
38
+ {
39
+ scenario: 'Search assets recursive',
40
+ toolName: 'manage_asset',
41
+ arguments: { action: 'search_assets', packagePaths: ['/Game'], recursiveClasses: true, recursivePaths: true },
42
+ expected: 'success'
43
+ },
44
+
45
+ // === ANALYZE GRAPH ===
46
+ {
47
+ scenario: 'Analyze material graph',
48
+ toolName: 'manage_asset',
49
+ arguments: { action: 'analyze_graph', assetPath: '/Engine/EngineMaterials/WorldGridMaterial', maxDepth: 3 },
50
+ expected: 'success'
51
+ },
52
+ {
53
+ scenario: 'Get asset graph',
54
+ toolName: 'manage_asset',
55
+ arguments: { action: 'get_asset_graph', assetPath: '/Engine/EngineMaterials/WorldGridMaterial' },
56
+ expected: 'success'
57
+ },
58
+
59
+ // === CREATE MATERIAL FOR GRAPH TESTS ===
60
+ {
61
+ scenario: 'Create material for graph tests',
62
+ toolName: 'manage_asset',
63
+ arguments: { action: 'create_material', name: 'M_GraphTest', path: '/Game/Tests/Materials', materialType: 'Master' },
64
+ expected: 'success'
65
+ },
66
+
67
+ // === MATERIAL GRAPH: ADD NODES ===
68
+ {
69
+ scenario: 'Add Constant3Vector node',
70
+ toolName: 'manage_asset',
71
+ arguments: {
72
+ action: 'add_material_node',
73
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
74
+ nodeType: 'Constant3Vector',
75
+ x: -300,
76
+ y: 0
77
+ },
78
+ expected: 'success'
79
+ },
80
+ {
81
+ scenario: 'Add Texture Sample node',
82
+ toolName: 'manage_asset',
83
+ arguments: {
84
+ action: 'add_material_node',
85
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
86
+ nodeType: 'TextureSample',
87
+ x: -400,
88
+ y: 100
89
+ },
90
+ expected: 'success'
91
+ },
92
+ {
93
+ scenario: 'Add Multiply node',
94
+ toolName: 'manage_asset',
95
+ arguments: {
96
+ action: 'add_material_node',
97
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
98
+ nodeType: 'Multiply',
99
+ x: -150,
100
+ y: 50
101
+ },
102
+ expected: 'success'
103
+ },
104
+ {
105
+ scenario: 'Add Scalar Parameter node',
106
+ toolName: 'manage_asset',
107
+ arguments: {
108
+ action: 'add_material_node',
109
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
110
+ nodeType: 'ScalarParameter',
111
+ parameterName: 'Roughness',
112
+ x: -300,
113
+ y: 200
114
+ },
115
+ expected: 'success'
116
+ },
117
+ {
118
+ scenario: 'Add Vector Parameter node',
119
+ toolName: 'manage_asset',
120
+ arguments: {
121
+ action: 'add_material_node',
122
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
123
+ nodeType: 'VectorParameter',
124
+ parameterName: 'BaseColor',
125
+ x: -300,
126
+ y: 300
127
+ },
128
+ expected: 'success'
129
+ },
130
+ {
131
+ scenario: 'Add Add node',
132
+ toolName: 'manage_asset',
133
+ arguments: {
134
+ action: 'add_material_node',
135
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
136
+ nodeType: 'Add',
137
+ x: -200,
138
+ y: 150
139
+ },
140
+ expected: 'success'
141
+ },
142
+
143
+ // === MATERIAL GRAPH: GET NODE DETAILS ===
144
+ {
145
+ scenario: 'Get material node details',
146
+ toolName: 'manage_asset',
147
+ arguments: {
148
+ action: 'get_material_node_details',
149
+ assetPath: '/Game/Tests/Materials/M_GraphTest'
150
+ },
151
+ expected: 'success'
152
+ },
153
+
154
+ // === MATERIAL GRAPH: CONNECT PINS ===
155
+ {
156
+ scenario: 'Connect Constant3Vector to BaseColor',
157
+ toolName: 'manage_asset',
158
+ arguments: {
159
+ action: 'connect_material_pins',
160
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
161
+ fromNodeId: 'Constant3Vector_0',
162
+ fromPin: 'RGB',
163
+ toNodeId: 'Material',
164
+ toPin: 'BaseColor'
165
+ },
166
+ expected: 'success|not_found'
167
+ },
168
+ {
169
+ scenario: 'Connect ScalarParameter to Roughness',
170
+ toolName: 'manage_asset',
171
+ arguments: {
172
+ action: 'connect_material_pins',
173
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
174
+ fromNodeId: 'ScalarParameter_Roughness',
175
+ fromPin: 'Output',
176
+ toNodeId: 'Material',
177
+ toPin: 'Roughness'
178
+ },
179
+ expected: 'success|not_found'
180
+ },
181
+
182
+ // === MATERIAL GRAPH: BREAK CONNECTIONS ===
183
+ {
184
+ scenario: 'Break material connections',
185
+ toolName: 'manage_asset',
186
+ arguments: {
187
+ action: 'break_material_connections',
188
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
189
+ nodeId: 'Material',
190
+ pinName: 'BaseColor'
191
+ },
192
+ expected: 'success|not_found'
193
+ },
194
+
195
+ // === MATERIAL GRAPH: REMOVE NODE ===
196
+ {
197
+ scenario: 'Remove Add node',
198
+ toolName: 'manage_asset',
199
+ arguments: {
200
+ action: 'remove_material_node',
201
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
202
+ nodeId: 'Add_0'
203
+ },
204
+ expected: 'success|not_found'
205
+ },
206
+
207
+ // === REBUILD MATERIAL ===
208
+ {
209
+ scenario: 'Rebuild material',
210
+ toolName: 'manage_asset',
211
+ arguments: {
212
+ action: 'rebuild_material',
213
+ assetPath: '/Game/Tests/Materials/M_GraphTest',
214
+ save: true
215
+ },
216
+ expected: 'success'
217
+ },
218
+
219
+ // === NANITE OPERATIONS ===
220
+ {
221
+ scenario: 'Create dummy mesh for Nanite test',
222
+ toolName: 'manage_asset',
223
+ arguments: { action: 'duplicate', sourcePath: '/Engine/BasicShapes/Cube', destinationPath: '/Game/Tests/Materials', newName: 'SM_NaniteTest' },
224
+ expected: 'success'
225
+ },
226
+ {
227
+ scenario: 'Nanite rebuild mesh',
228
+ toolName: 'manage_asset',
229
+ arguments: {
230
+ action: 'nanite_rebuild_mesh',
231
+ meshPath: '/Game/Tests/Materials/SM_NaniteTest'
232
+ },
233
+ expected: 'success|not_supported'
234
+ },
235
+
236
+ // === GENERATE LODs ===
237
+ {
238
+ scenario: 'Generate LODs for mesh',
239
+ toolName: 'manage_asset',
240
+ arguments: {
241
+ action: 'generate_lods',
242
+ meshPath: '/Game/Tests/Materials/SM_NaniteTest',
243
+ lodCount: 3
244
+ },
245
+ expected: 'success'
246
+ },
247
+
248
+ // === CREATE RENDER TARGET ===
249
+ {
250
+ scenario: 'Create render target',
251
+ toolName: 'manage_asset',
252
+ arguments: {
253
+ action: 'create_render_target',
254
+ name: 'RT_Test',
255
+ path: '/Game/Tests/Materials',
256
+ width: 512,
257
+ height: 512
258
+ },
259
+ expected: 'success'
260
+ },
261
+
262
+ // === ERROR CASES ===
263
+ {
264
+ scenario: 'Error: Add node to invalid material',
265
+ toolName: 'manage_asset',
266
+ arguments: { action: 'add_material_node', assetPath: '/Game/Invalid/Material', nodeType: 'Constant' },
267
+ expected: 'error|not_found'
268
+ },
269
+ {
270
+ scenario: 'Error: Connect invalid pins',
271
+ toolName: 'manage_asset',
272
+ arguments: { action: 'connect_material_pins', assetPath: '/Game/Tests/Materials/M_GraphTest', fromNodeId: 'Invalid', fromPin: 'Invalid', toNodeId: 'Invalid', toPin: 'Invalid' },
273
+ expected: 'error|not_found'
274
+ },
275
+ {
276
+ scenario: 'Error: Search with empty paths',
277
+ toolName: 'manage_asset',
278
+ arguments: { action: 'search_assets', packagePaths: [] },
279
+ expected: 'success|error'
280
+ },
281
+ {
282
+ scenario: 'Error: Nanite on non-mesh',
283
+ toolName: 'manage_asset',
284
+ arguments: { action: 'nanite_rebuild_mesh', meshPath: '/Game/Tests/Materials/M_GraphTest' },
285
+ expected: 'error'
286
+ },
287
+
288
+ // === EDGE CASES ===
289
+ {
290
+ scenario: 'Edge: Negative node position',
291
+ toolName: 'manage_asset',
292
+ arguments: { action: 'add_material_node', assetPath: '/Game/Tests/Materials/M_GraphTest', nodeType: 'Constant', x: -9999, y: -9999 },
293
+ expected: 'success'
294
+ },
295
+ {
296
+ scenario: 'Edge: Very large render target',
297
+ toolName: 'manage_asset',
298
+ arguments: { action: 'create_render_target', name: 'RT_Large', path: '/Game/Tests/Materials', width: 4096, height: 4096 },
299
+ expected: 'success'
300
+ },
301
+
302
+ // === CLEANUP ===
303
+ {
304
+ scenario: 'Cleanup: Delete test materials folder',
305
+ toolName: 'manage_asset',
306
+ arguments: { action: 'delete', assetPaths: ['/Game/Tests/Materials'] },
307
+ expected: 'success|not_found'
308
+ }
309
+ ];
310
+
311
+ await runToolTests('Material Graph & Advanced Assets', testCases);