ue-mcp 1.0.68 → 1.0.70

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.
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 -->542+<!-- /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 -->545+<!-- /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 -->542+<!-- /count --> actions
60
+ - [Tool Reference](https://db-lyon.github.io/ue-mcp/tool-reference/) - All <!-- count:tools -->21<!-- /count --> tools with <!-- count:actions -->545+<!-- /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
@@ -3,6 +3,7 @@ import type { ToolDef } from "../types.js";
3
3
  import type { PluginEntry } from "../flow/schema.js";
4
4
  import { type PluginManifest } from "./manifest.js";
5
5
  import { type InjectionPlan } from "./injection.js";
6
+ import { type ProvisionPlan } from "./provision.js";
6
7
  /** Per-plugin record surfaced to the `plugins` introspection category. */
7
8
  export interface PluginRecord {
8
9
  name: string;
@@ -58,23 +59,37 @@ export interface PluginLoadResult {
58
59
  * warning, never partially injected.
59
60
  */
60
61
  export declare function loadPlugins(tools: ToolDef[], entries: PluginEntry[], projectDir: string | undefined, serverVersion: string): Promise<PluginLoadResult>;
62
+ type TaskReg = {
63
+ name: string;
64
+ ctor: TaskConstructor;
65
+ };
61
66
  /**
62
- * Build the injection plan and dispatch task registrations that surface a
63
- * native module's handlers as MCP actions. Returns null when the manifest
64
- * declares no `nativeModule.category` (handlers stay bridge-only).
65
- *
66
- * Each handler `h` maps to action `<actionPrefix>_h` in the target category,
67
- * dispatching to the bare bridge method `h` via a generic BridgeTask. The
68
- * handler's `schema` becomes the action's params and `timeoutSeconds` its
69
- * bridge-call timeout. Pure and disk-free so it can be unit-tested directly.
67
+ * What a native module's handlers surface into. `inject` merges into an
68
+ * existing built-in category (actions prefixed with `actionPrefix`); `provide`
69
+ * provisions a new top-level category the plugin owns (actions unprefixed - the
70
+ * category is the namespace).
70
71
  */
71
- export declare function nativeHandlerInjection(manifest: PluginManifest, pluginName: string): {
72
+ export type NativeHandlerSurface = {
73
+ kind: "inject";
72
74
  plan: InjectionPlan;
73
- taskRegistrations: Array<{
74
- name: string;
75
- ctor: TaskConstructor;
76
- }>;
77
- } | null;
75
+ taskRegistrations: TaskReg[];
76
+ } | {
77
+ kind: "provide";
78
+ plan: ProvisionPlan;
79
+ taskRegistrations: TaskReg[];
80
+ };
81
+ /**
82
+ * Surface a native module's handlers as MCP actions. Returns null when the
83
+ * manifest declares no `nativeModule.category` (handlers stay bridge-only).
84
+ *
85
+ * When `category` is a built-in (per `builtInCategories`) the result is an
86
+ * `inject` plan: each handler `h` becomes `<category>(action="<prefix>_h")`.
87
+ * Otherwise it's a `provide` plan that owns a new `<category>` tool with
88
+ * unprefixed actions `<category>(action="h")`. Either way `h` dispatches to the
89
+ * bare bridge method `h` via a generic BridgeTask, carrying the handler's
90
+ * `timeoutSeconds`. Pure and disk-free so it can be unit-tested directly.
91
+ */
92
+ export declare function nativeHandlerSurface(manifest: PluginManifest, pluginName: string, builtInCategories: Set<string>): NativeHandlerSurface | null;
78
93
  /**
79
94
  * Duck-type check that a class behaves like a BaseTask subclass. We can't use
80
95
  * `instanceof BaseTask` here because npm 7+ installs peerDependencies into
@@ -85,3 +100,4 @@ export declare function nativeHandlerInjection(manifest: PluginManifest, pluginN
85
100
  * only invokes `.run()` on instances.
86
101
  */
87
102
  export declare function looksLikeBaseTask(TaskClass: unknown): boolean;
103
+ export {};
@@ -2,7 +2,7 @@ import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
3
  import { pathToFileURL } from "node:url";
4
4
  import { warn, info } from "../log.js";
5
- import { loadManifest } from "./manifest.js";
5
+ import { loadManifest, } from "./manifest.js";
6
6
  import { bridgeTaskClass } from "../flow/task-factory.js";
7
7
  import { resolvePackage } from "./resolver.js";
8
8
  import { satisfiesMinimum } from "./version.js";
@@ -103,18 +103,29 @@ export async function loadPlugins(tools, entries, projectDir, serverVersion) {
103
103
  }
104
104
  }
105
105
  // Native handler auto-surfacing: when `nativeModule.category` is set, every
106
- // declared handler becomes `<category>(action="<prefix>_<handler>")`
107
- // dispatching to the bare bridge method the C++ module registers. No TS
108
- // task class is needed — a generic BridgeTask carries the method. This is
109
- // the path that makes a native-only plugin usable without per-handler
110
- // wrappers; without `category`, handlers stay bridge-only (back-compat).
111
- const nativeSurface = nativeHandlerInjection(manifest, pkg.name);
112
- if (nativeSurface) {
113
- const { plan, taskRegistrations: nativeRegs } = nativeSurface;
114
- taskRegistrations.push(...nativeRegs);
115
- const list = plansByCategory.get(plan.category) ?? [];
116
- list.push(plan);
117
- plansByCategory.set(plan.category, list);
106
+ // declared handler becomes an MCP action dispatching to the bare bridge
107
+ // method the C++ module registers. No TS task class is needed — a generic
108
+ // BridgeTask carries the method. A built-in category is injected into;
109
+ // a new category is provisioned as a tool the plugin owns. Without
110
+ // `category`, handlers stay bridge-only (back-compat).
111
+ const nativeSurface = nativeHandlerSurface(manifest, pkg.name, builtInCategories);
112
+ if (nativeSurface?.kind === "inject") {
113
+ taskRegistrations.push(...nativeSurface.taskRegistrations);
114
+ const list = plansByCategory.get(nativeSurface.plan.category) ?? [];
115
+ list.push(nativeSurface.plan);
116
+ plansByCategory.set(nativeSurface.plan.category, list);
117
+ }
118
+ else if (nativeSurface?.kind === "provide") {
119
+ const cat = nativeSurface.plan.category;
120
+ const existing = provisionByCategory.get(cat);
121
+ if (existing) {
122
+ warn("plugin", `${pkg.name}: nativeModule.category '${cat}' already claimed by '${existing.pluginName}'; skipping this provider`);
123
+ }
124
+ else {
125
+ provisionByCategory.set(cat, nativeSurface.plan);
126
+ taskRegistrations.push(...nativeSurface.taskRegistrations);
127
+ record.record.provided[cat] = Object.keys(nativeSurface.plan.spec.actions);
128
+ }
118
129
  }
119
130
  // Provided categories: claim each name (first writer wins). Subsequent
120
131
  // plugins that try to provide the same name are skipped with a clear
@@ -246,10 +257,15 @@ async function loadOne(entry, projectDir, serverVersion, builtInCategories, brid
246
257
  return skip(base, `inject target '${target}' is not a registered category. Valid: ${[...builtInCategories].sort().join(", ")}`);
247
258
  }
248
259
  }
249
- // The native-handler surfacing target must likewise be a real category.
260
+ // The native-handler surfacing target is either a built-in category (handlers
261
+ // inject into it) or a new category the plugin provisions. A new category must
262
+ // be a legal category name; cross-plugin collisions are resolved first-wins in
263
+ // loadPlugins.
250
264
  const nativeCategory = manifest.nativeModule?.category;
251
- if (nativeCategory && !builtInCategories.has(nativeCategory)) {
252
- return skip(base, `nativeModule.category '${nativeCategory}' is not a registered category. Valid: ${[...builtInCategories].sort().join(", ")}`);
265
+ if (nativeCategory &&
266
+ !builtInCategories.has(nativeCategory) &&
267
+ !/^[a-z][a-z0-9_]*$/.test(nativeCategory)) {
268
+ return skip(base, `nativeModule.category '${nativeCategory}' must be a built-in category or a valid new category name (lowercase identifier, /^[a-z][a-z0-9_]*$/)`);
253
269
  }
254
270
  // Provided categories must not collide with built-in category names.
255
271
  // Cross-plugin collisions are detected in the second pass in loadPlugins,
@@ -314,48 +330,73 @@ function skip(rec, reason) {
314
330
  return { record: rec };
315
331
  }
316
332
  /**
317
- * Build the injection plan and dispatch task registrations that surface a
318
- * native module's handlers as MCP actions. Returns null when the manifest
319
- * declares no `nativeModule.category` (handlers stay bridge-only).
333
+ * Surface a native module's handlers as MCP actions. Returns null when the
334
+ * manifest declares no `nativeModule.category` (handlers stay bridge-only).
320
335
  *
321
- * Each handler `h` maps to action `<actionPrefix>_h` in the target category,
322
- * dispatching to the bare bridge method `h` via a generic BridgeTask. The
323
- * handler's `schema` becomes the action's params and `timeoutSeconds` its
324
- * bridge-call timeout. Pure and disk-free so it can be unit-tested directly.
336
+ * When `category` is a built-in (per `builtInCategories`) the result is an
337
+ * `inject` plan: each handler `h` becomes `<category>(action="<prefix>_h")`.
338
+ * Otherwise it's a `provide` plan that owns a new `<category>` tool with
339
+ * unprefixed actions `<category>(action="h")`. Either way `h` dispatches to the
340
+ * bare bridge method `h` via a generic BridgeTask, carrying the handler's
341
+ * `timeoutSeconds`. Pure and disk-free so it can be unit-tested directly.
325
342
  */
326
- export function nativeHandlerInjection(manifest, pluginName) {
343
+ export function nativeHandlerSurface(manifest, pluginName, builtInCategories) {
327
344
  const native = manifest.nativeModule;
328
345
  if (!native?.category)
329
346
  return null;
330
347
  const cat = native.category;
331
- const actions = {};
332
348
  const taskRegistrations = [];
349
+ // One flat schema backs every action in a category, so a schema-level
350
+ // required param would be forced onto unrelated actions. Native handlers
351
+ // validate their own params (RequireString), so force every surfaced param
352
+ // optional regardless of what the manifest declares.
353
+ const optionalSchema = (schema) => schema
354
+ ? Object.fromEntries(Object.entries(schema).map(([k, f]) => [k, { ...f, required: false }]))
355
+ : undefined;
356
+ const timeoutMs = (seconds) => seconds ? seconds * 1000 : undefined;
357
+ if (builtInCategories.has(cat)) {
358
+ const actions = {};
359
+ for (const [hName, hSpec] of Object.entries(native.handlers)) {
360
+ // `task` is synthetic — mergeInjectionsIntoTool reads only description
361
+ // and schema; dispatch is wired through the registry registration below.
362
+ actions[hName] = {
363
+ task: `${manifest.actionPrefix}.${hName}`,
364
+ description: hSpec.description,
365
+ schema: optionalSchema(hSpec.schema),
366
+ };
367
+ const dispatchName = `${cat}.${manifest.actionPrefix}_${hName}`;
368
+ taskRegistrations.push({
369
+ name: dispatchName,
370
+ ctor: bridgeTaskClass(dispatchName, hName, undefined, timeoutMs(hSpec.timeoutSeconds)),
371
+ });
372
+ }
373
+ return {
374
+ kind: "inject",
375
+ plan: { category: cat, prefix: manifest.actionPrefix, pluginName, actions },
376
+ taskRegistrations,
377
+ };
378
+ }
379
+ // New category: provision a tool the plugin owns; actions are unprefixed.
380
+ const actions = {};
333
381
  for (const [hName, hSpec] of Object.entries(native.handlers)) {
334
- // One flat schema backs every action in the host category, so a
335
- // schema-level required param would be forced onto unrelated actions.
336
- // Native handlers validate their own params (RequireString), so force
337
- // every surfaced param optional regardless of what the manifest declares.
338
- const optionalSchema = hSpec.schema
339
- ? Object.fromEntries(Object.entries(hSpec.schema).map(([k, f]) => [k, { ...f, required: false }]))
340
- : undefined;
341
- // `task` is synthetic — mergeInjectionsIntoTool reads only description and
342
- // schema; dispatch is wired through the registry registration below.
343
382
  actions[hName] = {
344
- task: `${manifest.actionPrefix}.${hName}`,
383
+ task: `${cat}.${hName}`, // synthetic; buildProvidedTool ignores it
345
384
  description: hSpec.description,
346
- schema: optionalSchema,
385
+ schema: optionalSchema(hSpec.schema),
347
386
  };
348
- const dispatchName = `${cat}.${manifest.actionPrefix}_${hName}`;
349
- const timeoutMs = hSpec.timeoutSeconds
350
- ? hSpec.timeoutSeconds * 1000
351
- : undefined;
387
+ const dispatchName = `${cat}.${hName}`;
352
388
  taskRegistrations.push({
353
389
  name: dispatchName,
354
- ctor: bridgeTaskClass(dispatchName, hName, undefined, timeoutMs),
390
+ ctor: bridgeTaskClass(dispatchName, hName, undefined, timeoutMs(hSpec.timeoutSeconds)),
355
391
  });
356
392
  }
393
+ const spec = {
394
+ description: native.categoryDescription,
395
+ actions,
396
+ };
357
397
  return {
358
- plan: { category: cat, prefix: manifest.actionPrefix, pluginName, actions },
398
+ kind: "provide",
399
+ plan: { category: cat, pluginName, description: native.categoryDescription, spec },
359
400
  taskRegistrations,
360
401
  };
361
402
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"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"}
@@ -170,6 +170,7 @@ declare const NativeModuleSchema: z.ZodObject<{
170
170
  source: z.ZodString;
171
171
  supportedEngineVersions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
172
172
  category: z.ZodOptional<z.ZodString>;
173
+ categoryDescription: z.ZodOptional<z.ZodString>;
173
174
  handlers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
174
175
  description: z.ZodOptional<z.ZodString>;
175
176
  timeoutSeconds: z.ZodOptional<z.ZodNumber>;
@@ -218,12 +219,14 @@ declare const NativeModuleSchema: z.ZodObject<{
218
219
  timeoutSeconds?: number | undefined;
219
220
  }>;
220
221
  category?: string | undefined;
222
+ categoryDescription?: string | undefined;
221
223
  }, {
222
224
  uePluginName: string;
223
225
  minBridgeApi: number;
224
226
  source: string;
225
227
  supportedEngineVersions?: string[] | undefined;
226
228
  category?: string | undefined;
229
+ categoryDescription?: string | undefined;
227
230
  handlers?: Record<string, {
228
231
  description?: string | undefined;
229
232
  schema?: Record<string, {
@@ -336,6 +339,7 @@ export declare const PluginManifestSchema: z.ZodObject<{
336
339
  source: z.ZodString;
337
340
  supportedEngineVersions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
338
341
  category: z.ZodOptional<z.ZodString>;
342
+ categoryDescription: z.ZodOptional<z.ZodString>;
339
343
  handlers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
340
344
  description: z.ZodOptional<z.ZodString>;
341
345
  timeoutSeconds: z.ZodOptional<z.ZodNumber>;
@@ -384,12 +388,14 @@ export declare const PluginManifestSchema: z.ZodObject<{
384
388
  timeoutSeconds?: number | undefined;
385
389
  }>;
386
390
  category?: string | undefined;
391
+ categoryDescription?: string | undefined;
387
392
  }, {
388
393
  uePluginName: string;
389
394
  minBridgeApi: number;
390
395
  source: string;
391
396
  supportedEngineVersions?: string[] | undefined;
392
397
  category?: string | undefined;
398
+ categoryDescription?: string | undefined;
393
399
  handlers?: Record<string, {
394
400
  description?: string | undefined;
395
401
  schema?: Record<string, {
@@ -516,6 +522,7 @@ export declare const PluginManifestSchema: z.ZodObject<{
516
522
  timeoutSeconds?: number | undefined;
517
523
  }>;
518
524
  category?: string | undefined;
525
+ categoryDescription?: string | undefined;
519
526
  } | undefined;
520
527
  }, {
521
528
  actionPrefix: string;
@@ -564,6 +571,7 @@ export declare const PluginManifestSchema: z.ZodObject<{
564
571
  source: string;
565
572
  supportedEngineVersions?: string[] | undefined;
566
573
  category?: string | undefined;
574
+ categoryDescription?: string | undefined;
567
575
  handlers?: Record<string, {
568
576
  description?: string | undefined;
569
577
  schema?: Record<string, {
@@ -67,11 +67,17 @@ const NativeModuleSchema = z.object({
67
67
  minBridgeApi: z.number().int().nonnegative(),
68
68
  source: z.string().min(1),
69
69
  supportedEngineVersions: z.array(z.string().min(1)).default([]),
70
- // Built-in category to surface this module's handlers into as MCP actions.
71
- // When set, each handler `h` becomes `<category>(action="<actionPrefix>_h")`
72
- // dispatching to the bare bridge method `h`. When omitted, handlers are
73
- // registered on the bridge but not exposed as actions (back-compat).
70
+ // Category to surface this module's handlers into as MCP actions. When it
71
+ // names a built-in category, each handler `h` is injected as
72
+ // `<category>(action="<actionPrefix>_h")`. When it names a new (non-built-in)
73
+ // category, that category is provisioned as a top-level tool the plugin owns
74
+ // and handlers surface unprefixed: `<category>(action="h")`. Either way the
75
+ // action dispatches to the bare bridge method `h`. Omitted → handlers stay
76
+ // registered on the bridge but exposed as no action (back-compat).
74
77
  category: z.string().min(1).optional(),
78
+ // Summary shown on a provisioned (new) category's tool. Ignored when
79
+ // `category` is a built-in.
80
+ categoryDescription: z.string().min(1).optional(),
75
81
  handlers: z
76
82
  .record(z.object({
77
83
  description: z.string().optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/plugin/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/plugin/manifest.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tools": 21,
3
- "actions": 542,
4
- "bridgeActions": 514,
3
+ "actions": 545,
4
+ "bridgeActions": 517,
5
5
  "localActions": 28,
6
6
  "perTool": {
7
7
  "project": 25,
@@ -19,13 +19,13 @@
19
19
  "editor": 54,
20
20
  "reflection": 8,
21
21
  "gameplay": 53,
22
- "gas": 9,
22
+ "gas": 12,
23
23
  "networking": 11,
24
24
  "demo": 3,
25
25
  "feedback": 1,
26
26
  "statetree": 35,
27
27
  "plugins": 2
28
28
  },
29
- "generatedAt": "2026-05-29T19:39:53.795Z",
30
- "version": "1.0.68"
29
+ "generatedAt": "2026-05-29T20:36:26.666Z",
30
+ "version": "1.0.70"
31
31
  }
package/dist/tools/gas.js CHANGED
@@ -10,6 +10,9 @@ export const gasTool = categoryTool("gas", "Gameplay Ability System: abilities,
10
10
  set_effect_modifier: bp("Add modifier. Params: effectPath, attribute, operation?, magnitude?", "set_effect_modifier"),
11
11
  create_cue: bp("Create GameplayCue. Params: name, packagePath?, cueType?", "create_gameplay_cue"),
12
12
  get_info: bp("Inspect GAS setup. Params: blueprintPath", "get_gas_info"),
13
+ apply_effect: bp("Apply a GameplayEffect to a live actor's ASC (agnostic stat/damage stimulus - uses the game's own effect). Params: actorLabel, effectClass (content path or class name), level?, setByCaller? ({tag-or-name: magnitude}), world? (auto|pie|editor, default auto)", "apply_effect"),
14
+ set_attribute: bp("Set a gameplay attribute's base value on a live actor's ASC (recalculates CurrentValue through the aggregator). Params: actorLabel, attribute (Health | SetName.Health), value, world?", "set_attribute"),
15
+ get_attribute: bp("Read gameplay attribute base + current values on a live actor's ASC. Omit attribute to list all. Params: actorLabel, attribute?, world?", "get_attribute"),
13
16
  }, undefined, {
14
17
  blueprintPath: z.string().optional(),
15
18
  name: z.string().optional(),
@@ -31,5 +34,12 @@ export const gasTool = categoryTool("gas", "Gameplay Ability System: abilities,
31
34
  magnitude: z.number().optional(),
32
35
  durationPolicy: z.string().optional(),
33
36
  cueType: z.string().optional(),
37
+ // Runtime GAS control (apply_effect / set_attribute / get_attribute)
38
+ actorLabel: z.string().optional().describe("Live actor label/name for runtime GAS actions"),
39
+ effectClass: z.string().optional().describe("apply_effect: GameplayEffect content path or class name"),
40
+ level: z.number().optional().describe("apply_effect: effect level (default 1)"),
41
+ setByCaller: z.record(z.number()).optional().describe("apply_effect: SetByCaller magnitudes keyed by gameplay tag or name"),
42
+ value: z.number().optional().describe("set_attribute: new base value"),
43
+ world: z.string().optional().describe("Runtime world scope: auto (default) | pie | editor"),
34
44
  });
35
45
  //# sourceMappingURL=gas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gas.js","sourceRoot":"","sources":["../../src/tools/gas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,EAAE,EAAgB,MAAM,aAAa,CAAC;AAE7D,MAAM,CAAC,MAAM,OAAO,GAAY,YAAY,CAC1C,KAAK,EACL,oEAAoE,EACpE;IACE,OAAO,EAAc,EAAE,CAAC,mEAAmE,EAAE,8BAA8B,CAAC;IAC5H,oBAAoB,EAAE,EAAE,CAAC,oDAAoD,EAAE,sBAAsB,CAAC;IACtG,aAAa,EAAQ,EAAE,CAAC,8EAA8E,EAAE,eAAe,CAAC;IACxH,cAAc,EAAO,EAAE,CAAC,qEAAqE,EAAE,yBAAyB,CAAC;IACzH,gBAAgB,EAAK,EAAE,CAAC,0IAA0I,EAAE,kBAAkB,CAAC;IACvL,aAAa,EAAQ,EAAE,CAAC,uEAAuE,EAAE,wBAAwB,CAAC;IAC1H,mBAAmB,EAAE,EAAE,CAAC,qEAAqE,EAAE,qBAAqB,CAAC;IACrH,UAAU,EAAW,EAAE,CAAC,0DAA0D,EAAE,qBAAqB,CAAC;IAC1G,QAAQ,EAAa,EAAE,CAAC,0CAA0C,EAAE,cAAc,CAAC;CACpF,EACD,SAAS,EACT;IACE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,yBAAyB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzD,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxD,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxD,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CACF,CAAC"}
1
+ {"version":3,"file":"gas.js","sourceRoot":"","sources":["../../src/tools/gas.ts"],"names":[],"mappings":"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"}
@@ -2927,6 +2927,24 @@ tasks:
2927
2927
  description: "Inspect GAS setup. Params: blueprintPath"
2928
2928
  options:
2929
2929
  method: get_gas_info
2930
+ gas.apply_effect:
2931
+ class_path: ue-mcp.bridge
2932
+ group: gas
2933
+ description: "Apply a GameplayEffect to a live actor's ASC (agnostic stat/damage stimulus - uses the game's own effect). Params: actorLabel, effectClass (content path or class name), level?, setByCaller? ({tag-or-name: magnitude}), world? (auto|pie|editor, default auto)"
2934
+ options:
2935
+ method: apply_effect
2936
+ gas.set_attribute:
2937
+ class_path: ue-mcp.bridge
2938
+ group: gas
2939
+ description: "Set a gameplay attribute's base value on a live actor's ASC (recalculates CurrentValue through the aggregator). Params: actorLabel, attribute (Health | SetName.Health), value, world?"
2940
+ options:
2941
+ method: set_attribute
2942
+ gas.get_attribute:
2943
+ class_path: ue-mcp.bridge
2944
+ group: gas
2945
+ description: "Read gameplay attribute base + current values on a live actor's ASC. Omit attribute to list all. Params: actorLabel, attribute?, world?"
2946
+ options:
2947
+ method: get_attribute
2930
2948
 
2931
2949
  # ── networking ──
2932
2950
  networking.set_replicates:
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ue-mcp",
3
- "version": "1.0.68",
4
- "description": "Unreal Engine MCP server - 21 tools, 542+ actions for AI-driven editor control",
3
+ "version": "1.0.70",
4
+ "description": "Unreal Engine MCP server - 21 tools, 545+ actions for AI-driven editor control",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "exports": {
@@ -33,6 +33,9 @@ void FGasHandlers::RegisterHandlers(FMCPHandlerRegistry& Registry)
33
33
  Registry.RegisterHandler(TEXT("add_attribute"), &AddAttribute);
34
34
  Registry.RegisterHandler(TEXT("set_ability_tags"), &SetAbilityTags);
35
35
  Registry.RegisterHandler(TEXT("set_effect_modifier"), &SetEffectModifier);
36
+ Registry.RegisterHandler(TEXT("apply_effect"), &ApplyEffect);
37
+ Registry.RegisterHandler(TEXT("set_attribute"), &SetAttribute);
38
+ Registry.RegisterHandler(TEXT("get_attribute"), &GetAttribute);
36
39
  }
37
40
 
38
41
  TSharedPtr<FJsonValue> FGasHandlers::CreateGasBlueprint(
@@ -32,4 +32,10 @@ private:
32
32
  static TSharedPtr<FJsonValue> AddAttribute(const TSharedPtr<FJsonObject>& Params);
33
33
  static TSharedPtr<FJsonValue> SetAbilityTags(const TSharedPtr<FJsonObject>& Params);
34
34
  static TSharedPtr<FJsonValue> SetEffectModifier(const TSharedPtr<FJsonObject>& Params);
35
+
36
+ // Runtime GAS control (operates on a live actor's AbilitySystemComponent,
37
+ // PIE by default). Implemented in GasHandlers_Runtime.cpp.
38
+ static TSharedPtr<FJsonValue> ApplyEffect(const TSharedPtr<FJsonObject>& Params);
39
+ static TSharedPtr<FJsonValue> SetAttribute(const TSharedPtr<FJsonObject>& Params);
40
+ static TSharedPtr<FJsonValue> GetAttribute(const TSharedPtr<FJsonObject>& Params);
35
41
  };
@@ -0,0 +1,300 @@
1
+ // Runtime GAS control: apply a GameplayEffect, and get/set attributes on a
2
+ // live actor's AbilitySystemComponent. These are the agnostic "affect a stat"
3
+ // test stimuli - they drive the game's OWN effects and attributes rather than
4
+ // assuming a damage pipeline, so they work for any GAS game. Non-GAS games set
5
+ // reflection-exposed stats via level.set_actor_property or call their own
6
+ // functions via editor.invoke_function instead.
7
+
8
+ #include "GasHandlers.h"
9
+ #include "HandlerUtils.h"
10
+ #include "Dom/JsonObject.h"
11
+ #include "Dom/JsonValue.h"
12
+ #include "GameFramework/Actor.h"
13
+ #include "AbilitySystemComponent.h"
14
+ #include "AbilitySystemBlueprintLibrary.h"
15
+ #include "AttributeSet.h"
16
+ #include "GameplayEffect.h"
17
+ #include "GameplayEffectTypes.h"
18
+ #include "GameplayTagContainer.h"
19
+
20
+ namespace
21
+ {
22
+ // Resolve the world for this call. Defaults to "auto" (prefer PIE), since
23
+ // runtime GAS control is almost always exercised during Play-In-Editor.
24
+ UWorld* ResolveRuntimeWorld(const TSharedPtr<FJsonObject>& Params)
25
+ {
26
+ return ResolveWorldScope(OptionalString(Params, TEXT("world"), TEXT("auto")));
27
+ }
28
+
29
+ // Find the actor (by label or name) in the resolved world and return its
30
+ // AbilitySystemComponent. On any failure writes a structured error to
31
+ // OutError and returns nullptr.
32
+ UAbilitySystemComponent* ResolveASC(
33
+ const TSharedPtr<FJsonObject>& Params,
34
+ AActor*& OutActor,
35
+ TSharedPtr<FJsonValue>& OutError)
36
+ {
37
+ FString ActorLabel;
38
+ if (auto Err = RequireString(Params, TEXT("actorLabel"), ActorLabel))
39
+ {
40
+ OutError = Err;
41
+ return nullptr;
42
+ }
43
+
44
+ UWorld* World = ResolveRuntimeWorld(Params);
45
+ if (!World)
46
+ {
47
+ OutError = MCPError(TEXT("No world available. For PIE actors, start Play-In-Editor first."));
48
+ return nullptr;
49
+ }
50
+
51
+ AActor* Actor = FindActorByLabelOrName(World, ActorLabel);
52
+ if (!Actor)
53
+ {
54
+ OutError = MCPError(FString::Printf(TEXT("Actor not found: %s"), *ActorLabel));
55
+ return nullptr;
56
+ }
57
+ OutActor = Actor;
58
+
59
+ UAbilitySystemComponent* ASC =
60
+ UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(Actor);
61
+ if (!ASC)
62
+ {
63
+ OutError = MCPError(FString::Printf(
64
+ TEXT("Actor '%s' has no AbilitySystemComponent (not a GAS actor)"), *ActorLabel));
65
+ return nullptr;
66
+ }
67
+ return ASC;
68
+ }
69
+
70
+ // Resolve a FGameplayAttribute by name against the ASC's spawned attribute
71
+ // sets. Accepts a bare property name ("Health") or qualified forms
72
+ // ("HealthSet.Health" / "HealthSet:Health"). Returns an invalid attribute
73
+ // on miss; writes the matched set name to OutSetName on hit.
74
+ FGameplayAttribute FindAttributeByName(
75
+ UAbilitySystemComponent* ASC,
76
+ const FString& Name,
77
+ FString& OutSetName)
78
+ {
79
+ for (const UAttributeSet* Set : ASC->GetSpawnedAttributes())
80
+ {
81
+ if (!Set) continue;
82
+ UClass* SetClass = Set->GetClass();
83
+ const FString SetName = SetClass->GetName();
84
+ for (TFieldIterator<FProperty> It(SetClass); It; ++It)
85
+ {
86
+ FStructProperty* SProp = CastField<FStructProperty>(*It);
87
+ if (!SProp || SProp->Struct != FGameplayAttributeData::StaticStruct()) continue;
88
+ const FString PropName = SProp->GetName();
89
+ if (PropName == Name
90
+ || (SetName + TEXT(".") + PropName) == Name
91
+ || (SetName + TEXT(":") + PropName) == Name)
92
+ {
93
+ OutSetName = SetName;
94
+ return FGameplayAttribute(SProp);
95
+ }
96
+ }
97
+ }
98
+ return FGameplayAttribute();
99
+ }
100
+
101
+ // Append one attribute's name/base/current to a JSON object.
102
+ void WriteAttributeRow(
103
+ TSharedPtr<FJsonObject> Obj,
104
+ UAbilitySystemComponent* ASC,
105
+ const FGameplayAttribute& Attr)
106
+ {
107
+ Obj->SetStringField(TEXT("attribute"), Attr.GetName());
108
+ Obj->SetNumberField(TEXT("baseValue"), ASC->GetNumericAttributeBase(Attr));
109
+ Obj->SetNumberField(TEXT("currentValue"), ASC->GetNumericAttribute(Attr));
110
+ }
111
+
112
+ // Resolve a UGameplayEffect subclass from a content path or short class name.
113
+ UClass* ResolveEffectClass(const FString& Spec)
114
+ {
115
+ auto IsEffect = [](UClass* C) { return C && C->IsChildOf(UGameplayEffect::StaticClass()); };
116
+
117
+ if (Spec.Contains(TEXT("/")))
118
+ {
119
+ // Direct class load (native or already-_C class path).
120
+ if (UClass* C = LoadObject<UClass>(nullptr, *Spec); IsEffect(C)) return C;
121
+ // Blueprint generated class: "/Game/Foo/GE_Bar" -> ".../GE_Bar.GE_Bar_C".
122
+ FString AssetName;
123
+ Spec.Split(TEXT("/"), nullptr, &AssetName, ESearchCase::CaseSensitive, ESearchDir::FromEnd);
124
+ const FString ClassPath = Spec + TEXT(".") + AssetName + TEXT("_C");
125
+ if (UClass* C = LoadObject<UClass>(nullptr, *ClassPath); IsEffect(C)) return C;
126
+ // Fall back to loading the Blueprint and taking its generated class.
127
+ if (UBlueprint* BP = LoadAssetByPath<UBlueprint>(Spec))
128
+ {
129
+ if (IsEffect(BP->GeneratedClass)) return BP->GeneratedClass;
130
+ }
131
+ return nullptr;
132
+ }
133
+
134
+ UClass* C = FindClassByShortName(Spec);
135
+ return IsEffect(C) ? C : nullptr;
136
+ }
137
+ }
138
+
139
+ TSharedPtr<FJsonValue> FGasHandlers::ApplyEffect(const TSharedPtr<FJsonObject>& Params)
140
+ {
141
+ MCP_CHECK_GAME_THREAD();
142
+
143
+ FString EffectSpec;
144
+ if (auto Err = RequireStringAlt(Params, TEXT("effectClass"), TEXT("effectPath"), EffectSpec)) return Err;
145
+
146
+ AActor* Actor = nullptr;
147
+ TSharedPtr<FJsonValue> Err;
148
+ UAbilitySystemComponent* ASC = ResolveASC(Params, Actor, Err);
149
+ if (!ASC) return Err;
150
+
151
+ UClass* EffectClass = ResolveEffectClass(EffectSpec);
152
+ if (!EffectClass)
153
+ {
154
+ return MCPError(FString::Printf(
155
+ TEXT("GameplayEffect class not found: %s (pass a content path or class name)"), *EffectSpec));
156
+ }
157
+
158
+ const float Level = static_cast<float>(OptionalNumber(Params, TEXT("level"), 1.0));
159
+
160
+ FGameplayEffectContextHandle Context = ASC->MakeEffectContext();
161
+ Context.AddInstigator(Actor, Actor);
162
+ FGameplayEffectSpecHandle SpecHandle = ASC->MakeOutgoingSpec(EffectClass, Level, Context);
163
+ if (!SpecHandle.IsValid() || !SpecHandle.Data.IsValid())
164
+ {
165
+ return MCPError(TEXT("Failed to build a GameplayEffectSpec for the effect"));
166
+ }
167
+
168
+ // SetByCaller magnitudes: { "<tag-or-name>": <number> }. Prefer a gameplay
169
+ // tag when the key resolves to one; otherwise use the FName overload.
170
+ const TSharedPtr<FJsonObject>* SetByCaller = nullptr;
171
+ TArray<FString> AppliedKeys;
172
+ if (Params->TryGetObjectField(TEXT("setByCaller"), SetByCaller) && SetByCaller && (*SetByCaller).IsValid())
173
+ {
174
+ for (const auto& KV : (*SetByCaller)->Values)
175
+ {
176
+ double Mag = 0.0;
177
+ if (!KV.Value.IsValid() || !KV.Value->TryGetNumber(Mag)) continue;
178
+ const FGameplayTag Tag = FGameplayTag::RequestGameplayTag(FName(*KV.Key), /*ErrorIfNotFound*/ false);
179
+ if (Tag.IsValid())
180
+ {
181
+ SpecHandle.Data->SetSetByCallerMagnitude(Tag, static_cast<float>(Mag));
182
+ }
183
+ else
184
+ {
185
+ SpecHandle.Data->SetSetByCallerMagnitude(FName(*KV.Key), static_cast<float>(Mag));
186
+ }
187
+ AppliedKeys.Add(KV.Key);
188
+ }
189
+ }
190
+
191
+ const FActiveGameplayEffectHandle Active = ASC->ApplyGameplayEffectSpecToSelf(*SpecHandle.Data);
192
+
193
+ auto Result = MCPSuccess();
194
+ Result->SetStringField(TEXT("actorLabel"), Actor->GetActorLabel());
195
+ Result->SetStringField(TEXT("effect"), EffectClass->GetPathName());
196
+ Result->SetNumberField(TEXT("level"), Level);
197
+ Result->SetBoolField(TEXT("applied"), Active.WasSuccessfullyApplied());
198
+ // Duration/Infinite effects produce a live handle; instant effects don't.
199
+ Result->SetBoolField(TEXT("durationActive"), Active.IsValid());
200
+ if (AppliedKeys.Num() > 0)
201
+ {
202
+ TArray<TSharedPtr<FJsonValue>> Keys;
203
+ for (const FString& K : AppliedKeys) Keys.Add(MakeShared<FJsonValueString>(K));
204
+ Result->SetArrayField(TEXT("setByCaller"), Keys);
205
+ }
206
+ return MCPResult(Result);
207
+ }
208
+
209
+ TSharedPtr<FJsonValue> FGasHandlers::SetAttribute(const TSharedPtr<FJsonObject>& Params)
210
+ {
211
+ MCP_CHECK_GAME_THREAD();
212
+
213
+ FString AttrName;
214
+ if (auto Err = RequireString(Params, TEXT("attribute"), AttrName)) return Err;
215
+
216
+ double NewValue = 0.0;
217
+ if (!Params->TryGetNumberField(TEXT("value"), NewValue))
218
+ {
219
+ return MCPError(TEXT("Missing required parameter 'value'"));
220
+ }
221
+
222
+ AActor* Actor = nullptr;
223
+ TSharedPtr<FJsonValue> Err;
224
+ UAbilitySystemComponent* ASC = ResolveASC(Params, Actor, Err);
225
+ if (!ASC) return Err;
226
+
227
+ FString SetName;
228
+ const FGameplayAttribute Attr = FindAttributeByName(ASC, AttrName, SetName);
229
+ if (!Attr.IsValid())
230
+ {
231
+ return MCPError(FString::Printf(
232
+ TEXT("Attribute '%s' not found on '%s'. Use get_attribute with no 'attribute' to list available ones."),
233
+ *AttrName, *Actor->GetActorLabel()));
234
+ }
235
+
236
+ const float OldBase = ASC->GetNumericAttributeBase(Attr);
237
+ // SetNumericAttributeBase recalculates CurrentValue through the aggregator,
238
+ // so dependent modifiers stay consistent (unlike a raw property write).
239
+ ASC->SetNumericAttributeBase(Attr, static_cast<float>(NewValue));
240
+
241
+ auto Result = MCPSuccess();
242
+ MCPSetUpdated(Result);
243
+ Result->SetStringField(TEXT("actorLabel"), Actor->GetActorLabel());
244
+ Result->SetStringField(TEXT("attributeSet"), SetName);
245
+ Result->SetStringField(TEXT("attribute"), Attr.GetName());
246
+ Result->SetNumberField(TEXT("previousBaseValue"), OldBase);
247
+ Result->SetNumberField(TEXT("baseValue"), ASC->GetNumericAttributeBase(Attr));
248
+ Result->SetNumberField(TEXT("currentValue"), ASC->GetNumericAttribute(Attr));
249
+ return MCPResult(Result);
250
+ }
251
+
252
+ TSharedPtr<FJsonValue> FGasHandlers::GetAttribute(const TSharedPtr<FJsonObject>& Params)
253
+ {
254
+ MCP_CHECK_GAME_THREAD();
255
+
256
+ AActor* Actor = nullptr;
257
+ TSharedPtr<FJsonValue> Err;
258
+ UAbilitySystemComponent* ASC = ResolveASC(Params, Actor, Err);
259
+ if (!ASC) return Err;
260
+
261
+ auto Result = MCPSuccess();
262
+ Result->SetStringField(TEXT("actorLabel"), Actor->GetActorLabel());
263
+
264
+ const FString AttrName = OptionalString(Params, TEXT("attribute"));
265
+ if (!AttrName.IsEmpty())
266
+ {
267
+ FString SetName;
268
+ const FGameplayAttribute Attr = FindAttributeByName(ASC, AttrName, SetName);
269
+ if (!Attr.IsValid())
270
+ {
271
+ return MCPError(FString::Printf(
272
+ TEXT("Attribute '%s' not found on '%s'"), *AttrName, *Actor->GetActorLabel()));
273
+ }
274
+ Result->SetStringField(TEXT("attributeSet"), SetName);
275
+ WriteAttributeRow(Result, ASC, Attr);
276
+ return MCPResult(Result);
277
+ }
278
+
279
+ // No attribute named: enumerate every attribute across all spawned sets.
280
+ TArray<TSharedPtr<FJsonValue>> Rows;
281
+ for (const UAttributeSet* Set : ASC->GetSpawnedAttributes())
282
+ {
283
+ if (!Set) continue;
284
+ UClass* SetClass = Set->GetClass();
285
+ const FString SetName = SetClass->GetName();
286
+ for (TFieldIterator<FProperty> It(SetClass); It; ++It)
287
+ {
288
+ FStructProperty* SProp = CastField<FStructProperty>(*It);
289
+ if (!SProp || SProp->Struct != FGameplayAttributeData::StaticStruct()) continue;
290
+ const FGameplayAttribute Attr(SProp);
291
+ TSharedPtr<FJsonObject> Row = MakeShared<FJsonObject>();
292
+ Row->SetStringField(TEXT("attributeSet"), SetName);
293
+ WriteAttributeRow(Row, ASC, Attr);
294
+ Rows.Add(MakeShared<FJsonValueObject>(Row));
295
+ }
296
+ }
297
+ Result->SetArrayField(TEXT("attributes"), Rows);
298
+ Result->SetNumberField(TEXT("count"), Rows.Num());
299
+ return MCPResult(Result);
300
+ }