# NAJEMWEHBE/unreal-ai-connection [Health: Active]

**Category:** 🎮 Gaming  
**Repository:** https://github.com/NAJEMWEHBE/unreal-ai-connection  
**GitHub Stars:** 9  
**npm Downloads (last month):** 3955  
**Views:** 4  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/najemwehbe-unreal-ai-connection

## Description
Drive the Unreal Engine 5.7 editor from any MCP client over a local TCP socket — 105 editor-automation tools (72 native C++ + 33 bridge-side). Native C++ plugin + thin Python bridge, 50ms round-trips. 498 tests, MIT.

## Tools
Capabilities this server exposes over MCP:

- **execute_unreal_python** — Universal escape hatch — run arbitrary `unreal.*` Python in the editor's interpreter. Multi-line scripts work.
- **run_python_file** — Execute a `.py` file from disk in the editor's Python interpreter.
- **apply_python_to_selection** — Run a Python snippet with the editor's current selection bound as `actors` / `assets`.
- **exec_python_persistent** — Persistent Python session — variables defined in one call survive into the next.
- **reset_python_state** — Wipe the persistent session's globals.
- **get_project_summary** — Project name, engine version, enabled plugins, asset count.
- **find_assets** — Query the asset registry by class + path + name.
- **inspect_asset** — Class, tags, dependencies, referencers, on-disk size.
- **move_asset** — Move an asset to a different folder; UE creates a redirector at the source path.
- **rename_asset** — Change an asset's leaf name in place; UE creates a redirector at the old name.
- **duplicate_asset** — Copy an asset to a new path.
- **delete_asset** — Delete an asset; refuses if referenced by other packages unless `force=true`.
- **fix_up_redirectors** — Resolve all object redirectors under a folder.
- **create_data_table** — Create a new `UDataTable` asset whose rows conform to a given row `UScriptStruct`.
- **create_data_asset** — Create a new `UDataAsset` (or subclass) asset from a `UDataAsset` subclass path.
- **inspect_blueprint** — Variables, function/event graphs, parent class of any Blueprint asset.
- **compile_blueprint** — Recompile a Blueprint asset and report errors.
- **inspect_widget_tree** — Read the widget hierarchy of a `UWidgetBlueprint` or EUW (the thing UE Python can't do).
- **inspect_widget_blueprint** — Widget-BP-specific surface: animations, delegate bindings, palette category, inherited named slots, property-binding count, blueprint compile status. Pairs with `inspect_blueprint` + `inspect_widget_tree`.
- **edit_widget_tree** — Mutate the tree: `set_root` / `add_child` / `set_property`. Solves the EUW WidgetTree blocker.
- **inspect_anim_blueprint** — Read variables and state machines of an Animation Blueprint.
- **inspect_anim_montage** — Read sections, slots, and notify tracks of an `UAnimMontage`.
- **inspect_static_mesh** — LODs, materials, collision, bounds for a `UStaticMesh`.
- **inspect_skeletal_mesh** — LODs, materials, sockets, skeleton info for a `USkeletalMesh`.
- **inspect_physics_asset** — Body setups (one per simulated bone), constraint setups (joints between bodies), bounds-bodies subset, named physical-animation + constraint profiles. Cross-links to `inspect_skeletal_mesh` via `preview_skeletal_mesh`.
- **inspect_niagara_system** — Emitters and exposed user parameters of a Niagara system.
- **inspect_landscape** — Components, layers, and material info for a landscape actor.
- **inspect_data_table** — RowStruct identity, sorted row names, per-property name+type for every `FProperty` on the row struct, plus client-strip / ignore-extra/missing-fields flags.
- **inspect_curve** — UCurveBase channel layout (1ch UCurveFloat / 4ch UCurveLinearColor / 3ch UCurveVector), per-channel name + key count + per-channel + global time/value range.
- **create_blueprint** — Create a new `UBlueprint` asset under `/Game/` from a parent class (default `/Script/Engine.Actor`).
- **add_blueprint_variable** — Add a typed member variable (bool/int/float/string/name/vector/rotator/transform/object) to an existing `UBlueprint`.
- **add_blueprint_function** — Add a new empty function graph to an existing `UBlueprint`.
- **add_blueprint_node** — Add a K2 node (`call_function` / `variable_get` / `variable_set` / `branch`) to a Blueprint event or function graph; returns the new node's GUID + pins.
- **connect_blueprint_pins** — Wire two pins (exec or data) between nodes by GUID + pin name, via the schema-validated `UEdGraphSchema_K2::TryCreateConnection`.
- **set_blueprint_node_pin_default** — Set a literal or object default on an input pin (verified by read-back).
- **create_material_instance** — Create a `UMaterialInstanceConstant` asset with a parent material set.
- **set_mi_parameter** — Override a scalar/vector/texture parameter on a material instance. Type discriminator picks value shape.
- **inspect_material** — List parameter names declared by a `UMaterial` or `UMaterialInstance` (scalar/vector/texture/static-switch).
- **inspect_material_instance** — Read a material instance's parent + currently-overridden parameter values.
- **add_material_expression** — Create a `UMaterialExpression` node inside an existing `UMaterial`'s graph, then recompile the material.
- **connect_material_expression** — Wire an expression's output to a material property input (`property:BaseColor`) or another expression's input (`node:<ExprName>:<InputName>`), then recompile.
- **import_texture** — Bring an image file (PNG / JPG / EXR / TGA / BMP / HDR) from disk into the project as a `UTexture2D` asset via UE's canonical import path.
- **configure_texture** — Adjust SRGB / compression / LOD group / filter on an existing texture asset.
- **inspect_texture** — Texture class, surface dimensions, sRGB, compression, filter, LOD group, mip-gen, virtual-texture / never-stream flags, composite-texture cross-link. UTexture2D-specific size / mips / pixel format / imported source dimensions emitted conditionally.
- **inspect_sequence** — Read structure of a Level Sequence: tracks, sections, bindings, frame rate, playback range.
- **create_sequence** — Create a new empty Level Sequence asset with a configured display rate and playback range.
- **bind_actor_to_sequence** — Add a level actor as a possessable binding to a Level Sequence.
- **set_sequence_playback_range** — Set a Level Sequence's playback start/end (display-rate frames).
- **add_cine_camera_to_sequence** — Spawn an `ACineCameraActor` and add it as a possessable binding; returns the binding GUID (feed it to `add_camera_cut_track`).
- **add_camera_cut_track** — Add (or reuse) the camera-cut track and bind a camera over a `[start, end]` frame range.
- **add_audio_track** — Add a master audio track + sound section to a Level Sequence.
- **add_visibility_track** — Add an actor-visibility track that keys an actor shown/hidden over time (inverted `bHidden`).
- **render_sequence_mrq** — Async-render a Level Sequence (optional map override) to PNG / JPG / BMP / EXR via Movie Render Queue; returns a `task_id` (completion via `poll_task`).
- **get_actors_in_level** — Name / class / transform of every actor; optional case-insensitive substring filter.
- **spawn_actor** — Create an actor at a location with optional rotation, label, and initial properties. Class path supports built-ins and Blueprints.
- **set_actor_transform** — Move / rotate / scale an existing actor by name. Absolute or relative mode.
- **delete_actor** — Remove an actor by name. Force flag overrides children-attached safety check.
- **set_actor_property** — Mutate any UPROPERTY on an actor. Supports primitives, FName/FText, vectors, rotators, colors, enums, and TSoftObjectPtr.
- **add_component** — Attach a component (UActorComponent / USceneComponent subclass) to an existing actor at runtime, optionally socketed.
- **duplicate_actor** — Clone an existing level actor (label or FName), optionally offset and relabel. Undoable (single Ctrl+Z).
- **set_actor_folder** — Set an actor's World Outliner folder path (e.g. `Lighting/Key`); empty string moves it to the outliner root. Undoable.
- **rename_actor** — Change an actor's World Outliner display label (`SetActorLabel`); the stable FName is unchanged. Undoable.
- **focus_actor** — Select an actor by label and frame the viewport on it.
- **load_level_by_path** — Open a level by package path.
- **create_level** — Create a new empty level (`UWorld`) asset under `/Game/` and open it as the active level.
- **build_lighting** — Invoke a static-lighting build on the active editor world. Non-interactive; may take time on large levels.
- **spawn_niagara_at_location** — Place a Niagara system in the level (`ANiagaraActor` + `SetAsset`) at a world transform; optional auto-activate. Undoable.
- **spawn_niagara_attached** — Attach a Niagara system component to an existing actor, optionally socketed. Undoable.
- **set_niagara_user_param** — Set a user-exposed Niagara parameter (float / vec3 / linear-color / bool) on a placed Niagara component, with type-match validation. Undoable.
- **find_actors_by_class** — Filter the active level's actors by class. Composes `get_actors_in_level` and matches against the short class name. Bridge-side synthetic.
- **bulk_focus_actors** — Frame the viewport on each actor in a sequence, optionally screenshotting each one. Composes `focus_actor` (+ `get_viewport_screenshot`) per name. Bridge-side synthetic.
- **bulk_screenshot_actors** — Focus + screenshot each actor in a sequence. Composes `screenshot_actor` per name. Bridge-side synthetic.
- **bulk_set_actor_property** — Apply many `{actor, property, value}` mutations in one call. Composes `set_actor_property` per assignment. Bridge-side synthetic.
- **compare_assets** — Symmetric diff between two assets' `inspect_asset` outputs. Bridge-side synthetic.
- **bulk_set_console_variables** — Set many CVars in one call with optional atomic rollback. Composes `get_console_variable` + `set_console_variable`. Bridge-side synthetic.
- **inspect_dependency_graph** — BFS the asset dependency graph (down by default, optional bidirectional sweep). Composes `inspect_asset` recursively. Bridge-side synthetic.
- **bulk_fix_redirectors** — Resolve redirectors across many content folders in one call. Composes `fix_up_redirectors` per folder. Bridge-side synthetic.
- **get_viewport_screenshot** — Active viewport as a PNG written to a project-confined disk path (throttle-proof fresh frame; optional small inline thumbnail).
- **take_high_res_screenshot** — Trigger UE's `HighResShot` console command.
- **render_camera_to_png** — Force a synchronous render of the level-editor viewport (or an off-screen SceneCapture2D at arbitrary resolution) and write a PNG — works headless where deferred screenshots fail.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `uvx` (confidence: high):

```json
"mcpServers": {
  "unreal-ai-connection": {
    "command": "uvx",
    "args": ["pytest"]
  }
}
```

## Documentation

## What NAJEMWEHBE/unreal-ai-connection MCP server does

NAJEMWEHBE/unreal-ai-connection MCP server gives an MCP-compatible client access to a running Unreal Engine editor. It is intended for editor automation rather than gameplay runtime control. The available surface covers project information, asset registry queries, asset changes, Blueprint inspection and compilation, widget authoring, specialized asset inspection, and arbitrary Unreal Python execution.

The repository describes a native C++ Unreal plugin paired with a thin Python bridge. The plugin handles editor operations inside Unreal, while the bridge presents those operations through MCP. The project reports support for Unreal Engine 5.7 as its last-known-good version and includes a prebuilt UE 5.6 release. Other engine versions are best-effort and untested.

## How it works

An MCP client sends a tool call to the Python bridge over stdio. The bridge forwards the request as framed JSON-RPC through a TCP connection to the Unreal plugin at `127.0.0.1:18888`. The plugin then calls Unreal Editor APIs and returns the result through the same path. Because the editor endpoint listens only on the local loopback address, the documented setup does not expose the editor to other machines over the network.

The bridge includes several Python-oriented workflows. Agents can execute multiline code in the editor's `unreal.*` interpreter, run a Python file, apply code to the current actor or asset selection, or use a persistent Python session whose variables survive between calls. A reset operation clears that persistent session state.

## Setup and configuration

The Unreal plugin must be installed separately in the project’s `Plugins/` directory, and the editor must be launched so it can bind its local socket. The MCP client then needs to be configured to start the repository’s Python bridge script. The README provides client-specific configuration paths for Claude Desktop, Cursor, Windsurf, Cline, and other MCP clients, plus recipes for Windows users who need the `py` launcher instead of `python3`.

The documented examples use an absolute path to `bridge/unreal_ai_connection_bridge.py`; that path must be replaced with the location on the host running the bridge. The project also requires a compatible Python installation; its repository badge specifies Python 3.11 or newer. No API key or remote service is described.

## Tools and capabilities

NAJEMWEHBE/unreal-ai-connection MCP server includes tools for:

- Summarizing the project, including its engine version, enabled plugins, and asset count.
- Finding, inspecting, moving, renaming, duplicating, and deleting assets, with redirector handling and reference checks.
- Creating data tables, data assets, and Blueprint assets.
- Reading and compiling Blueprints, including variables, graphs, and parent classes.
- Inspecting Widget Blueprints and Widget Trees, then changing a tree’s root, children, or properties.
- Inspecting animation Blueprints, montages, static and skeletal meshes, physics assets, Niagara systems, landscapes, data tables, and curves.
- Running arbitrary or persistent Unreal Python code in the editor.

The broader README also describes authoring and automation coverage beyond the individual tools listed in the supplied material, including actors, levels, material graphs, Niagara effects, cinematics, and render-queue workflows.

## Limitations and notes

The repository is explicitly deprecated. Active development stopped in July 2026, and the maintainer states that no further features, fixes, releases, or issue or pull-request responses are promised. The code remains available under the MIT license, and forks are permitted.

UE 5.7 is the officially supported and tested target identified by the project. UE 5.6 is covered by a named prebuilt release, while other versions are not promised. Source builds for UE 5.3 and older may require manually selecting an engine-appropriate MSVC compiler version. The tool requires a running editor with the plugin installed; configuring only the stdio bridge is not sufficient.

_Full upstream README: https://allmcps.com/mcp/najemwehbe-unreal-ai-connection/readme_

