Skip to main content
Glama

unreal-mcp

MCP server for Unreal Engine that uses Unreal Python Remote Execution

hero

gif

⚔ Differences

This server does not require installing a new UE plugin as it uses the built-in Python remote execution protocol.

Adding new tools/features is much faster to develop since it does not require any C++ code.

It can support the full Unreal Engine Python API

Related MCP server: Unreal-MCP-Ghost

āš ļø Note

  • This is not an official Unreal Engine project.

  • Your AI agents or tools will have full access to your Editor.

  • Review any changes your Client suggests before you approve them.

šŸ“¦ Installation

šŸ“‹ Requirements

  • šŸ”§ Unreal Engine 5.4+ (verified, may work with earlier versions)

  • 🟢 Node.js with npx

  • šŸ¤– MCP Client (Claude, Cursor, etc.)

  1. Setting up your Editor:

    • Open your Unreal Engine project

    • Go to Edit -> Plugins

    • Search for "Python Editor Script Plugin" and enable it

    • Restart the editor if prompted

    • Go to Edit -> Project Settings

    • Search for "Python" and enable the "Enable Remote Execution" option

enable plugin enable remote execution

  1. Set up your Client:

    • Edit your Claude (or Cursor) config

{
  "mcpServers": {
    "unreal": {
      "command": "npx",
      "args": [
        "-y",
        "@runreal/unreal-mcp"
      ]
    }
  }
}

šŸ”§ Troubleshooting

If you get an error similar to MCP Unreal: Unexpected token 'C', Connection... it means that the mcp-server was not able to connect to the Unreal Editor.

  • Make sure that the Python Editor Script Plugin is enabled and that the Remote Execution option is checked in your project settings.

  • Try also changing your bind address from 127.0.0.1 to 0.0.0.0 but note that this will allow connections from your local network.

  • Restart your Unreal Editor fully.

  • Fully close/open your client (Claude, Cursor, etc.) to ensure it reconnects to the MCP server. (File -> Exit on windows).

  • Check your running processes and kill any zombie unreal-mcp Node.js processes.

šŸ› ļø Available Tools

Tool

Description

set_unreal_engine_path

Set the Unreal Engine path

set_unreal_project_path

Set the Project path

get_unreal_engine_path

Get the current Unreal Engine path

get_unreal_project_path

Get the current Unreal Project path

editor_run_python

Execute any python within the Unreal Editor

editor_list_assets

List all Unreal assets

editor_export_asset

Export an Unreal asset to text

editor_get_asset_info

Get information about an asset, including LOD levels for StaticMesh and SkeletalMesh assets

editor_get_asset_references

Get references for an asset

editor_console_command

Run a console command in Unreal

editor_project_info

Get detailed information about the current project

editor_get_map_info

Get detailed information about the current map/level

editor_search_assets

Search for assets by name or path with optional class filter

editor_get_world_outliner

Get all actors in the current world with their properties

editor_validate_assets

Validate assets in the project to check for errors

editor_create_object

Create a new object/actor in the world

editor_update_object

Update an existing object/actor in the world

editor_delete_object

Delete an object/actor from the world

editor_take_screenshot

Take a screenshot of the Unreal Editor

editor_move_camera

Move the viewport camera to a specific location and rotation for positioning screenshots

šŸ¤ Contributing

Please feel free to open issues or pull requests. Contributions are welcome, especially new tools/commands.

License MIT

Available Tools

20 tools
editor_console_commandC

Run a console command in Unreal

Example output: (No output for most commands, executed silently)

Executes the console command without returning output.

Inputs: command (required).

editor_create_objectB

Create a new object/actor in the world

Example output: {'success': true, 'actor_name': 'StaticMeshActor_1', 'actor_label': 'MyCube', 'class': 'StaticMeshActor', 'location': {'x': 100.0, 'y': 200.0, 'z': 0.0}, 'rotation': {'pitch': 0.0, 'yaw': 45.0, 'roll': 0.0}, 'scale': {'x': 1.0, 'y': 1.0, 'z': 1.0}}

Returns created actor details with final transform values.

Inputs: object_class (required), object_name (required), location, rotation, +2 more.

editor_delete_objectB

Delete an object/actor from the world

Example output: {'success': true, 'message': 'Successfully deleted actor: MyCube', 'deleted_actor': {'actor_name': 'StaticMeshActor_1', 'actor_label': 'MyCube', 'class': 'StaticMeshActor', 'location': {'x': 100.0, 'y': 200.0, 'z': 0.0}}}

Returns deletion confirmation with details of the deleted actor.

Inputs: actor_names (required).

editor_export_assetC

Export an Unreal asset to text

Example output: Binary data of the exported asset file

Returns the raw binary content of the exported asset.

Inputs: asset_path (required).

editor_get_asset_infoC

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.

Inputs: asset_path (required).

editor_get_asset_referencesC

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.

Inputs: asset_path (required).

editor_get_map_infoA

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.

Inputs: no named parameters.

editor_get_world_outlinerA

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.

Inputs: no named parameters.

editor_list_assetsB

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.

editor_move_cameraB

Move the viewport camera to a specific location and rotation for positioning screenshots

Inputs: location (required), rotation (required).

editor_project_infoA

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.

Inputs: no named parameters.

editor_run_pythonB

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

Inputs: code (required).

editor_search_assetsB

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.

Inputs: search_term (required), asset_class.

editor_take_screenshotA

Take a screenshot of the Unreal Editor

Example output: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...

Returns a base64-encoded PNG image of the current editor view. IF THIS ERRORS OUT MAKE SURE THE UNREAL ENGINE WINDOW IS FOCUSED

Inputs: no named parameters.

editor_update_objectC

Update an existing object/actor in the world

Example output: {'success': true, 'actor_name': 'StaticMeshActor_1', 'actor_label': 'UpdatedCube', 'class': 'StaticMeshActor', 'location': {'x': 150.0, 'y': 200.0, 'z': 50.0}, 'rotation': {'pitch': 0.0, 'yaw': 90.0, 'roll': 0.0}, 'scale': {'x': 2.0, 'y': 2.0, 'z': 2.0}}

Returns updated actor details with new transform values.

Inputs: actor_name (required), location, rotation, scale, +2 more.

editor_validate_assetsB

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.

Inputs: asset_paths.

get_unreal_engine_pathB

Get the current Unreal Engine path

get_unreal_project_pathB

Get the current Unreal Project path

set_unreal_engine_pathC

Set the Unreal Engine path

Inputs: path (required).

set_unreal_project_pathD

Set the Project path

Inputs: path (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 20 tools

    Disambiguation4/5

    Most tools have distinct purposes, such as editor_create_object for creation and editor_delete_object for deletion, with clear boundaries. However, some tools like editor_get_asset_info and editor_get_asset_references could be slightly overlapping in providing asset metadata, but descriptions help differentiate them.

    Naming Consistency5/5

    Tool names follow a consistent snake_case pattern with a clear 'editor_' prefix for most tools, and a 'get_'/'set_' pattern for path-related tools. This uniformity makes the set predictable and easy to navigate, with no mixing of conventions.

    Tool Count4/5

    With 20 tools, the count is slightly high but reasonable for an Unreal Editor server, covering a broad range of operations from asset management to world editing. It might feel a bit heavy, but each tool appears to serve a specific function in the domain.

    Completeness5/5

    The tool set provides comprehensive coverage for Unreal Editor tasks, including CRUD operations for objects (create, update, delete), asset management (list, search, validate), project and map info, and utilities like screenshots and console commands. No obvious gaps are present for the stated purpose.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers