ue-mcp 1.0.34 → 1.0.35

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 (29) hide show
  1. package/README.md +2 -2
  2. package/dist/pie/schema.d.ts +120 -0
  3. package/dist/pie/schema.js +25 -0
  4. package/dist/pie/schema.js.map +1 -1
  5. package/dist/tool-counts.json +5 -5
  6. package/dist/tools/gameplay.js +16 -5
  7. package/dist/tools/gameplay.js.map +1 -1
  8. package/dist/ue-mcp.default.yml +10 -4
  9. package/package.json +2 -2
  10. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.cpp +1 -0
  11. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.h +3 -0
  12. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_InputInject.cpp +6 -3
  13. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_PIEDiff.cpp +117 -4
  14. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_PIERecord.cpp +15 -1
  15. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_PIEReplay.cpp +42 -0
  16. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_PIESnapshot.cpp +112 -0
  17. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIEFrameSampler.cpp +7 -2
  18. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIEFrameSampler.h +4 -0
  19. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIEInputInjector.cpp +50 -33
  20. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIEInputInjector.h +5 -4
  21. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIEInputRecorder.cpp +83 -0
  22. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIEInputRecorder.h +19 -0
  23. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIEInputReplayer.cpp +209 -10
  24. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIEInputReplayer.h +34 -0
  25. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIESequenceFormat.cpp +190 -0
  26. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIESequenceFormat.h +45 -0
  27. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIETakeRecorderBridge.cpp +141 -0
  28. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/PIE/PIETakeRecorderBridge.h +40 -0
  29. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/UE_MCP_Bridge.cpp +18 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # UE-MCP
2
2
 
3
- **Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->21<!-- /count --> category tools covering <!-- count:actions -->543+<!-- /count --> actions, plus a YAML flow engine for multi-step workflows.
3
+ **Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->21<!-- /count --> category tools covering <!-- count:actions -->544+<!-- /count --> actions, plus a YAML flow engine for multi-step workflows.
4
4
 
5
5
  ```mermaid
6
6
  flowchart LR
@@ -57,7 +57,7 @@ If you prefer to configure manually, add to your MCP client config:
57
57
 
58
58
  - [Getting Started](https://db-lyon.github.io/ue-mcp/getting-started/) — Installation, configuration, first run
59
59
  - [Architecture](https://db-lyon.github.io/ue-mcp/architecture/) — How the pieces fit together
60
- - [Tool Reference](https://db-lyon.github.io/ue-mcp/tool-reference/) - All <!-- count:tools -->21<!-- /count --> tools with <!-- count:actions -->543+<!-- /count --> actions
60
+ - [Tool Reference](https://db-lyon.github.io/ue-mcp/tool-reference/) - All <!-- count:tools -->21<!-- /count --> tools with <!-- count:actions -->544+<!-- /count --> actions
61
61
  - [Flows](https://db-lyon.github.io/ue-mcp/flows/) - YAML flow engine, custom tasks, rollback, hooks
62
62
  - [Configuration](https://db-lyon.github.io/ue-mcp/configuration/) — `.ue-mcp.json` and MCP client config
63
63
  - [Neon Shrine Demo](https://db-lyon.github.io/ue-mcp/neon-shrine-demo/) — Interactive guided demo
@@ -62,6 +62,7 @@ export declare const Manifest: z.ZodObject<{
62
62
  rng_seed: z.ZodNumber;
63
63
  pie_world: z.ZodString;
64
64
  pawn_class: z.ZodString;
65
+ client_id: z.ZodOptional<z.ZodNumber>;
65
66
  axis_threshold: z.ZodNumber;
66
67
  actions: z.ZodArray<z.ZodObject<{
67
68
  name: z.ZodString;
@@ -86,6 +87,7 @@ export declare const Manifest: z.ZodObject<{
86
87
  path: string;
87
88
  type: string;
88
89
  }>, "many">;
90
+ tracked_actors: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
89
91
  markers: z.ZodArray<z.ZodObject<{
90
92
  frame: z.ZodNumber;
91
93
  time: z.ZodNumber;
@@ -106,13 +108,16 @@ export declare const Manifest: z.ZodObject<{
106
108
  csv: z.ZodString;
107
109
  sequence: z.ZodString;
108
110
  drift: z.ZodOptional<z.ZodString>;
111
+ tracked_actors: z.ZodOptional<z.ZodString>;
109
112
  }, "strip", z.ZodTypeAny, {
110
113
  csv: string;
111
114
  sequence: string;
115
+ tracked_actors?: string | undefined;
112
116
  drift?: string | undefined;
113
117
  }, {
114
118
  csv: string;
115
119
  sequence: string;
120
+ tracked_actors?: string | undefined;
116
121
  drift?: string | undefined;
117
122
  }>;
118
123
  }, "strip", z.ZodTypeAny, {
@@ -146,8 +151,11 @@ export declare const Manifest: z.ZodObject<{
146
151
  files: {
147
152
  csv: string;
148
153
  sequence: string;
154
+ tracked_actors?: string | undefined;
149
155
  drift?: string | undefined;
150
156
  };
157
+ client_id?: number | undefined;
158
+ tracked_actors?: string[] | undefined;
151
159
  }, {
152
160
  id: string;
153
161
  version: 1;
@@ -179,8 +187,11 @@ export declare const Manifest: z.ZodObject<{
179
187
  files: {
180
188
  csv: string;
181
189
  sequence: string;
190
+ tracked_actors?: string | undefined;
182
191
  drift?: string | undefined;
183
192
  };
193
+ client_id?: number | undefined;
194
+ tracked_actors?: string[] | undefined;
184
195
  }>;
185
196
  export type Manifest = z.infer<typeof Manifest>;
186
197
  export declare const TapeValue: z.ZodUnion<[z.ZodNumber, z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>;
@@ -603,6 +614,26 @@ export declare const DriftFrameEntry: z.ZodObject<{
603
614
  rotation_delta_deg: number;
604
615
  }>;
605
616
  export type DriftFrameEntry = z.infer<typeof DriftFrameEntry>;
617
+ export declare const ActorDriftEntry: z.ZodObject<{
618
+ max_position_cm: z.ZodNumber;
619
+ max_rotation_deg: z.ZodNumber;
620
+ max_velocity_cms: z.ZodNumber;
621
+ frames_unresolved_in_source: z.ZodNumber;
622
+ frames_unresolved_in_replay: z.ZodNumber;
623
+ }, "strip", z.ZodTypeAny, {
624
+ max_position_cm: number;
625
+ max_rotation_deg: number;
626
+ max_velocity_cms: number;
627
+ frames_unresolved_in_source: number;
628
+ frames_unresolved_in_replay: number;
629
+ }, {
630
+ max_position_cm: number;
631
+ max_rotation_deg: number;
632
+ max_velocity_cms: number;
633
+ frames_unresolved_in_source: number;
634
+ frames_unresolved_in_replay: number;
635
+ }>;
636
+ export type ActorDriftEntry = z.infer<typeof ActorDriftEntry>;
606
637
  export declare const DriftReport: z.ZodObject<{
607
638
  version: z.ZodLiteral<1>;
608
639
  source_recording_id: z.ZodString;
@@ -615,6 +646,25 @@ export declare const DriftReport: z.ZodObject<{
615
646
  max_rotation_drift_deg: z.ZodNumber;
616
647
  montage_section_mismatches: z.ZodNumber;
617
648
  tracked_value_max_deltas: z.ZodRecord<z.ZodString, z.ZodNumber>;
649
+ actor_drift: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
650
+ max_position_cm: z.ZodNumber;
651
+ max_rotation_deg: z.ZodNumber;
652
+ max_velocity_cms: z.ZodNumber;
653
+ frames_unresolved_in_source: z.ZodNumber;
654
+ frames_unresolved_in_replay: z.ZodNumber;
655
+ }, "strip", z.ZodTypeAny, {
656
+ max_position_cm: number;
657
+ max_rotation_deg: number;
658
+ max_velocity_cms: number;
659
+ frames_unresolved_in_source: number;
660
+ frames_unresolved_in_replay: number;
661
+ }, {
662
+ max_position_cm: number;
663
+ max_rotation_deg: number;
664
+ max_velocity_cms: number;
665
+ frames_unresolved_in_source: number;
666
+ frames_unresolved_in_replay: number;
667
+ }>>>;
618
668
  frames_over_threshold: z.ZodArray<z.ZodObject<{
619
669
  frame: z.ZodNumber;
620
670
  position_delta_cm: z.ZodNumber;
@@ -649,6 +699,13 @@ export declare const DriftReport: z.ZodObject<{
649
699
  velocity_delta_cms: number;
650
700
  rotation_delta_deg: number;
651
701
  }[];
702
+ actor_drift?: Record<string, {
703
+ max_position_cm: number;
704
+ max_rotation_deg: number;
705
+ max_velocity_cms: number;
706
+ frames_unresolved_in_source: number;
707
+ frames_unresolved_in_replay: number;
708
+ }> | undefined;
652
709
  }, {
653
710
  version: 1;
654
711
  source_recording_id: string;
@@ -667,5 +724,68 @@ export declare const DriftReport: z.ZodObject<{
667
724
  velocity_delta_cms: number;
668
725
  rotation_delta_deg: number;
669
726
  }[];
727
+ actor_drift?: Record<string, {
728
+ max_position_cm: number;
729
+ max_rotation_deg: number;
730
+ max_velocity_cms: number;
731
+ frames_unresolved_in_source: number;
732
+ frames_unresolved_in_replay: number;
733
+ }> | undefined;
670
734
  }>;
671
735
  export type DriftReport = z.infer<typeof DriftReport>;
736
+ export declare const ActorState: z.ZodObject<{
737
+ resolved: z.ZodBoolean;
738
+ pos: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
739
+ rot: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
740
+ vel: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
741
+ }, "strip", z.ZodTypeAny, {
742
+ resolved: boolean;
743
+ pos?: [number, number, number] | undefined;
744
+ rot?: [number, number, number] | undefined;
745
+ vel?: [number, number, number] | undefined;
746
+ }, {
747
+ resolved: boolean;
748
+ pos?: [number, number, number] | undefined;
749
+ rot?: [number, number, number] | undefined;
750
+ vel?: [number, number, number] | undefined;
751
+ }>;
752
+ export type ActorState = z.infer<typeof ActorState>;
753
+ export declare const ActorStateRow: z.ZodObject<{
754
+ frame: z.ZodNumber;
755
+ time: z.ZodNumber;
756
+ actors: z.ZodRecord<z.ZodString, z.ZodObject<{
757
+ resolved: z.ZodBoolean;
758
+ pos: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
759
+ rot: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
760
+ vel: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
761
+ }, "strip", z.ZodTypeAny, {
762
+ resolved: boolean;
763
+ pos?: [number, number, number] | undefined;
764
+ rot?: [number, number, number] | undefined;
765
+ vel?: [number, number, number] | undefined;
766
+ }, {
767
+ resolved: boolean;
768
+ pos?: [number, number, number] | undefined;
769
+ rot?: [number, number, number] | undefined;
770
+ vel?: [number, number, number] | undefined;
771
+ }>>;
772
+ }, "strip", z.ZodTypeAny, {
773
+ actors: Record<string, {
774
+ resolved: boolean;
775
+ pos?: [number, number, number] | undefined;
776
+ rot?: [number, number, number] | undefined;
777
+ vel?: [number, number, number] | undefined;
778
+ }>;
779
+ frame: number;
780
+ time: number;
781
+ }, {
782
+ actors: Record<string, {
783
+ resolved: boolean;
784
+ pos?: [number, number, number] | undefined;
785
+ rot?: [number, number, number] | undefined;
786
+ vel?: [number, number, number] | undefined;
787
+ }>;
788
+ frame: number;
789
+ time: number;
790
+ }>;
791
+ export type ActorStateRow = z.infer<typeof ActorStateRow>;
@@ -34,14 +34,17 @@ export const Manifest = z.object({
34
34
  rng_seed: z.number(),
35
35
  pie_world: z.string(),
36
36
  pawn_class: z.string(),
37
+ client_id: z.number().int().nonnegative().optional(),
37
38
  axis_threshold: z.number(),
38
39
  actions: z.array(ActionSpec),
39
40
  tracked_values: z.array(TrackedValueSpec),
41
+ tracked_actors: z.array(z.string()).optional(),
40
42
  markers: z.array(Marker),
41
43
  files: z.object({
42
44
  csv: z.string(),
43
45
  sequence: z.string(),
44
46
  drift: z.string().optional(),
47
+ tracked_actors: z.string().optional(),
45
48
  }),
46
49
  });
47
50
  // Per-frame value for the input_tape step. The C++ writer emits a scalar when
@@ -109,6 +112,13 @@ export const DriftFrameEntry = z.object({
109
112
  velocity_delta_cms: z.number(),
110
113
  rotation_delta_deg: z.number(),
111
114
  });
115
+ export const ActorDriftEntry = z.object({
116
+ max_position_cm: z.number(),
117
+ max_rotation_deg: z.number(),
118
+ max_velocity_cms: z.number(),
119
+ frames_unresolved_in_source: z.number().int().nonnegative(),
120
+ frames_unresolved_in_replay: z.number().int().nonnegative(),
121
+ });
112
122
  export const DriftReport = z.object({
113
123
  version: z.literal(PIE_FORMAT_VERSION),
114
124
  source_recording_id: z.string(),
@@ -121,6 +131,21 @@ export const DriftReport = z.object({
121
131
  max_rotation_drift_deg: z.number(),
122
132
  montage_section_mismatches: z.number().int().nonnegative(),
123
133
  tracked_value_max_deltas: z.record(z.number()),
134
+ actor_drift: z.record(ActorDriftEntry).optional(),
124
135
  frames_over_threshold: z.array(DriftFrameEntry),
125
136
  });
137
+ // tracked.jsonl: one ActorStateRow per line. Optional sidecar emitted by the
138
+ // recorder when pie_record_arm is called with track_actors=[...]. Joined to
139
+ // recording.csv by frame index.
140
+ export const ActorState = z.object({
141
+ resolved: z.boolean(),
142
+ pos: z.tuple([z.number(), z.number(), z.number()]).optional(),
143
+ rot: z.tuple([z.number(), z.number(), z.number()]).optional(),
144
+ vel: z.tuple([z.number(), z.number(), z.number()]).optional(),
145
+ });
146
+ export const ActorStateRow = z.object({
147
+ frame: z.number().int().nonnegative(),
148
+ time: z.number(),
149
+ actors: z.record(ActorState),
150
+ });
126
151
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/pie/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/pie/schema.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tools": 21,
3
- "actions": 543,
4
- "bridgeActions": 516,
3
+ "actions": 544,
4
+ "bridgeActions": 517,
5
5
  "localActions": 27,
6
6
  "perTool": {
7
7
  "project": 25,
@@ -18,7 +18,7 @@
18
18
  "widget": 19,
19
19
  "editor": 52,
20
20
  "reflection": 8,
21
- "gameplay": 72,
21
+ "gameplay": 73,
22
22
  "gas": 9,
23
23
  "networking": 11,
24
24
  "demo": 3,
@@ -26,6 +26,6 @@
26
26
  "statetree": 35,
27
27
  "plugins": 2
28
28
  },
29
- "generatedAt": "2026-05-22T02:11:09.317Z",
30
- "version": "1.0.34"
29
+ "generatedAt": "2026-05-22T13:24:20.770Z",
30
+ "version": "1.0.35"
31
31
  }
@@ -61,19 +61,20 @@ export const gameplayTool = categoryTool("gameplay", "Gameplay systems: physics,
61
61
  inject_input_update: bp("Change the value of a running hold without releasing it. Params: injection_id, value_x?, value_y?, value_z?.", "inject_input_update", (p) => ({ injection_id: p.injection_id, value_x: p.value_x, value_y: p.value_y, value_z: p.value_z })),
62
62
  inject_input_stop: bp("Stop a running hold or tape by id. Idempotent: returns stopped=false if no injection existed for that id. Params: injection_id.", "inject_input_stop", (p) => ({ injection_id: p.injection_id })),
63
63
  inject_input_tape: bp("Play a per-frame value array through Enhanced Input at the given Hz. One value = one frame. Scalars or [x,y] / [x,y,z] tuples accepted per element to match the action's value type. Auto-stops at the end of the array (or inject_input_stop with the returned id). Params: action, values (array of numbers or 2/3-tuples), hz? (default 60), injection_id?.", "inject_input_tape", (p) => ({ action: p.action, values: p.values, hz: p.hz, injection_id: p.injection_id })),
64
- pie_record_arm: bp("Arm a PIE input recording for the next BeginPIE (or immediately if PIE is already running). Writes manifest.json / sequence.json / recording.csv into Saved/MCPRecordings/<id>/ on EndPIE. Params: actions? (whitelist of UInputAction paths; empty = record all bound), track_values? (dotted reflection paths sampled to doubles per frame), axis_threshold? (default 0.15), sample_hz? (default 60), pin_fps? (default = sample_hz; 0 to skip the t.MaxFPS pin), capture_pawn_state? (default true), capture_montage? (default true), rng_seed? (default auto), run_gap_frames? (default 6), recording_dir? (override of Saved/MCPRecordings/), id? (override the auto-generated id). Determinism note: pins FMath::RandInit and t.MaxFPS but does not affect FRandomStream or Niagara/AI RNG.", "pie_record_arm", (p) => ({ actions: p.actions, track_values: p.track_values, axis_threshold: p.axis_threshold, sample_hz: p.sample_hz, pin_fps: p.pin_fps, capture_pawn_state: p.capture_pawn_state, capture_montage: p.capture_montage, rng_seed: p.rng_seed, run_gap_frames: p.run_gap_frames, recording_dir: p.recording_dir, id: p.id })),
64
+ pie_record_arm: bp("Arm a PIE input recording for the next BeginPIE (or immediately if PIE is already running). Writes manifest.json / sequence.json / recording.csv into Saved/MCPRecordings/<id>/ on EndPIE, plus tracked.jsonl when track_actors is set. Params: actions? (whitelist of UInputAction paths; empty = record all bound), track_values? (dotted reflection paths sampled to doubles per frame), track_actors? (world actor ids sampled per frame; pos/rot/vel written to tracked.jsonl), axis_threshold? (default 0.15), sample_hz? (default 60), pin_fps? (default = sample_hz; 0 to skip the t.MaxFPS pin), capture_pawn_state? (default true), capture_montage? (default true), rng_seed? (default auto), run_gap_frames? (default 6), recording_dir? (override of Saved/MCPRecordings/), id? (override the auto-generated id). Determinism note: pins FMath::RandInit and t.MaxFPS but does not affect FRandomStream or Niagara/AI RNG.", "pie_record_arm", (p) => ({ actions: p.actions, track_values: p.track_values, track_actors: p.track_actors, axis_threshold: p.axis_threshold, sample_hz: p.sample_hz, pin_fps: p.pin_fps, capture_pawn_state: p.capture_pawn_state, capture_montage: p.capture_montage, rng_seed: p.rng_seed, run_gap_frames: p.run_gap_frames, recording_dir: p.recording_dir, id: p.id })),
65
65
  pie_record_disarm: bp("Cancel an armed (but not yet started) recording. No-op if no recording is armed. Errors if a recording is already in flight (use pie_record_stop).", "pie_record_disarm"),
66
66
  pie_record_stop: bp("Finalize the in-flight recording immediately even if PIE has not ended. Writes manifest/sequence/csv and clears state. Returns the same shape that EndPIE finalization would produce.", "pie_record_stop"),
67
67
  pie_record_status: bp("Recorder state: { state: idle|armed|waiting_for_pawn|recording, id, current_frame, elapsed_seconds, tracked_action_count }.", "pie_record_status"),
68
68
  pie_record_list: bp("Enumerate recordings under Saved/MCPRecordings/ (newest first). Params: recording_dir? (override root), record_limit? (default 200), record_offset?.", "pie_record_list", (p) => ({ recording_dir: p.recording_dir, limit: p.record_limit, offset: p.record_offset })),
69
- pie_record_read: bp("Read a recording artifact. Params: id, file? (manifest|sequence|csv|drift, default manifest), recording_dir?, record_limit? (CSV rows; default 1000), record_offset?.", "pie_record_read", (p) => ({ id: p.id, file: p.file, recording_dir: p.recording_dir, limit: p.record_limit, offset: p.record_offset })),
69
+ pie_record_read: bp("Read a recording artifact. Params: id, file? (manifest|sequence|csv|drift|tracked, default manifest), recording_dir?, record_limit? (CSV rows; default 1000), record_offset?. 'tracked' reads tracked.jsonl when track_actors was set on arm.", "pie_record_read", (p) => ({ id: p.id, file: p.file, recording_dir: p.recording_dir, limit: p.record_limit, offset: p.record_offset })),
70
70
  pie_record_delete: bp("Delete a recording directory. Idempotent: returns alreadyDeleted=true if the dir is absent. Requires confirm=true to actually remove. Params: id, confirm, recording_dir?.", "pie_record_delete", (p) => ({ id: p.id, confirm: p.confirm, recording_dir: p.recording_dir })),
71
71
  pie_mark: bp("Insert a labelled marker into the in-flight recording (or replay) timeline. No-op (active=false) when no recording/replay is running. Params: label, metadata?.", "pie_mark", (p) => ({ label: p.label, metadata: p.metadata })),
72
- pie_replay_arm: bp("Arm a PIE replay for the next BeginPIE (or current PIE). Drives the recorded sequence through UEnhancedInputLocalPlayerSubsystem::InjectInputForAction (input/hold/input_tape) plus console/mark/capture steps. Writes drift.json (per-frame pawn delta vs source) when replaying a known recording_id. Params: recording_id? (loads sequence.json + recording.csv for drift), sequence_path? (explicit), steps? (inline array; same schema as sequence.json), settle_ms?, sample_hz?, pin_fps? (default = sample_hz; 0 to skip), apply_rng_seed? (default true), record_drift? (default true), auto_stop_pie? (default false), drift_thresholds? ({ position_cm?, rotation_deg?, velocity_cms? } for over-threshold list), rng_seed? (inline-only).", "pie_replay_arm", (p) => ({ recording_id: p.recording_id, sequence_path: p.sequence_path, steps: p.steps, recording_dir: p.recording_dir, settle_ms: p.settle_ms, sample_hz: p.sample_hz, pin_fps: p.pin_fps, apply_rng_seed: p.apply_rng_seed, record_drift: p.record_drift, auto_stop_pie: p.auto_stop_pie, drift_thresholds: p.drift_thresholds, rng_seed: p.rng_seed })),
72
+ pie_replay_arm: bp("Arm a PIE replay for the next BeginPIE (or current PIE). Drives the recorded sequence through UEnhancedInputLocalPlayerSubsystem::InjectInputForAction (input/hold/input_tape) plus console/mark/capture steps. Writes drift.json (per-frame pawn delta vs source) when replaying a known recording_id. mode='monitor' skips step execution but keeps drift sampling running so a human can play manually against a reference recording. Params: recording_id? (loads sequence.json + recording.csv for drift), sequence_path? (explicit), steps? (inline array; same schema as sequence.json), settle_ms?, sample_hz?, pin_fps? (default = sample_hz; 0 to skip), apply_rng_seed? (default true), record_drift? (default true), auto_stop_pie? (default false), mode? ('replay' default | 'monitor'), drift_thresholds? ({ position_cm?, rotation_deg?, velocity_cms?, tracked_default?, tracked? }), rng_seed? (inline-only).", "pie_replay_arm", (p) => ({ recording_id: p.recording_id, sequence_path: p.sequence_path, steps: p.steps, recording_dir: p.recording_dir, settle_ms: p.settle_ms, sample_hz: p.sample_hz, pin_fps: p.pin_fps, apply_rng_seed: p.apply_rng_seed, record_drift: p.record_drift, auto_stop_pie: p.auto_stop_pie, mode: p.mode, drift_thresholds: p.drift_thresholds, rng_seed: p.rng_seed })),
73
73
  pie_replay_disarm: bp("Cancel an armed (but not yet started) replay. Errors if a replay is already in flight (use pie_replay_stop).", "pie_replay_disarm"),
74
74
  pie_replay_stop: bp("Stop the in-flight replay immediately. Releases all held injections and writes drift.json when applicable. Returns { stopped, executed_steps, drift_report_path?, max_position_drift_cm?, max_velocity_drift_cms?, frames_compared? }.", "pie_replay_stop"),
75
75
  pie_replay_status: bp("Replay state: { state, source_recording_id, current_step, total_steps, elapsed_seconds, max_position_drift_cm, max_velocity_drift_cms }.", "pie_replay_status"),
76
- pie_record_diff: bp("Offline diff of two PIE recordings. Walks both recording.csv files in lockstep by frame index and emits position / rotation / velocity deltas plus the list of frames over the configurable thresholds. Pure file read; no PIE required. Params: a_id, b_id, recording_dir? (override root), position_cm? (default 5), rotation_deg? (default 2), velocity_cms? (default 25).", "pie_record_diff", (p) => ({ a_id: p.a_id, b_id: p.b_id, recording_dir: p.recording_dir, position_cm: p.position_cm, rotation_deg: p.rotation_deg, velocity_cms: p.velocity_cms })),
76
+ pie_snapshot: bp("One-shot dump of a live PIE actor's full UProperty state to JSON. Resolves target by name, class name, or full path (first match wins). Writes <recording_dir>/<recording_id>/snapshots/<snapshot_name>.json when recording_id is supplied; Saved/MCPSnapshots/<snapshot_name>.json otherwise. Complements track_actors (which only samples pos/rot/vel per frame). Params: target, recording_id?, recording_dir?, snapshot_name? (default snapshot-<timestamp>), include_components? (default true).", "pie_snapshot", (p) => ({ target: p.target, recording_id: p.recording_id, recording_dir: p.recording_dir, name: p.snapshot_name, include_components: p.include_components })),
77
+ pie_record_diff: bp("Offline diff of two PIE recordings. Walks both recording.csv files in lockstep by frame index and emits position / rotation / velocity deltas, per-path tracked_value_max_deltas for reflection paths sampled in both recordings, plus the list of frames over the configurable thresholds. Pure file read; no PIE required. Params: a_id, b_id, recording_dir? (override root), position_cm? (default 5), rotation_deg? (default 2), velocity_cms? (default 25), tracked_default? (default 0 = tracked drift never trips frames_over_threshold), tracked_thresholds? (per-path map).", "pie_record_diff", (p) => ({ a_id: p.a_id, b_id: p.b_id, recording_dir: p.recording_dir, position_cm: p.position_cm, rotation_deg: p.rotation_deg, velocity_cms: p.velocity_cms, tracked_default: p.tracked_default, tracked_thresholds: p.tracked_thresholds })),
77
78
  }, undefined, {
78
79
  actorLabel: z.string().optional(),
79
80
  profileName: z.string().optional(),
@@ -135,11 +136,14 @@ export const gameplayTool = categoryTool("gameplay", "Gameplay systems: physics,
135
136
  hz: z.number().optional().describe("inject_input_tape: tape rate in Hz (default 60)"),
136
137
  actions: z.array(z.string()).optional().describe("pie_record_arm: whitelist of UInputAction asset paths to record. Empty = record all bound."),
137
138
  track_values: z.array(z.string()).optional().describe("pie_record_arm: dotted reflection paths sampled per frame (e.g. 'Hero.AbilitySystem.Health')."),
139
+ track_actors: z.array(z.string()).optional().describe("pie_record_arm: world actors to sample per frame (matched by name, class name, or full path; first match wins). Writes tracked.jsonl with per-frame pos/rot/vel for each id."),
138
140
  axis_threshold: z.number().optional().describe("pie_record_arm: dead zone for axis edge detection (default 0.15)"),
139
141
  sample_hz: z.number().optional().describe("pie_record_arm: sample rate in Hz (default 60). Also the default for pin_fps."),
140
142
  pin_fps: z.number().optional().describe("pie_record_arm: t.MaxFPS pin during recording (default = sample_hz; 0 to skip)"),
141
143
  capture_pawn_state: z.boolean().optional().describe("pie_record_arm: include pawn location/rotation/velocity/Speed2D per row (default true)"),
142
144
  capture_montage: z.boolean().optional().describe("pie_record_arm: include 'Montage:Section' per row (default true)"),
145
+ take_record: z.boolean().optional().describe("pie_record_arm: also drive Take Recorder Start/Stop in lockstep with BeginPIE / EndPIE. Requires the Take Recorder plugin enabled and an open Take Recorder panel with sources configured. pie_record_stop returns take_recorder_status with the outcome (started / skipped / stopped, plus the reason)."),
146
+ client_id: z.number().optional().describe("pie_record_arm / pie_replay_arm / inject_input*: which local player to sample, replay, or inject into. 0 (default) = first local player; 1+ selects subsequent local players in multi-client PIE sessions. To record multiple clients in one PIE session, call pie_record_arm once per client_id with different ids."),
143
147
  rng_seed: z.number().optional().describe("pie_record_arm: explicit RNG seed (default auto). Reapplied via FMath::RandInit on attach."),
144
148
  run_gap_frames: z.number().optional().describe("pie_record_arm: gap-tolerance frames for axis run extraction in sequence.json (default 6)"),
145
149
  recording_dir: z.string().optional().describe("pie_record_arm/list/read/delete: override of Saved/MCPRecordings/"),
@@ -157,11 +161,18 @@ export const gameplayTool = categoryTool("gameplay", "Gameplay systems: physics,
157
161
  apply_rng_seed: z.boolean().optional().describe("pie_replay_arm: reapply sequence.rng_seed via FMath::RandInit (default true)"),
158
162
  record_drift: z.boolean().optional().describe("pie_replay_arm: sample replay state and emit drift.json (default true when recording_id is set)"),
159
163
  auto_stop_pie: z.boolean().optional().describe("pie_replay_arm: stop PIE on sequence completion (default false)"),
160
- drift_thresholds: z.record(z.number()).optional().describe("pie_replay_arm: { position_cm?, rotation_deg?, velocity_cms? } cutoffs for over-threshold frame list"),
164
+ mode: z.string().optional().describe("pie_replay_arm: 'replay' (default) injects inputs and drives the sequence; 'monitor' skips step execution but keeps drift sampling running so a human can play manually against a reference recording."),
165
+ capture_frame_every: z.number().optional().describe("pie_replay_arm: when > 0, write a viewport screenshot every Nth sampled frame to <recording_dir>/frames/. pie_replay_stop returns ffmpeg hints for assembling the PNG sequence into a GIF or MP4."),
166
+ drift_thresholds: z.record(z.unknown()).optional().describe("pie_replay_arm: { position_cm?, rotation_deg?, velocity_cms?, tracked_default?, tracked? } cutoffs for over-threshold frame list. tracked is a per-path map (path -> threshold); tracked_default applies to paths without an explicit entry. 0 disables tracked-value triggering."),
161
167
  a_id: z.string().optional().describe("pie_record_diff: id of recording A"),
162
168
  b_id: z.string().optional().describe("pie_record_diff: id of recording B"),
163
169
  position_cm: z.number().optional().describe("pie_record_diff: position delta threshold in cm (default 5)"),
164
170
  rotation_deg: z.number().optional().describe("pie_record_diff: rotation delta threshold in degrees (default 2)"),
165
171
  velocity_cms: z.number().optional().describe("pie_record_diff: velocity delta threshold in cm/s (default 25)"),
172
+ tracked_default: z.number().optional().describe("pie_record_diff: default per-path delta threshold applied to tracked-value columns that are not in tracked_thresholds (default 0 = don't trigger)"),
173
+ tracked_thresholds: z.record(z.number()).optional().describe("pie_record_diff: per-path delta thresholds keyed by reflection path. A frame is over-threshold if any path's |delta| exceeds its entry (or tracked_default when absent)."),
174
+ target: z.string().optional().describe("pie_snapshot: actor identifier (name, class name, or full path)"),
175
+ snapshot_name: z.string().optional().describe("pie_snapshot: filename basename (default snapshot-<timestamp>)"),
176
+ include_components: z.boolean().optional().describe("pie_snapshot: also dump UActorComponents (default true)"),
166
177
  });
167
178
  //# sourceMappingURL=gameplay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gameplay.js","sourceRoot":"","sources":["../../src/tools/gameplay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gameplay.js","sourceRoot":"","sources":["../../src/tools/gameplay.ts"],"names":[],"mappings":"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"}
@@ -2804,7 +2804,7 @@ tasks:
2804
2804
  gameplay.pie_record_arm:
2805
2805
  class_path: ue-mcp.bridge
2806
2806
  group: gameplay
2807
- description: "Arm a PIE input recording for the next BeginPIE (or immediately if PIE is already running). Writes manifest.json / sequence.json / recording.csv into Saved/MCPRecordings/<id>/ on EndPIE. Params: actions? (whitelist of UInputAction paths; empty = record all bound), track_values? (dotted reflection paths sampled to doubles per frame), axis_threshold? (default 0.15), sample_hz? (default 60), pin_fps? (default = sample_hz; 0 to skip the t.MaxFPS pin), capture_pawn_state? (default true), capture_montage? (default true), rng_seed? (default auto), run_gap_frames? (default 6), recording_dir? (override of Saved/MCPRecordings/), id? (override the auto-generated id). Determinism note: pins FMath::RandInit and t.MaxFPS but does not affect FRandomStream or Niagara/AI RNG."
2807
+ description: "Arm a PIE input recording for the next BeginPIE (or immediately if PIE is already running). Writes manifest.json / sequence.json / recording.csv into Saved/MCPRecordings/<id>/ on EndPIE, plus tracked.jsonl when track_actors is set. Params: actions? (whitelist of UInputAction paths; empty = record all bound), track_values? (dotted reflection paths sampled to doubles per frame), track_actors? (world actor ids sampled per frame; pos/rot/vel written to tracked.jsonl), axis_threshold? (default 0.15), sample_hz? (default 60), pin_fps? (default = sample_hz; 0 to skip the t.MaxFPS pin), capture_pawn_state? (default true), capture_montage? (default true), rng_seed? (default auto), run_gap_frames? (default 6), recording_dir? (override of Saved/MCPRecordings/), id? (override the auto-generated id). Determinism note: pins FMath::RandInit and t.MaxFPS but does not affect FRandomStream or Niagara/AI RNG."
2808
2808
  options:
2809
2809
  method: pie_record_arm
2810
2810
  gameplay.pie_record_disarm:
@@ -2834,7 +2834,7 @@ tasks:
2834
2834
  gameplay.pie_record_read:
2835
2835
  class_path: ue-mcp.bridge
2836
2836
  group: gameplay
2837
- description: "Read a recording artifact. Params: id, file? (manifest|sequence|csv|drift, default manifest), recording_dir?, record_limit? (CSV rows; default 1000), record_offset?."
2837
+ description: "Read a recording artifact. Params: id, file? (manifest|sequence|csv|drift|tracked, default manifest), recording_dir?, record_limit? (CSV rows; default 1000), record_offset?. 'tracked' reads tracked.jsonl when track_actors was set on arm."
2838
2838
  options:
2839
2839
  method: pie_record_read
2840
2840
  gameplay.pie_record_delete:
@@ -2852,7 +2852,7 @@ tasks:
2852
2852
  gameplay.pie_replay_arm:
2853
2853
  class_path: ue-mcp.bridge
2854
2854
  group: gameplay
2855
- description: "Arm a PIE replay for the next BeginPIE (or current PIE). Drives the recorded sequence through UEnhancedInputLocalPlayerSubsystem::InjectInputForAction (input/hold/input_tape) plus console/mark/capture steps. Writes drift.json (per-frame pawn delta vs source) when replaying a known recording_id. Params: recording_id? (loads sequence.json + recording.csv for drift), sequence_path? (explicit), steps? (inline array; same schema as sequence.json), settle_ms?, sample_hz?, pin_fps? (default = sample_hz; 0 to skip), apply_rng_seed? (default true), record_drift? (default true), auto_stop_pie? (default false), drift_thresholds? ({ position_cm?, rotation_deg?, velocity_cms? } for over-threshold list), rng_seed? (inline-only)."
2855
+ description: "Arm a PIE replay for the next BeginPIE (or current PIE). Drives the recorded sequence through UEnhancedInputLocalPlayerSubsystem::InjectInputForAction (input/hold/input_tape) plus console/mark/capture steps. Writes drift.json (per-frame pawn delta vs source) when replaying a known recording_id. mode='monitor' skips step execution but keeps drift sampling running so a human can play manually against a reference recording. Params: recording_id? (loads sequence.json + recording.csv for drift), sequence_path? (explicit), steps? (inline array; same schema as sequence.json), settle_ms?, sample_hz?, pin_fps? (default = sample_hz; 0 to skip), apply_rng_seed? (default true), record_drift? (default true), auto_stop_pie? (default false), mode? ('replay' default | 'monitor'), drift_thresholds? ({ position_cm?, rotation_deg?, velocity_cms?, tracked_default?, tracked? }), rng_seed? (inline-only)."
2856
2856
  options:
2857
2857
  method: pie_replay_arm
2858
2858
  gameplay.pie_replay_disarm:
@@ -2873,10 +2873,16 @@ tasks:
2873
2873
  description: "Replay state: { state, source_recording_id, current_step, total_steps, elapsed_seconds, max_position_drift_cm, max_velocity_drift_cms }."
2874
2874
  options:
2875
2875
  method: pie_replay_status
2876
+ gameplay.pie_snapshot:
2877
+ class_path: ue-mcp.bridge
2878
+ group: gameplay
2879
+ description: "One-shot dump of a live PIE actor's full UProperty state to JSON. Resolves target by name, class name, or full path (first match wins). Writes <recording_dir>/<recording_id>/snapshots/<snapshot_name>.json when recording_id is supplied; Saved/MCPSnapshots/<snapshot_name>.json otherwise. Complements track_actors (which only samples pos/rot/vel per frame). Params: target, recording_id?, recording_dir?, snapshot_name? (default snapshot-<timestamp>), include_components? (default true)."
2880
+ options:
2881
+ method: pie_snapshot
2876
2882
  gameplay.pie_record_diff:
2877
2883
  class_path: ue-mcp.bridge
2878
2884
  group: gameplay
2879
- description: "Offline diff of two PIE recordings. Walks both recording.csv files in lockstep by frame index and emits position / rotation / velocity deltas plus the list of frames over the configurable thresholds. Pure file read; no PIE required. Params: a_id, b_id, recording_dir? (override root), position_cm? (default 5), rotation_deg? (default 2), velocity_cms? (default 25)."
2885
+ description: "Offline diff of two PIE recordings. Walks both recording.csv files in lockstep by frame index and emits position / rotation / velocity deltas, per-path tracked_value_max_deltas for reflection paths sampled in both recordings, plus the list of frames over the configurable thresholds. Pure file read; no PIE required. Params: a_id, b_id, recording_dir? (override root), position_cm? (default 5), rotation_deg? (default 2), velocity_cms? (default 25), tracked_default? (default 0 = tracked drift never trips frames_over_threshold), tracked_thresholds? (per-path map)."
2880
2886
  options:
2881
2887
  method: pie_record_diff
2882
2888
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ue-mcp",
3
- "version": "1.0.34",
4
- "description": "Unreal Engine MCP server - 21 tools, 543+ actions for AI-driven editor control",
3
+ "version": "1.0.35",
4
+ "description": "Unreal Engine MCP server - 21 tools, 544+ actions for AI-driven editor control",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
@@ -152,6 +152,7 @@ void FGameplayHandlers::RegisterHandlers(FMCPHandlerRegistry& Registry)
152
152
  Registry.RegisterHandler(TEXT("pie_replay_stop"), &PieReplayStop);
153
153
  Registry.RegisterHandler(TEXT("pie_replay_status"), &PieReplayStatus);
154
154
  Registry.RegisterHandler(TEXT("pie_record_diff"), &PieRecordDiff);
155
+ Registry.RegisterHandler(TEXT("pie_snapshot"), &PieSnapshot);
155
156
  }
156
157
 
157
158
  TSharedPtr<FJsonValue> FGameplayHandlers::CreateSmartObjectDefinition(const TSharedPtr<FJsonObject>& Params)
@@ -107,4 +107,7 @@ private:
107
107
 
108
108
  // Offline pawn-state diff of two recordings.
109
109
  static TSharedPtr<FJsonValue> PieRecordDiff(const TSharedPtr<FJsonObject>& Params);
110
+
111
+ // Full UProperty dump of a live PIE actor to JSON (snapshots/<name>.json).
112
+ static TSharedPtr<FJsonValue> PieSnapshot(const TSharedPtr<FJsonObject>& Params);
110
113
  };
@@ -64,8 +64,9 @@ TSharedPtr<FJsonValue> FGameplayHandlers::InjectInput(const TSharedPtr<FJsonObje
64
64
  if (!Action) return LoadErr;
65
65
 
66
66
  const FInputActionValue Value = BuildValueForAction(Action, Params);
67
+ const int32 ClientIndex = FMath::Max(0, OptionalInt(Params, TEXT("client_id"), 0));
67
68
  FString Err;
68
- if (!UEMCPPIE::FPIEInputInjector::InjectOnce(Action, Value, Err))
69
+ if (!UEMCPPIE::FPIEInputInjector::InjectOnce(Action, Value, Err, ClientIndex))
69
70
  {
70
71
  return MCPError(Err);
71
72
  }
@@ -86,9 +87,10 @@ TSharedPtr<FJsonValue> FGameplayHandlers::InjectInputStart(const TSharedPtr<FJso
86
87
 
87
88
  const FInputActionValue Value = BuildValueForAction(Action, Params);
88
89
  const FString DesiredId = OptionalString(Params, TEXT("injection_id"));
90
+ const int32 ClientIndex = FMath::Max(0, OptionalInt(Params, TEXT("client_id"), 0));
89
91
 
90
92
  FString Err;
91
- const FString Id = UEMCPPIE::FPIEInputInjector::StartHold(Action, Value, DesiredId, Err);
93
+ const FString Id = UEMCPPIE::FPIEInputInjector::StartHold(Action, Value, DesiredId, Err, ClientIndex);
92
94
  if (Id.IsEmpty()) return MCPError(Err);
93
95
 
94
96
  auto Result = MCPSuccess();
@@ -183,9 +185,10 @@ TSharedPtr<FJsonValue> FGameplayHandlers::InjectInputTape(const TSharedPtr<FJson
183
185
 
184
186
  const int32 Hz = OptionalInt(Params, TEXT("hz"), 60);
185
187
  const FString DesiredId = OptionalString(Params, TEXT("injection_id"));
188
+ const int32 ClientIndex = FMath::Max(0, OptionalInt(Params, TEXT("client_id"), 0));
186
189
 
187
190
  FString Err;
188
- const FString Id = UEMCPPIE::FPIEInputInjector::StartTape(Action, Vals, Hz, DesiredId, Err);
191
+ const FString Id = UEMCPPIE::FPIEInputInjector::StartTape(Action, Vals, Hz, DesiredId, Err, ClientIndex);
189
192
  if (Id.IsEmpty()) return MCPError(Err);
190
193
 
191
194
  auto Result = MCPSuccess();