unreal-engine-mcp-server 0.4.7 → 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 (454) 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-config.yml +51 -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 +27 -0
  19. package/.github/workflows/labeler.yml +17 -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 +13 -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 +338 -31
  29. package/CONTRIBUTING.md +140 -0
  30. package/GEMINI.md +115 -0
  31. package/Public/Plugin_setup_guide.mp4 +0 -0
  32. package/README.md +189 -128
  33. package/claude_desktop_config_example.json +7 -6
  34. package/dist/automation/bridge.d.ts +50 -0
  35. package/dist/automation/bridge.js +452 -0
  36. package/dist/automation/connection-manager.d.ts +23 -0
  37. package/dist/automation/connection-manager.js +107 -0
  38. package/dist/automation/handshake.d.ts +11 -0
  39. package/dist/automation/handshake.js +89 -0
  40. package/dist/automation/index.d.ts +3 -0
  41. package/dist/automation/index.js +3 -0
  42. package/dist/automation/message-handler.d.ts +12 -0
  43. package/dist/automation/message-handler.js +149 -0
  44. package/dist/automation/request-tracker.d.ts +25 -0
  45. package/dist/automation/request-tracker.js +98 -0
  46. package/dist/automation/types.d.ts +130 -0
  47. package/dist/automation/types.js +2 -0
  48. package/dist/cli.js +32 -5
  49. package/dist/config.d.ts +26 -0
  50. package/dist/config.js +59 -0
  51. package/dist/constants.d.ts +16 -0
  52. package/dist/constants.js +16 -0
  53. package/dist/graphql/loaders.d.ts +64 -0
  54. package/dist/graphql/loaders.js +117 -0
  55. package/dist/graphql/resolvers.d.ts +268 -0
  56. package/dist/graphql/resolvers.js +746 -0
  57. package/dist/graphql/schema.d.ts +5 -0
  58. package/dist/graphql/schema.js +437 -0
  59. package/dist/graphql/server.d.ts +26 -0
  60. package/dist/graphql/server.js +117 -0
  61. package/dist/graphql/types.d.ts +9 -0
  62. package/dist/graphql/types.js +2 -0
  63. package/dist/handlers/resource-handlers.d.ts +20 -0
  64. package/dist/handlers/resource-handlers.js +180 -0
  65. package/dist/index.d.ts +33 -18
  66. package/dist/index.js +130 -619
  67. package/dist/resources/actors.d.ts +17 -12
  68. package/dist/resources/actors.js +56 -76
  69. package/dist/resources/assets.d.ts +6 -14
  70. package/dist/resources/assets.js +115 -147
  71. package/dist/resources/levels.d.ts +13 -13
  72. package/dist/resources/levels.js +25 -34
  73. package/dist/server/resource-registry.d.ts +20 -0
  74. package/dist/server/resource-registry.js +37 -0
  75. package/dist/server/tool-registry.d.ts +23 -0
  76. package/dist/server/tool-registry.js +322 -0
  77. package/dist/server-setup.d.ts +20 -0
  78. package/dist/server-setup.js +71 -0
  79. package/dist/services/health-monitor.d.ts +34 -0
  80. package/dist/services/health-monitor.js +105 -0
  81. package/dist/services/metrics-server.d.ts +11 -0
  82. package/dist/services/metrics-server.js +105 -0
  83. package/dist/tools/actors.d.ts +163 -9
  84. package/dist/tools/actors.js +356 -311
  85. package/dist/tools/animation.d.ts +135 -4
  86. package/dist/tools/animation.js +510 -411
  87. package/dist/tools/assets.d.ts +75 -29
  88. package/dist/tools/assets.js +265 -284
  89. package/dist/tools/audio.d.ts +102 -42
  90. package/dist/tools/audio.js +272 -685
  91. package/dist/tools/base-tool.d.ts +17 -0
  92. package/dist/tools/base-tool.js +46 -0
  93. package/dist/tools/behavior-tree.d.ts +94 -0
  94. package/dist/tools/behavior-tree.js +39 -0
  95. package/dist/tools/blueprint.d.ts +208 -126
  96. package/dist/tools/blueprint.js +685 -832
  97. package/dist/tools/consolidated-tool-definitions.d.ts +5462 -1781
  98. package/dist/tools/consolidated-tool-definitions.js +829 -496
  99. package/dist/tools/consolidated-tool-handlers.d.ts +2 -1
  100. package/dist/tools/consolidated-tool-handlers.js +198 -1027
  101. package/dist/tools/debug.d.ts +143 -85
  102. package/dist/tools/debug.js +234 -180
  103. package/dist/tools/dynamic-handler-registry.d.ts +13 -0
  104. package/dist/tools/dynamic-handler-registry.js +23 -0
  105. package/dist/tools/editor.d.ts +30 -83
  106. package/dist/tools/editor.js +247 -244
  107. package/dist/tools/engine.d.ts +10 -4
  108. package/dist/tools/engine.js +13 -5
  109. package/dist/tools/environment.d.ts +30 -0
  110. package/dist/tools/environment.js +267 -0
  111. package/dist/tools/foliage.d.ts +65 -99
  112. package/dist/tools/foliage.js +221 -331
  113. package/dist/tools/handlers/actor-handlers.d.ts +3 -0
  114. package/dist/tools/handlers/actor-handlers.js +227 -0
  115. package/dist/tools/handlers/animation-handlers.d.ts +3 -0
  116. package/dist/tools/handlers/animation-handlers.js +185 -0
  117. package/dist/tools/handlers/argument-helper.d.ts +16 -0
  118. package/dist/tools/handlers/argument-helper.js +80 -0
  119. package/dist/tools/handlers/asset-handlers.d.ts +3 -0
  120. package/dist/tools/handlers/asset-handlers.js +496 -0
  121. package/dist/tools/handlers/audio-handlers.d.ts +3 -0
  122. package/dist/tools/handlers/audio-handlers.js +166 -0
  123. package/dist/tools/handlers/blueprint-handlers.d.ts +4 -0
  124. package/dist/tools/handlers/blueprint-handlers.js +358 -0
  125. package/dist/tools/handlers/common-handlers.d.ts +14 -0
  126. package/dist/tools/handlers/common-handlers.js +56 -0
  127. package/dist/tools/handlers/editor-handlers.d.ts +3 -0
  128. package/dist/tools/handlers/editor-handlers.js +119 -0
  129. package/dist/tools/handlers/effect-handlers.d.ts +3 -0
  130. package/dist/tools/handlers/effect-handlers.js +171 -0
  131. package/dist/tools/handlers/environment-handlers.d.ts +3 -0
  132. package/dist/tools/handlers/environment-handlers.js +170 -0
  133. package/dist/tools/handlers/graph-handlers.d.ts +3 -0
  134. package/dist/tools/handlers/graph-handlers.js +90 -0
  135. package/dist/tools/handlers/input-handlers.d.ts +3 -0
  136. package/dist/tools/handlers/input-handlers.js +21 -0
  137. package/dist/tools/handlers/inspect-handlers.d.ts +3 -0
  138. package/dist/tools/handlers/inspect-handlers.js +383 -0
  139. package/dist/tools/handlers/level-handlers.d.ts +3 -0
  140. package/dist/tools/handlers/level-handlers.js +237 -0
  141. package/dist/tools/handlers/lighting-handlers.d.ts +3 -0
  142. package/dist/tools/handlers/lighting-handlers.js +144 -0
  143. package/dist/tools/handlers/performance-handlers.d.ts +3 -0
  144. package/dist/tools/handlers/performance-handlers.js +130 -0
  145. package/dist/tools/handlers/pipeline-handlers.d.ts +3 -0
  146. package/dist/tools/handlers/pipeline-handlers.js +110 -0
  147. package/dist/tools/handlers/sequence-handlers.d.ts +3 -0
  148. package/dist/tools/handlers/sequence-handlers.js +376 -0
  149. package/dist/tools/handlers/system-handlers.d.ts +4 -0
  150. package/dist/tools/handlers/system-handlers.js +506 -0
  151. package/dist/tools/input.d.ts +19 -0
  152. package/dist/tools/input.js +89 -0
  153. package/dist/tools/introspection.d.ts +103 -40
  154. package/dist/tools/introspection.js +425 -568
  155. package/dist/tools/landscape.d.ts +54 -93
  156. package/dist/tools/landscape.js +284 -409
  157. package/dist/tools/level.d.ts +66 -27
  158. package/dist/tools/level.js +647 -675
  159. package/dist/tools/lighting.d.ts +77 -38
  160. package/dist/tools/lighting.js +445 -943
  161. package/dist/tools/logs.d.ts +3 -3
  162. package/dist/tools/logs.js +5 -57
  163. package/dist/tools/materials.d.ts +91 -24
  164. package/dist/tools/materials.js +194 -118
  165. package/dist/tools/niagara.d.ts +149 -39
  166. package/dist/tools/niagara.js +267 -182
  167. package/dist/tools/performance.d.ts +27 -13
  168. package/dist/tools/performance.js +203 -122
  169. package/dist/tools/physics.d.ts +32 -77
  170. package/dist/tools/physics.js +175 -582
  171. package/dist/tools/property-dictionary.d.ts +13 -0
  172. package/dist/tools/property-dictionary.js +82 -0
  173. package/dist/tools/sequence.d.ts +85 -60
  174. package/dist/tools/sequence.js +208 -747
  175. package/dist/tools/tool-definition-utils.d.ts +59 -0
  176. package/dist/tools/tool-definition-utils.js +35 -0
  177. package/dist/tools/ui.d.ts +64 -34
  178. package/dist/tools/ui.js +134 -214
  179. package/dist/types/automation-responses.d.ts +115 -0
  180. package/dist/types/automation-responses.js +2 -0
  181. package/dist/types/env.d.ts +0 -3
  182. package/dist/types/env.js +0 -7
  183. package/dist/types/responses.d.ts +249 -0
  184. package/dist/types/responses.js +2 -0
  185. package/dist/types/tool-interfaces.d.ts +898 -0
  186. package/dist/types/tool-interfaces.js +2 -0
  187. package/dist/types/tool-types.d.ts +183 -19
  188. package/dist/types/tool-types.js +0 -4
  189. package/dist/unreal-bridge.d.ts +24 -131
  190. package/dist/unreal-bridge.js +364 -1506
  191. package/dist/utils/command-validator.d.ts +9 -0
  192. package/dist/utils/command-validator.js +68 -0
  193. package/dist/utils/elicitation.d.ts +1 -1
  194. package/dist/utils/elicitation.js +12 -15
  195. package/dist/utils/error-handler.d.ts +2 -51
  196. package/dist/utils/error-handler.js +11 -87
  197. package/dist/utils/ini-reader.d.ts +3 -0
  198. package/dist/utils/ini-reader.js +69 -0
  199. package/dist/utils/logger.js +9 -6
  200. package/dist/utils/normalize.d.ts +3 -0
  201. package/dist/utils/normalize.js +56 -0
  202. package/dist/utils/path-security.d.ts +2 -0
  203. package/dist/utils/path-security.js +24 -0
  204. package/dist/utils/response-factory.d.ts +7 -0
  205. package/dist/utils/response-factory.js +27 -0
  206. package/dist/utils/response-validator.d.ts +3 -24
  207. package/dist/utils/response-validator.js +130 -81
  208. package/dist/utils/result-helpers.d.ts +4 -5
  209. package/dist/utils/result-helpers.js +15 -16
  210. package/dist/utils/safe-json.js +5 -11
  211. package/dist/utils/unreal-command-queue.d.ts +24 -0
  212. package/dist/utils/unreal-command-queue.js +120 -0
  213. package/dist/utils/validation.d.ts +0 -40
  214. package/dist/utils/validation.js +1 -78
  215. package/dist/wasm/index.d.ts +70 -0
  216. package/dist/wasm/index.js +535 -0
  217. package/docs/GraphQL-API.md +888 -0
  218. package/docs/Migration-Guide-v0.5.0.md +684 -0
  219. package/docs/Roadmap.md +53 -0
  220. package/docs/WebAssembly-Integration.md +628 -0
  221. package/docs/editor-plugin-extension.md +370 -0
  222. package/docs/handler-mapping.md +242 -0
  223. package/docs/native-automation-progress.md +128 -0
  224. package/docs/testing-guide.md +423 -0
  225. package/mcp-config-example.json +6 -6
  226. package/package.json +67 -28
  227. package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +8 -0
  228. package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +64 -0
  229. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +189 -0
  230. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +22 -0
  231. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +30 -0
  232. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +1983 -0
  233. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +72 -0
  234. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +46 -0
  235. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +581 -0
  236. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +2394 -0
  237. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +300 -0
  238. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +2807 -0
  239. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +1087 -0
  240. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +488 -0
  241. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +643 -0
  242. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +31 -0
  243. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +1184 -0
  244. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +5652 -0
  245. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +152 -0
  246. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +2614 -0
  247. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +42 -0
  248. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +1237 -0
  249. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +1701 -0
  250. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +2145 -0
  251. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +954 -0
  252. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +209 -0
  253. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +41 -0
  254. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +1164 -0
  255. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +762 -0
  256. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +634 -0
  257. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +136 -0
  258. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +494 -0
  259. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +278 -0
  260. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +625 -0
  261. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +401 -0
  262. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +67 -0
  263. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +735 -0
  264. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +2634 -0
  265. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +189 -0
  266. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +917 -0
  267. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +39 -0
  268. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +2670 -0
  269. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +519 -0
  270. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +38 -0
  271. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +668 -0
  272. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +346 -0
  273. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +1330 -0
  274. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +149 -0
  275. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +783 -0
  276. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +115 -0
  277. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +796 -0
  278. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +117 -0
  279. package/scripts/check-unreal-connection.mjs +19 -0
  280. package/scripts/clean-tmp.js +23 -0
  281. package/scripts/patch-wasm.js +26 -0
  282. package/scripts/run-all-tests.mjs +136 -0
  283. package/scripts/smoke-test.ts +94 -0
  284. package/scripts/sync-mcp-plugin.js +143 -0
  285. package/scripts/test-no-plugin-alternates.mjs +113 -0
  286. package/scripts/validate-server.js +46 -0
  287. package/scripts/verify-automation-bridge.js +200 -0
  288. package/server.json +58 -21
  289. package/src/automation/bridge.ts +558 -0
  290. package/src/automation/connection-manager.ts +130 -0
  291. package/src/automation/handshake.ts +99 -0
  292. package/src/automation/index.ts +2 -0
  293. package/src/automation/message-handler.ts +167 -0
  294. package/src/automation/request-tracker.ts +123 -0
  295. package/src/automation/types.ts +107 -0
  296. package/src/cli.ts +33 -6
  297. package/src/config.ts +73 -0
  298. package/src/constants.ts +19 -0
  299. package/src/graphql/loaders.ts +244 -0
  300. package/src/graphql/resolvers.ts +1008 -0
  301. package/src/graphql/schema.ts +452 -0
  302. package/src/graphql/server.ts +156 -0
  303. package/src/graphql/types.ts +10 -0
  304. package/src/handlers/resource-handlers.ts +186 -0
  305. package/src/index.ts +166 -664
  306. package/src/resources/actors.ts +58 -76
  307. package/src/resources/assets.ts +148 -134
  308. package/src/resources/levels.ts +28 -33
  309. package/src/server/resource-registry.ts +47 -0
  310. package/src/server/tool-registry.ts +354 -0
  311. package/src/server-setup.ts +114 -0
  312. package/src/services/health-monitor.ts +132 -0
  313. package/src/services/metrics-server.ts +142 -0
  314. package/src/tools/actors.ts +426 -323
  315. package/src/tools/animation.ts +672 -461
  316. package/src/tools/assets.ts +364 -289
  317. package/src/tools/audio.ts +323 -766
  318. package/src/tools/base-tool.ts +52 -0
  319. package/src/tools/behavior-tree.ts +45 -0
  320. package/src/tools/blueprint.ts +792 -970
  321. package/src/tools/consolidated-tool-definitions.ts +993 -515
  322. package/src/tools/consolidated-tool-handlers.ts +258 -1146
  323. package/src/tools/debug.ts +292 -187
  324. package/src/tools/dynamic-handler-registry.ts +33 -0
  325. package/src/tools/editor.ts +329 -253
  326. package/src/tools/engine.ts +14 -3
  327. package/src/tools/environment.ts +281 -0
  328. package/src/tools/foliage.ts +330 -392
  329. package/src/tools/handlers/actor-handlers.ts +265 -0
  330. package/src/tools/handlers/animation-handlers.ts +237 -0
  331. package/src/tools/handlers/argument-helper.ts +142 -0
  332. package/src/tools/handlers/asset-handlers.ts +532 -0
  333. package/src/tools/handlers/audio-handlers.ts +194 -0
  334. package/src/tools/handlers/blueprint-handlers.ts +380 -0
  335. package/src/tools/handlers/common-handlers.ts +87 -0
  336. package/src/tools/handlers/editor-handlers.ts +123 -0
  337. package/src/tools/handlers/effect-handlers.ts +220 -0
  338. package/src/tools/handlers/environment-handlers.ts +183 -0
  339. package/src/tools/handlers/graph-handlers.ts +116 -0
  340. package/src/tools/handlers/input-handlers.ts +28 -0
  341. package/src/tools/handlers/inspect-handlers.ts +450 -0
  342. package/src/tools/handlers/level-handlers.ts +252 -0
  343. package/src/tools/handlers/lighting-handlers.ts +147 -0
  344. package/src/tools/handlers/performance-handlers.ts +132 -0
  345. package/src/tools/handlers/pipeline-handlers.ts +127 -0
  346. package/src/tools/handlers/sequence-handlers.ts +415 -0
  347. package/src/tools/handlers/system-handlers.ts +564 -0
  348. package/src/tools/input.ts +101 -0
  349. package/src/tools/introspection.ts +493 -584
  350. package/src/tools/landscape.ts +418 -507
  351. package/src/tools/level.ts +786 -708
  352. package/src/tools/lighting.ts +588 -984
  353. package/src/tools/logs.ts +9 -57
  354. package/src/tools/materials.ts +237 -121
  355. package/src/tools/niagara.ts +335 -168
  356. package/src/tools/performance.ts +320 -169
  357. package/src/tools/physics.ts +274 -613
  358. package/src/tools/property-dictionary.ts +98 -0
  359. package/src/tools/sequence.ts +276 -820
  360. package/src/tools/tool-definition-utils.ts +35 -0
  361. package/src/tools/ui.ts +205 -283
  362. package/src/types/automation-responses.ts +119 -0
  363. package/src/types/env.ts +0 -10
  364. package/src/types/responses.ts +355 -0
  365. package/src/types/tool-interfaces.ts +250 -0
  366. package/src/types/tool-types.ts +243 -21
  367. package/src/unreal-bridge.ts +460 -1550
  368. package/src/utils/command-validator.ts +76 -0
  369. package/src/utils/elicitation.ts +10 -7
  370. package/src/utils/error-handler.ts +14 -90
  371. package/src/utils/ini-reader.ts +86 -0
  372. package/src/utils/logger.ts +8 -3
  373. package/src/utils/normalize.test.ts +162 -0
  374. package/src/utils/normalize.ts +60 -0
  375. package/src/utils/path-security.ts +43 -0
  376. package/src/utils/response-factory.ts +44 -0
  377. package/src/utils/response-validator.ts +176 -56
  378. package/src/utils/result-helpers.ts +21 -19
  379. package/src/utils/safe-json.test.ts +90 -0
  380. package/src/utils/safe-json.ts +14 -11
  381. package/src/utils/unreal-command-queue.ts +152 -0
  382. package/src/utils/validation.test.ts +184 -0
  383. package/src/utils/validation.ts +4 -1
  384. package/src/wasm/index.ts +838 -0
  385. package/test-server.mjs +100 -0
  386. package/tests/run-unreal-tool-tests.mjs +242 -14
  387. package/tests/test-animation.mjs +369 -0
  388. package/tests/test-asset-advanced.mjs +82 -0
  389. package/tests/test-asset-errors.mjs +35 -0
  390. package/tests/test-asset-graph.mjs +311 -0
  391. package/tests/test-audio.mjs +417 -0
  392. package/tests/test-automation-timeouts.mjs +98 -0
  393. package/tests/test-behavior-tree.mjs +444 -0
  394. package/tests/test-blueprint-graph.mjs +410 -0
  395. package/tests/test-blueprint.mjs +577 -0
  396. package/tests/test-client-mode.mjs +86 -0
  397. package/tests/test-console-command.mjs +56 -0
  398. package/tests/test-control-actor.mjs +425 -0
  399. package/tests/test-control-editor.mjs +112 -0
  400. package/tests/test-graphql.mjs +372 -0
  401. package/tests/test-input.mjs +349 -0
  402. package/tests/test-inspect.mjs +302 -0
  403. package/tests/test-landscape.mjs +316 -0
  404. package/tests/test-lighting.mjs +428 -0
  405. package/tests/test-manage-asset.mjs +438 -0
  406. package/tests/test-manage-level.mjs +89 -0
  407. package/tests/test-materials.mjs +356 -0
  408. package/tests/test-niagara.mjs +185 -0
  409. package/tests/test-no-inline-python.mjs +122 -0
  410. package/tests/test-performance.mjs +539 -0
  411. package/tests/test-plugin-handshake.mjs +82 -0
  412. package/tests/test-runner.mjs +933 -0
  413. package/tests/test-sequence.mjs +104 -0
  414. package/tests/test-system.mjs +96 -0
  415. package/tests/test-wasm.mjs +283 -0
  416. package/tests/test-world-partition.mjs +215 -0
  417. package/tsconfig.json +3 -3
  418. package/vitest.config.ts +35 -0
  419. package/wasm/Cargo.lock +363 -0
  420. package/wasm/Cargo.toml +42 -0
  421. package/wasm/LICENSE +21 -0
  422. package/wasm/README.md +253 -0
  423. package/wasm/src/dependency_resolver.rs +377 -0
  424. package/wasm/src/lib.rs +153 -0
  425. package/wasm/src/property_parser.rs +271 -0
  426. package/wasm/src/transform_math.rs +396 -0
  427. package/wasm/tests/integration.rs +109 -0
  428. package/.github/workflows/smithery-build.yml +0 -29
  429. package/dist/prompts/index.d.ts +0 -21
  430. package/dist/prompts/index.js +0 -217
  431. package/dist/tools/build_environment_advanced.d.ts +0 -65
  432. package/dist/tools/build_environment_advanced.js +0 -633
  433. package/dist/tools/rc.d.ts +0 -110
  434. package/dist/tools/rc.js +0 -437
  435. package/dist/tools/visual.d.ts +0 -40
  436. package/dist/tools/visual.js +0 -282
  437. package/dist/utils/http.d.ts +0 -6
  438. package/dist/utils/http.js +0 -151
  439. package/dist/utils/python-output.d.ts +0 -18
  440. package/dist/utils/python-output.js +0 -290
  441. package/dist/utils/python.d.ts +0 -2
  442. package/dist/utils/python.js +0 -4
  443. package/dist/utils/stdio-redirect.d.ts +0 -2
  444. package/dist/utils/stdio-redirect.js +0 -20
  445. package/docs/unreal-tool-test-cases.md +0 -574
  446. package/smithery.yaml +0 -29
  447. package/src/prompts/index.ts +0 -249
  448. package/src/tools/build_environment_advanced.ts +0 -732
  449. package/src/tools/rc.ts +0 -515
  450. package/src/tools/visual.ts +0 -281
  451. package/src/utils/http.ts +0 -187
  452. package/src/utils/python-output.ts +0 -351
  453. package/src/utils/python.ts +0 -3
  454. package/src/utils/stdio-redirect.ts +0 -18
@@ -0,0 +1,888 @@
1
+ # GraphQL API Documentation
2
+
3
+ ## Overview
4
+
5
+ The Unreal Engine MCP Server now includes a GraphQL API that provides a flexible, efficient alternative to the standard MCP tools for complex queries. The GraphQL API allows you to:
6
+
7
+ - Query multiple related objects in a single request
8
+ - Specify exactly what data you need (no over-fetching)
9
+ - Use nested queries to traverse object relationships
10
+ - Perform mutations (create, update, delete) through mutations
11
+ - Leverage GraphQL's strong typing and introspection
12
+
13
+ ## GraphQL Server Configuration
14
+
15
+ ### Environment Variables
16
+
17
+ ```bash
18
+ # Enable/disable GraphQL server
19
+ GRAPHQL_ENABLED=true
20
+
21
+ # Server host and port
22
+ GRAPHQL_HOST=127.0.0.1
23
+ GRAPHQL_PORT=4000
24
+
25
+ # GraphQL endpoint path
26
+ GRAPHQL_PATH=/graphql
27
+
28
+ # CORS settings
29
+ GRAPHQL_CORS_ORIGIN=*
30
+ GRAPHQL_CORS_CREDENTIALS=false
31
+ ```
32
+
33
+ ### Accessing the GraphQL API
34
+
35
+ The GraphQL server runs on a separate port from the MCP server:
36
+
37
+ - **URL**: `http://127.0.0.1:4000/graphql`
38
+ - **Default Port**: 4000 (configurable via `GRAPHQL_PORT`)
39
+ - **Default Host**: 127.0.0.1 (configurable via `GRAPHQL_HOST`)
40
+
41
+ ## GraphQL Schema
42
+
43
+ ### Custom Scalars
44
+
45
+ - **Vector**: 3D vector with `x`, `y`, `z` fields (Float)
46
+ - **Rotator**: Rotation with `pitch`, `yaw`, `roll` fields (Float, degrees)
47
+ - **Transform**: Combined transform with `location`, `rotation`, `scale` (Vector/Rotator/Vector)
48
+ - **JSON**: Arbitrary JSON data
49
+
50
+ ### Core Types
51
+
52
+ #### Asset
53
+ ```graphql
54
+ type Asset {
55
+ name: String!
56
+ path: String!
57
+ class: String!
58
+ packagePath: String!
59
+ size: Float
60
+ dependencies: [Asset!]!
61
+ dependents: [Asset!]!
62
+ metadata: JSON
63
+ tags: [String!]!
64
+ }
65
+ ```
66
+
67
+ #### Actor
68
+ ```graphql
69
+ type Actor {
70
+ name: String!
71
+ class: String!
72
+ location: Vector
73
+ rotation: Rotator
74
+ scale: Vector
75
+ components: [Component!]!
76
+ tags: [String!]!
77
+ properties: JSON
78
+ }
79
+ ```
80
+
81
+ #### Blueprint
82
+ ```graphql
83
+ type Blueprint {
84
+ name: String!
85
+ path: String!
86
+ parentClass: String
87
+ variables: [Variable!]!
88
+ functions: [Function!]!
89
+ events: [Event!]!
90
+ components: [Component!]!
91
+ scsHierarchy: JSON
92
+ }
93
+ ```
94
+
95
+ ## Query Examples
96
+
97
+ ### 1. List All Assets
98
+
99
+ ```graphql
100
+ query {
101
+ assets {
102
+ edges {
103
+ node {
104
+ name
105
+ path
106
+ class
107
+ packagePath
108
+ }
109
+ cursor
110
+ }
111
+ pageInfo {
112
+ hasNextPage
113
+ hasPreviousPage
114
+ }
115
+ totalCount
116
+ }
117
+ }
118
+ ```
119
+
120
+ ### 2. Filter Assets by Class
121
+
122
+ ```graphql
123
+ query {
124
+ assets(filter: { class: "Material" }) {
125
+ edges {
126
+ node {
127
+ name
128
+ path
129
+ class
130
+ tags
131
+ }
132
+ }
133
+ totalCount
134
+ }
135
+ }
136
+ ```
137
+
138
+ ### 3. Get Asset with Dependencies
139
+
140
+ ```graphql
141
+ query {
142
+ asset(path: "/Game/Materials/M_Master") {
143
+ name
144
+ path
145
+ class
146
+ dependencies {
147
+ name
148
+ path
149
+ }
150
+ dependents {
151
+ name
152
+ path
153
+ }
154
+ metadata
155
+ tags
156
+ }
157
+ }
158
+ ```
159
+
160
+ ### 4. Paginated Asset Query
161
+
162
+ ```graphql
163
+ query {
164
+ assets(pagination: { offset: 0, limit: 10 }) {
165
+ edges {
166
+ node {
167
+ name
168
+ path
169
+ class
170
+ }
171
+ cursor
172
+ }
173
+ pageInfo {
174
+ hasNextPage
175
+ hasPreviousPage
176
+ startCursor
177
+ endCursor
178
+ }
179
+ totalCount
180
+ }
181
+ }
182
+ ```
183
+
184
+ ### 5. List All Actors
185
+
186
+ ```graphql
187
+ query {
188
+ actors {
189
+ edges {
190
+ node {
191
+ name
192
+ class
193
+ location {
194
+ x
195
+ y
196
+ z
197
+ }
198
+ rotation {
199
+ pitch
200
+ yaw
201
+ roll
202
+ }
203
+ tags
204
+ }
205
+ }
206
+ totalCount
207
+ }
208
+ }
209
+ ```
210
+
211
+ ### 6. Get Actor with Properties and Components
212
+
213
+ ```graphql
214
+ query {
215
+ actor(name: "SpotLight_Main") {
216
+ name
217
+ class
218
+ location {
219
+ x
220
+ y
221
+ z
222
+ }
223
+ rotation {
224
+ pitch
225
+ yaw
226
+ roll
227
+ }
228
+ tags
229
+ properties
230
+ components {
231
+ name
232
+ type
233
+ properties
234
+ }
235
+ }
236
+ }
237
+ ```
238
+
239
+ ### 7. Filter Actors by Tag
240
+
241
+ ```graphql
242
+ query {
243
+ actors(filter: { tag: "Enemy" }) {
244
+ edges {
245
+ node {
246
+ name
247
+ class
248
+ tags
249
+ }
250
+ }
251
+ totalCount
252
+ }
253
+ }
254
+ ```
255
+
256
+ ### 8. Get Blueprint Details
257
+
258
+ ```graphql
259
+ query {
260
+ blueprint(path: "/Game/Blueprints/BP_PlayerCharacter") {
261
+ name
262
+ path
263
+ parentClass
264
+ variables {
265
+ name
266
+ type
267
+ defaultValue
268
+ metadata
269
+ }
270
+ functions {
271
+ name
272
+ inputs {
273
+ name
274
+ type
275
+ }
276
+ outputs {
277
+ name
278
+ type
279
+ }
280
+ }
281
+ events {
282
+ name
283
+ type
284
+ }
285
+ components {
286
+ name
287
+ type
288
+ }
289
+ scsHierarchy
290
+ }
291
+ }
292
+ ```
293
+
294
+ ### 9. List All Blueprints
295
+
296
+ ```graphql
297
+ query {
298
+ blueprints {
299
+ edges {
300
+ node {
301
+ name
302
+ path
303
+ parentClass
304
+ variables {
305
+ name
306
+ type
307
+ }
308
+ functions {
309
+ name
310
+ }
311
+ }
312
+ }
313
+ totalCount
314
+ }
315
+ }
316
+ ```
317
+
318
+ ### 10. Filter Blueprints by Parent Class
319
+
320
+ ```graphql
321
+ query {
322
+ blueprints(filter: { parentClass: "Actor" }) {
323
+ edges {
324
+ node {
325
+ name
326
+ path
327
+ parentClass
328
+ }
329
+ }
330
+ totalCount
331
+ }
332
+ }
333
+ ```
334
+
335
+ ### 11. Get Current Level Information
336
+
337
+ ```graphql
338
+ query {
339
+ currentLevel {
340
+ name
341
+ path
342
+ loaded
343
+ lightingQuality
344
+ actors {
345
+ name
346
+ class
347
+ }
348
+ streamingLevels
349
+ }
350
+ }
351
+ ```
352
+
353
+ ### 12. List All Levels
354
+
355
+ ```graphql
356
+ query {
357
+ levels {
358
+ name
359
+ path
360
+ loaded
361
+ actorCount
362
+ }
363
+ }
364
+ ```
365
+
366
+ ### 13. Search Across All Types
367
+
368
+ ```graphql
369
+ query {
370
+ search(query: "Player", type: ALL) {
371
+ ... on Asset {
372
+ name
373
+ path
374
+ __typename
375
+ }
376
+ ... on Actor {
377
+ name
378
+ class
379
+ __typename
380
+ }
381
+ ... on Blueprint {
382
+ name
383
+ path
384
+ __typename
385
+ }
386
+ }
387
+ }
388
+ ```
389
+
390
+ ### 14. Search for Assets Only
391
+
392
+ ```graphql
393
+ query {
394
+ search(query: "Material", type: ASSETS) {
395
+ ... on Asset {
396
+ name
397
+ path
398
+ class
399
+ }
400
+ }
401
+ }
402
+ ```
403
+
404
+ ## Mutation Examples
405
+
406
+ ### 1. Duplicate an Asset
407
+
408
+ ```graphql
409
+ mutation {
410
+ duplicateAsset(path: "/Game/Materials/M_Master", newName: "M_Master_Copy") {
411
+ name
412
+ path
413
+ class
414
+ }
415
+ }
416
+ ```
417
+
418
+ ### 2. Move an Asset
419
+
420
+ ```graphql
421
+ mutation {
422
+ moveAsset(path: "/Game/Materials/M_Master", newPath: "/Game/Archived/Materials/M_Master") {
423
+ name
424
+ path
425
+ }
426
+ }
427
+ ```
428
+
429
+ ### 3. Delete an Asset
430
+
431
+ ```graphql
432
+ mutation {
433
+ deleteAsset(path: "/Game/Materials/M_Old")
434
+ }
435
+ ```
436
+
437
+ ### 4. Spawn an Actor
438
+
439
+ ```graphql
440
+ mutation {
441
+ spawnActor(input: {
442
+ classPath: "StaticMeshActor"
443
+ name: "Cube_001"
444
+ transform: {
445
+ location: { x: 0, y: 0, z: 100 }
446
+ rotation: { pitch: 0, yaw: 0, roll: 0 }
447
+ scale: { x: 1, y: 1, z: 1 }
448
+ }
449
+ tags: ["Spawned"]
450
+ }) {
451
+ name
452
+ class
453
+ location {
454
+ x
455
+ y
456
+ z
457
+ }
458
+ tags
459
+ }
460
+ }
461
+ ```
462
+
463
+ ### 5. Delete an Actor
464
+
465
+ ```graphql
466
+ mutation {
467
+ deleteActor(name: "Cube_001")
468
+ }
469
+ ```
470
+
471
+ ### 6. Set Actor Transform
472
+
473
+ ```graphql
474
+ mutation {
475
+ setActorTransform(
476
+ name: "SpotLight_Main"
477
+ transform: {
478
+ location: { x: 500, y: 300, z: 200 }
479
+ rotation: { pitch: 45, yaw: 90, roll: 0 }
480
+ scale: { x: 1, y: 1, z: 1 }
481
+ }
482
+ ) {
483
+ name
484
+ location {
485
+ x
486
+ y
487
+ z
488
+ }
489
+ rotation {
490
+ pitch
491
+ yaw
492
+ roll
493
+ }
494
+ }
495
+ }
496
+ ```
497
+
498
+ ### 7. Create a Blueprint
499
+
500
+ ```graphql
501
+ mutation {
502
+ createBlueprint(input: {
503
+ name: "BP_NewCharacter"
504
+ blueprintType: "Actor"
505
+ savePath: "/Game/Blueprints"
506
+ }) {
507
+ name
508
+ path
509
+ parentClass
510
+ }
511
+ }
512
+ ```
513
+
514
+ ### 8. Add Variable to Blueprint
515
+
516
+ ```graphql
517
+ mutation {
518
+ addVariableToBlueprint(
519
+ path: "/Game/Blueprints/BP_NewCharacter"
520
+ input: {
521
+ variableName: "Health"
522
+ variableType: "Float"
523
+ defaultValue: 100
524
+ }
525
+ ) {
526
+ name
527
+ variables {
528
+ name
529
+ type
530
+ defaultValue
531
+ }
532
+ }
533
+ }
534
+ ```
535
+
536
+ ### 9. Add Function to Blueprint
537
+
538
+ ```graphql
539
+ mutation {
540
+ addFunctionToBlueprint(
541
+ path: "/Game/Blueprints/BP_NewCharacter"
542
+ input: {
543
+ functionName: "TakeDamage"
544
+ inputs: [
545
+ { name: "Damage", type: "Float" }
546
+ { name: "Source", type: "String" }
547
+ ]
548
+ }
549
+ ) {
550
+ name
551
+ functions {
552
+ name
553
+ inputs {
554
+ name
555
+ type
556
+ }
557
+ }
558
+ }
559
+ }
560
+ ```
561
+
562
+ ### 10. Load a Level
563
+
564
+ ```graphql
565
+ mutation {
566
+ loadLevel(path: "/Game/Maps/Level_01") {
567
+ name
568
+ path
569
+ loaded
570
+ actorCount
571
+ }
572
+ }
573
+ ```
574
+
575
+ ### 11. Save Current Level
576
+
577
+ ```graphql
578
+ mutation {
579
+ saveLevel(path: "/Game/Maps/Level_01")
580
+ }
581
+ ```
582
+
583
+ ### 12. Create Material Instance
584
+
585
+ ```graphql
586
+ mutation {
587
+ createMaterialInstance(
588
+ parentPath: "/Game/Materials/M_Master"
589
+ name: "MI_Player"
590
+ parameters: {
591
+ BaseColor: { x: 1, y: 0, z: 0 }
592
+ Metallic: 0.5
593
+ }
594
+ ) {
595
+ name
596
+ path
597
+ class
598
+ }
599
+ }
600
+ ```
601
+
602
+ ## Fragment Examples
603
+
604
+ Fragments allow you to reuse field selections:
605
+
606
+ ```graphql
607
+ fragment AssetInfo on Asset {
608
+ name
609
+ path
610
+ class
611
+ packagePath
612
+ }
613
+
614
+ query {
615
+ assets(filter: { class: "Material" }) {
616
+ edges {
617
+ node {
618
+ ...AssetInfo
619
+ dependencies {
620
+ ...AssetInfo
621
+ }
622
+ }
623
+ }
624
+ }
625
+ }
626
+ ```
627
+
628
+ ## Variable Examples
629
+
630
+ Use variables for dynamic queries:
631
+
632
+ ```graphql
633
+ query GetAsset($path: String!, $withDependencies: Boolean!) {
634
+ asset(path: $path) {
635
+ ...AssetInfo
636
+ dependencies @include(if: $withDependencies) {
637
+ ...AssetInfo
638
+ }
639
+ }
640
+ }
641
+
642
+ fragment AssetInfo on Asset {
643
+ name
644
+ path
645
+ class
646
+ }
647
+ ```
648
+
649
+ With these variables:
650
+ ```json
651
+ {
652
+ "path": "/Game/Materials/M_Master",
653
+ "withDependencies": true
654
+ }
655
+ ```
656
+
657
+ ## Alias Examples
658
+
659
+ Use aliases to rename fields in results:
660
+
661
+ ```graphql
662
+ query {
663
+ materials: assets(filter: { class: "Material" }) {
664
+ edges {
665
+ node {
666
+ materialName: name
667
+ materialPath: path
668
+ class
669
+ }
670
+ }
671
+ }
672
+ }
673
+ ```
674
+
675
+ ## Introspection Query
676
+
677
+ Get the complete schema:
678
+
679
+ ```graphql
680
+ query {
681
+ __schema {
682
+ types {
683
+ name
684
+ kind
685
+ fields {
686
+ name
687
+ type {
688
+ name
689
+ kind
690
+ }
691
+ }
692
+ }
693
+ }
694
+ }
695
+ ```
696
+
697
+ ## Best Practices
698
+
699
+ ### 1. Use Specific Field Selection
700
+ Always specify only the fields you need:
701
+
702
+ ```graphql
703
+ # Good
704
+ query {
705
+ assets {
706
+ edges {
707
+ node {
708
+ name
709
+ path
710
+ }
711
+ }
712
+ }
713
+ }
714
+
715
+ # Bad (over-fetching)
716
+ query {
717
+ assets {
718
+ edges {
719
+ node {
720
+ _ # Get everything
721
+ }
722
+ }
723
+ }
724
+ }
725
+ ```
726
+
727
+ ### 2. Use Fragments for Reuse
728
+ Create fragments for commonly used field sets:
729
+
730
+ ```graphql
731
+ fragment ActorBasicInfo on Actor {
732
+ name
733
+ class
734
+ location {
735
+ x
736
+ y
737
+ z
738
+ }
739
+ }
740
+ ```
741
+
742
+ ### 3. Use Pagination for Large Datasets
743
+ Always use pagination for queries that might return many results:
744
+
745
+ ```graphql
746
+ query {
747
+ assets(pagination: { offset: 0, limit: 50 }) {
748
+ edges {
749
+ node {
750
+ name
751
+ path
752
+ }
753
+ }
754
+ pageInfo {
755
+ hasNextPage
756
+ hasPreviousPage
757
+ }
758
+ }
759
+ }
760
+ ```
761
+
762
+ ### 4. Use Filtering
763
+ Filter results on the server side to reduce data transfer:
764
+
765
+ ```graphql
766
+ query {
767
+ actors(filter: { class: "StaticMeshActor", tag: "Static" }) {
768
+ edges {
769
+ node {
770
+ name
771
+ class
772
+ }
773
+ }
774
+ }
775
+ }
776
+ ```
777
+
778
+ ### 5. Use Mutations for Modifications
779
+ Use mutations instead of queries for operations that modify data:
780
+
781
+ ```graphql
782
+ mutation {
783
+ spawnActor(input: { ... }) {
784
+ name
785
+ location {
786
+ x
787
+ y
788
+ z
789
+ }
790
+ }
791
+ }
792
+ ```
793
+
794
+ ## Limitations
795
+
796
+ 1. **Unreal Connection Required**: GraphQL resolvers require an active connection to Unreal Editor
797
+ 2. **Plugin Support**: Some queries require specific Unreal plugins to be enabled
798
+ 3. **Performance**: Complex nested queries may be slower than focused MCP tool calls
799
+ 4. **Not a Replacement**: GraphQL complements but doesn't replace the MCP tool system
800
+
801
+ ## Troubleshooting
802
+
803
+ ### GraphQL Server Not Starting
804
+
805
+ Check logs for errors:
806
+ ```bash
807
+ # Check if port is already in use
808
+ netstat -an | grep 4000
809
+
810
+ # Verify environment variables
811
+ echo $GRAPHQL_ENABLED
812
+ echo $GRAPHQL_PORT
813
+ ```
814
+
815
+ ### Queries Timing Out
816
+
817
+ Increase timeout in your GraphQL client, or break complex queries into smaller parts.
818
+
819
+ ### Authentication
820
+
821
+ Currently, GraphQL API has no authentication. Access is restricted to localhost by default. For production, consider:
822
+ - Running behind a reverse proxy with authentication
823
+ - Implementing API keys
824
+ - Using VPN or firewall rules
825
+
826
+ ## Migration from MCP Tools
827
+
828
+ ### MCP Tool → GraphQL Equivalent
829
+
830
+ | MCP Tool | GraphQL Query | Notes |
831
+ |----------|---------------|-------|
832
+ | `manage_asset` (list) | `assets` query | Use filter and pagination |
833
+ | `manage_asset` (create) | `createMaterialInstance` mutation | Asset creation varies |
834
+ | `control_actor` (spawn) | `spawnActor` mutation | Transform input format |
835
+ | `control_actor` (delete) | `deleteActor` mutation | Simpler API |
836
+ | `manage_blueprint` (get) | `blueprint` query | More detailed response |
837
+ | `manage_level` (load) | `loadLevel` mutation | Direct mapping |
838
+
839
+ ### Example Migration
840
+
841
+ **Before (MCP Tool):**
842
+ ```json
843
+ {
844
+ "tool": "manage_asset",
845
+ "arguments": {
846
+ "action": "list",
847
+ "directory": "/Game"
848
+ }
849
+ }
850
+ ```
851
+
852
+ **After (GraphQL):**
853
+ ```graphql
854
+ query {
855
+ assets(filter: { pathStartsWith: "/Game" }, pagination: { limit: 100 }) {
856
+ edges {
857
+ node {
858
+ name
859
+ path
860
+ class
861
+ }
862
+ }
863
+ totalCount
864
+ }
865
+ }
866
+ ```
867
+
868
+ ## Additional Resources
869
+
870
+ ### GraphQL Clients
871
+ - [GraphiQL](https://github.com/graphql/graphiql) - In-browser GraphQL IDE
872
+ - [Apollo Studio](https://studio.apollographql.com) - Powerful visual editor
873
+ - [Insomnia](https://insomnia.rest/) - REST client with GraphQL support
874
+ - [Postman](https://www.postman.com/) - API platform with GraphQL support
875
+
876
+ ### Learning Resources
877
+ - [Introduction to GraphQL](https://graphql.org/learn/)
878
+ - [Queries and Mutations](https://graphql.org/learn/queries/)
879
+ - [Apollo Client React](https://www.apollographql.com/docs/react/)
880
+ - [GraphQL Best Practices](https://graphql.org/learn/best-practices/)
881
+
882
+ ## Next Steps
883
+
884
+ 1. Start the MCP server with `GRAPHQL_ENABLED=true`
885
+ 2. Use a GraphQL client (GraphiQL, Apollo Studio, Insomnia, or Postman) to explore the schema
886
+ 3. Try the query examples above
887
+ 4. Build your own queries tailored to your needs
888
+ 5. Consider using fragments and variables for complex workflows