unreal-engine-mcp-server 0.4.7 → 0.5.0

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 (438) hide show
  1. package/.env.example +26 -0
  2. package/.env.production +38 -7
  3. package/.eslintrc.json +0 -54
  4. package/.eslintrc.override.json +8 -0
  5. package/.github/ISSUE_TEMPLATE/bug_report.yml +94 -0
  6. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  7. package/.github/ISSUE_TEMPLATE/feature_request.yml +56 -0
  8. package/.github/copilot-instructions.md +478 -45
  9. package/.github/dependabot.yml +19 -0
  10. package/.github/labeler.yml +24 -0
  11. package/.github/labels.yml +70 -0
  12. package/.github/pull_request_template.md +42 -0
  13. package/.github/release-drafter.yml +148 -0
  14. package/.github/workflows/auto-merge.yml +38 -0
  15. package/.github/workflows/ci.yml +38 -0
  16. package/.github/workflows/dependency-review.yml +17 -0
  17. package/.github/workflows/gemini-issue-triage.yml +172 -0
  18. package/.github/workflows/greetings.yml +23 -0
  19. package/.github/workflows/labeler.yml +16 -0
  20. package/.github/workflows/links.yml +80 -0
  21. package/.github/workflows/pr-size-labeler.yml +137 -0
  22. package/.github/workflows/publish-mcp.yml +12 -7
  23. package/.github/workflows/release-drafter.yml +23 -0
  24. package/.github/workflows/release.yml +112 -0
  25. package/.github/workflows/semantic-pull-request.yml +35 -0
  26. package/.github/workflows/smoke-test.yml +36 -0
  27. package/.github/workflows/stale.yml +28 -0
  28. package/CHANGELOG.md +267 -31
  29. package/CONTRIBUTING.md +140 -0
  30. package/README.md +166 -71
  31. package/claude_desktop_config_example.json +7 -6
  32. package/dist/automation/bridge.d.ts +50 -0
  33. package/dist/automation/bridge.js +452 -0
  34. package/dist/automation/connection-manager.d.ts +23 -0
  35. package/dist/automation/connection-manager.js +107 -0
  36. package/dist/automation/handshake.d.ts +11 -0
  37. package/dist/automation/handshake.js +89 -0
  38. package/dist/automation/index.d.ts +3 -0
  39. package/dist/automation/index.js +3 -0
  40. package/dist/automation/message-handler.d.ts +12 -0
  41. package/dist/automation/message-handler.js +149 -0
  42. package/dist/automation/request-tracker.d.ts +25 -0
  43. package/dist/automation/request-tracker.js +98 -0
  44. package/dist/automation/types.d.ts +130 -0
  45. package/dist/automation/types.js +2 -0
  46. package/dist/cli.js +32 -5
  47. package/dist/config.d.ts +27 -0
  48. package/dist/config.js +60 -0
  49. package/dist/constants.d.ts +12 -0
  50. package/dist/constants.js +12 -0
  51. package/dist/graphql/resolvers.d.ts +268 -0
  52. package/dist/graphql/resolvers.js +743 -0
  53. package/dist/graphql/schema.d.ts +5 -0
  54. package/dist/graphql/schema.js +437 -0
  55. package/dist/graphql/server.d.ts +26 -0
  56. package/dist/graphql/server.js +115 -0
  57. package/dist/graphql/types.d.ts +7 -0
  58. package/dist/graphql/types.js +2 -0
  59. package/dist/handlers/resource-handlers.d.ts +20 -0
  60. package/dist/handlers/resource-handlers.js +180 -0
  61. package/dist/index.d.ts +31 -18
  62. package/dist/index.js +119 -619
  63. package/dist/prompts/index.js +4 -4
  64. package/dist/resources/actors.d.ts +17 -12
  65. package/dist/resources/actors.js +56 -76
  66. package/dist/resources/assets.d.ts +6 -14
  67. package/dist/resources/assets.js +115 -147
  68. package/dist/resources/levels.d.ts +13 -13
  69. package/dist/resources/levels.js +25 -34
  70. package/dist/server/resource-registry.d.ts +20 -0
  71. package/dist/server/resource-registry.js +37 -0
  72. package/dist/server/tool-registry.d.ts +23 -0
  73. package/dist/server/tool-registry.js +322 -0
  74. package/dist/server-setup.d.ts +21 -0
  75. package/dist/server-setup.js +111 -0
  76. package/dist/services/health-monitor.d.ts +34 -0
  77. package/dist/services/health-monitor.js +105 -0
  78. package/dist/services/metrics-server.d.ts +11 -0
  79. package/dist/services/metrics-server.js +105 -0
  80. package/dist/tools/actors.d.ts +147 -9
  81. package/dist/tools/actors.js +350 -311
  82. package/dist/tools/animation.d.ts +135 -4
  83. package/dist/tools/animation.js +510 -411
  84. package/dist/tools/assets.d.ts +117 -19
  85. package/dist/tools/assets.js +259 -284
  86. package/dist/tools/audio.d.ts +102 -42
  87. package/dist/tools/audio.js +272 -685
  88. package/dist/tools/base-tool.d.ts +17 -0
  89. package/dist/tools/base-tool.js +46 -0
  90. package/dist/tools/behavior-tree.d.ts +94 -0
  91. package/dist/tools/behavior-tree.js +39 -0
  92. package/dist/tools/blueprint/helpers.d.ts +29 -0
  93. package/dist/tools/blueprint/helpers.js +182 -0
  94. package/dist/tools/blueprint.d.ts +228 -118
  95. package/dist/tools/blueprint.js +685 -832
  96. package/dist/tools/consolidated-tool-definitions.d.ts +5462 -1781
  97. package/dist/tools/consolidated-tool-definitions.js +829 -496
  98. package/dist/tools/consolidated-tool-handlers.d.ts +2 -1
  99. package/dist/tools/consolidated-tool-handlers.js +211 -1026
  100. package/dist/tools/debug.d.ts +143 -85
  101. package/dist/tools/debug.js +234 -180
  102. package/dist/tools/dynamic-handler-registry.d.ts +11 -0
  103. package/dist/tools/dynamic-handler-registry.js +101 -0
  104. package/dist/tools/editor.d.ts +139 -18
  105. package/dist/tools/editor.js +239 -244
  106. package/dist/tools/engine.d.ts +10 -4
  107. package/dist/tools/engine.js +13 -5
  108. package/dist/tools/environment.d.ts +36 -0
  109. package/dist/tools/environment.js +267 -0
  110. package/dist/tools/foliage.d.ts +105 -14
  111. package/dist/tools/foliage.js +219 -331
  112. package/dist/tools/handlers/actor-handlers.d.ts +3 -0
  113. package/dist/tools/handlers/actor-handlers.js +232 -0
  114. package/dist/tools/handlers/animation-handlers.d.ts +3 -0
  115. package/dist/tools/handlers/animation-handlers.js +185 -0
  116. package/dist/tools/handlers/argument-helper.d.ts +16 -0
  117. package/dist/tools/handlers/argument-helper.js +80 -0
  118. package/dist/tools/handlers/asset-handlers.d.ts +3 -0
  119. package/dist/tools/handlers/asset-handlers.js +496 -0
  120. package/dist/tools/handlers/audio-handlers.d.ts +3 -0
  121. package/dist/tools/handlers/audio-handlers.js +166 -0
  122. package/dist/tools/handlers/blueprint-handlers.d.ts +4 -0
  123. package/dist/tools/handlers/blueprint-handlers.js +358 -0
  124. package/dist/tools/handlers/common-handlers.d.ts +14 -0
  125. package/dist/tools/handlers/common-handlers.js +56 -0
  126. package/dist/tools/handlers/editor-handlers.d.ts +3 -0
  127. package/dist/tools/handlers/editor-handlers.js +119 -0
  128. package/dist/tools/handlers/effect-handlers.d.ts +3 -0
  129. package/dist/tools/handlers/effect-handlers.js +171 -0
  130. package/dist/tools/handlers/environment-handlers.d.ts +3 -0
  131. package/dist/tools/handlers/environment-handlers.js +170 -0
  132. package/dist/tools/handlers/graph-handlers.d.ts +3 -0
  133. package/dist/tools/handlers/graph-handlers.js +90 -0
  134. package/dist/tools/handlers/input-handlers.d.ts +3 -0
  135. package/dist/tools/handlers/input-handlers.js +21 -0
  136. package/dist/tools/handlers/inspect-handlers.d.ts +3 -0
  137. package/dist/tools/handlers/inspect-handlers.js +383 -0
  138. package/dist/tools/handlers/level-handlers.d.ts +3 -0
  139. package/dist/tools/handlers/level-handlers.js +237 -0
  140. package/dist/tools/handlers/lighting-handlers.d.ts +3 -0
  141. package/dist/tools/handlers/lighting-handlers.js +144 -0
  142. package/dist/tools/handlers/performance-handlers.d.ts +3 -0
  143. package/dist/tools/handlers/performance-handlers.js +130 -0
  144. package/dist/tools/handlers/pipeline-handlers.d.ts +3 -0
  145. package/dist/tools/handlers/pipeline-handlers.js +110 -0
  146. package/dist/tools/handlers/sequence-handlers.d.ts +3 -0
  147. package/dist/tools/handlers/sequence-handlers.js +376 -0
  148. package/dist/tools/handlers/system-handlers.d.ts +4 -0
  149. package/dist/tools/handlers/system-handlers.js +506 -0
  150. package/dist/tools/input.d.ts +19 -0
  151. package/dist/tools/input.js +89 -0
  152. package/dist/tools/introspection.d.ts +103 -40
  153. package/dist/tools/introspection.js +425 -568
  154. package/dist/tools/landscape.d.ts +97 -36
  155. package/dist/tools/landscape.js +280 -409
  156. package/dist/tools/level.d.ts +130 -10
  157. package/dist/tools/level.js +639 -675
  158. package/dist/tools/lighting.d.ts +77 -38
  159. package/dist/tools/lighting.js +441 -943
  160. package/dist/tools/logs.d.ts +3 -3
  161. package/dist/tools/logs.js +5 -57
  162. package/dist/tools/materials.d.ts +91 -24
  163. package/dist/tools/materials.js +190 -118
  164. package/dist/tools/niagara.d.ts +149 -39
  165. package/dist/tools/niagara.js +232 -182
  166. package/dist/tools/performance.d.ts +27 -12
  167. package/dist/tools/performance.js +204 -122
  168. package/dist/tools/physics.d.ts +32 -77
  169. package/dist/tools/physics.js +171 -582
  170. package/dist/tools/property-dictionary.d.ts +13 -0
  171. package/dist/tools/property-dictionary.js +82 -0
  172. package/dist/tools/sequence.d.ts +73 -48
  173. package/dist/tools/sequence.js +196 -748
  174. package/dist/tools/tool-definition-utils.d.ts +59 -0
  175. package/dist/tools/tool-definition-utils.js +35 -0
  176. package/dist/tools/ui.d.ts +66 -34
  177. package/dist/tools/ui.js +134 -214
  178. package/dist/types/env.d.ts +0 -3
  179. package/dist/types/env.js +0 -7
  180. package/dist/types/tool-interfaces.d.ts +898 -0
  181. package/dist/types/tool-interfaces.js +2 -0
  182. package/dist/types/tool-types.d.ts +183 -19
  183. package/dist/types/tool-types.js +0 -4
  184. package/dist/unreal-bridge.d.ts +24 -131
  185. package/dist/unreal-bridge.js +364 -1506
  186. package/dist/utils/command-validator.d.ts +9 -0
  187. package/dist/utils/command-validator.js +67 -0
  188. package/dist/utils/elicitation.d.ts +1 -1
  189. package/dist/utils/elicitation.js +12 -15
  190. package/dist/utils/error-handler.d.ts +2 -51
  191. package/dist/utils/error-handler.js +11 -87
  192. package/dist/utils/ini-reader.d.ts +3 -0
  193. package/dist/utils/ini-reader.js +69 -0
  194. package/dist/utils/logger.js +9 -6
  195. package/dist/utils/normalize.d.ts +3 -0
  196. package/dist/utils/normalize.js +56 -0
  197. package/dist/utils/response-factory.d.ts +7 -0
  198. package/dist/utils/response-factory.js +33 -0
  199. package/dist/utils/response-validator.d.ts +3 -24
  200. package/dist/utils/response-validator.js +130 -81
  201. package/dist/utils/result-helpers.d.ts +4 -5
  202. package/dist/utils/result-helpers.js +15 -16
  203. package/dist/utils/safe-json.js +5 -11
  204. package/dist/utils/unreal-command-queue.d.ts +24 -0
  205. package/dist/utils/unreal-command-queue.js +120 -0
  206. package/dist/utils/validation.d.ts +0 -40
  207. package/dist/utils/validation.js +1 -78
  208. package/dist/wasm/index.d.ts +70 -0
  209. package/dist/wasm/index.js +535 -0
  210. package/docs/GraphQL-API.md +888 -0
  211. package/docs/Migration-Guide-v0.5.0.md +692 -0
  212. package/docs/Roadmap.md +53 -0
  213. package/docs/WebAssembly-Integration.md +628 -0
  214. package/docs/editor-plugin-extension.md +370 -0
  215. package/docs/handler-mapping.md +242 -0
  216. package/docs/native-automation-progress.md +128 -0
  217. package/docs/testing-guide.md +423 -0
  218. package/mcp-config-example.json +6 -6
  219. package/package.json +60 -27
  220. package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +8 -0
  221. package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +64 -0
  222. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +189 -0
  223. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +22 -0
  224. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +30 -0
  225. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +1983 -0
  226. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +72 -0
  227. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +46 -0
  228. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +581 -0
  229. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +2394 -0
  230. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +300 -0
  231. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +2807 -0
  232. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +1087 -0
  233. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +488 -0
  234. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +643 -0
  235. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +31 -0
  236. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +1184 -0
  237. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +5652 -0
  238. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +152 -0
  239. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +2614 -0
  240. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +42 -0
  241. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +1237 -0
  242. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +1701 -0
  243. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +2145 -0
  244. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +954 -0
  245. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +209 -0
  246. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +41 -0
  247. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +1164 -0
  248. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +762 -0
  249. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +634 -0
  250. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +136 -0
  251. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +494 -0
  252. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +278 -0
  253. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +625 -0
  254. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +401 -0
  255. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +67 -0
  256. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +735 -0
  257. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +2634 -0
  258. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +189 -0
  259. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +917 -0
  260. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +39 -0
  261. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +2670 -0
  262. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +519 -0
  263. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +38 -0
  264. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +668 -0
  265. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +346 -0
  266. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +1330 -0
  267. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +149 -0
  268. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +783 -0
  269. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +115 -0
  270. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +796 -0
  271. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +117 -0
  272. package/scripts/check-unreal-connection.mjs +19 -0
  273. package/scripts/clean-tmp.js +23 -0
  274. package/scripts/patch-wasm.js +26 -0
  275. package/scripts/run-all-tests.mjs +131 -0
  276. package/scripts/smoke-test.ts +94 -0
  277. package/scripts/sync-mcp-plugin.js +143 -0
  278. package/scripts/test-no-plugin-alternates.mjs +113 -0
  279. package/scripts/validate-server.js +46 -0
  280. package/scripts/verify-automation-bridge.js +200 -0
  281. package/server.json +57 -21
  282. package/src/automation/bridge.ts +558 -0
  283. package/src/automation/connection-manager.ts +130 -0
  284. package/src/automation/handshake.ts +99 -0
  285. package/src/automation/index.ts +2 -0
  286. package/src/automation/message-handler.ts +167 -0
  287. package/src/automation/request-tracker.ts +123 -0
  288. package/src/automation/types.ts +107 -0
  289. package/src/cli.ts +33 -6
  290. package/src/config.ts +73 -0
  291. package/src/constants.ts +12 -0
  292. package/src/graphql/resolvers.ts +1010 -0
  293. package/src/graphql/schema.ts +452 -0
  294. package/src/graphql/server.ts +154 -0
  295. package/src/graphql/types.ts +7 -0
  296. package/src/handlers/resource-handlers.ts +186 -0
  297. package/src/index.ts +152 -663
  298. package/src/prompts/index.ts +4 -4
  299. package/src/resources/actors.ts +58 -76
  300. package/src/resources/assets.ts +147 -134
  301. package/src/resources/levels.ts +28 -33
  302. package/src/server/resource-registry.ts +47 -0
  303. package/src/server/tool-registry.ts +354 -0
  304. package/src/server-setup.ts +148 -0
  305. package/src/services/health-monitor.ts +132 -0
  306. package/src/services/metrics-server.ts +142 -0
  307. package/src/tools/actors.ts +417 -322
  308. package/src/tools/animation.ts +671 -461
  309. package/src/tools/assets.ts +353 -289
  310. package/src/tools/audio.ts +323 -766
  311. package/src/tools/base-tool.ts +52 -0
  312. package/src/tools/behavior-tree.ts +45 -0
  313. package/src/tools/blueprint/helpers.ts +189 -0
  314. package/src/tools/blueprint.ts +787 -965
  315. package/src/tools/consolidated-tool-definitions.ts +993 -515
  316. package/src/tools/consolidated-tool-handlers.ts +272 -1139
  317. package/src/tools/debug.ts +292 -187
  318. package/src/tools/dynamic-handler-registry.ts +151 -0
  319. package/src/tools/editor.ts +309 -246
  320. package/src/tools/engine.ts +14 -3
  321. package/src/tools/environment.ts +287 -0
  322. package/src/tools/foliage.ts +314 -379
  323. package/src/tools/handlers/actor-handlers.ts +271 -0
  324. package/src/tools/handlers/animation-handlers.ts +237 -0
  325. package/src/tools/handlers/argument-helper.ts +142 -0
  326. package/src/tools/handlers/asset-handlers.ts +532 -0
  327. package/src/tools/handlers/audio-handlers.ts +194 -0
  328. package/src/tools/handlers/blueprint-handlers.ts +380 -0
  329. package/src/tools/handlers/common-handlers.ts +87 -0
  330. package/src/tools/handlers/editor-handlers.ts +123 -0
  331. package/src/tools/handlers/effect-handlers.ts +220 -0
  332. package/src/tools/handlers/environment-handlers.ts +183 -0
  333. package/src/tools/handlers/graph-handlers.ts +116 -0
  334. package/src/tools/handlers/input-handlers.ts +28 -0
  335. package/src/tools/handlers/inspect-handlers.ts +450 -0
  336. package/src/tools/handlers/level-handlers.ts +252 -0
  337. package/src/tools/handlers/lighting-handlers.ts +147 -0
  338. package/src/tools/handlers/performance-handlers.ts +132 -0
  339. package/src/tools/handlers/pipeline-handlers.ts +127 -0
  340. package/src/tools/handlers/sequence-handlers.ts +415 -0
  341. package/src/tools/handlers/system-handlers.ts +564 -0
  342. package/src/tools/input.ts +101 -0
  343. package/src/tools/introspection.ts +493 -584
  344. package/src/tools/landscape.ts +394 -489
  345. package/src/tools/level.ts +752 -694
  346. package/src/tools/lighting.ts +583 -984
  347. package/src/tools/logs.ts +9 -57
  348. package/src/tools/materials.ts +231 -121
  349. package/src/tools/niagara.ts +293 -168
  350. package/src/tools/performance.ts +320 -168
  351. package/src/tools/physics.ts +268 -613
  352. package/src/tools/property-dictionary.ts +98 -0
  353. package/src/tools/sequence.ts +255 -815
  354. package/src/tools/tool-definition-utils.ts +35 -0
  355. package/src/tools/ui.ts +207 -283
  356. package/src/types/env.ts +0 -10
  357. package/src/types/tool-interfaces.ts +250 -0
  358. package/src/types/tool-types.ts +243 -21
  359. package/src/unreal-bridge.ts +460 -1550
  360. package/src/utils/command-validator.ts +75 -0
  361. package/src/utils/elicitation.ts +10 -7
  362. package/src/utils/error-handler.ts +14 -90
  363. package/src/utils/ini-reader.ts +86 -0
  364. package/src/utils/logger.ts +8 -3
  365. package/src/utils/normalize.ts +60 -0
  366. package/src/utils/response-factory.ts +39 -0
  367. package/src/utils/response-validator.ts +176 -56
  368. package/src/utils/result-helpers.ts +21 -19
  369. package/src/utils/safe-json.ts +14 -11
  370. package/src/utils/unreal-command-queue.ts +152 -0
  371. package/src/utils/validation.ts +4 -1
  372. package/src/wasm/index.ts +838 -0
  373. package/test-server.mjs +100 -0
  374. package/tests/run-unreal-tool-tests.mjs +242 -14
  375. package/tests/test-animation.mjs +44 -0
  376. package/tests/test-asset-advanced.mjs +82 -0
  377. package/tests/test-asset-errors.mjs +35 -0
  378. package/tests/test-audio.mjs +219 -0
  379. package/tests/test-automation-timeouts.mjs +98 -0
  380. package/tests/test-behavior-tree.mjs +261 -0
  381. package/tests/test-blueprint-events.mjs +35 -0
  382. package/tests/test-blueprint-graph.mjs +79 -0
  383. package/tests/test-blueprint.mjs +577 -0
  384. package/tests/test-client-mode.mjs +86 -0
  385. package/tests/test-console-command.mjs +56 -0
  386. package/tests/test-control-actor.mjs +425 -0
  387. package/tests/test-control-editor.mjs +80 -0
  388. package/tests/test-extra-tools.mjs +38 -0
  389. package/tests/test-graphql.mjs +322 -0
  390. package/tests/test-inspect.mjs +72 -0
  391. package/tests/test-landscape.mjs +60 -0
  392. package/tests/test-manage-asset.mjs +438 -0
  393. package/tests/test-manage-level.mjs +70 -0
  394. package/tests/test-materials.mjs +356 -0
  395. package/tests/test-niagara.mjs +185 -0
  396. package/tests/test-no-inline-python.mjs +122 -0
  397. package/tests/test-plugin-handshake.mjs +82 -0
  398. package/tests/test-render.mjs +33 -0
  399. package/tests/test-runner.mjs +933 -0
  400. package/tests/test-search-assets.mjs +66 -0
  401. package/tests/test-sequence.mjs +68 -0
  402. package/tests/test-system.mjs +57 -0
  403. package/tests/test-wasm.mjs +193 -0
  404. package/tests/test-world-partition.mjs +215 -0
  405. package/tsconfig.json +3 -3
  406. package/wasm/Cargo.lock +363 -0
  407. package/wasm/Cargo.toml +42 -0
  408. package/wasm/LICENSE +21 -0
  409. package/wasm/README.md +253 -0
  410. package/wasm/src/dependency_resolver.rs +377 -0
  411. package/wasm/src/lib.rs +153 -0
  412. package/wasm/src/property_parser.rs +271 -0
  413. package/wasm/src/transform_math.rs +396 -0
  414. package/wasm/tests/integration.rs +109 -0
  415. package/.github/workflows/smithery-build.yml +0 -29
  416. package/dist/tools/build_environment_advanced.d.ts +0 -65
  417. package/dist/tools/build_environment_advanced.js +0 -633
  418. package/dist/tools/rc.d.ts +0 -110
  419. package/dist/tools/rc.js +0 -437
  420. package/dist/tools/visual.d.ts +0 -40
  421. package/dist/tools/visual.js +0 -282
  422. package/dist/utils/http.d.ts +0 -6
  423. package/dist/utils/http.js +0 -151
  424. package/dist/utils/python-output.d.ts +0 -18
  425. package/dist/utils/python-output.js +0 -290
  426. package/dist/utils/python.d.ts +0 -2
  427. package/dist/utils/python.js +0 -4
  428. package/dist/utils/stdio-redirect.d.ts +0 -2
  429. package/dist/utils/stdio-redirect.js +0 -20
  430. package/docs/unreal-tool-test-cases.md +0 -574
  431. package/smithery.yaml +0 -29
  432. package/src/tools/build_environment_advanced.ts +0 -732
  433. package/src/tools/rc.ts +0 -515
  434. package/src/tools/visual.ts +0 -281
  435. package/src/utils/http.ts +0 -187
  436. package/src/utils/python-output.ts +0 -351
  437. package/src/utils/python.ts +0 -3
  438. package/src/utils/stdio-redirect.ts +0 -18
@@ -0,0 +1,363 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "bumpalo"
7
+ version = "3.19.0"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
10
+
11
+ [[package]]
12
+ name = "cc"
13
+ version = "1.2.47"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07"
16
+ dependencies = [
17
+ "find-msvc-tools",
18
+ "shlex",
19
+ ]
20
+
21
+ [[package]]
22
+ name = "cfg-if"
23
+ version = "1.0.4"
24
+ source = "registry+https://github.com/rust-lang/crates.io-index"
25
+ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
26
+
27
+ [[package]]
28
+ name = "console_error_panic_hook"
29
+ version = "0.1.7"
30
+ source = "registry+https://github.com/rust-lang/crates.io-index"
31
+ checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
32
+ dependencies = [
33
+ "cfg-if",
34
+ "wasm-bindgen",
35
+ ]
36
+
37
+ [[package]]
38
+ name = "find-msvc-tools"
39
+ version = "0.1.5"
40
+ source = "registry+https://github.com/rust-lang/crates.io-index"
41
+ checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
42
+
43
+ [[package]]
44
+ name = "getrandom"
45
+ version = "0.2.16"
46
+ source = "registry+https://github.com/rust-lang/crates.io-index"
47
+ checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
48
+ dependencies = [
49
+ "cfg-if",
50
+ "js-sys",
51
+ "libc",
52
+ "wasi",
53
+ "wasm-bindgen",
54
+ ]
55
+
56
+ [[package]]
57
+ name = "itoa"
58
+ version = "1.0.15"
59
+ source = "registry+https://github.com/rust-lang/crates.io-index"
60
+ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
61
+
62
+ [[package]]
63
+ name = "js-sys"
64
+ version = "0.3.82"
65
+ source = "registry+https://github.com/rust-lang/crates.io-index"
66
+ checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
67
+ dependencies = [
68
+ "once_cell",
69
+ "wasm-bindgen",
70
+ ]
71
+
72
+ [[package]]
73
+ name = "libc"
74
+ version = "0.2.177"
75
+ source = "registry+https://github.com/rust-lang/crates.io-index"
76
+ checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
77
+
78
+ [[package]]
79
+ name = "memchr"
80
+ version = "2.7.6"
81
+ source = "registry+https://github.com/rust-lang/crates.io-index"
82
+ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
83
+
84
+ [[package]]
85
+ name = "minicov"
86
+ version = "0.3.7"
87
+ source = "registry+https://github.com/rust-lang/crates.io-index"
88
+ checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b"
89
+ dependencies = [
90
+ "cc",
91
+ "walkdir",
92
+ ]
93
+
94
+ [[package]]
95
+ name = "once_cell"
96
+ version = "1.21.3"
97
+ source = "registry+https://github.com/rust-lang/crates.io-index"
98
+ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
99
+
100
+ [[package]]
101
+ name = "proc-macro2"
102
+ version = "1.0.103"
103
+ source = "registry+https://github.com/rust-lang/crates.io-index"
104
+ checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
105
+ dependencies = [
106
+ "unicode-ident",
107
+ ]
108
+
109
+ [[package]]
110
+ name = "quote"
111
+ version = "1.0.42"
112
+ source = "registry+https://github.com/rust-lang/crates.io-index"
113
+ checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
114
+ dependencies = [
115
+ "proc-macro2",
116
+ ]
117
+
118
+ [[package]]
119
+ name = "rustversion"
120
+ version = "1.0.22"
121
+ source = "registry+https://github.com/rust-lang/crates.io-index"
122
+ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
123
+
124
+ [[package]]
125
+ name = "ryu"
126
+ version = "1.0.20"
127
+ source = "registry+https://github.com/rust-lang/crates.io-index"
128
+ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
129
+
130
+ [[package]]
131
+ name = "same-file"
132
+ version = "1.0.6"
133
+ source = "registry+https://github.com/rust-lang/crates.io-index"
134
+ checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
135
+ dependencies = [
136
+ "winapi-util",
137
+ ]
138
+
139
+ [[package]]
140
+ name = "serde"
141
+ version = "1.0.228"
142
+ source = "registry+https://github.com/rust-lang/crates.io-index"
143
+ checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
144
+ dependencies = [
145
+ "serde_core",
146
+ "serde_derive",
147
+ ]
148
+
149
+ [[package]]
150
+ name = "serde-wasm-bindgen"
151
+ version = "0.6.5"
152
+ source = "registry+https://github.com/rust-lang/crates.io-index"
153
+ checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b"
154
+ dependencies = [
155
+ "js-sys",
156
+ "serde",
157
+ "wasm-bindgen",
158
+ ]
159
+
160
+ [[package]]
161
+ name = "serde_core"
162
+ version = "1.0.228"
163
+ source = "registry+https://github.com/rust-lang/crates.io-index"
164
+ checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
165
+ dependencies = [
166
+ "serde_derive",
167
+ ]
168
+
169
+ [[package]]
170
+ name = "serde_derive"
171
+ version = "1.0.228"
172
+ source = "registry+https://github.com/rust-lang/crates.io-index"
173
+ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
174
+ dependencies = [
175
+ "proc-macro2",
176
+ "quote",
177
+ "syn",
178
+ ]
179
+
180
+ [[package]]
181
+ name = "serde_json"
182
+ version = "1.0.145"
183
+ source = "registry+https://github.com/rust-lang/crates.io-index"
184
+ checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
185
+ dependencies = [
186
+ "itoa",
187
+ "memchr",
188
+ "ryu",
189
+ "serde",
190
+ "serde_core",
191
+ ]
192
+
193
+ [[package]]
194
+ name = "shlex"
195
+ version = "1.3.0"
196
+ source = "registry+https://github.com/rust-lang/crates.io-index"
197
+ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
198
+
199
+ [[package]]
200
+ name = "syn"
201
+ version = "2.0.111"
202
+ source = "registry+https://github.com/rust-lang/crates.io-index"
203
+ checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
204
+ dependencies = [
205
+ "proc-macro2",
206
+ "quote",
207
+ "unicode-ident",
208
+ ]
209
+
210
+ [[package]]
211
+ name = "unicode-ident"
212
+ version = "1.0.22"
213
+ source = "registry+https://github.com/rust-lang/crates.io-index"
214
+ checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
215
+
216
+ [[package]]
217
+ name = "unreal-mcp-wasm"
218
+ version = "0.1.0"
219
+ dependencies = [
220
+ "console_error_panic_hook",
221
+ "getrandom",
222
+ "js-sys",
223
+ "serde",
224
+ "serde-wasm-bindgen",
225
+ "serde_json",
226
+ "wasm-bindgen",
227
+ "wasm-bindgen-test",
228
+ "web-sys",
229
+ ]
230
+
231
+ [[package]]
232
+ name = "walkdir"
233
+ version = "2.5.0"
234
+ source = "registry+https://github.com/rust-lang/crates.io-index"
235
+ checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
236
+ dependencies = [
237
+ "same-file",
238
+ "winapi-util",
239
+ ]
240
+
241
+ [[package]]
242
+ name = "wasi"
243
+ version = "0.11.1+wasi-snapshot-preview1"
244
+ source = "registry+https://github.com/rust-lang/crates.io-index"
245
+ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
246
+
247
+ [[package]]
248
+ name = "wasm-bindgen"
249
+ version = "0.2.105"
250
+ source = "registry+https://github.com/rust-lang/crates.io-index"
251
+ checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
252
+ dependencies = [
253
+ "cfg-if",
254
+ "once_cell",
255
+ "rustversion",
256
+ "serde",
257
+ "serde_json",
258
+ "wasm-bindgen-macro",
259
+ "wasm-bindgen-shared",
260
+ ]
261
+
262
+ [[package]]
263
+ name = "wasm-bindgen-futures"
264
+ version = "0.4.55"
265
+ source = "registry+https://github.com/rust-lang/crates.io-index"
266
+ checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
267
+ dependencies = [
268
+ "cfg-if",
269
+ "js-sys",
270
+ "once_cell",
271
+ "wasm-bindgen",
272
+ "web-sys",
273
+ ]
274
+
275
+ [[package]]
276
+ name = "wasm-bindgen-macro"
277
+ version = "0.2.105"
278
+ source = "registry+https://github.com/rust-lang/crates.io-index"
279
+ checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
280
+ dependencies = [
281
+ "quote",
282
+ "wasm-bindgen-macro-support",
283
+ ]
284
+
285
+ [[package]]
286
+ name = "wasm-bindgen-macro-support"
287
+ version = "0.2.105"
288
+ source = "registry+https://github.com/rust-lang/crates.io-index"
289
+ checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
290
+ dependencies = [
291
+ "bumpalo",
292
+ "proc-macro2",
293
+ "quote",
294
+ "syn",
295
+ "wasm-bindgen-shared",
296
+ ]
297
+
298
+ [[package]]
299
+ name = "wasm-bindgen-shared"
300
+ version = "0.2.105"
301
+ source = "registry+https://github.com/rust-lang/crates.io-index"
302
+ checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
303
+ dependencies = [
304
+ "unicode-ident",
305
+ ]
306
+
307
+ [[package]]
308
+ name = "wasm-bindgen-test"
309
+ version = "0.3.55"
310
+ source = "registry+https://github.com/rust-lang/crates.io-index"
311
+ checksum = "bfc379bfb624eb59050b509c13e77b4eb53150c350db69628141abce842f2373"
312
+ dependencies = [
313
+ "js-sys",
314
+ "minicov",
315
+ "wasm-bindgen",
316
+ "wasm-bindgen-futures",
317
+ "wasm-bindgen-test-macro",
318
+ ]
319
+
320
+ [[package]]
321
+ name = "wasm-bindgen-test-macro"
322
+ version = "0.3.55"
323
+ source = "registry+https://github.com/rust-lang/crates.io-index"
324
+ checksum = "085b2df989e1e6f9620c1311df6c996e83fe16f57792b272ce1e024ac16a90f1"
325
+ dependencies = [
326
+ "proc-macro2",
327
+ "quote",
328
+ "syn",
329
+ ]
330
+
331
+ [[package]]
332
+ name = "web-sys"
333
+ version = "0.3.82"
334
+ source = "registry+https://github.com/rust-lang/crates.io-index"
335
+ checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
336
+ dependencies = [
337
+ "js-sys",
338
+ "wasm-bindgen",
339
+ ]
340
+
341
+ [[package]]
342
+ name = "winapi-util"
343
+ version = "0.1.11"
344
+ source = "registry+https://github.com/rust-lang/crates.io-index"
345
+ checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
346
+ dependencies = [
347
+ "windows-sys",
348
+ ]
349
+
350
+ [[package]]
351
+ name = "windows-link"
352
+ version = "0.2.1"
353
+ source = "registry+https://github.com/rust-lang/crates.io-index"
354
+ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
355
+
356
+ [[package]]
357
+ name = "windows-sys"
358
+ version = "0.61.2"
359
+ source = "registry+https://github.com/rust-lang/crates.io-index"
360
+ checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
361
+ dependencies = [
362
+ "windows-link",
363
+ ]
@@ -0,0 +1,42 @@
1
+ [package]
2
+ name = "unreal-mcp-wasm"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ authors = ["Unreal Engine MCP Team"]
6
+ description = "WebAssembly module for performance-critical operations in Unreal Engine MCP Server"
7
+ license = "MIT"
8
+ repository = "https://github.com/ChiR24/unreal-engine-mcp-server"
9
+
10
+ [lib]
11
+ crate-type = ["cdylib"]
12
+
13
+ [dependencies]
14
+ wasm-bindgen = { version = "0.2", features = ["serde-serialize"] }
15
+ serde = { version = "1.0", features = ["derive"] }
16
+ serde_json = "1.0"
17
+ js-sys = "0.3"
18
+ getrandom = { version = "0.2", features = ["js"] }
19
+ console_error_panic_hook = "0.1"
20
+ serde-wasm-bindgen = "0.6"
21
+
22
+ [dependencies.web-sys]
23
+ version = "0.3"
24
+ features = [
25
+ "console",
26
+ "Performance",
27
+ "Window",
28
+ "Document"
29
+ ]
30
+
31
+ [dev-dependencies]
32
+ wasm-bindgen-test = "0.3"
33
+
34
+ [profile.release]
35
+ opt-level = 3
36
+ lto = true
37
+ codegen-units = 1
38
+ panic = "abort"
39
+ strip = true
40
+
41
+ [package.metadata.wasm-pack.profile.release]
42
+ wasm-opt = false
package/wasm/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Unreal Engine MCP Server Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/wasm/README.md ADDED
@@ -0,0 +1,253 @@
1
+ # Unreal MCP WASM Module
2
+
3
+ WebAssembly module providing high-performance operations for the Unreal Engine MCP Server.
4
+
5
+ ## Features
6
+
7
+ - **Property Parser**: Efficient JSON property parsing and serialization
8
+ - **Transform Math**: Optimized 3D vector and matrix operations
9
+ - **Dependency Resolver**: Asset dependency graph traversal and analysis
10
+ - **Utils**: Common mathematical utilities
11
+
12
+ ## Prerequisites
13
+
14
+ - Rust (latest stable)
15
+ - wasm-pack
16
+ - Node.js (for integration testing)
17
+
18
+ ## Build Instructions
19
+
20
+ ### Install wasm-pack
21
+
22
+ ```bash
23
+ curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
24
+ ```
25
+
26
+ ### Build for Release
27
+
28
+ ```bash
29
+ wasm-pack build --release --target web
30
+ ```
31
+
32
+ This creates a `pkg/` directory with:
33
+ - `unreal_mcp_wasm.js` - JavaScript bindings
34
+ - `unreal_mcp_wasm_bg.wasm` - Compiled WebAssembly binary
35
+ - `unreal_mcp_wasm.d.ts` - TypeScript definitions
36
+
37
+ ### Build for Development
38
+
39
+ ```bash
40
+ wasm-pack build --dev --target web --watch
41
+ ```
42
+
43
+ The `--watch` flag enables hot reloading during development.
44
+
45
+ ### Testing
46
+
47
+ ```bash
48
+ # Run Rust tests
49
+ cargo test
50
+
51
+ # Run integration tests
52
+ wasm-pack test --headless --firefox
53
+ ```
54
+
55
+ ## Usage
56
+
57
+ ### In TypeScript
58
+
59
+ ```typescript
60
+ import init, {
61
+ PropertyParser,
62
+ TransformCalculator,
63
+ Vector
64
+ } from './pkg/unreal_mcp_wasm.js';
65
+
66
+ async function main() {
67
+ await init();
68
+
69
+ // Property parsing
70
+ const parser = new PropertyParser();
71
+ const json = '{"name": "Test", "value": 42}';
72
+ const result = parser.parse_properties(json);
73
+ console.log(result);
74
+
75
+ // Vector math
76
+ const v1 = new Vector(1, 2, 3);
77
+ const v2 = new Vector(4, 5, 6);
78
+ const sum = v1.add(v2);
79
+ console.log(sum); // { x: 5, y: 7, z: 9 }
80
+
81
+ // Transform calculations
82
+ const calculator = new TransformCalculator();
83
+ const location = [100, 200, 300];
84
+ const rotation = [0, 90, 0];
85
+ const scale = [1, 1, 1];
86
+ const matrix = calculator.compose_transform(location, rotation, scale);
87
+ console.log(matrix);
88
+ }
89
+
90
+ main();
91
+ ```
92
+
93
+ ## API Reference
94
+
95
+ ### PropertyParser
96
+
97
+ ```typescript
98
+ new PropertyParser(maxDepth?: number)
99
+ parse_properties(jsonStr: string, maxDepth?: number): Promise<ParseResult>
100
+ serialize_properties(properties: JsValue): Promise<string>
101
+ extract_property_names(jsonStr: string): Promise<string[]>
102
+ get_property_type(jsonStr: string): string
103
+ ```
104
+
105
+ ### TransformCalculator
106
+
107
+ ```typescript
108
+ new TransformCalculator()
109
+ compose_transform(location: [number, number, number], rotation: [number, number, number], scale: [number, number, number]): number[]
110
+ decompose_matrix(matrix: number[]): number[]
111
+ apply_transform(point: number[], transform: number[]): number[]
112
+ ```
113
+
114
+ ### Vector
115
+
116
+ ```typescript
117
+ new Vector(x: number, y: number, z: number)
118
+ add(other: Vector): Vector
119
+ subtract(other: Vector): Vector
120
+ multiply(other: Vector): Vector
121
+ scale(scalar: number): Vector
122
+ dot(other: Vector): number
123
+ cross(other: Vector): Vector
124
+ length(): number
125
+ normalize(): Vector
126
+ distance_to(other: Vector): number
127
+ lerp(other: Vector, t: number): Vector
128
+ to_array(): number[]
129
+ ```
130
+
131
+ ### DependencyResolver
132
+
133
+ ```typescript
134
+ new DependencyResolver(maxDepth?: number)
135
+ analyze_dependencies(assetPath: string, dependenciesJson: string, maxDepth?: number): Promise<DependencyAnalysis>
136
+ find_dependents(assetPath: string, dependenciesJson: string): string[]
137
+ calculate_depth(assetPath: string, dependenciesJson: string, maxDepth?: number): number
138
+ find_circular_dependencies(dependenciesJson: string, maxDepth?: number): string[][]
139
+ topological_sort(dependenciesJson: string): string[]
140
+ ```
141
+
142
+ ### Utils
143
+
144
+ ```typescript
145
+ now(): number
146
+ random(): number
147
+ clamp(value: number, min: number, max: number): number
148
+ lerp(a: number, b: number, t: number): number
149
+ deg_to_rad(degrees: number): number
150
+ rad_to_deg(radians: number): number
151
+ ```
152
+
153
+ ### Metrics
154
+
155
+ ```typescript
156
+ new Metrics()
157
+ record(name: string, durationMs: number): void
158
+ average_for(name: string): number
159
+ count(): number
160
+ clear(): void
161
+ ```
162
+
163
+ ## Performance
164
+
165
+ ### Benchmarks (Approximate)
166
+
167
+ | Operation | WASM | TypeScript | Speedup |
168
+ |-----------|------|------------|---------|
169
+ | Parse 1000 properties | 20-40ms | 150-300ms | **5-8x** |
170
+ | Vector operations (1000) | 1-2ms | 5-10ms | **5x** |
171
+ | Transform composition | 0.5ms | 5ms | **10x** |
172
+ | Dependency analysis | 10-20ms | 50-100ms | **5x** |
173
+
174
+ ## Limitations
175
+
176
+ 1. Requires WebAssembly support (all modern browsers)
177
+ 2. Limited to f32 for floating-point operations (performance optimization)
178
+ 3. Maximum recursion depth defaults to 100 (configurable)
179
+
180
+ ## Troubleshooting
181
+
182
+ ### Build Errors
183
+
184
+ **Error: `wasm-pack` not found**
185
+ ```bash
186
+ curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
187
+ ```
188
+
189
+ **Error: `cargo` not found**
190
+ Install Rust from https://rustup.rs/
191
+
192
+ ### Runtime Errors
193
+
194
+ **Error: "WebAssembly module not initialized"**
195
+ ```typescript
196
+ await init(); // Must be called before using WASM functions
197
+ ```
198
+
199
+ **Error: "Maximum nesting depth exceeded"**
200
+ ```typescript
201
+ const parser = new PropertyParser(200); // Increase max depth
202
+ ```
203
+
204
+ ## Development
205
+
206
+ ### Project Structure
207
+
208
+ ```
209
+ wasm/
210
+ ├── src/
211
+ │ ├── lib.rs # Entry point
212
+ │ ├── property_parser.rs # Property parsing
213
+ │ ├── transform_math.rs # Vector/matrix math
214
+ │ └── dependency_resolver.rs # Dependency graphs
215
+ ├── tests/
216
+ │ └── integration.rs # Integration tests
217
+ ├── Cargo.toml # Rust configuration
218
+ └── README.md # This file
219
+ ```
220
+
221
+ ### Adding New Functions
222
+
223
+ 1. Add function to appropriate module
224
+ 2. Mark with `#[wasm_bindgen]`
225
+ 3. Build with `wasm-pack build --dev`
226
+ 4. Run tests with `cargo test`
227
+
228
+ ### Code Style
229
+
230
+ - Use `f32` for floating-point numbers
231
+ - Prefer simple types over complex generics
232
+ - Add documentation comments
233
+ - Include tests for new functionality
234
+
235
+ ## License
236
+
237
+ MIT
238
+
239
+ ## Contributing
240
+
241
+ 1. Fork the repository
242
+ 2. Create a feature branch
243
+ 3. Make your changes
244
+ 4. Add tests
245
+ 5. Run `cargo test`
246
+ 6. Submit a pull request
247
+
248
+ ## See Also
249
+
250
+ - [WebAssembly.org](https://webassembly.org/)
251
+ - [wasm-bindgen](https://rustwasm.github.io/wasm-bindgen/)
252
+ - [wasm-pack](https://rustwasm.github.io/wasm-pack/)
253
+ - [serde](https://serde.rs/)