Connects Claude or other MCP clients to Unreal Engine 4.27.2 via Python Remote Execution, no custom plugin required. You get granular tools to read project info, spawn and modify actors, search assets, create data assets and string tables, and manage sequences through the built-in SequencerScripting module. The manage_* namespace tools are the main interface, with manage_editor.project_info and manage_level.world_outliner as your read entry points and manage_editor.run_python as an escape hatch for unwrapped API calls. Forked from runreal's unreal-mcp but heavily refactored for UE4 compatibility and expanded scope. Requires Editor Scripting Utilities and Python Editor Script Plugin enabled in your project settings before the server can talk to your open editor session.
UE4.27.2-focused MCP server for Unreal Engine using Unreal Python Remote Execution
unreal-mcp-ue4 started from the core idea and early workflow shape of runreal/unreal-mcp, but it has since been heavily refactored for Unreal Engine 4.27.2 and expanded with many new tools, UE4-specific compatibility layers, documentation, and smoke coverage. At this point, the original inspiration remains, but the public surface and day-to-day behavior are substantially different and UE4-first.
This port and the follow-up tool, documentation, and smoke-test work were developed with assistance from OpenAI Codex.
This project is still under active development, so bugs, rough edges, and UE4.27-specific limitations may still surface.
Published package:
unreal-mcp-ue4
Registry name:io.github.conaman/unreal-mcp-ue4
4.27.218+npmThis is the most important setup step: your MCP client must know how to launch unreal-mcp-ue4.
Recommended global install:
npm install -g unreal-mcp-ue4
After the global install, use the published unreal-mcp-ue4 binary in your client configuration.
One-off invocation with npx:
npx unreal-mcp-ue4
Local source checkout:
git clone https://github.com/conaman/unreal-mcp-ue4.git
cd unreal-mcp-ue4
npm install
npm run build
Successful build output should create dist/bin.js, dist/index.js, and dist/editor/tools.js. Use the dist/bin.js path in the local source checkout examples below.
Use the global examples when you installed with npm install -g unreal-mcp-ue4. Use the local source checkout examples when you are developing from a cloned repository.
Global npm install:
claude mcp add --scope user unreal-mcp-ue4 -- unreal-mcp-ue4
Local source checkout:
claude mcp add --scope user unreal-mcp-ue4 -- node /absolute/path/to/unreal-mcp-ue4/dist/bin.js
Global npm install:
codex mcp add unreal-ue4 -- unreal-mcp-ue4
Local source checkout:
codex mcp add unreal-ue4 -- node /absolute/path/to/unreal-mcp-ue4/dist/bin.js
Create or update .vscode/mcp.json.
Global npm install:
{
"servers": {
"unreal-ue4": {
"command": "unreal-mcp-ue4",
"args": []
}
}
}
Local source checkout:
{
"servers": {
"unreal-ue4": {
"command": "node",
"args": [
"/absolute/path/to/unreal-mcp-ue4/dist/bin.js"
]
}
}
}
Then start the server from the MCP config UI and verify that unreal-ue4 appears in the tools picker.
Official Copilot docs:
This repository does not ship its own Unreal plugin. Instead, it depends on built-in editor features that must be enabled in your UE4.27.2 project.
In Unreal Editor:
Edit -> Plugins.Python Editor Script Plugin.Editor Scripting Utilities.SequencerScripting if you want to use advanced manage_sequence actions such as actor binding, track or key edits, camera cuts, playback ranges, and speed-track analysis.Edit -> Project Settings -> Python.Enable Remote Execution.Notes:
manage_* namespace tools as the main MCP surface.params keys per action instead of relying only on trial and error.manage_editor.project_info as the canonical project summary entry point.manage_editor.map_info and manage_level.world_outliner as the canonical map and level read entry points.manage_editor.run_python as an escape hatch for debugging, rapid prototyping, and UE4.27 API gaps that are not yet wrapped as stable tools.Enable Remote Execution are enabled.npm install -g unreal-mcp-ue4, or build your local checkout with npm run build.Useful first commands:
unreal-mcp-ue4 --version to print the MCP server package version without starting stdio transport.manage_editor with action: "project_info"manage_editor with action: "map_info"manage_level with action: "world_outliner"manage_tools with action: "list_namespaces"Useful first natural-language requests:
Get project info from the unreal-ue4 server.List the actors in the current level.Spawn a StaticMeshActor named TestCube at 0,0,100.DataAsset and StringTable assets.action and params.Use this when you want to verify MCP startup, tool discovery, namespace action schemas, and action-specific parameter validation without launching Unreal Editor.
npm run test:no-unreal
The smoke test builds the server, launches its own local MCP server process, connects to the already running Unreal Editor, and runs a deterministic validation flow. You do not need to start a separate MCP server manually before this test.
npm run test:e2e
This checks:
npm run test:e2e -- --with-assets
This adds:
/Game/MCP/TestsUseful options:
npm run test:e2e -- --with-assets --keep-assets keeps the generated test assets so you can inspect them in the Content Browser after the run.npm run test:e2e -- --skip-namespace skips the namespace-dispatch portion of the smoke run.npm run test:e2e -- --verbose prints MCP server stderr during the run.npm run test:e2e -- --help prints the runner options without rebuilding the server.Open PowerShell in the repository folder:
cd C:\dev\unreal-mcp-ue4
npm install
npm run test:no-unreal
npm run test:e2e
npm run test:e2e -- --with-assets
[PASS] for every test step./Game/MCP/Tests and then removes them before exit unless --keep-assets is used.npm run test:no-unreal.npm run test:e2e.npm run test:e2e -- --with-assets.The package is published to npm as a public package.
The project version format is unified everywhere as the semver-compatible date form YYYY.M.D-N. For example, 2026.5.8-1 follows this format.
Recommended maintainer flow:
npm run publish:check
npm run test:e2e -- --with-assets --skip-build
npm publish --tag latest
Notes:
prepack runs npm run build, so the published tarball always uses a fresh dist.npm run publish:check verifies typecheck, rebuilds the package, and runs npm pack --dry-run so you can inspect the exact tarball contents before publishing.latest.Remote node is not availablePython Editor Script Plugin is enabled.Editor Scripting Utilities is enabled.Enable Remote Execution is enabled in project settings.UnrealEditor.exe and node.exe through Windows Defender Firewall.239.0.0.1:6766 and opens the command channel on port 6776.UNREAL_MCP_BIND_ADDRESS or UNREAL_MCP_COMMAND_ADDRESS if Unreal cannot discover or connect to the MCP process.unreal-mcp-ue4 or nodePATH.PATH, use an absolute path to the global unreal-mcp-ue4 executable.node or node.exe instead of relying on PATH.Excluded Capability Areas in the tool section.PanelWidget parents, but delegate binding helpers remain unavailable in stock UE4.27 Python.CanvasPanel slots in UE4.27. Use manage_widget.ensure_canvas_root when a Widget Blueprint has a non-Canvas root but needs CanvasPanel-style positioning.The tool list below is generated from the TypeScript tool catalog during build.
Notes call out important requirements or UE4.27 limitations when they matter. Empty notes mean there are no additional caveats beyond normal editor setup.
The recommended public surface is the manage_* namespace layer. Prefer manage_editor.project_info, manage_editor.map_info, and manage_level.world_outliner as canonical read entry points, and treat the small direct-tool set as low-level primitives for path discovery and actor CRUD.
| Tool | Description | Notes |
|---|---|---|
get_unreal_engine_path |
Get the active Unreal Engine root path from the connected editor session | |
get_unreal_project_path |
Get the active Unreal project file path from the connected editor session | |
get_unreal_version |
Get the active Unreal Engine version string from the connected editor session |
| Tool | Description | Notes |
|---|---|---|
editor_create_object |
Create a new object/actor in the world | |
editor_update_object |
Update an existing object/actor in the world | |
editor_delete_object |
Delete an object/actor from the world |
| Tool | Description | Notes |
|---|---|---|
manage_asset |
Asset tool namespace for listing, searching, inspecting, exporting, validating, duplicating, renaming, moving, deleting, saving, and folder-management actions. | |
manage_actor |
Actor tool namespace for listing, searching, spawning, deleting, transforming, and inspecting level actors. | |
manage_editor |
Editor tool namespace for run_python, console_command, project_info, map_info, world_outliner, is_pie_running, start_pie, stop_pie, screenshot, and move_camera actions. | Canonical namespace for project_info, map_info, world_outliner, start_pie, stop_pie, is_pie_running, console_command, and run_python. |
manage_level |
Level tool namespace for map inspection, actor listing, world outliner inspection, and preset structure creation actions. | |
manage_system |
System tool namespace for console commands and asset validation actions. | Slim namespace for console and validation helpers; use manage_editor for canonical project and map inspection. |
manage_inspection |
Inspection tool namespace for asset, actor, map, and basic Blueprint summary actions. | Asset, actor, and map inspection work; Blueprint inspection is limited to high-level asset summaries in stock UE4.27 Python. |
manage_tools |
Tool-namespace registry for listing registered tool namespaces and describing supported actions. Use this as the discovery entry point for the namespace-first MCP surface. | |
manage_source_control |
Source-control tool namespace for provider inspection and file or package source-control operations. | provider_info works broadly, but file and package operations require a configured and available Unreal source-control provider. |
| Tool | Description | Notes |
|---|---|---|
manage_lighting |
Lighting tool namespace for spawning common light actors, transforming them, and inspecting level lighting state. | |
manage_level_structure |
Level-structure tool namespace for preset town, house, mansion, tower, wall, bridge, and fortress construction actions. | |
manage_volumes |
Volume tool namespace for spawning common engine volumes and applying delete or transform actions. | |
manage_navigation |
Navigation tool namespace for spawning navigation volumes and proxies plus basic map inspection actions. | |
manage_environment |
Environment-building tool namespace for preset town, arch, staircase, pyramid, and maze generation actions. | |
manage_splines |
Spline tool namespace for spawning a spline-host actor or Blueprint and then transforming or deleting it. | |
manage_geometry |
Geometry tool namespace for wall, arch, staircase, and pyramid preset construction actions. | |
manage_effect |
Effects tool namespace for spawning debug-shape actors, assigning materials, tinting them, and deleting them. |
| Tool | Description | Notes |
|---|---|---|
manage_skeleton |
Skeleton tool namespace for searching Skeleton and SkeletalMesh assets and inspecting their metadata. | |
manage_material |
Material tool namespace for listing materials, applying them to actors or Blueprints, and tinting them with material instances. | |
manage_texture |
Texture tool namespace for searching texture assets, importing image files as textures, and reading their asset metadata. | import_texture requires a local image file path that is accessible from the machine running the Unreal Editor session. |
manage_data |
Data tool namespace for searching data assets, creating common data containers, and inspecting their asset metadata. | |
manage_blueprint |
Blueprint tool namespace for Blueprint creation, component editing, compilation, and basic Blueprint summary actions. | Blueprint asset and component edits work; graph inspection, pin wiring, and variable or function metadata helpers are excluded from the MCP surface in stock UE4.27 Python. |
manage_sequence |
Sequence tool namespace for creating, searching, inspecting, and editing LevelSequence assets, including bindings, tracks, sections, keys, camera cuts, playback ranges, and speed-track time calculations. | Advanced binding, track, section, key, camera-cut, playback-range, and speed-track analysis actions require the UE4.27 SequencerScripting plugin in the target project. |
manage_audio |
Audio tool namespace for importing audio files, searching audio assets, and inspecting their asset metadata. | |
manage_widget |
Widget tool namespace for UMG Blueprint creation, widget-tree inspection, widget-tree edits, CanvasPanel root normalization, and viewport spawning actions. Use inspect_tree to verify designer contents, add_child_widget for nested layout work, and ensure_canvas_root when absolute CanvasPanel positioning is required. | create_widget_blueprint, inspect_tree, add_text_block, add_button, and ensure_canvas_root work; use add_child_widget for normal nested layout, and use ensure_canvas_root before CanvasPanel positioning or sizing if the root is another panel. add_to_viewport requires PIE; start_pie_if_needed can request PIE and may require a retry. |
| Tool | Description | Notes |
|---|---|---|
manage_animation_physics |
Animation-and-physics tool namespace for physics Blueprint spawning, Blueprint physics settings, and Blueprint compilation actions. | |
manage_input |
Input tool namespace for creating classic UE4 input mappings. | Focused on classic UE4 input-mapping authoring; use manage_editor.project_info for the canonical project summary. |
manage_behavior_tree |
Behavior-tree tool namespace for creating, searching, and inspecting BehaviorTree assets. | Focused on BehaviorTree asset discovery and inspection; use manage_editor.project_info for the canonical project summary. |
manage_gas |
GAS tool namespace for searching gameplay-ability-related assets and inspecting their asset metadata. |
These capability areas are intentionally not exposed through the MCP surface in this UE4.27 port because they fail reliably in the current Python environment and only add prompt or context overhead until a native bridge exists.
| Capability Area | Effect on MCP Surface | Why It Is Excluded |
|---|---|---|
| Blueprint event-graph event insertion | Related event-node and input-action helpers are excluded from the MCP surface. | The current UE4.27 Python environment does not expose reliable event graph access or K2 event reference setup. |
| Blueprint graph inspection and node search | Graph-analysis, graph-inspection, and node-search helpers are excluded from the MCP surface. | The current UE4.27 Python environment does not expose Blueprint graph arrays such as UbergraphPages or FunctionGraphs reliably enough for deterministic inspection. |
| Low-level Blueprint graph node creation | Generic graph-node helpers and related self or component reference insertion helpers are excluded from the MCP surface. | The current UE4.27 Python environment does not expose stable low-level graph node creation or member-reference wiring. |
| Blueprint function-call node authoring | Function-node helpers that depend on editor graph member-reference setup are excluded from the MCP surface. | The current UE4.27 Python environment does not expose reliable function-call node reference setup. |
| Blueprint variable and function metadata inspection | Variable-detail and function-detail helpers are excluded from the MCP surface. | The current UE4.27 Python environment does not expose NewVariables or FunctionGraphs reliably enough for deterministic inspection. |
| Blueprint variable authoring | Variable-creation helpers are excluded from the MCP surface. | BPVariableDescription and EdGraphPinType are not exposed in the current UE4.27 Python environment. |
| UMG delegate-binding authoring | Widget event-binding and text-binding helpers are excluded from the MCP surface. | DelegateEditorBinding is not exposed in the current UE4.27 Python environment. |
Licensed under the MIT License.