@uemcp/server 1.12.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/index.mjs +10 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -693,6 +693,7 @@ This is intended to let an MCP client resolve the canonical Unreal project ident
|
|
|
693
693
|
- `create_nav_area` makes a nav area Blueprint under `NavArea` (or one of the stock parents) and reports `generatedClassPath` — the class, not the asset, is what a modifier volume or a link references
|
|
694
694
|
- `add_nav_modifier_volume` places an `ANavModifierVolume` and builds its cube brush through the same actor factory the place-actor panel uses. Without that brush the volume covers nothing, so a non-positive extent is refused rather than placed
|
|
695
695
|
- `add_nav_link` replaces the proxy's default link with the ones the request carries. `left` and `right` are offsets from the actor, the space the level editor's own link handles move in, and the response reports them in world space so a link and the `find_path` that crosses it can be compared directly
|
|
696
|
+
- Detour joins a link only when its two ends lie in the same navmesh tile or neighboring ones. A longer link still builds, connected at one end, so nothing can cross it and the build reports no error; `add_nav_link` says so in `message` when a link spans more than one tile (`TileSizeUU`, 1000 units by default)
|
|
696
697
|
- All three leave the navmesh untouched until the next `build_navigation`, and say so through `rebuildRequired`
|
|
697
698
|
|
|
698
699
|
### `find_path` / `test_reachability`
|
|
@@ -704,10 +705,10 @@ This is intended to let an MCP client resolve the canonical Unreal project ident
|
|
|
704
705
|
|
|
705
706
|
### `create_smart_object_definition` / `get_smart_object_definition` / `add_smart_object_component`
|
|
706
707
|
|
|
707
|
-
- Backed by the SmartObjects engine plugin
|
|
708
|
+
- Backed by the SmartObjects engine plugin through the `MCPBridgeSmartObjects` add-on (see [Add-ons](../../plugins/ue-plugin/README.md#add-ons)). Until that add-on is enabled, these tools are hidden
|
|
708
709
|
- A definition is created with its slots in one call: offset and rotation relative to the owning actor, activity tags, an enabled flag and behavior definitions (instanced `USmartObjectBehaviorDefinition` subclasses configured through `params`). Activity tags must already be registered; a definition missing one is refused and nothing is left behind
|
|
709
710
|
- Both the create and the read report `valid` and the engine's `validationMessages`. The Smart Object subsystem refuses to register a component whose definition fails validation, most often a slot with no behavior definition and no default, so `valid: false` means nothing can ever claim it
|
|
710
|
-
- `add_smart_object_component` takes exactly one of `blueprintPath` (the Blueprint is recompiled) or `actorPath` (a placed actor in the editor level). An existing Smart Object component is pointed at the new definition rather than joined by a second, because an actor carrying two registers as two objects; `created` says which happened. The component registers with the subsystem when play begins
|
|
711
|
+
- `add_smart_object_component` takes exactly one of `blueprintPath` (the Blueprint is recompiled) or `actorPath` (a placed actor in the editor level). An existing Smart Object component is pointed at the new definition rather than joined by a second, because an actor carrying two registers as two objects; `created` says which happened. A Blueprint that inherits one from its parent class is refused with `inherited_smart_object_component`, since that component belongs to the parent. The component registers with the subsystem when play begins
|
|
711
712
|
|
|
712
713
|
### `create_mass_entity_config` / `edit_mass_entity_config` / `get_mass_entity_config` / `validate_mass_entity_config`
|
|
713
714
|
|
|
@@ -715,13 +716,13 @@ This is intended to let an MCP client resolve the canonical Unreal project ident
|
|
|
715
716
|
- `edit_mass_entity_config` applies `add`, `remove` and `set` edits in order and reports each one. Traits are named by class (`MassMovementTrait`, `MassLODCollectorTrait`, `MassVisualizationTrait`, `MassStateTreeTrait`, or a `/Script/Module.Class` path), and properties are `{ propertyPath, value }` pairs in exported-text form, the same shape `set_asset_property` takes. Only the config's own traits are edited, never a parent's. A new trait whose properties are rejected is taken back out
|
|
716
717
|
- `get_mass_entity_config` reads the parent and each own trait with its editable properties as exported text, trimmed by encoded size with `truncated` set
|
|
717
718
|
- `validate_mass_entity_config` builds the entity template in the editor world, the way the asset editor's Validate button does, and returns the engine's own error and warning lines verbatim in `messages`
|
|
718
|
-
-
|
|
719
|
+
- Backed by the `MassGameplay` engine plugin through the `MCPBridgeMass` add-on (see [Add-ons](../../plugins/ue-plugin/README.md#add-ons)). Until that add-on is enabled, these tools are hidden. `MassAI` is optional: without it, its traits (`MassStateTreeTrait` and the navigation ones) do not resolve and the tools say so. Validation returns `state: 'unsupported'` with a reason when the editor world has no Mass entity subsystem (`mass.RuntimeSubsystemsEnabled` off)
|
|
719
720
|
|
|
720
721
|
### `diagnose_navmesh`
|
|
721
722
|
|
|
722
723
|
- A read-only audit of the editor level's navmesh: missing `NavMeshBoundsVolume`s, no navigation data or an empty navmesh, disconnected islands, and spawn points that are off the navmesh or cannot path to the first one. Each finding lands in `issues` with a `code`, and `healthy` is true when there are none. Nothing is rebuilt or fixed
|
|
723
724
|
- Islands are the connected components of the Recast polygon graph, nav links included, listed largest walkable area first with poly count, area and bounds. One-way links still join two areas, so a drop-down ledge is not reported as a stray island. `islandCount` stays the full count when `maxIslands` cuts the list
|
|
724
|
-
- Every `PlayerStart` is checked by default; AI spawners have no common base class, so a level's own spawn actors are named in `spawnActorPaths`. Player starts come first, and the first spawn on the navmesh is the anchor every other spawn is path-tested against with the same query `find_path` runs. Spawns on different islands are reported unreachable from the island map without a search
|
|
725
|
+
- Every `PlayerStart` is checked by default; AI spawners have no common base class, so a level's own spawn actors are named in `spawnActorPaths`. Player starts come first, and the first spawn on the navmesh is the anchor every other spawn is path-tested against with the same query `find_path` runs. Spawns on different islands are reported unreachable from the island map without a search. A spawn the anchor reaches is also path-tested back to it, and one with no way back (past a one-way link) is reported as `spawn_cannot_return`. Every spawn is checked; only the returned `spawnPoints` list is capped
|
|
725
726
|
- An island no spawn point stands on is reported as `island_without_spawn`: the isolated platform an AI can be placed on but never walk off. A level with no navmesh at all reports that once rather than blaming every spawn point for it
|
|
726
727
|
|
|
727
728
|
## MCP Resources
|
package/dist/index.mjs
CHANGED
|
@@ -11262,7 +11262,8 @@ const BRIDGE_NAV_DIAGNOSTIC_ISSUE_CODES = [
|
|
|
11262
11262
|
"island_without_spawn",
|
|
11263
11263
|
"spawn_not_found",
|
|
11264
11264
|
"spawn_off_navmesh",
|
|
11265
|
-
"spawn_unreachable"
|
|
11265
|
+
"spawn_unreachable",
|
|
11266
|
+
"spawn_cannot_return"
|
|
11266
11267
|
];
|
|
11267
11268
|
const BRIDGE_NAV_SPAWN_POINT_KINDS = ["player_start", "actor"];
|
|
11268
11269
|
const bridgeDiagnoseNavmeshRequestSchema = z.object({
|
|
@@ -11293,7 +11294,8 @@ const navDiagnosticSpawnPointSchema = z.object({
|
|
|
11293
11294
|
onNavMesh: z.boolean(),
|
|
11294
11295
|
pathLength: z.number().optional(),
|
|
11295
11296
|
projectedLocation: navPointSchema.optional(),
|
|
11296
|
-
reachableFromAnchor: z.boolean()
|
|
11297
|
+
reachableFromAnchor: z.boolean(),
|
|
11298
|
+
returnsToAnchor: z.boolean()
|
|
11297
11299
|
});
|
|
11298
11300
|
const navDiagnosticIssueSchema = z.object({
|
|
11299
11301
|
actorPath: z.string().optional(),
|
|
@@ -11385,8 +11387,8 @@ const bridgeAddSmartObjectComponentRequestSchema = bridgeAddSmartObjectComponent
|
|
|
11385
11387
|
path: ["blueprintPath"]
|
|
11386
11388
|
});
|
|
11387
11389
|
const bridgeSmartObjectSlotReportSchema = z.object({
|
|
11388
|
-
activityTags: z.array(z.string())
|
|
11389
|
-
behaviorDefinitions: z.array(z.string())
|
|
11390
|
+
activityTags: z.array(z.string()),
|
|
11391
|
+
behaviorDefinitions: z.array(z.string()),
|
|
11390
11392
|
enabled: z.boolean(),
|
|
11391
11393
|
index: z.number().int().min(0),
|
|
11392
11394
|
name: z.string(),
|
|
@@ -11394,9 +11396,9 @@ const bridgeSmartObjectSlotReportSchema = z.object({
|
|
|
11394
11396
|
rotation: bridgeRotatorSchema
|
|
11395
11397
|
});
|
|
11396
11398
|
const smartObjectDefinitionReportFields = {
|
|
11397
|
-
activityTags: z.array(z.string())
|
|
11398
|
-
defaultBehaviorDefinitions: z.array(z.string())
|
|
11399
|
-
slots: z.array(bridgeSmartObjectSlotReportSchema)
|
|
11399
|
+
activityTags: z.array(z.string()),
|
|
11400
|
+
defaultBehaviorDefinitions: z.array(z.string()),
|
|
11401
|
+
slots: z.array(bridgeSmartObjectSlotReportSchema),
|
|
11400
11402
|
valid: z.boolean(),
|
|
11401
11403
|
validationMessages: z.array(z.string()).max(32)
|
|
11402
11404
|
};
|
|
@@ -11611,7 +11613,7 @@ function createBridgeValidateMassEntityConfigRequest(assetPath, requestId = rand
|
|
|
11611
11613
|
}
|
|
11612
11614
|
//#endregion
|
|
11613
11615
|
//#region src/version.ts
|
|
11614
|
-
const SERVER_VERSION = "1.
|
|
11616
|
+
const SERVER_VERSION = "1.13.0";
|
|
11615
11617
|
//#endregion
|
|
11616
11618
|
//#region src/bridgeSocketClient.ts
|
|
11617
11619
|
var BridgeSocketError = class extends Error {
|