Unreal Engine MCP Server

Unreal Engine MCP Server

A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Engine via Remote Control API. Built with TypeScript and designed for game development automation.

1.2K

13 Tools

Packaged by
Requires Configuration
Add to Docker Desktop

Version 4.43 or later needs to be installed to add the server automatically

Use cases

About

Unreal Engine MCP Server MCP Server

A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Engine via Remote Control API. Built with TypeScript and designed for game development automation.

What is an MCP Server?

MCP Info

Image Building InfoDockerfile|https://github.com/ChiR24/Unreal_mcp/blob/main/Dockerfile

Docker Image built by|Docker Inc. Docker Scout Health Score| Docker Scout Health ScoreVerify Signature|COSIGN_REPOSITORY=mcp/signatures cosign verify mcp/unreal-engine-mcp-server --key https://raw.githubusercontent.com/docker/keyring/refs/heads/main/public/mcp/latest.pubLicence|MIT License

Available Tools (13)

Tools provided by this ServerShort Description
animation_physicsAnimation and physics rigging helper covering Anim BPs, montage playback, and ragdoll setup.
build_environmentEnvironment authoring toolkit for landscapes and foliage, from sculpting to procedural scatters.
console_commandGuarded console command executor for one-off stat, r.*, or viewmode commands.
control_actorViewport actor toolkit for spawning, removing, or nudging actors with physics forces.
control_editorEditor session controls for PIE playback, camera placement, and view modes.
create_effectFX sandbox for spawning Niagara systems, particle presets, or disposable debug shapes.
inspectIntrospection utility for reading or mutating properties on actors, components, or CDOs.
manage_assetAsset library utility for browsing, importing, and bootstrapping simple materials.
manage_blueprintBlueprint scaffolding helper for creating assets and attaching components.
manage_levelLevel management helper for loading/saving, streaming, light creation, and lighting builds.
manage_rcRemote Control preset helper for building, exposing, and mutating RC assets.
manage_sequenceSequencer automation helper for Level Sequences: asset management, bindings, and playback control.
system_controlRuntime/system controls for profiling, quality tiers, audio/UI triggers, screenshots, and editor lifecycle.

Tools Details

Tool: animation_physics

Animation and physics rigging helper covering Anim BPs, montage playback, and ragdoll setup.

Use it when you need to:

  • generate an Animation Blueprint for a skeleton.
  • play a montage/animation on an actor at a chosen rate.
  • enable a quick ragdoll using an existing physics asset.

Supported actions: create_animation_bp, play_montage, setup_ragdoll.

ParametersTypeDescription
actionstringAction type
actorNamestringoptionalActor label/name in the level to apply animation to. Required for play_montage and setup_ragdoll actions.
animationPathstringoptionalContent path to animation sequence asset to play. Alternative to montagePath for play_montage action.
blendWeightnumberoptionalBlend weight between animated and ragdoll physics (0.0 to 1.0). 0.0 is fully animated, 1.0 is fully ragdoll. Optional, defaults to 1.0.
montagePathstringoptionalContent path to animation montage asset to play. Required for play_montage if animationPath not provided.
namestringoptionalName for the created animation blueprint asset. Required for create_animation_bp action.
physicsAssetNamestringoptionalName or path to physics asset for ragdoll simulation. Required for setup_ragdoll action.
playRatenumberoptionalAnimation playback speed multiplier. 1.0 is normal speed, 2.0 is double speed, 0.5 is half speed. Optional, defaults to 1.0.
savePathstringoptionalContent path where animation blueprint will be saved (e.g., "/Game/Animations"). Required for create_animation_bp action.
skeletonPathstringoptionalContent path to skeleton asset (e.g., "/Game/Characters/MySkeleton"). Required for create_animation_bp action.

Tool: build_environment

Environment authoring toolkit for landscapes and foliage, from sculpting to procedural scatters.

Use it when you need to:

  • create or sculpt a landscape actor.
  • add foliage via types or paint strokes.
  • drive procedural terrain/foliage generation with bounds, seeds, and density settings.
  • spawn explicit foliage instances at transforms.

Supported actions: create_landscape, sculpt, add_foliage, paint_foliage, create_procedural_terrain, create_procedural_foliage, add_foliage_instances, create_landscape_grass_type.

ParametersTypeDescription
actionstringEnvironment action
boundsobjectoptional
brushSizenumberoptionalRadius of foliage paint brush in centimeters. Typical range: 500-5000. Required for paint_foliage action.
densitynumberoptionalFoliage placement density (instances per unit area). Typical range: 0.1 to 10.0. Required for add_foliage and affects procedural foliage.
foliageTypestringoptional
foliageTypesarrayoptional
heightFunctionstringoptionalMathematical function or algorithm for terrain height generation (e.g., "perlin", "simplex", custom formula). Optional for create_procedural_terrain.
locationobjectoptionalWorld space location for terrain placement. Required for create_procedural_terrain.
materialPathstringoptionalContent path to material for terrain/landscape (e.g., "/Game/Materials/TerrainMat"). Optional.
meshPathstringoptionalContent path to static mesh for foliage (e.g., "/Game/Foliage/TreeMesh"). Required for add_foliage action.
namestringoptionalName for landscape, foliage type, or grass type actor. Optional for most actions, auto-generated if not provided.
positionobjectoptionalWorld space position for foliage paint brush center. Required for paint_foliage action.
seednumberoptional
sizeXnumberoptionalLandscape width in components. Each component is typically 63 quads. Required for create_landscape action.
sizeYnumberoptionalLandscape height in components. Each component is typically 63 quads. Required for create_landscape action.
strengthnumberoptionalPaint tool strength/intensity (0.0 to 1.0). Higher values place more instances. Optional for paint_foliage, defaults to 0.5.
subdivisionsnumberoptionalNumber of subdivisions for procedural terrain mesh. Higher values create more detailed terrain. Optional for create_procedural_terrain.
toolstringoptionalLandscape sculpt tool to use (Sculpt, Smooth, Flatten, Ramp, Erosion, Hydro, Noise). Required for sculpt action.
transformsarrayoptional

Tool: console_command

Guarded console command executor for one-off stat, r.*, or viewmode commands.

Use it when higher-level tools don't cover the console tweak you need. Hazardous commands (quit/exit, crash triggers, unsafe viewmodes) are blocked, and unknown commands respond with a warning instead of executing blindly.

ParametersTypeDescription
commandstringConsole command to execute in Unreal Engine (e.g., "stat fps", "r.SetRes 1920x1080", "viewmode lit"). Dangerous commands like quit/exit and crash triggers are blocked. Required.

Tool: control_actor

Viewport actor toolkit for spawning, removing, or nudging actors with physics forces.

Use it when you need to:

  • drop a class or mesh into the level (classPath accepts names or asset paths).
  • delete actors by label, case-insensitively.
  • push a physics-enabled actor with a world-space force vector.

Supported actions: spawn, delete, apply_force.

ParametersTypeDescription
actionstringAction to perform
actorNamestringoptionalActor label/name (optional for spawn, auto-generated if not provided; required for delete). Case-insensitive for delete action.
classPathstringoptionalActor class (e.g., "StaticMeshActor", "CameraActor") OR asset path (e.g., "/Engine/BasicShapes/Cube", "/Game/MyMesh"). Asset paths will automatically spawn as StaticMeshActor with the mesh applied. Required for spawn action.
forceobjectoptionalForce vector to apply in Newtons. Required for apply_force action. Actor must have physics simulation enabled.
locationobjectoptionalWorld space location in centimeters (Unreal units). Optional for spawn, defaults to origin.
rotationobjectoptionalWorld space rotation in degrees. Optional for spawn, defaults to zero rotation.

Tool: control_editor

Editor session controls for PIE playback, camera placement, and view modes.

Use it when you need to:

  • start or stop Play In Editor.
  • reposition the active viewport camera.
  • switch between Lit/Unlit/Wireframe and other safe view modes.

Supported actions: play, stop, set_camera, set_view_mode (with validation).

ParametersTypeDescription
actionstringEditor action
locationobjectoptionalWorld space camera location for set_camera action. All coordinates required.
rotationobjectoptionalCamera rotation for set_camera action. All rotation components required.
viewModestringoptionalView mode for set_view_mode action. Supported: Lit, Unlit, Wireframe, DetailLighting, LightingOnly, LightComplexity, ShaderComplexity. Required for set_view_mode.

Tool: create_effect

FX sandbox for spawning Niagara systems, particle presets, or disposable debug shapes.

Use it when you need to:

  • fire a Niagara system at a specific location/scale.
  • trigger a simple particle effect by tag/name.
  • draw temporary debug primitives (box/sphere/line) for planning layouts.

Supported actions: niagara, particle, debug_shape.

ParametersTypeDescription
actionstringEffect type
colorarrayoptionalRGBA color array with values 0-255 (e.g., [255, 0, 0, 255] for red). Optional, defaults to white.
durationnumberoptionalHow long debug shape persists in seconds. 0 means one frame, -1 means permanent until cleared. Optional, defaults to 0.
effectTypestringoptionalPreset particle effect type (Fire, Smoke, Water, Explosion, etc.). Used for particle action to spawn common effects.
locationobjectoptionalWorld space location where effect will be spawned in centimeters. Optional, defaults to origin.
namestringoptionalName for the spawned effect actor. Optional, auto-generated if not provided.
scalenumberoptionalUniform scale multiplier for Niagara effect. 1.0 is normal size. Optional, defaults to 1.0.
shapestringoptionalDebug shape type to draw (Line, Box, Sphere, Capsule, Cone, Cylinder, Arrow). Required for debug_shape action.
sizenumberoptionalSize/radius of debug shape in centimeters. For Line, this is thickness. For shapes, this is radius/extent. Optional, defaults vary by shape.
systemPathstringoptionalContent path to Niagara system asset (e.g., "/Game/Effects/MyNiagaraSystem"). Required for niagara action.

Tool: inspect

Introspection utility for reading or mutating properties on actors, components, or CDOs.

Use it when you need to:

  • inspect an object by path and retrieve its serialized properties.
  • set a property value with built-in validation.

Supported actions: inspect_object, set_property.

ParametersTypeDescription
actionstringIntrospection action: "inspect_object" retrieves all properties, "set_property" modifies a specific property. Required.
objectPathstringoptionalFull object path in Unreal format (e.g., "/Game/Maps/Level.Level:PersistentLevel.StaticMeshActor_0" or "/Script/Engine.Default__StaticMeshActor" for CDO). Required for both actions.
propertyNamestringoptionalName of the property to modify (e.g., "RelativeLocation", "Mobility", "bHidden"). Required for set_property action.
valuestringoptionalNew property value. Must be JSON-serializable and compatible with property type (e.g., {"X":100,"Y":0,"Z":0} for vectors, 5.0 for floats, true for bools, "Value" for strings). Required for set_property action.

Tool: manage_asset

Asset library utility for browsing, importing, and bootstrapping simple materials.

Use it when you need to:

  • explore project content (/Content automatically maps to /Game).
  • import FBX/PNG/WAV/EXR files into the project.
  • spin up a minimal Material asset at a specific path.

Supported actions: list, import, create_material.

ParametersTypeDescription
actionstringAction to perform
destinationPathstringoptionalDestination path in project content where asset will be imported. Example: "/Game/ImportedAssets"
directorystringoptionalDirectory path to list (shows immediate children only). Automatically maps /Content to /Game. Example: "/Game/MyAssets"
namestringoptionalName for the new material asset. Example: "MyMaterial"
pathstringoptionalContent path where material will be saved. Example: "/Game/Materials"
sourcePathstringoptionalSource file path on disk to import (FBX, PNG, WAV, EXR supported). Example: "C:/MyAssets/mesh.fbx"

Tool: manage_blueprint

Blueprint scaffolding helper for creating assets and attaching components.

Use it when you need to:

  • create a new Blueprint of a specific base type (Actor, Pawn, Character, ...).
  • add a component to an existing Blueprint asset with a unique name.

Supported actions: create, add_component.

ParametersTypeDescription
actionstringBlueprint action
namestringName for the blueprint asset. Required for create action. For add_component, this is the blueprint asset name or path.
blueprintTypestringoptionalBase class type for blueprint (Actor, Pawn, Character, Object, ActorComponent, SceneComponent, etc.). Required for create action.
componentNamestringoptionalUnique name for the component instance within the blueprint. Required for add_component action.
componentTypestringoptionalComponent class to add (StaticMeshComponent, SkeletalMeshComponent, CameraComponent, etc.). Required for add_component action.
savePathstringoptionalContent path where blueprint will be saved (e.g., "/Game/Blueprints"). Required for create action.

Tool: manage_level

Level management helper for loading/saving, streaming, light creation, and lighting builds.

Use it when you need to:

  • open or save a level by path.
  • toggle streaming sublevels on/off.
  • spawn a light actor of a given type.
  • kick off a lighting build at a chosen quality.

Supported actions: load, save, stream, create_light, build_lighting.

ParametersTypeDescription
actionstringLevel action
intensitynumberoptionalLight intensity value in lumens (for Point/Spot) or lux (for Directional). Typical range: 1000-10000. Optional for create_light.
levelNamestringoptionalLevel name for streaming operations. Required for stream action.
levelPathstringoptionalFull content path to level asset (e.g., "/Game/Maps/MyLevel"). Required for load action.
lightTypestringoptionalType of light to create. Directional for sun-like lighting, Point for omni-directional, Spot for cone-shaped, Rect for area lighting. Required for create_light.
locationobjectoptionalWorld space location for light placement in centimeters. Optional for create_light, defaults to origin.
namestringoptionalName for the spawned light actor. Optional, auto-generated if not provided.
qualitystringoptionalLighting build quality level. Preview is fastest, Production is highest quality. Required for build_lighting action.
shouldBeLoadedbooleanoptionalWhether to load (true) or unload (false) the streaming level. Required for stream action.
shouldBeVisiblebooleanoptionalWhether the streaming level should be visible after loading. Optional for stream action.
streamingbooleanoptionalWhether to use streaming load (true) or direct load (false). Optional for load action.

Tool: manage_rc

Remote Control preset helper for building, exposing, and mutating RC assets.

Use it when you need to:

  • create a preset asset on disk.
  • expose actors or object properties to the preset.
  • list the exposed fields for inspection.
  • get or set property values through RC with JSON-serializable payloads.

Supported actions: create_preset, expose_actor, expose_property, list_fields, set_property, get_property.

ParametersTypeDescription
actionstringRC action
actorNamestringoptionalActor label/name in level to expose to Remote Control preset. Required for expose_actor action.
namestringoptionalName for Remote Control preset asset. Required for create_preset action.
objectPathstringoptionalFull object path for property operations (e.g., "/Game/Maps/Level.Level:PersistentLevel.StaticMeshActor_0"). Required for expose_property, set_property, and get_property actions.
pathstringoptionalContent path where preset will be saved (e.g., "/Game/RCPresets"). Required for create_preset action.
presetPathstringoptionalFull content path to existing Remote Control preset asset (e.g., "/Game/RCPresets/MyPreset"). Required for expose_actor, expose_property, list_fields, set_property, and get_property actions.
propertyNamestringoptionalName of the property to expose, get, or set (e.g., "RelativeLocation", "Intensity", "bHidden"). Required for expose_property, set_property, and get_property actions.
valuestringoptionalNew value to set for property. Must be JSON-serializable and compatible with property type (e.g., {"X":100,"Y":200,"Z":300} for location, true/false for bool, number for numeric types). Required for set_property action.

Tool: manage_sequence

Sequencer automation helper for Level Sequences: asset management, bindings, and playback control.

Use it when you need to:

  • create or open a sequence asset.
  • add actors, spawnable cameras, or other bindings.
  • adjust sequence metadata (frame rate, bounds, playback window).
  • drive playback (play/pause/stop), adjust speed, or fetch binding info.

Supported actions: create, open, add_camera, add_actor, add_actors, remove_actors, get_bindings, add_spawnable_from_class, play, pause, stop, set_properties, get_properties, set_playback_speed.

ParametersTypeDescription
actionstringSequence action
actorNamestringoptionalActor label/name in level to add as possessable binding to sequence. Required for add_actor action.
actorNamesarrayoptionalArray of actor labels/names for batch add or remove operations. Required for add_actors and remove_actors actions.
classNamestringoptionalUnreal class name for spawnable actor (e.g., "StaticMeshActor", "CineCameraActor", "SkeletalMeshActor"). Required for add_spawnable_from_class action.
frameRatenumberoptionalSequence frame rate in frames per second (e.g., 24, 30, 60). Required for set_properties when changing frame rate.
lengthInFramesnumberoptionalTotal sequence length measured in frames. Required for set_properties when changing duration.
loopModestringoptionalHow sequence loops: "once" plays once and stops, "loop" repeats from start, "pingpong" plays forward then backward. Optional for set_properties.
namestringoptionalName for new Level Sequence asset. Required for create action.
pathstringoptionalContent path - for create action: save location (e.g., "/Game/Cinematics"); for open/operations: full asset path (e.g., "/Game/Cinematics/MySequence"). Required for create and open actions.
playbackEndnumberoptionalLast frame of playback range (inclusive). Optional for set_properties.
playbackStartnumberoptionalFirst frame of playback range (inclusive). Optional for set_properties.
spawnablebooleanoptionalIf true, camera is spawnable (owned by sequence); if false, camera is possessable (references level actor). Optional for add_camera, defaults to true.
speednumberoptionalPlayback speed multiplier. 1.0 is normal speed, 2.0 is double speed, 0.5 is half speed. Required for set_playback_speed action.

Tool: system_control

Runtime/system controls for profiling, quality tiers, audio/UI triggers, screenshots, and editor lifecycle.

Use it when you need to:

  • toggle stat overlays or targeted profilers.
  • adjust scalability categories (sg.*) or enable FPS display.
  • play a one-shot sound and optionally position it.
  • create/show lightweight widgets.
  • capture a screenshot or start/quit the editor process.

Supported actions: profile, show_fps, set_quality, play_sound, create_widget, show_widget, screenshot, engine_start, engine_quit.

ParametersTypeDescription
actionstringSystem action
categorystringoptionalScalability quality category to adjust: ViewDistance, AntiAliasing, Shadow/Shadows, PostProcess/PostProcessing, Texture/Textures, Effects, Foliage, Shading. Required for set_quality action.
editorExestringoptionalAbsolute path to Unreal Editor executable (e.g., "C:/UnrealEngine/Engine/Binaries/Win64/UnrealEditor.exe"). Required for engine_start unless UE_EDITOR_EXE environment variable is set.
enabledbooleanoptionalEnable (true) or disable (false) profiling/FPS display. Required for profile and show_fps actions.
is3DbooleanoptionalWhether sound should be played as 3D positional audio (true) or 2D (false). Optional for play_sound, defaults to false.
levelnumberoptionalQuality level (0=Low, 1=Medium, 2=High, 3=Epic, 4=Cinematic). Required for set_quality action.
locationobjectoptionalWorld space location for 3D sound playback. Required if is3D is true for play_sound action.
profileTypestringoptionalType of profiling to enable: CPU (stat cpu), GPU (stat gpu), Memory (stat memory), FPS (stat fps), Unit (stat unit). Required for profile action.
projectPathstringoptionalAbsolute path to .uproject file (e.g., "C:/Projects/MyGame/MyGame.uproject"). Required for engine_start unless UE_PROJECT_PATH environment variable is set.
resolutionstringoptionalScreenshot resolution in WIDTHxHEIGHT format (e.g., "1920x1080", "3840x2160"). Optional for screenshot action, uses viewport size if not specified.
soundPathstringoptionalContent path to sound asset (SoundCue or SoundWave, e.g., "/Game/Audio/MySound"). Required for play_sound action.
verbosebooleanoptionalShow verbose profiling output with additional details. Optional for profile action.
visiblebooleanoptionalWhether widget should be visible (true) or hidden (false). Required for show_widget action.
volumenumberoptionalVolume multiplier (0.0=silent, 1.0=full volume). Optional for play_sound, defaults to 1.0.
widgetNamestringoptionalName for widget asset or instance. Required for create_widget and show_widget actions.
widgetTypestringoptionalWidget blueprint type or category (HUD, Menu, Dialog, Notification, etc.). Optional for create_widget, helps categorize the widget.

Use this MCP Server

{
  "mcpServers": {
    "unreal-engine-mcp-server": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "UE_HOST",
        "-e",
        "UE_RC_HTTP_PORT",
        "-e",
        "UE_RC_WS_PORT",
        "-e",
        "LOG_LEVEL",
        "mcp/unreal-engine-mcp-server"
      ],
      "env": {
        "UE_HOST": "<nil>",
        "UE_RC_HTTP_PORT": "<nil>",
        "UE_RC_WS_PORT": "<nil>",
        "LOG_LEVEL": "<nil>"
      }
    }
  }
}

Why is it safer to run MCP Servers with Docker?

Manual installation

You can install the MCP server using:

Installation for

Related servers