Skip to main content
Glama
unreal-mcp

unreal-mcp

by sam-david

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

flopperam

chongdashu

kvick-games

ChiR24

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 build

Add to Claude Code

Per-project (from your UE project directory):

claude mcp add --transport stdio unreal-mcp -- node /path/to/unreal-mcp/dist/bin.js

Global (available in all projects):

claude mcp add --scope user --transport stdio unreal-mcp -- node /path/to/unreal-mcp/dist/bin.js

Then 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 Engine

Transport 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

UNREAL_MCP_PROJECT_PATH

—

Path to .uproject file or project directory

UNREAL_MCP_ENGINE_PATH

auto-detect

UE engine install path

UNREAL_MCP_RC_PORT

30010

Remote Control API port

UNREAL_MCP_PYTHON_PORT

6776

Python Remote Execution port

UNREAL_MCP_PLATFORM

Win64

Target platform

UNREAL_MCP_CONFIGURATION

Development

Build configuration

UNREAL_MCP_MODULES

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 30010

Config 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)

  1. Edit > Plugins > enable Python Editor Script Plugin

  2. Restart the editor

  3. 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.1 to 0.0.0.0 — Epic changed the default in 5.3 and it breaks external tools

    • Verify Multicast Group Endpoint is 239.0.0.1:6766

  4. 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)

  1. Edit > Plugins > enable Remote Control API

  2. Restart the editor

  3. 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.1

    • These 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 tests

License

MIT

Available Tools

127 tools
add_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

    C2.9/5.0

    Scored across 127 tools

    Disambiguation3/5

    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.

    Naming Consistency3/5

    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.

    Tool Count1/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      D
      quality
      B
      maintenance
      Enables 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.
      1
      1,219 npm
      1,032
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      Controls Unreal Engine 5 editor from AI coding assistants, enabling 280 commands across 13 categories for materials, blueprints, Niagara VFX, and more.
      100
      65 PyPI
      40
      Mozilla Public 2.0
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables 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.
      8
      MIT