ue-mcp 0.7.8 → 0.7.10

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 (27) hide show
  1. package/dist/flow/flow-tool.js +59 -0
  2. package/dist/flow/flow-tool.js.map +1 -1
  3. package/dist/flow/git-snapshot.d.ts +46 -0
  4. package/dist/flow/git-snapshot.js +130 -0
  5. package/dist/flow/git-snapshot.js.map +1 -0
  6. package/dist/flow/schema.d.ts +44 -0
  7. package/dist/flow/schema.js +7 -0
  8. package/dist/flow/schema.js.map +1 -1
  9. package/package.json +1 -1
  10. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.cpp +208 -26
  11. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers.cpp +9 -0
  12. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AudioHandlers.cpp +3 -1
  13. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.cpp +284 -27
  14. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DialogHandlers.cpp +20 -0
  15. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.cpp +46 -0
  16. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/FoliageHandlers.cpp +10 -0
  17. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.cpp +192 -1
  18. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers.cpp +62 -1
  19. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers.cpp +22 -0
  20. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.cpp +221 -16
  21. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NetworkingHandlers.cpp +177 -41
  22. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NiagaraHandlers.cpp +45 -1
  23. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PCGHandlers.cpp +18 -2
  24. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PhysicsHandlers.cpp +145 -15
  25. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers.cpp +28 -0
  26. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SplineHandlers.cpp +20 -0
  27. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers.cpp +60 -2
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { FlowRunner, AgentPromptTask } from "@db-lyon/flowkit";
3
3
  import { AnthropicProvider } from "./anthropic-provider.js";
4
+ import { takeSnapshot, restoreSnapshot, reloadAffectedPackages, pruneOldSnapshots, } from "./git-snapshot.js";
4
5
  // Lazy-init the LLM provider so the server still starts without an API key.
5
6
  let llmProvider;
6
7
  let llmProviderInitAttempted = false;
@@ -86,11 +87,59 @@ function makeRunner(registry, config, ctx) {
86
87
  project: ctx.project,
87
88
  llm: getLLMProvider(),
88
89
  };
90
+ // Opt-in git snapshot: capture Content/ + Config/ on start; reset on failure.
91
+ // Handler-level rollbacks cover in-memory state (selection, PIE, unsaved
92
+ // actors); the snapshot covers anything that touched disk.
93
+ const snapCfg = config.git_snapshot;
94
+ let activeSnapshot;
95
+ let flowFailed = false;
96
+ const hooks = (snapCfg?.enabled && ctx.project.projectDir)
97
+ ? {
98
+ beforeRun: async () => {
99
+ const projectDir = ctx.project.projectDir;
100
+ const snapshotDir = snapCfg.snapshot_dir ?? ".ue-mcp/snapshot.git";
101
+ const absSnap = snapshotDir.startsWith(".") || !snapshotDir.match(/^([a-zA-Z]:|\/)/)
102
+ ? `${projectDir}/${snapshotDir}`
103
+ : snapshotDir;
104
+ pruneOldSnapshots(absSnap, (snapCfg.max_age_hours ?? 24) * 3_600_000);
105
+ try {
106
+ activeSnapshot = takeSnapshot(projectDir, snapCfg.paths ?? ["Content", "Config"], snapshotDir);
107
+ }
108
+ catch (e) {
109
+ // Don't fail the flow on snapshot failure — just log. Handler
110
+ // rollbacks still apply.
111
+ console.error(`[ue-mcp] git snapshot failed: ${e.message}`);
112
+ }
113
+ },
114
+ afterRun: async (result) => {
115
+ flowFailed = !result.success;
116
+ if (!activeSnapshot || !flowFailed)
117
+ return;
118
+ try {
119
+ const { changedPaths } = restoreSnapshot(activeSnapshot);
120
+ if (ctx.bridge.isConnected) {
121
+ await reloadAffectedPackages(ctx.bridge, activeSnapshot.projectDir, changedPaths);
122
+ }
123
+ result.snapshotRestore = {
124
+ restored: true,
125
+ changedCount: changedPaths.length,
126
+ };
127
+ }
128
+ catch (e) {
129
+ result.snapshotRestore = {
130
+ restored: false,
131
+ error: e.message,
132
+ };
133
+ }
134
+ },
135
+ }
136
+ : undefined;
89
137
  return new FlowRunner({
90
138
  tasks: config.tasks,
91
139
  flows: config.flows,
92
140
  registry,
93
141
  context: flowCtx,
142
+ hooks,
94
143
  });
95
144
  }
96
145
  function formatFlowResult(result) {
@@ -128,6 +177,16 @@ function formatFlowResult(result) {
128
177
  lines.push(` ✗ ${e.taskName}: ${e.error.message}`);
129
178
  }
130
179
  }
180
+ const snap = result.snapshotRestore;
181
+ if (snap) {
182
+ lines.push("");
183
+ if (snap.restored) {
184
+ lines.push(` Git snapshot restored: ${snap.changedCount} files reset`);
185
+ }
186
+ else {
187
+ lines.push(` Git snapshot restore FAILED: ${snap.error}`);
188
+ }
189
+ }
131
190
  if (result.hookErrors && result.hookErrors.length > 0) {
132
191
  lines.push("");
133
192
  lines.push(` Hook errors (${result.hookErrors.length}):`);
@@ -1 +1 @@
1
- {"version":3,"file":"flow-tool.js","sourceRoot":"","sources":["../../src/flow/flow-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow-tool.js","sourceRoot":"","sources":["../../src/flow/flow-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ interface CallableBridge {
2
+ isConnected: boolean;
3
+ call(method: string, params: Record<string, unknown>): Promise<unknown>;
4
+ }
5
+ export interface GitSnapshotConfig {
6
+ enabled: boolean;
7
+ paths: string[];
8
+ snapshot_dir: string;
9
+ }
10
+ export interface Snapshot {
11
+ treeHash: string;
12
+ projectDir: string;
13
+ gitDir: string;
14
+ workTree: string;
15
+ paths: string[];
16
+ /** Absolute paths that existed at snapshot time. Used to diff on rollback. */
17
+ tracked: Set<string>;
18
+ }
19
+ /**
20
+ * Snapshot the given paths (relative to projectDir) into a shadow bare git repo.
21
+ * Returns a handle that can be passed to `restoreSnapshot` to reset those paths.
22
+ * Throws if any required tool (git) is missing.
23
+ */
24
+ export declare function takeSnapshot(projectDir: string, paths: string[], snapshotDir: string): Snapshot;
25
+ /**
26
+ * Restore the snapshotted paths. Files that were added after the snapshot are
27
+ * removed; files that were modified are reverted; files that existed at
28
+ * snapshot time are restored to their snapshot contents.
29
+ */
30
+ export declare function restoreSnapshot(snap: Snapshot): {
31
+ changedPaths: string[];
32
+ };
33
+ /**
34
+ * Best-effort call to reload_package on every Content-rooted .uasset / .umap
35
+ * that changed during restore, so the editor drops stale in-memory copies.
36
+ */
37
+ export declare function reloadAffectedPackages(bridge: CallableBridge, projectDir: string, changedPaths: string[]): Promise<{
38
+ reloaded: number;
39
+ errors: number;
40
+ }>;
41
+ /**
42
+ * Delete snapshot refs older than `maxAgeMs`. Call opportunistically so the
43
+ * shadow repo doesn't grow unboundedly.
44
+ */
45
+ export declare function pruneOldSnapshots(snapshotDir: string, maxAgeMs: number): void;
46
+ export {};
@@ -0,0 +1,130 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { execFileSync } from "node:child_process";
4
+ function git(gitDir, workTree, args, input) {
5
+ const fullArgs = [`--git-dir=${gitDir}`, `--work-tree=${workTree}`, ...args];
6
+ const res = execFileSync("git", fullArgs, {
7
+ input,
8
+ encoding: "utf-8",
9
+ stdio: input ? ["pipe", "pipe", "pipe"] : ["ignore", "pipe", "pipe"],
10
+ maxBuffer: 1024 * 1024 * 256,
11
+ });
12
+ return res.trim();
13
+ }
14
+ function ensureShadowRepo(gitDir) {
15
+ if (fs.existsSync(path.join(gitDir, "HEAD")))
16
+ return;
17
+ fs.mkdirSync(path.dirname(gitDir), { recursive: true });
18
+ execFileSync("git", ["init", "--bare", "-q", gitDir], { stdio: "ignore" });
19
+ // Set a permissive core.autocrlf so binary assets aren't mangled on Windows.
20
+ execFileSync("git", [`--git-dir=${gitDir}`, "config", "core.autocrlf", "false"], { stdio: "ignore" });
21
+ execFileSync("git", [`--git-dir=${gitDir}`, "config", "core.safecrlf", "false"], { stdio: "ignore" });
22
+ }
23
+ /**
24
+ * Snapshot the given paths (relative to projectDir) into a shadow bare git repo.
25
+ * Returns a handle that can be passed to `restoreSnapshot` to reset those paths.
26
+ * Throws if any required tool (git) is missing.
27
+ */
28
+ export function takeSnapshot(projectDir, paths, snapshotDir) {
29
+ const gitDir = path.isAbsolute(snapshotDir)
30
+ ? snapshotDir
31
+ : path.join(projectDir, snapshotDir);
32
+ ensureShadowRepo(gitDir);
33
+ // Stage the requested paths into the shadow index, then write a tree.
34
+ const tracked = new Set();
35
+ for (const rel of paths) {
36
+ const abs = path.join(projectDir, rel);
37
+ if (!fs.existsSync(abs))
38
+ continue;
39
+ tracked.add(abs);
40
+ git(gitDir, projectDir, ["add", "--force", "--", rel]);
41
+ }
42
+ const treeHash = git(gitDir, projectDir, ["write-tree"]);
43
+ // Store the tree under a named ref so it isn't GC'd.
44
+ const ref = `refs/ue-mcp/snapshots/${Date.now()}`;
45
+ // commit-tree expects stdin; use --allow-empty-message via -m ""
46
+ const commitHash = git(gitDir, projectDir, ["commit-tree", treeHash, "-m", "ue-mcp flow snapshot"]);
47
+ git(gitDir, projectDir, ["update-ref", ref, commitHash]);
48
+ return { treeHash, projectDir, gitDir, workTree: projectDir, paths, tracked };
49
+ }
50
+ /**
51
+ * Restore the snapshotted paths. Files that were added after the snapshot are
52
+ * removed; files that were modified are reverted; files that existed at
53
+ * snapshot time are restored to their snapshot contents.
54
+ */
55
+ export function restoreSnapshot(snap) {
56
+ // read-tree --reset -u resets the index AND working tree to the given tree,
57
+ // scoped to the snapshotted paths via pathspec.
58
+ const args = ["read-tree", "--reset", "-u", snap.treeHash, "--", ...snap.paths];
59
+ git(snap.gitDir, snap.workTree, args);
60
+ // Enumerate the paths now vs at snapshot time to hand the editor a reload list.
61
+ const now = new Set();
62
+ function walk(dir) {
63
+ if (!fs.existsSync(dir))
64
+ return;
65
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
66
+ const full = path.join(dir, entry.name);
67
+ if (entry.isDirectory())
68
+ walk(full);
69
+ else if (entry.name.endsWith(".uasset") || entry.name.endsWith(".umap") || entry.name.endsWith(".ini")) {
70
+ now.add(full);
71
+ }
72
+ }
73
+ }
74
+ for (const rel of snap.paths)
75
+ walk(path.join(snap.projectDir, rel));
76
+ const changed = [];
77
+ for (const p of now)
78
+ if (!snap.tracked.has(p))
79
+ changed.push(p);
80
+ for (const p of snap.tracked)
81
+ if (!now.has(p))
82
+ changed.push(p);
83
+ return { changedPaths: changed };
84
+ }
85
+ /**
86
+ * Best-effort call to reload_package on every Content-rooted .uasset / .umap
87
+ * that changed during restore, so the editor drops stale in-memory copies.
88
+ */
89
+ export async function reloadAffectedPackages(bridge, projectDir, changedPaths) {
90
+ const contentDir = path.join(projectDir, "Content");
91
+ let reloaded = 0;
92
+ let errors = 0;
93
+ for (const abs of changedPaths) {
94
+ if (!abs.startsWith(contentDir))
95
+ continue;
96
+ const rel = path.relative(contentDir, abs).replace(/\\/g, "/").replace(/\.(uasset|umap)$/i, "");
97
+ const assetPath = `/Game/${rel}`;
98
+ try {
99
+ await bridge.call("reload_package", { assetPath });
100
+ reloaded++;
101
+ }
102
+ catch {
103
+ errors++;
104
+ }
105
+ }
106
+ return { reloaded, errors };
107
+ }
108
+ /**
109
+ * Delete snapshot refs older than `maxAgeMs`. Call opportunistically so the
110
+ * shadow repo doesn't grow unboundedly.
111
+ */
112
+ export function pruneOldSnapshots(snapshotDir, maxAgeMs) {
113
+ if (!fs.existsSync(path.join(snapshotDir, "HEAD")))
114
+ return;
115
+ try {
116
+ const refs = execFileSync("git", [`--git-dir=${snapshotDir}`, "for-each-ref", "--format=%(refname)", "refs/ue-mcp/snapshots"], { encoding: "utf-8" });
117
+ const now = Date.now();
118
+ for (const ref of refs.split("\n").map(s => s.trim()).filter(Boolean)) {
119
+ const ts = Number(ref.split("/").pop());
120
+ if (Number.isFinite(ts) && now - ts > maxAgeMs) {
121
+ execFileSync("git", [`--git-dir=${snapshotDir}`, "update-ref", "-d", ref], { stdio: "ignore" });
122
+ }
123
+ }
124
+ execFileSync("git", [`--git-dir=${snapshotDir}`, "gc", "--prune=now", "--quiet"], { stdio: "ignore" });
125
+ }
126
+ catch {
127
+ /* best effort */
128
+ }
129
+ }
130
+ //# sourceMappingURL=git-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-snapshot.js","sourceRoot":"","sources":["../../src/flow/git-snapshot.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,22 @@ export declare const FlowProjectSchema: z.ZodOptional<z.ZodObject<{
16
16
  name?: string | undefined;
17
17
  engine?: string | undefined;
18
18
  }>>;
19
+ export declare const GitSnapshotSchema: z.ZodOptional<z.ZodObject<{
20
+ enabled: z.ZodDefault<z.ZodBoolean>;
21
+ paths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
22
+ snapshot_dir: z.ZodDefault<z.ZodString>;
23
+ max_age_hours: z.ZodDefault<z.ZodNumber>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ enabled: boolean;
26
+ paths: string[];
27
+ snapshot_dir: string;
28
+ max_age_hours: number;
29
+ }, {
30
+ enabled?: boolean | undefined;
31
+ paths?: string[] | undefined;
32
+ snapshot_dir?: string | undefined;
33
+ max_age_hours?: number | undefined;
34
+ }>>;
19
35
  export declare const FlowConfigSchema: z.ZodObject<{
20
36
  tasks: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
21
37
  class_path: z.ZodString;
@@ -327,6 +343,22 @@ export declare const FlowConfigSchema: z.ZodObject<{
327
343
  name?: string | undefined;
328
344
  engine?: string | undefined;
329
345
  }>>;
346
+ git_snapshot: z.ZodOptional<z.ZodObject<{
347
+ enabled: z.ZodDefault<z.ZodBoolean>;
348
+ paths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
349
+ snapshot_dir: z.ZodDefault<z.ZodString>;
350
+ max_age_hours: z.ZodDefault<z.ZodNumber>;
351
+ }, "strip", z.ZodTypeAny, {
352
+ enabled: boolean;
353
+ paths: string[];
354
+ snapshot_dir: string;
355
+ max_age_hours: number;
356
+ }, {
357
+ enabled?: boolean | undefined;
358
+ paths?: string[] | undefined;
359
+ snapshot_dir?: string | undefined;
360
+ max_age_hours?: number | undefined;
361
+ }>>;
330
362
  }, "strip", z.ZodTypeAny, {
331
363
  tasks: Record<string, {
332
364
  options: Record<string, unknown>;
@@ -387,6 +419,12 @@ export declare const FlowConfigSchema: z.ZodObject<{
387
419
  name?: string | undefined;
388
420
  engine?: string | undefined;
389
421
  } | undefined;
422
+ git_snapshot?: {
423
+ enabled: boolean;
424
+ paths: string[];
425
+ snapshot_dir: string;
426
+ max_age_hours: number;
427
+ } | undefined;
390
428
  }, {
391
429
  "ue-mcp"?: {
392
430
  version: 1;
@@ -395,6 +433,12 @@ export declare const FlowConfigSchema: z.ZodObject<{
395
433
  name?: string | undefined;
396
434
  engine?: string | undefined;
397
435
  } | undefined;
436
+ git_snapshot?: {
437
+ enabled?: boolean | undefined;
438
+ paths?: string[] | undefined;
439
+ snapshot_dir?: string | undefined;
440
+ max_age_hours?: number | undefined;
441
+ } | undefined;
398
442
  tasks?: Record<string, {
399
443
  class_path: string;
400
444
  options?: Record<string, unknown> | undefined;
@@ -7,8 +7,15 @@ export const FlowProjectSchema = z.object({
7
7
  name: z.string().optional(),
8
8
  engine: z.string().optional(),
9
9
  }).optional();
10
+ export const GitSnapshotSchema = z.object({
11
+ enabled: z.boolean().default(false),
12
+ paths: z.array(z.string()).default(["Content", "Config"]),
13
+ snapshot_dir: z.string().default(".ue-mcp/snapshot.git"),
14
+ max_age_hours: z.number().default(24),
15
+ }).optional();
10
16
  export const FlowConfigSchema = EngineConfigSchema.extend({
11
17
  "ue-mcp": FlowVersionSchema.optional(),
12
18
  project: FlowProjectSchema,
19
+ git_snapshot: GitSnapshotSchema,
13
20
  });
14
21
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/flow/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC;IACxD,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,iBAAiB;CAC3B,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/flow/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACxD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACtC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC;IACxD,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,iBAAiB;IAC1B,YAAY,EAAE,iBAAiB;CAChC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ue-mcp",
3
- "version": "0.7.8",
3
+ "version": "0.7.10",
4
4
  "description": "Unreal Engine MCP server — 19 tools, 300+ actions for AI-driven editor control",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",