Unreal Engine mcp - use the documentation resource before using tools. Some tools run in the editor
UnrealMCP has 20 tools with explicit schemas and descriptions, but quality is inconsistent. Most tools have basic descriptions (10-150 chars, below the 194-char baseline) and lack actionable guidance. Parameter descriptions are sparse or generic. No output schemas documented. Error handling is minimal. Tool names follow verb_noun convention well (editor_run_python, editor_list_assets), but descriptions often lack context on when to use each tool or what to expect. Example: 'editor_run_python' warns against comments but doesn't explain why or what happens on failure. 'editor_export_asset' says 'Returns the raw binary content' but doesn't specify format or size limits. No pagination, no rate limiting, no recovery guidance.
Run a console command in Unreal Example output: (No output for most commands, executed silently) Executes the console command without returning output.
Create an object/actor in the Unreal Editor world
Delete an object/actor from the Unreal Editor world
Export an Unreal asset to text Example output: Binary data of the exported asset file Returns the raw binary content of the exported asset.
Get information about an asset, including LOD levels for StaticMesh and SkeletalMesh assets Example output: [{'name': 'SM_Cube', 'is_valid': True, 'is_u_asset': True, 'is_asset_loaded': True, 'class': 'StaticMesh', 'path': '/Game/Meshes/SM_Cube', 'package': 'SM_Cube', 'package_path': '/Game/Meshes/SM_Cube', 'lod_levels': [{'lod_index': 0, 'num_vertices': 24, 'num_triangles': 12}, {'lod_index': 1, 'num_vertices': 16, 'num_triangles': 8}]}] Returns asset metadata with LOD information for mesh assets.
No output schemas documented. Tools return unstructured text or Python list/dict representations without formal schema definitions. LLMs cannot reliably parse responses or chain tool calls.
Descriptions lack actionable context. Most are 10-60 chars (below 194-char baseline). No guidance on when to use each tool, what happens on failure, or prerequisites. Example: 'editor_console_command' says 'Executes the console command without returning output' but doesn't explain what commands are valid or how to recover from errors.
No error handling or recovery guidance. Tools throw generic errors ('Command failed with: ...') without telling the LLM what to do next. No distinction between retryable, user-fixable, and fatal errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Get references for an asset Example output: [{'name': '/Game/Materials/M_Character.M_Character', 'class': 'Material'}, {'name': '/Game/Blueprints/BP_Player.BP_Player', 'class': 'Blueprint'}] Returns list of assets that reference the specified asset.
Get detailed information about the current map/level Example output: {'map_name': 'TestMap', 'map_path': '/Game/Maps/TestMap', 'total_actors': 45, 'actor_types': {'StaticMeshActor': 20, 'DirectionalLight': 1, 'PlayerStart': 1}, 'lighting': {'has_lightmass_importance_volume': false, 'directional_lights': 1, 'point_lights': 3, 'spot_lights': 0}, 'streaming_levels': 0, 'streaming_level_names': []} Returns current level information with actor counts and lighting details.
Get all actors in the current world with their properties Example output: {'world_name': 'TestMap', 'total_actors': 45, 'actors': [{'name': 'StaticMeshActor_0', 'class': 'StaticMeshActor', 'location': {'x': 0.0, 'y': 0.0, 'z': 0.0}, 'rotation': {'pitch': 0.0, 'yaw': 0.0, 'roll': 0.0}, 'scale': {'x': 1.0, 'y': 1.0, 'z': 1.0}, 'is_hidden': false, 'folder_path': '/Meshes', 'components': ['StaticMeshComponent', 'SceneComponent']}]} Returns complete world outliner with all actors and their transform data.
List all Unreal assets Example output: [''/Game/Characters/Hero/BP_Hero'', ''/Game/Maps/TestMap'', ''/Game/Materials/M_Basic''] Returns a Python list of asset paths.
Move the Unreal Editor viewport camera to a specific location and rotation
Get detailed information about the current project Example output: {'project_name': 'MyGame', 'project_directory': '/Users/dev/MyGame/', 'engine_version': '5.3.0', 'total_assets': 1250, 'asset_locations': {'Game': 800, 'Engine': 450}, 'enhanced_input_enabled': true, 'input_actions': ['/Game/Input/IA_Move'], 'game_modes': ['/Game/Core/GM_Main'], 'characters': ['/Game/Characters/B_Hero'], 'maps': ['/Game/Maps/L_TestMap']} Returns comprehensive project metadata and asset counts.
Execute any python within the Unreal Editor. All python must have `import unreal` at the top. CHECK THE UNREAL PYTHON DOCUMENTATION BEFORE USING THIS TOOL. NEVER EVER ADD COMMENTS
Search for assets by name or path with optional class filter Example output: {'search_term': 'character', 'asset_class_filter': 'Blueprint', 'total_matches': 3, 'assets': [{'name': 'BP_Character', 'path': '/Game/Characters', 'class': 'Blueprint', 'package_name': 'BP_Character'}, {'name': 'BP_EnemyCharacter', 'path': '/Game/Enemies', 'class': 'Blueprint', 'package_name': 'BP_EnemyCharacter'}]} Returns search results with asset details, limited to 50 results.
Take a screenshot of the current Unreal Editor viewport
Update an object/actor in the Unreal Editor world
Validate assets in the project to check for errors Example output: {'total_validated': 100, 'valid_assets': [{'path': '/Game/Meshes/SM_Cube', 'class': 'StaticMesh', 'size': '1024'}], 'invalid_assets': [{'path': '/Game/Missing/Asset', 'error': 'Asset does not exist'}], 'validation_summary': {'valid_count': 95, 'invalid_count': 5, 'success_rate': 95.0}} Returns validation results with asset status and error details.
Get the current Unreal Engine path
Get the current Unreal Project path
Set the Unreal Engine path
Set the Project path
Destructive operations (editor_delete_object) lack confirmation or dry-run support. No protection against accidental deletion of assets or actors.
Parameter descriptions are minimal or missing. 'asset_path', 'command', 'actor_names' lack format guidance, constraints, or examples. LLMs must guess valid input formats.