unreal-mcp
Provides comprehensive tools for interacting with Unreal Engine, including actor management, asset operations, blueprint creation, material editing, sequencer, animation, Niagara particle systems, build tools, profiling, source control, and more via multiple transport layers.
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 spawn a cube at location (0,0,0)"
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
The most comprehensive MCP server for Unreal Engine — 127 tools across 16 subsystems, with 4 transport layers and no mandatory C++ plugin.
Beta — This project is under active development and testing. Tools are being validated against UE 5.6. Some tools may not work as expected. Bug reports and contributions are welcome.
Why This One?
unreal-mcp | |||||
Tools | 127 | ~30 | ~20 | ~5 | 36 |
Transports | 4 | 1 | 1 | 1 | 1 |
Requires C++ plugin | No | Yes | Yes | Yes | Yes |
Build/package tools | Yes | No | No | No | Partial |
Most Unreal MCP projects require compiling and installing a custom C++ plugin into your UE project. This one works out of the box by using Unreal's built-in Python and Remote Control plugins — zero-install beyond enabling what already ships with UE.
Related MCP server: Unreal-MCP
Quick Start
Prerequisites
Node.js >= 18
Unreal Engine 5.x with editor open
Python Editor Script Plugin enabled (built-in) with Enable Remote Execution checked in its settings
Install
git clone https://github.com/YOUR_USERNAME/unreal-mcp.git
cd unreal-mcp
npm install
npm run buildAdd to Claude Code
Per-project (from your UE project directory):
claude mcp add --transport stdio unreal-mcp -- node /path/to/unreal-mcp/dist/bin.jsGlobal (available in all projects):
claude mcp add --scope user --transport stdio unreal-mcp -- node /path/to/unreal-mcp/dist/bin.jsThen drop a .unrealmcp.json in each UE project:
{
"projectPath": "."
}Add to Claude Desktop
Add to %APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"unreal": {
"command": "node",
"args": ["/path/to/unreal-mcp/dist/bin.js"],
"env": {
"UNREAL_MCP_PROJECT_PATH": "/path/to/YourProject.uproject"
}
}
}
}Tool Modules
Module | Tools | Description |
actor | 10 | Spawn, delete, transform, select, duplicate, tag actors |
asset | 16 | List, search, import, export, rename, delete, validate assets |
blueprint | 12 | Create blueprints, add components/variables/functions, graph nodes |
build | 9 | Build targets, cook content, package, generate project files |
material | 13 | Create materials/instances, add expressions, wire graphs |
console | 6 | Execute Python, console commands, screenshots, viewport camera |
sequencer | 8 | Create sequences, add tracks/bindings, set playback range |
animation | 6 | Animation blueprints, montages, modifiers, skeletal mesh |
niagara | 8 | Spawn particle systems, set parameters (float/vector/color/bool) |
editor-utils | 8 | Undo/redo, LOD generation, collision, lightmap UVs, utility widgets |
testing | 8 | Automation tests, map check, data validation, Gauntlet |
profiling | 5 | CSV profiling, Unreal Insights traces, stat commands |
source-control | 6 | Status, checkout, checkin, revert, mark for add, diff |
world-partition | 4 | Data layers, streaming sources, loaded cells |
remote-control-presets | 5 | List/get/set preset properties, call preset functions |
plugin | 3 | List, enable, disable plugins in .uproject |
Architecture
MCP Client (Claude Code, Claude Desktop, etc.)
↕ stdio (MCP protocol)
unreal-mcp server
↕ 4 transport layers
Unreal EngineTransport Layers
Transport | Protocol | Port | What It Needs |
Python Remote Execution | UDP multicast + inverted TCP | 6776 | Python Editor Script Plugin (built-in) |
Remote Control API | HTTP REST | 30010 | Remote Control API plugin (built-in) |
Plugin Bridge | TCP, length-prefixed JSON | 55557 | Optional C++ plugin |
Subprocess Runner | Spawns UAT/UBT processes | N/A | Engine path only |
The server probes all transports on startup and tools gracefully degrade. Most tools use Python Remote Execution. Build tools use subprocess. The optional C++ plugin adds deep Blueprint graph manipulation.
Two Paths
Core path (no plugin): Python + Remote Control covers ~95% of tools. Just enable the built-in UE plugins.
Plugin path (optional): C++ plugin on port 55557 adds K2 node graph manipulation, faster bulk operations, and editor UI integration. Falls back to Python automatically when unavailable.
Configuration
Three-layer priority: CLI args > environment variables > config file > defaults.
Environment Variables
Variable | Default | Description |
| — | Path to .uproject file or project directory |
| auto-detect | UE engine install path |
| 30010 | Remote Control API port |
| 6776 | Python Remote Execution port |
| Win64 | Target platform |
| Development | Build configuration |
| all | Comma-separated list of modules to enable |
CLI Arguments
node dist/bin.js --project-path /path/to/project --engine-path /path/to/UE_5.5 --rc-port 30010Config File
Place .unrealmcp.json in your project directory or home directory:
{
"projectPath": ".",
"platform": "Win64",
"configuration": "Development",
"enabledModules": ["console", "actor", "asset", "build", "blueprint", "material"]
}Unreal Editor Setup
Required (for most tools)
Edit > Plugins > enable Python Editor Script Plugin
Restart the editor
Edit > Project Settings > Plugins > Python > scroll to Remote Execution section:
Check Enable Remote Execution
UE 5.3+ IMPORTANT: Change Multicast Bind Address from
127.0.0.1to0.0.0.0— Epic changed the default in 5.3 and it breaks external toolsVerify Multicast Group Endpoint is
239.0.0.1:6766
Restart the editor again
Still getting "No Unreal Editor nodes found"?
VPN/Tailscale users: Tailscale's virtual network adapter can hijack multicast. Try temporarily disabling Tailscale, or disable the Tailscale network adapter in Windows Network Connections.
Firewall: Allow UDP port 6766 and TCP port 6776, or temporarily disable Windows Firewall to test.
Multiple adapters: WSL, Hyper-V, and VPN adapters can all cause multicast to bind to the wrong interface. Disabling unused adapters helps.
Optional (for Remote Control tools)
Edit > Plugins > enable Remote Control API
Restart the editor
Edit > Project Settings > Plugins > Remote Control > Server:
Check Restrict Server Access — this sounds restrictive but actually enables the sub-options below (unchecked = features hidden/off)
Check Enable Remote Python Execution
Check Allow Console Command Remote Execution
Allowed Origins: leave blank or add
127.0.0.1These take effect immediately, no restart needed
Optional (for Blueprint graph tools)
Install the C++ plugin from plugin/UnrealMCPBridge/ into your project's Plugins/ directory. This enables add_graph_node, connect_graph_nodes, and remove_graph_node.
Development
npm run dev # Watch-mode dev server
npm run build # Compile TypeScript
npm run lint # Biome linter
npm run fmt # Biome formatter
npm test # Run testsLicense
MIT
Available Tools
127 toolsadd_actor_bindingC
Bind an actor to a level sequence for animation.
Inputs: actor_name (required), sequence_path (required).
add_blueprint_componentB
Add a component to a Blueprint.
Inputs: blueprint_path (required), component_class (required), component_name.
add_blueprint_functionB
Add a custom function to a Blueprint.
Inputs: function_name (required), blueprint_path (required).
add_blueprint_variableB
Add a variable to a Blueprint.
Inputs: variable_name (required), variable_type (required), blueprint_path (required), default_value.
add_graph_nodeA
Add a node to a Blueprint's event graph. Requires the optional C++ plugin for full node type support. Falls back to Python for basic operations.
Inputs: node_type (required), blueprint_path (required), x, y, +1 more.
add_trackB
Add a track to an actor binding in a sequence.
Inputs: binding_id (required), track_type (required), sequence_path (required).
apply_anim_modifierC
Apply an animation modifier to an animation sequence.
Inputs: sequence_path (required), modifier_class (required).
apply_materialC
Apply a material to an actor's mesh component.
Inputs: actor_name (required), material_path (required), slot_index.
build_cook_runA
Full BuildCookRun pipeline — build, cook, stage, package, and optionally deploy/run. This is the primary command for packaging a project.
Inputs: run, cook, build, stage, +8 more.
build_graphB
Execute a BuildGraph XML script for CI/CD automation.
Inputs: target (required), script_path (required), additional_args.
build_pluginC
Build a plugin standalone.
Inputs: output_path (required), plugin_path (required), platform.
build_targetB
Build a C++ target using UnrealBuildTool. Compiles the project's C++ code.
Inputs: clean, target, platform, configuration.
call_preset_functionC
Call a function exposed via a Remote Control Preset.
Inputs: preset_name (required), function_name (required), parameters.
clean_projectC
Clean build artifacts for the project.
Inputs: platform.
compile_blueprintC
Compile a Blueprint.
Inputs: blueprint_path (required).
connect_graph_nodesB
Wire two node pins together in a Blueprint graph. Requires the optional C++ plugin.
Inputs: source_pin (required), target_pin (required), blueprint_path (required), source_node_id (required), +1 more.
connect_material_expressionsB
Wire two material expression nodes together.
Inputs: material_path (required), to_expression_name (required), from_expression_name (required), to_input_name, +1 more.
connect_material_propertyB
Connect an expression to a material output property (BaseColor, Normal, Metallic, Roughness, etc.).
Inputs: material_path (required), expression_name (required), material_property (required), output_name.
consolidate_assetsB
Consolidate duplicate assets — replace references from source assets to a target asset.
Inputs: target_path (required), source_paths (required).
content_auditA
Run content audit to find costly or problematic assets (runs ContentAudit commandlet).
Inputs: no named parameters.
cook_contentB
Cook content only (no C++ build). Converts assets to platform-specific format.
Inputs: maps, iterate, platform.
create_anim_blueprintB
Create an Animation Blueprint for a target skeleton.
Inputs: name (required), skeleton_path (required), path.
create_anim_montageC
Create an animation montage from an animation sequence.
Inputs: name (required), sequence_path (required), path.
create_blueprintC
Create a new Blueprint class.
Inputs: name (required), path, parent_class.
create_level_sequenceB
Create a new LevelSequence asset for cinematics.
Inputs: name (required), path.
create_materialB
Create a new material asset.
Inputs: name (required), path.
create_material_expressionA
Add an expression node to a material's graph (e.g., TextureSample, Multiply, Constant3Vector).
Inputs: material_path (required), expression_class (required), x, y.
create_material_functionC
Create a reusable material function.
Inputs: name (required), path.
create_material_instanceB
Create a material instance from a parent material.
Inputs: name (required), parent_path (required), path.
delete_actorB
Delete an actor from the current level by name or label.
Inputs: name (required).
delete_assetA
Delete an asset. Checks for references first.
Inputs: asset_path (required), force.
delete_material_expressionA
Remove an expression node from a material graph.
Inputs: material_path (required), expression_name (required).
disable_pluginA
Disable a plugin in the .uproject file. Requires editor restart to take effect.
Inputs: plugin_name (required).
duplicate_actorsC
Duplicate actors by name.
Inputs: names (required), offset.
duplicate_assetB
Duplicate an asset to a new path.
Inputs: source_path (required), destination_path (required).
enable_pluginA
Enable a plugin in the .uproject file. Requires editor restart to take effect.
Inputs: plugin_name (required).
execute_console_commandA
Run a console command in the Unreal Editor (e.g., 'stat fps', 'stat unit', 'r.SetRes 1920x1080').
Inputs: command (required).
execute_pythonA
Execute arbitrary Python code in the Unreal Editor's Python environment. Has access to the full unreal module.
Inputs: code (required).
export_assetC
Export an asset to an external file format.
Inputs: asset_path (required), output_path (required).
export_sequence_fbxB
Export a level sequence to FBX.
Inputs: output_path (required), sequence_path (required).
fix_redirectorsA
Clean up asset redirectors in the project (runs FixUpRedirects commandlet).
Inputs: no named parameters.
generate_collisionC
Generate collision for a static mesh.
Inputs: mesh_path (required), type.
generate_lightmap_uvsB
Generate lightmap UVs for a static mesh.
Inputs: mesh_path (required).
generate_lodsB
Generate LODs for a static mesh.
Inputs: mesh_path (required), lod_count.
generate_project_filesB
Regenerate IDE project files (Visual Studio, Xcode, Rider).
Inputs: no named parameters.
get_actor_componentsA
List all components on an actor.
Inputs: name (required).
get_actor_propertiesA
Get all properties of an actor by name.
Inputs: name (required).
get_anim_sequence_infoA
Get info about an animation sequence (length, frames, bone data).
Inputs: sequence_path (required).
get_asset_infoC
Get detailed metadata for an asset.
Inputs: asset_path (required).
get_asset_referencesB
Get the dependency and referencer graph for an asset.
Inputs: asset_path (required), direction.
get_blueprint_infoB
Get Blueprint info: class, variables, functions, components, and graphs.
Inputs: blueprint_path (required).
get_build_statusB
Parse the last build output and return structured errors, warnings, and progress.
Inputs: build_log (required).
get_connection_statusA
Check which Unreal Engine transports are currently connected (Remote Control, Python, Plugin Bridge).
Inputs: no named parameters.
get_loaded_cellsA
Query currently loaded world partition cells.
Inputs: no named parameters.
get_preset_infoB
Get details of a Remote Control Preset (exposed properties and functions).
Inputs: preset_name (required).
get_preset_propertyB
Get a property value exposed via a Remote Control Preset.
Inputs: preset_name (required), property_name (required).
get_sequence_infoA
Get full structure of a level sequence (bindings, tracks, sections).
Inputs: sequence_path (required).
get_test_resultsB
Get the results of the last automation test run.
Inputs: no named parameters.
get_undo_historyA
Get the undo/redo transaction history.
Inputs: count.
get_viewport_cameraA
Get the current editor viewport camera location and rotation.
Inputs: no named parameters.
import_assetB
Import an external file (FBX, PNG, WAV, etc.) into the project.
Inputs: source_file (required), destination_path (required).
list_actorsB
List all actors in the current level, optionally filtered by class.
Inputs: name_filter, class_filter.
list_assetsA
List assets in a content directory with optional class filter.
Inputs: directory, recursive, class_filter.
list_automation_testsB
List available automation tests in the project.
Inputs: filter.
list_data_layersA
List all data layers in the current World Partition level.
Inputs: no named parameters.
list_graph_nodesA
List all nodes in a Blueprint's event graph.
Inputs: blueprint_path (required).
list_material_expressionsB
List all expression nodes in a material.
Inputs: material_path (required).
list_pluginsA
List installed plugins and their enabled status.
Inputs: no named parameters.
list_presetsA
List all Remote Control Presets in the project.
Inputs: no named parameters.
package_projectA
Package the project for distribution. Runs build + cook + stage + package.
Inputs: platform, compressed, configuration.
recompile_materialA
Recompile a material after making changes to its graph.
Inputs: material_path (required).
redoB
Redo the last undone editor action.
Inputs: no named parameters.
reimport_skeletal_meshB
Reimport a skeletal mesh from its source file.
Inputs: mesh_path (required).
reinit_niagara_systemC
Reinitialize a Niagara system on an actor.
Inputs: actor_name (required).
remove_graph_nodeA
Remove a node from a Blueprint graph. Requires the optional C++ plugin.
Inputs: node_id (required), blueprint_path (required).
rename_assetC
Rename or move an asset.
Inputs: source_path (required), destination_path (required).
render_sequenceB
Queue a Movie Render Queue job for a sequence.
Inputs: sequence_path (required), output_directory.
resave_packagesB
Bulk resave all packages in the project (runs ResavePackages commandlet).
Inputs: directory.
reset_niagara_systemC
Reset a Niagara system on an actor.
Inputs: actor_name (required).
run_all_automation_testsC
Run all automation tests.
Inputs: no named parameters.
run_automation_testC
Run a specific automation test by name.
Inputs: test_name (required).
run_automation_tests_by_categoryB
Run automation tests matching a category pattern.
Inputs: category (required).
run_editor_utility_blueprintB
Run an Editor Utility Blueprint's Run event.
Inputs: blueprint_path (required).
run_editor_utility_widgetB
Run an Editor Utility Widget by asset path.
Inputs: widget_path (required).
run_gauntletC
Launch a Gauntlet test session via UAT. Runs tests in a full game instance.
Inputs: test_name (required), platform, configuration.
run_map_checkB
Run Map Check validation on the current level.
Inputs: no named parameters.
run_stat_commandB
Execute a stat console command (e.g., stat fps, stat unit, stat memory).
Inputs: stat (required).
save_allA
Save all dirty (modified) assets.
Inputs: no named parameters.
save_assetC
Force save a specific asset.
Inputs: asset_path (required).
sc_checkinB
Check in file(s) to source control with a description.
Inputs: paths (required), description (required).
sc_checkoutC
Check out file(s) from source control.
Inputs: paths (required).
sc_diffA
Get the diff for a modified file in source control.
Inputs: path (required).
sc_mark_for_addB
Mark new file(s) for add in source control.
Inputs: paths (required).
sc_revertB
Revert file(s) in source control.
Inputs: paths (required).
sc_statusA
Query source control status of file(s).
Inputs: paths (required).
search_assetsC
Search for assets by name, class, or tag.
Inputs: query (required), class_filter.
select_actorsB
Set the editor's actor selection.
Inputs: names (required).
set_actor_propertyB
Set a property on an actor via the Remote Control API.
Inputs: actor_path (required), property_name (required), property_value.
set_actor_tagsC
Set tags on an actor.
Inputs: name (required), tags (required).
set_actor_transformB
Set the location, rotation, and/or scale of an actor.
Inputs: name (required), scale, location, rotation.
set_blueprint_propertyA
Set a default property value on a Blueprint's CDO (Class Default Object). For component properties, use a dot path like 'ComponentName.PropertyName'.
Inputs: property_name (required), blueprint_path (required), property_value (required).
set_data_layer_stateC
Set the state of a data layer (Loaded, Activated, Unloaded).
Inputs: state (required), layer_name (required).
set_material_instance_scalarA
Set a scalar parameter on a material instance.
Inputs: value (required), instance_path (required), parameter_name (required).
set_material_instance_textureA
Set a texture parameter on a material instance.
Inputs: texture_path (required), instance_path (required), parameter_name (required).
set_material_instance_vectorB
Set a vector parameter on a material instance.
Inputs: value (required), instance_path (required), parameter_name (required).
set_niagara_boolA
Set a bool parameter on a Niagara component.
Inputs: value (required), actor_name (required), parameter_name (required).
set_niagara_colorB
Set a linear color parameter on a Niagara component.
Inputs: value (required), actor_name (required), parameter_name (required).
set_niagara_floatC
Set a float parameter on a Niagara component.
Inputs: value (required), actor_name (required), parameter_name (required).
set_niagara_vectorB
Set a vector parameter on a Niagara component.
Inputs: value (required), actor_name (required), parameter_name (required).
set_playback_rangeA
Set the playback start and end frames of a sequence.
Inputs: end_frame (required), start_frame (required), sequence_path (required).
set_preset_propertyB
Set a property value exposed via a Remote Control Preset.
Inputs: preset_name (required), property_name (required), value.
set_sequence_framerateC
Set the display frame rate of a sequence.
Inputs: sequence_path (required), fps.
set_skeletal_mesh_lodB
Configure LOD settings on a skeletal mesh.
Inputs: lod_count (required), mesh_path (required).
set_streaming_sourceC
Configure a streaming source component on an actor for World Partition.
Inputs: actor_name (required), radius.
set_viewport_cameraA
Set the editor viewport camera location and/or rotation.
Inputs: location, rotation.
spawn_actorC
Spawn a new actor in the current level.
Inputs: actor_class (required), label, scale, location, +1 more.
spawn_blueprint_actorC
Spawn an instance of a Blueprint class in the level.
Inputs: blueprint_path (required), label, location, rotation.
spawn_niagara_at_locationB
Spawn a Niagara particle system at a world location.
Inputs: location (required), system_path (required), rotation, auto_destroy.
spawn_niagara_attachedA
Spawn a Niagara system attached to an actor.
Inputs: actor_name (required), system_path (required).
start_csv_profilingC
Start CSV profiling capture for performance regression analysis.
Inputs: filename.
start_traceC
Start an Unreal Insights trace session with selected channels.
Inputs: channels.
stop_csv_profilingC
Stop CSV profiling capture and save results.
Inputs: no named parameters.
stop_traceA
Stop the active Unreal Insights trace session.
Inputs: no named parameters.
take_screenshotB
Capture a screenshot of the active editor viewport. Returns the file path of the saved image.
Inputs: filename.
undoA
Undo the last editor action.
Inputs: no named parameters.
validate_assetsC
Run data validation on assets in a directory.
Inputs: directory.
validate_dataC
Trigger the Data Validation framework on assets.
Inputs: directory.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 127 tools
Many tools are clearly distinct, but there are clusters that could cause misselection: run_stat_command overlaps with execute_console_command, build_cook_run and package_project both package the project, and reset_niagara_system vs reinit_niagara_system are similar. Descriptions help clarify, but the volume of tools increases ambiguity.
Most tools follow a verb_noun pattern, but there are notable deviations: sc_ prefix for source control (sc_status vs source control), run_* vs execute_* for similar actions, and inconsistent granularity like build_target vs build_cook_run vs package_project. Still readable, but not a clean consistent scheme.
127 tools is extremely excessive for any MCP server, even for a complex engine like Unreal. This volume overwhelms agents and makes tool selection costly. A more focused set of 30-40 tools would likely cover the same workflows.
The toolset covers an impressive breadth of Unreal workflows: asset management, actor manipulation, blueprints, materials, animation, Niagara, build automation, testing, source control, profiling, and world partition. Minor gaps exist (e.g., explicit level save/manage), but overall the surface is remarkably complete for its scope.
Maintenance
Related MCP Connectors
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
150+ hosted tools: describe-to-build CAD, scan-to-CAD, architecture studio, web research, media.
Related MCP Servers
- AlicenseDqualityBmaintenanceEnables AI assistants to control Unreal Engine via Remote Control API for game development automation, including asset management, actor control, level editing, animation, physics, visual effects, and cinematics creation through natural language.11,219 npm1,032MIT
- AlicenseBqualityCmaintenanceControls Unreal Engine 5 editor from AI coding assistants, enabling 280 commands across 13 categories for materials, blueprints, Niagara VFX, and more.10065 PyPI40Mozilla Public 2.0
- AlicenseAqualityCmaintenanceBridges AI assistants to Unreal Engine 5 editor, enabling direct manipulation of levels, actors, Blueprints, and Animation Blueprints through natural language commands.166MIT

Funplay MCP for Unrealofficial
AlicenseNot gradedqualityCmaintenanceEnables AI assistants to directly control and interact with the Unreal Editor through natural language, allowing tasks such as spawning actors, building levels, creating materials, and running Python scripts.8MIT