MCP server for Unreal Engine editor automation and asset/actor/animation/audio/AI management via JSON-RPC commands
This server has 28 tools with significant structural gaps. Most tools have basic descriptions (50-150 chars), but parameter documentation is inconsistent. Input schemas are present but lack proper type constraints and enums. Many parameters accept free-form strings where enums would prevent hallucination (e.g., key_type in set_blackboard_key accepts 'Bool|Int|Float|Vector|Object' as free text, not enum). Four tools (add_bt_node, create_eqs, create_metasound) are explicitly unimplemented stubs. Output schemas are not documented. Error handling is minimal, most tools throw generic exceptions without recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Batch tools (batch_spawn_actors, batch_set_property, batch_transform) accept arrays but lack per-item error reporting. Parameter naming has inconsistencies: asset_name vs name, asset_path vs path, creating ambiguity for LLMs.
Add an audio component to an actor with optional sound asset
Add a node to a Behavior Tree (not implemented - requires BehaviorTreeEditor module)
Set a property on multiple actors at once
Spawn multiple actors in a single batch operation
Apply transform changes to multiple actors at once
Create a new Animation Blueprint asset with specified skeleton
Create a new Behavior Tree asset in the editor
Four tools are unimplemented stubs (add_bt_node, create_eqs, create_metasound, and implicitly others). These return error messages instead of functioning. Stubs should either be removed or clearly marked as 'coming soon' in the server capabilities, not exposed as callable tools.
Parameter naming is inconsistent across tools. Some use 'asset_name' + 'asset_path', others use 'name' + 'path'. This forces LLMs to reason about field mappings and increases error rates. Standardize on one naming convention (recommend 'asset_name' + 'asset_path' for consistency).
Enum-like parameters are documented as free-form strings. set_blackboard_key accepts key_type as a string ('Bool|Int|Float|Vector|Object') but does not declare it as an enum in the schema. This invites hallucinated values. Use JSON Schema enum constraint: {"enum": ["Bool", "Int", "Float", "Vector", "Object"]}.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Create a new Blackboard asset in the editor
Create an Environment Query System asset (not implemented - requires AIModule editor tools)
Create a MetaSound asset (not implemented - requires MetasoundEditor module)
Create a new Sound Cue asset
Delete an actor from the editor world by label
Delete an asset from the content browser
Export an asset to a file on disk
Find actors in the editor world with optional filtering by name, class, or tag
Find assets in the content browser with optional filtering by class and name
Get detailed information about a specific actor including transform, components, and tags
Get information about AI controllers in the editor world, optionally filtered by actor label
Get information about an animation asset including duration, frame rate, skeleton, notifies, and curves
Get detailed information about an asset including class, package name, and disk size
Get information about audio components on an actor
Import an asset from a file into the content browser
Rename an actor by changing its label
Select or deselect an actor in the editor
Assign an Animation Blueprint to a skeletal mesh component on an actor
Set audio attenuation properties on an actor's audio component
Add or update a key in a Blackboard asset with specified type
Spawn a new actor in the editor world at specified location, rotation, and scale
Output schemas are not documented. Tools return JSON objects but LLMs cannot see the expected field structure. Document return types for all tools, especially list/search tools (find_actors, find_assets) which should specify pagination fields (total_count, next_cursor) and per-item structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. delete_actor and delete_asset are marked DESTRUCTIVE but lack destructiveHint annotation. This prevents clients from warning users or enforcing confirmation flows.