unreal-mcp-additional-tools
An MCP server that complements Epic's official Unreal Engine MCP server with 81 additional tools across 14 subsystems — covering build/cook/package, cinematics, Niagara, testing, source control, profiling, World Partition, and content maintenance, all without requiring a custom C++ plugin.
Build & packaging: compile C++ targets, cook content, run the full BuildCookRun pipeline, package projects, build plugins, execute BuildGraph scripts, generate project files, clean artifacts, and parse build logs for errors/warnings.
Cinematics/Sequencer: create and inspect level sequences, bind actors, add transform/animation/audio/event tracks, set playback range and framerate, export to FBX, and queue Movie Render Queue renders.
Niagara VFX: spawn systems at world locations or attached to actors, set float/vector/color/bool parameters, and reset or reinitialize systems.
Automation testing: list and run automation tests by name, category, or all; run map checks, launch Gauntlet sessions via UAT, and fetch test results.
Source control: query status, check out/in files, revert, mark for add, and get diffs.
Profiling: start/stop Unreal Insights traces, run stat commands (fps, unit, memory, etc.), and start/stop CSV profiling.
World Partition: list data layers, set layer states (Loaded/Activated/Unloaded), query loaded cells, and configure streaming sources.
Content maintenance: import/export assets, validate assets, fix redirectors, resave packages, run content audits, and consolidate duplicate assets.
Editor utilities: run editor utility widgets and blueprints, generate collision (box/sphere/capsule/convex/auto) and lightmap UVs, plus undo/redo with transaction history.
Remote Control Presets: list/inspect presets, get/set exposed property values, and call exposed functions.
Animation: create animation blueprints and montages, inspect animation sequences, set skeletal mesh LOD counts, reimport skeletal meshes, and apply animation modifiers.
General: execute arbitrary Python in the editor, run console commands, check transport connection status, duplicate actors, set actor tags, and apply materials as live actor-instance overrides.
Provides tools for interacting with Unreal Engine projects, covering build/cook/package, cinematics, Niagara VFX, automation testing, source control, profiling, World Partition, and content maintenance.
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-additional-tools Cook the project for Windows in shipping configuration"
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-additional-tools
An MCP server that complements Epic's official Unreal Engine MCP server — 81 tools across 14 subsystems covering the areas Epic's server doesn't reach: build/cook/package, cinematics, Niagara, automation testing, source control, profiling, World Partition, and project-wide content maintenance.
Run it alongside Epic's official server. This repo has been deliberately deduplicated against it, so the two form a clean union with no functional overlap — see Relationship to Epic's Official Server.
Forked from sam-david/unreal-mcp (MIT). The upstream project is a general-purpose Unreal MCP server; this fork deduplicates its toolset against Epic's official server so both can be connected at once.
Relationship to Epic's Official Server
This project began as a general-purpose Unreal MCP server. After Epic shipped an official one, its toolset was deduplicated against Epic's so the two can be connected at the same time without redundant or conflicting tools.
What was removed
Whole categories were dropped only where Epic has a genuine 1-call (or trivial 2-call) equivalent:
blueprintmodule (12 tools) — deleted outright. Epic'sBlueprintToolsis a strict superset.pluginmodule (3 tools) — deleted outright. Epic'sPluginToolsetis a strict superset.actor,asset, andmaterial— trimmed heavily for the same reason, leaving only the tools with no Epic counterpart.
What was deliberately kept
Some remaining tools have names that sound similar to Epic's, but the behavior differs. These were kept on purpose:
Tool | Why it isn't a duplicate |
| Epic's mesh tools set the asset's default slot material. This sets a live actor-instance override. |
| Epic only does convex-hull generation. Box/sphere/capsule/auto modes have no Epic equivalent. |
| Epic's |
| Epic has no in-place reimport. |
| Epic's import tools are per-asset-type only — no generic or audio import. |
| Epic has no asset export. |
| Epic has no data validation tool at all. |
What was untouched
Entire domains were left fully intact because Epic has no equivalent:
Build, cook, and packaging
Cinematics / Sequencer
Niagara VFX
Automation testing and Gauntlet
Source control (real checkin/checkout/diff, not just read-only flags)
Profiling and Unreal Insights traces
World Partition
Undo/redo
Remote Control Presets
Project-wide maintenance —
fix_redirectors,resave_packages,content_audit,consolidate_assets
Related MCP server: unreal-engine-mcp
Quick Start
Prerequisites
Node.js >= 20.12.2 (matches
enginesinpackage.json)Unreal Engine 5.x with editor open
Python Editor Script Plugin enabled (built-in) with Enable Remote Execution checked in its settings
That's it. All 81 tools reach the editor through Python Remote Execution, the Remote Control API, or a spawned UAT/UBT/commandlet subprocess — no custom C++ plugin is required. If you happen to already run a bridge plugin, that's fine too and nothing conflicts — see Transport Layers.
Install
git clone https://github.com/nodormu/unreal-mcp-additional-tools.git
cd unreal-mcp-additional-tools
npm install
npm run buildAdd to Claude Code
Per-project (from your UE project directory):
claude mcp add --transport stdio unreal-extra -- node /path/to/unreal-mcp-additional-tools/dist/bin.jsGlobal (available in all projects):
claude mcp add --scope user --transport stdio unreal-extra -- node /path/to/unreal-mcp-additional-tools/dist/bin.jsThen drop a .unrealmcp.json in each UE project:
{
"projectPath": "."
}Add to MCP Server
Here is an example configuration you can add to your MCP Client as an available MCP server to connect to:
{
"mcpServers": {
"unreal-extra": {
"command": "node",
"args": ["/path/to/unreal-mcp-additional-tools/dist/bin.js"],
"env": {
"UNREAL_MCP_PROJECT_PATH": "/path/to/YourProject.uproject"
}
}
}
}Tool Modules
81 tools across 14 modules. Module names below are the values accepted by enabledModules / UNREAL_MCP_MODULES.
Module | Tools | Description |
console | 3 | Execute Python, run console commands, check transport connection status |
actor | 2 | Duplicate actors, set actor tags |
asset | 10 | Import/export, data validation, fix redirectors, resave packages, content audit, consolidate duplicates, orphan-asset finder, circular-dependency detector, dependency tree |
build | 9 | Build targets, cook, package, BuildCookRun, build plugins, BuildGraph, generate project files, clean, parse build status |
material | 1 | Apply a material to a live actor's mesh component |
sequencer | 8 | Create sequences, inspect structure, bind actors, add tracks, playback range, framerate, FBX export, Movie Render Queue |
animation | 6 | Animation blueprints, montages, sequence info, skeletal mesh LODs, reimport, animation modifiers |
niagara | 8 | Spawn systems at a location or attached, set float/vector/color/bool parameters, reset, reinit |
testing | 7 | List and run automation tests (by name, category, or all), map check, Gauntlet, fetch results |
source-control | 6 | Status, checkout, checkin, revert, mark for add, diff |
profiling | 5 | Start/stop Unreal Insights traces, stat commands, start/stop CSV profiling |
world-partition | 4 | List data layers, set data layer state, query loaded cells, configure streaming sources |
editor-utils | 7 | Run editor utility widgets/blueprints, generate collision and lightmap UVs, undo, redo, undo history |
remote-control-presets | 5 | List and inspect presets, get/set exposed properties, call exposed functions |
Resources
Beyond the 81 tools, the server also exposes two read-only MCP resources:
URI | Contents |
| Current |
| Live transport status ( |
Architecture
MCP Client (Claude Code, Claude Desktop, etc.)
↕ stdio (MCP protocol)
unreal-mcp-additional-tools server
↕ transport layers
Unreal EngineTransport Layers
Transport | Protocol | Port | What It Needs | Used by |
Python Remote Execution | UDP multicast + inverted TCP | 6776 | Python Editor Script Plugin (built-in) | Most tools |
Subprocess Runner | Spawns UAT/UBT processes | N/A | Engine path only | Build, cook, package, Gauntlet |
Remote Control API | HTTP REST | 30010 | Remote Control API plugin (built-in) | Remote Control Presets |
Plugin Bridge | TCP, length-prefixed JSON | 55557 | Optional C++ plugin | Currently unused |
The server probes all transports on startup and tools degrade gracefully. Build tools run through the subprocess runner and don't need the editor open at all.
The Plugin Bridge client and its executeWithPluginFallback() plugin-first/Python-fallback path remain in the codebase, but no tool currently routes through it — its only consumer was the blueprint module, which was removed during the dedupe against Epic's server. No C++ plugin ships with this repo.
Already running a bridge plugin? One exists as a separate project: unreal-mcp-bridge-plugin (v0.1, UE 5.8.1, Linux). Nothing here requires it, but if it's listening this server will find it during the startup probe, negotiate capabilities, and report "pluginBridge": true in unreal://status and get_connection_status.
That true is worth reading precisely: it means the transport connected, not that anything is using it. Because no tool routes through the bridge today, installing the plugin doesn't change any tool's behavior — every call still goes over Python Remote Execution, Remote Control, or a subprocess exactly as it would without the plugin. The status flag and the negotiated pluginCapabilities are the only visible difference. Use --plugin-port if yours listens somewhere other than 55557.
The capabilities it advertises are Blueprint/K2 authoring commands (create_blueprint, add_node, connect_nodes, and similar) — which is precisely what the removed blueprint module consumed. So the plugin side of that pairing still works; it's this server's tools that are gone, deliberately, because Epic's official BlueprintTools covers the same ground. Run Epic's server alongside this one for Blueprint work.
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 |
|
| Bind address for the UDP multicast discovery socket. Advanced/rarely needed — see the security note below before narrowing this. |
| Win64 | Target platform |
| Development | Build configuration |
| all | Comma-separated list of modules to enable |
Linux/macOS:
UNREAL_MCP_ENGINE_PATHauto-detection only probes common Windows install locations (C:\Program Files\Epic Games\UE_<version>, etc.) after readingEngineAssociationfrom your.uproject— it never finds a Linux or macOS install on its own. SetUNREAL_MCP_ENGINE_PATHexplicitly on those platforms.UNREAL_MCP_PLATFORMalso defaults toWin64; Linux users should set it toLinux(macOS:Mac) sobuild_target/build_cook_run/package_projecttarget the right platform. The subprocess runner itself already knows how to locateRunUAT.sh,UnrealBuildTool, and the Linux/MacUnrealEditorbinary onceenginePathpoints at a real install — only the auto-detect guess is Windows-only.
CLI Arguments
node dist/bin.js --project-path /path/to/project --engine-path /path/to/UE_5.8 --rc-port 30010Every config value has a matching flag:
Flag | Env var equivalent | Description |
|
| Path to |
|
| UE engine install path |
|
| Remote Control API port |
|
| Python Remote Execution command port |
|
| Bind address for the UDP multicast discovery socket (default |
| (none) | Port for the optional Plugin Bridge transport (default |
|
| Target platform for build/cook/package |
|
| Build configuration |
|
| Comma-separated list of modules to enable |
Config File
Place .unrealmcp.json in your project directory or home directory:
{
"projectPath": ".",
"platform": "Linux",
"configuration": "Development",
"enabledModules": ["console", "asset", "build", "sequencer", "niagara"]
}(platform defaults to Win64 if omitted — set it to match your actual OS, e.g. Linux or Mac, per the note above.)
Windows notes
Engine path auto-detection only covers default launcher installs. It reads
EngineAssociation from your .uproject and probes exactly three locations:
C:\Program Files\Epic Games\UE_<association>, the (x86) variant, and
D:\Program Files\Epic Games\UE_<association>. That works when the association
is a version string like 5.8. It does not cover:
Source builds, whose
EngineAssociationis a GUID registered underHKEY_CURRENT_USER\Software\Epic Games\Unreal Engine\Builds. No registry lookup is performed, so the GUID is pasted straight into the paths above and matches nothing.Launcher installs on any other drive or directory.
In either case pass --engine-path or set UNREAL_MCP_ENGINE_PATH. Without a
resolved engine path, the 12 subprocess-backed tools fail with a
Cannot find RunUAT / Cannot find UnrealBuildTool / Cannot find UnrealEditor
error depending on which binary they need — that's the 8 spawning tools in
build, the three commandlet-backed asset tools (fix_redirectors,
resave_packages, content_audit), and run_gauntlet. Everything that talks
to the running editor over Python or Remote Control is unaffected, as is
get_build_status, which only parses a log you pass it.
Build arguments containing % or " are rejected. Windows cannot execute
RunUAT.bat directly — batch files only run through a command interpreter — so
the subprocess runner invokes cmd.exe /d /s /c and quotes each argument
itself. cmd.exe expands %VAR% even inside double quotes with no in-quote
escape available, and an embedded " would terminate the quoting early, so an
argument containing either is refused up front rather than silently mangled:
Rejected unsafe subprocess token (cmd.exe cannot safely quote '%' or '"')This applies to your engine and project paths too. Paths containing spaces
are fine — they are quoted correctly and round-trip intact. If a path contains a
literal %, point --engine-path / --project-path somewhere without one.
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+: If discovery fails with the default, try changing Multicast Bind Address to
0.0.0.0— Epic changed the default in 5.3 and it can break discovery on some setups (see the security note below before doing this on an untrusted network)Verify Multicast Group Endpoint is
239.0.0.1:6766
Restart the editor again
Security note — TCP command channel has no peer authentication. This server's own multicast bind address (the client side, not the editor setting above) defaults to
0.0.0.0, matching whatunreal-remote-executionrequires on Windows (wheresetMulticastInterface()needs0.0.0.0as the bind address — see the comment insrc/transports/python-exec.ts). One consequence: the TCP command channel this opens (port 6776, via theunreal-remote-executionpackage) listens on every interface, and it accepts whichever process connects to it first — it does not verify the connecting peer is actually the UE Editor. This is a property of Epic's Python Remote Execution protocol itself (no shared secret to authenticate with), not something fixable in this server alone. In practice, this means any other process on a reachable interface that connects to port 6776 before the real editor does will be accepted as if it were the editor, and this server's connection-status cache has no way to detect that after the fact — recovery requires noticing the mismatch and terminating the stray process yourself. Don't run this on a shared/multi-tenant machine, or a network you don't trust, without being aware of this. Widening the editor's own Multicast Bind Address setting (the setup step above) carries the same no-peer-authentication exposure, just on the editor's socket instead of this server's — the same caution applies either way.
UNREAL_MCP_MULTICAST_BIND/--multicast-bindlet you narrow this server's own discovery socket's bind address (e.g. to127.0.0.1) — separately from the UE editor's own Multicast Bind Address setting above. These are two independent per-side settings, and a loopback-only round trip needs both to agree on127.0.0.1— narrowing only this server's side isn't enough on its own.Why
0.0.0.0stays the default here. UDP multicast group membership is interface-scoped: whichever interface a socket joins the group on is the only interface it can receive replies on. On a genuinely single-NIC host, narrowing both sides to loopback should work fine, since multicast delivers locally overlowithout ever leaving the machine. But on any host with more than one active network path (a real NIC alongside a VPN, virtual bridge, WSL, etc.), the outbound discovery ping goes out a real NIC (auto-selected — seeresolveMulticastInterface()), and — this is the part that isn't obvious — the editor's reply is subject to the exact same constraint on its own side. Epic's compiled-in engine default for the editor's Multicast Bind Address is actually127.0.0.1, but real multi-NIC setups routinely have to override it to0.0.0.0just to get discovery working at all (that's exactly what the 5.3+ note above is describing). Once the editor's own setting is0.0.0.0, its reply leaves over its own real interface too — so narrowing only this server's bind address to loopback can't help, because the reply it's waiting for never travels overloin the first place. Confirmed on a real multi-NIC Linux host: narrowing this server alone to127.0.0.1finds zero nodes, even when its outbound interface is also forced to loopback to match.0.0.0.0is kept as the default because it's the one value that works regardless of what the editor's own setting happens to be, rather than requiring every host to first verify both sides agree on loopback.Running Epic's official Unreal MCP server alongside this one doesn't factor into this at all. Epic's server runs its own in-process HTTP listener (typically port 8000) and never touches the Python Remote Execution multicast group or ports — the only two parties in the bind-address question above are this server's own client and the UE editor's Python Remote Execution socket.
If you're on a genuinely single-NIC host and want to try loopback-only anyway: narrow both this setting and the editor's own Multicast Bind Address to
127.0.0.1, restart the editor, and confirm discovery still finds a node before relying on it.If you're about to open a PR changing this default to
127.0.0.1, please test it on a real multi-NIC host first. On this maintainer's own multi-NIC Linux dev machine, narrowing only this server's side to127.0.0.1fails cleanly (discovery finds zero nodes, every time). But actually running the both-sides test described above — setting the editor's own Multicast Bind Address to127.0.0.1and restarting the editor to match — has, every time it's been attempted, crashed the editor itself (not just failed to find a node). Neither result makes127.0.0.1look like a safer or more correct default here. PRs proposing it are welcome if they include evidence it behaves differently on your setup, but "it should just work on loopback" alone isn't going to be enough — it hasn't held up empirically on this box.
Still getting "No Unreal Editor nodes found"?
VPN/Tailscale users: Tailscale's virtual network adapter can hijack multicast. Try temporarily disabling Tailscale, or disable/remove its virtual network interface (Windows: Network Connections; Linux:
ip link showto findtailscale0andsudo ip link set tailscale0 down; macOS: System Settings > Network).Firewall: Allow UDP port 6766 and TCP port 6776.
Windows: allow the ports in Windows Firewall, or temporarily disable it to test.
Linux:
sudo ufw allow 6766/udp && sudo ufw allow 6776/tcp(ufw) or the equivalentfirewall-cmd --add-portrules (firewalld).macOS: System Settings > Network > Firewall, or
sudo pfctlrules if you run a custompfconfig.
Multiple adapters: WSL, Hyper-V, VPN adapters, and (on Linux) Docker/virtual bridge interfaces can all cause multicast to bind to the wrong interface. Disabling unused adapters helps.
Optional (for Remote Control Preset 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
Other Community Projects
For context, other Unreal MCP implementations in the wild:
Tools | ~30 | ~20 | ~5 | 36 |
Requires C++ plugin | Yes | Yes | Yes | Yes |
Build/package tools | No | No | No | Partial |
All of them require compiling and installing a custom C++ plugin into your UE project. This one doesn't.
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 # Runs vitest in watch mode (add `-- run` for a single non-interactive pass, e.g. in CI)License
MIT — see LICENSE. Original work copyright Sam David; modifications in this fork copyright nodormu.
Available Tools
78 toolsadd_actor_bindingC
Bind an actor to a level sequence for animation.
Inputs: actor_name (required), sequence_path (required).
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.
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_level_sequenceB
Create a new LevelSequence asset for cinematics.
Inputs: name (required), path.
duplicate_actorsC
Duplicate actors by name.
Inputs: names (required), offset.
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_project_filesB
Regenerate IDE project files (Visual Studio, Xcode, Rider).
Inputs: no named parameters.
get_anim_sequence_infoA
Get info about an animation sequence (length, frames, bone data).
Inputs: sequence_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.
import_assetB
Import an external file (FBX, PNG, WAV, etc.) into the project.
Inputs: source_file (required), destination_path (required).
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_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.
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).
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).
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).
set_actor_tagsC
Set tags on an actor.
Inputs: name (required), tags (required).
set_data_layer_stateC
Set the state of a data layer (Loaded, Activated, Unloaded).
Inputs: state (required), layer_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.
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.
undoA
Undo the last editor action.
Inputs: no named parameters.
validate_assetsA
Run data validation on assets in a directory and return the actual results (pass/fail counts and a per-validator breakdown), not just a completion flag.
Inputs: limit, directory.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 78 tools
Many tools overlap in purpose: execute_console_command and run_stat_command both run console/stat commands, and run_automation_test, run_all_automation_tests, run_automation_tests_by_category have unclear boundaries. Build-related tools also overlap significantly (build_cook_run, cook_content, package_project).
Naming is inconsistent: source control tools use a 'sc_' prefix while similar workflows use full verb_noun patterns; run_stat_command vs execute_console_command; get_test_results vs list_automation_tests; and tool verbs mix 'get', 'list', 'run', 'execute', 'set' without a clear convention.
78 tools is far beyond a well-scoped server and spans multiple unrelated domains (source control, build, automation, Niagara, sequences, remote control). The high count makes the tool surface difficult to navigate and likely contains redundant operations.
The broad toolkit covers many Unreal Editor workflows, including build, test, source control, Niagara, sequences, and remote control. However, each domain has notable gaps—e.g., no generic actor quer or asset creation/deletion—and some areas feel opportunistic rather than systematic.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Make games with AI: one MCP server that connects your agent to Unity, Unreal and Godot editors.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseBqualityBmaintenanceDrive the Unreal Engine 5.7 editor from any MCP client over a local TCP socket - 105 editor-automation tools (72 native C++ handlers + 33 bridge-side): actors, levels, materials, Blueprints, sequencer, rendering, asset import, editor Python. Native C++ plugin + thin Python bridge, ~50ms round-trips. MIT.1009MIT
- AlicenseBqualityCmaintenanceAn MCP server that gives AI agents broad control over Unreal Engine 5.7, enabling actor/asset/level management, Blueprint and material creation, screenshots, automation, and arbitrary editor Python execution.35MIT
- AlicenseCqualityCmaintenanceEnables AI clients to control Unreal Engine 5 editor for automated Blueprint authoring, level inspection, actor spawning, and other editor workflows via a local Python MCP server and UE plugin.5004AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceMCP server for controlling Unreal Engine 5 with 199 tools across 37 categories, including Blueprint analysis, animation pipeline, and async tasks.1-