Unreal-MCP
About
Open-source MCP server connecting AI agents to Unreal Engine 5.7, editor and runtime (C++ plugin + .NET sidecar).
Details
- Author
- ivanmurzak
- Categories
- Developer Tools
Jump to
Setup
Install Unreal-MCP in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/ivanmurzak/Unreal-MCP
Follow the installation instructions in the repository README, then restart your MCP client.
Option B —unreal-mcp-cli(current / advanced)
The CLI is the recommended pathtoday, until the Fab listing is live. Install it from npm —no repo clone, no build step. By defaultinstall-plugin/updateuse a localUnrealMCP/checkout when one is present; otherwise they download the dedicatedunreal-mcp-plugin-source-<version>.zipsource asset from the public GitHub Release that matches the CLI version. That source asset keeps the distributed descriptor semantics (noEngineVersionpin) and carries the signed bridge payload underSource/ThirdParty/UnrealMcpBridge/<rid>/; the installer materializes it intoBinaries/ThirdParty/...for first-open convenience.--plugin-source <dir>remains the offline / CI / dev override. The CLI copies (or, for dev, junctions) the plugin into your project and, onupdate, automatically clears the stale UE build cache so you always get a clean recompile of the new code (seeUpdating the plugin). Ondesktop platforms(Win64/Mac/Linux),unreal-mcp-cli openalso runs a pre-launch build when the project/plugin state still needs native editor binaries, then auto-dismisses the known Unreal blocker dialogs (Missing ... Modules,UnrealMCP is Incompatible) if they still appear during startup. Linux dialog automation isX11-only; Wayland is detected and warned as unsupported.
# 1. Install unreal-mcp-cli (or use npx unreal-mcp-cli@latest <command> for a one-off, no install) npm install -g unreal-mcp-cli # 2. Install the UnrealMCP plugin into your project unreal-mcp-cli install-plugin ./YourProject # 3. Authorize against the cloud server (ai-game.dev) unreal-mcp-cli login ./YourProject # 4. Open the Unreal Editor for the project (wires the MCP connection env vars) unreal-mcp-cli open ./YourProject
Seecli/README.mdfor the full 16-command reference.
- CopyUnrealMCP/into<YourProject>/Plugins/UnrealMCP/(or create a directory junction / symlink to it for live development).
- Open the project; UE compiles theUnrealMcpEditormodule on first launch.
- On editor boot the Output Log prints[Unreal-MCP] plugin loaded— that confirms the plugin and its game-thread dispatcher started.
The sidecar binary (unreal-mcp-bridge) isbundled inside the pluginin a packaged release: a prebuilt, self-contained binary for your platform ships underUnrealMCP/Binaries/ThirdParty/UnrealMcpBridge/<rid>/and the editorauto-spawns it on startup with zero user action— no .NET install, no env var, no manual launch (ARCHITECTURE §6). The first Cloud OAuth device-code browser approval is the only remaining human step; after that, reconnect on later launches is zero-click (the cloud token is cached inSaved/Config/UnrealMcp/).
When you copy the reposource checkout directly(Option C/manual or a live dev junction), the bundled binary is not present — the plugin then resolves the sidecar from theUNREAL_MCP_BRIDGE_PATHenvironment variable instead: point that at a locally built sidecar, or rununreal-mcp-cli bootstrap-localto build the bridge from source into<YourProject>/Intermediate/UnrealMCP/and set the var to the result. With neither a bundled binary nor the env var resolved, the plugin's TCP listener still starts but logs[Unreal-MCP] no sidecar binary resolved for rid <rid> …and spawns nothing.
Updating in place must always leave you running thenewcode. The risk is UE's incremental compiler: if the plugin source changes (new.cppfiles, a new module) but the oldUnrealMCP/Intermediate/build cache survives, UE can do a partial recompile against a stale module file-list and silently leave you on old/partial code. Each channel handles this differently:
-
Fab / Epic Marketplace → automatic.The Epic Games Launcher replaces the precompiled binaries in place; nothing to compile, no cache to clear. This is why Fab is the recommended channel.
unreal-mcp-cli update→ automatic clean rebuild.updatere-copies the plugin source and, bydefault, deletes the installed plugin's staleIntermediate/and the C++Binaries/so UE performs a clean compile on the next editor launch — no manual steps. The bundled sidecar bridge underBinaries/ThirdParty/UnrealMcpBridge/<rid>/is kept intact: release-source installs refresh it fromSource/ThirdParty/..., while repo/dev installs preserve the previously bundled copy when needed. Devjunctioninstalls are never cleaned (that would wipe your live source tree's outputs). Pass--no-cleanto opt out of the cache wipe.
node bin/unreal-mcp-cli.js update <YourProject> # default: clean rebuild on version change node bin/unreal-mcp-cli.js update <YourProject> --force # re-copy even when versions match node bin/unreal-mcp-cli.js update <YourProject> --no-clean # keep the existing build cache
Manual copy → clear the cache yourself.If you overwrite<YourProject>/Plugins/UnrealMCP/by hand,close the editor first, delete<YourProject>/Plugins/UnrealMCP/Intermediate/and the C++Binaries/(keepBinaries/ThirdParty/if a bundled bridge is present), then relaunch so UE recompiles cleanly.
- Open theAI Game Developermain window from the editor'sToolsmenu (the tab is registered under the Tools menu category).
- Choose a connection mode:
- Cloud(default) — connects toai-game.dev. ClickAuthorizeto start the OAuthdevice-code flow: the window shows a verification URL and a short user code; open the URL, enter the code, approve, and the editor finishes authorizing. UseRevoketo clear the stored cloud token.
- Custom— connects to a localgamedev-mcp-serveryou run (or any compatible server). Enter the server URL and point your AI client at it. (The plugin does not start the local server for you — rununreal-mcp-clior your own process; seeTroubleshooting.)
Connection settings persist to<Project>/Saved/Config/UnrealMcp/ai-game-developer-config.json(Saved/is gitignored by every UE template, so tokens never land in VCS by default).
Pinned MCP client URL.unreal-mcp-cli setup-mcp <agent>writes an MCP client config that points at theproject-pinnedcloud URL<base>/mcp/p/<pin>, so the agent routes tothisproject's editor even when your account drives several. Pass--no-pinto write the bare<base>/mcpURL instead. The pin is a routing path segment only — the OAuth resource stays<base>/mcp, and OAuth-capable clients (Claude Code, Cursor, …) still run their own device-code login against it.
That's it. Ask your AI"Spawn three cubes in a row and a point light above them"and watch it happen. ✨
Unreal-MCP ships61 built-in ("core") toolsacross7 familiesthat your AI can call, plus3 system toolsit cannot (see below). Tool ids are kebab-case (actor-create,blueprint-compile), matching the Unity/Godot naming convention. Extensions can add more (seeCustomize Tools, Prompts & Resources).
This list is generated from the STANDARD-surface registration sources (UnrealMCP/Source/UnrealMcpEditor/Private/Tools/UnrealMcp*Tools.cpp, excludingUnrealMcpSkillTools.cpp— its tool is a system tool, listed separately below). Counts: actor 13, blueprint 11, asset 11, editor/reflection 9, level 7, source 6, screenshot 4 =61.
All file operations are jailed to<Project>/Source/.
Captures return a base64PNG as MCP image contentso the LLM can inspect the render directly. Dimensions are clamped (default 1024, hard cap 2048 per side). Pixel capture needs a GPU-backed editor; under headless-nullrhithese tools return a structured error.
These aresystem tools: host plumbing theunreal-mcp-cliand the desktop app drive directly overPOST /api/system-tools/<name>. They are deliberately absent from MCPtools/list, so they never appear to (or spend tokens in) an AI session — the same split Unity and Godot use for the same three tools.
Every tool can be individually enabled or disabled from theMCP Toolswindow — the standaloneMCP Toolstab (registered under the editor'sToolsmenu). The window shows each tool's title, family, and description, plus an "N / M tools enabled" summary line. Disabling a tool:
- removes it from the served manifest entirely— it never appears in the MCPtools/list; and
- isenforced at the execution boundary too— even if a staletools/listis dispatched, a disabled tool is rejected atExecute()rather than run.
Two filters combine to decide whether a tool is served (see ARCHITECTURE §7/§8):
- awhitelist(enabledTools, overridable viaUNREAL_MCP_TOOLS) — when non-empty, only listed tools are served; empty means "no filter";and
- ablocklist(disabledTools) — the per-tool toggles you flip in the UI.
A tool is servediffit passes the whitelistandis not in the blocklist. Both sets are persisted across editor sessions and survive an extension hot-reload (a re-registered tool inherits the retained toggle, so a rebuild can never silently re-enable a tool you disabled).
All connection settings live in the singleAI Game Developermain window's Connection section (there is no separate Settings tab or Project-Settings page — Unity-MCP parity). TheMCP PromptsandMCP Resourceswindows are wired but ship empty in this release — each renders a subdued empty-state message (the "N / M enabled" summary is unique to the Tools window).
A cross-platform Node CLI (unreal-mcp-cli) that scaffolds projects, installs the plugin, configures connection settings, drives the local server, and invokes tools over HTTP. It is a port ofunity-mcp-cli/godot-cli. Full reference:[cli/README.md.
Published on npm — install withnpm install -g unreal-mcp-cli, or run a one-off withnpx unreal-mcp-cli@latest <command>.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





