unreal-mcp
Provides access to the full Unreal Engine Python API through Python remote execution protocol, allowing AI agents to interact with and manipulate Unreal Engine projects without requiring a custom plugin
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@unreal-mcp list all assets in the project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
unreal-mcp
MCP server for Unreal Engine that uses Unreal Python Remote Execution


ā” 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.)
Setting up your Editor:
Open your Unreal Engine project
Go to
Edit->PluginsSearch for "Python Editor Script Plugin" and enable it
Restart the editor if prompted
Go to
Edit->Project SettingsSearch for "Python" and enable the "Enable Remote Execution" option

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.1to0.0.0.0but 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 -> Exiton windows).Check your running processes and kill any zombie unreal-mcp Node.js processes.
š ļø Available Tools
Tool | Description |
| Set the Unreal Engine path |
| Set the Project path |
| Get the current Unreal Engine path |
| Get the current Unreal Project path |
| Execute any python within the Unreal Editor |
| List all Unreal assets |
| Export an Unreal asset to text |
| Get information about an asset, including LOD levels for StaticMesh and SkeletalMesh assets |
| Get references for an asset |
| Run a console command in Unreal |
| Get detailed information about the current project |
| Get detailed information about the current map/level |
| Search for assets by name or path with optional class filter |
| Get all actors in the current world with their properties |
| Validate assets in the project to check for errors |
| Create a new object/actor in the world |
| Update an existing object/actor in the world |
| Delete an object/actor from the world |
| Take a screenshot of the Unreal Editor |
| 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 toolseditor_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
Scored across 20 tools
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.
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.
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.
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
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Eā¦
A simple MCP server built with FastMCP and python
Make games with AI: one MCP server that connects your agent to Unity, Unreal and Godot editors.
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server that gives AI agents broad control over Unreal Engine 5.7, enabling actor/asset/level management, Blueprint and material creation, screenshots, automation, and arbitrary editor Python execution.35MIT
- AlicenseCqualityCmaintenanceEnables AI clients to control Unreal Engine 5 editor for automated Blueprint authoring, level inspection, actor spawning, and other editor workflows via a local Python MCP server and UE plugin.5004AGPL 3.0
- FlicenseNot gradedqualityDmaintenanceWraps Unreal Editor as an MCP server, enabling AI agents to automate editor tasks through Python scripts.11-
- AlicenseBqualityCmaintenanceAn MCP server that lets an AI agent drive Unreal Engine 5: create projects, import assets, build levels and Blueprints, configure replication, compile C++, run Play In Editor and package the game.100105 PyPI5MIT