Unreal Engine MCP
Allows AI agents to drive Unreal Engine 5, including creating projects, importing assets, building levels and Blueprints, configuring replication, compiling C++, running Play In Editor, and packaging the game.
Click on "Install 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 Engine MCPCreate a new third-person project with starter content"
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 Engine MCP
An MCP server that lets an AI agent drive Unreal Engine 5: create projects, import assets, build levels and Blueprints, configure replication, compile C++, run Play In Editor and package the game.
No C++ plugin to compile. It uses two plugins that already ship with the engine — Python Editor Script Plugin and Remote Control API — and talks to the editor over local HTTP.
┌─ LOCAL layer ── processes + public HTTP
│ UnrealEditor.exe, UnrealBuildTool, RunUAT, asset downloads
Agent ──stdio──▶ MCP │
└─ EDITOR layer ── HTTP :30010 (Remote Control API)
└─ ExecutePythonCommandEx → running editorThe local layer exists because the Remote Control API only works against an editor that is already running: creating a project, launching it, compiling and packaging all have to happen at the process level.
49 tools — full reference
91 tests, none of which need Unreal installed
Unreal automation notes — the API traps found the hard way
Requirements
Unreal Engine 5.0 or newer (developed and tested against 5.8 — see version compatibility)
Python 3.10+
Windows for the local layer (process handling and build scripts are Windows-specific). The editor layer is platform-neutral.
Unreal version compatibility
The server detects what the running engine supports at startup of each call —
ue_status reports it under capabilities — and fails with an explicit
message instead of a cryptic Python error when a feature is missing:
Feature | Works on |
Actors, levels, spawn/transform, PIE, project settings, build & packaging, Sound Cues | 5.0+ |
Blueprint creation, components ( | 5.0+ |
glTF/ | 5.2+ (earlier: enable the glTF Importer plugin; the tool tells you when that is the problem) |
Blueprint member variables + per-variable replication ( | 5.4+ (no Python API before that — the tool says so explicitly) |
MetaSounds | any 5.x with the MetaSound plugin enabled |
Custom engine builds are fine: detection is based on the actual Python API surface, not on the version number.
Related MCP server: Hayba
Install
git clone https://github.com/FFZackFair92/unreal-engine-mcp.git
cd unreal-engine-mcp
pip install -e .Connect it to your client
The server speaks standard MCP over stdio, so any MCP-capable client works — Claude, Cursor, VS Code, Windsurf, OpenAI Codex, custom agents. The command is always the same; only where the config lives differs.
Claude Desktop / Cowork
Settings ▸ Developer ▸ Edit Config, then add to mcpServers:
{
"mcpServers": {
"unreal-mcp": {
"command": "python",
"args": ["-m", "unreal_mcp.server"],
"env": { "UE_MCP_PORT": "30010" }
}
}
}Claude Code
claude mcp add unreal-mcp -- python -m unreal_mcp.serverCursor
~/.cursor/mcp.json (global) or .cursor/mcp.json in the project — same JSON
shape as Claude Desktop (mcpServers root key).
VS Code (Copilot agent mode)
.vscode/mcp.json — note the root key is servers here:
{
"servers": {
"unreal-mcp": { "type": "stdio", "command": "python", "args": ["-m", "unreal_mcp.server"] }
}
}Windsurf
~/.codeium/windsurf/mcp_config.json — same mcpServers shape as Claude Desktop.
OpenAI Codex CLI
~/.codex/config.toml:
[mcp_servers.unreal-mcp]
command = "python"
args = ["-m", "unreal_mcp.server"]OpenAI Agents SDK (custom agents)
from agents.mcp import MCPServerStdio
unreal = MCPServerStdio(params={"command": "python", "args": ["-m", "unreal_mcp.server"]})Restart the client completely after editing its config. In every case python
must be the interpreter where you ran pip install -e . — use an absolute path
if in doubt.
Note: ChatGPT's connector UI only accepts remote MCP servers. This server is stdio/local by design (it drives processes on your machine), so use it from clients with stdio support — the ones above — or wrap it with an MCP proxy if you really need HTTP.
Set up the Unreal side
Starter project — zero setup, zero builds
Copy StarterProject/ wherever you like and open the
.uproject with any UE 5.0+: plugins enabled, security config in place, web
server auto-started. Being Blueprint-only with engine plugins, there is
nothing to compile — unlike starters that bundle a C++ plugin.
New project — nothing to do by hand
Ask the agent to run ue_project_create. It writes the .uproject with the
required plugins enabled, the security flags Remote Control needs, and an
init_unreal.py that starts the web server on every editor launch.
ue_engine_list → ue_project_create → ue_editor_open → ue_statusExisting project — three steps
Enable the plugins:
Edit ▸ Plugins→ Python Editor Script Plugin and Remote Control API. Restart when prompted.Allow remote Python. Create
Config/DefaultRemoteControl.ini:[/Script/RemoteControlCommon.RemoteControlSettings] bAutoStartWebServer=True bAutoStartWebSocketServer=True RemoteControlHttpServerPort=30010 bEnableRemotePythonExecution=True bAllowConsoleCommandRemoteExecution=True bAllowAnyRemoteFunctionCall=False +CustomAllowedRemoteFunctionCalls=(ClassPath="/Script/PythonScriptPlugin.PythonScriptLibrary")These are two separate gates — one unlocks the object, the other the function call — and they fail with different errors.
DefaultEngine.iniis the wrong file:URemoteControlSettingsis declaredUCLASS(config = RemoteControl). Restart the editor.On engines that predate some of these keys they are simply ignored — older versions did not gate those calls in the first place.
The server listens on
127.0.0.1only, so remote Python execution is not reachable from outside the machine.Check it: open
http://127.0.0.1:30010/remote/infoin a browser. JSON back means you are connected.
What it can do
Area | Highlights |
Projects | Find engine installs, create projects from a spec, manage plugins |
Editor lifecycle | Open (waiting for the bridge), status, clean shutdown |
Build | Compile C++ in the background; |
Package |
|
Assets | Import |
Levels | Create and open levels, spawn/move/delete actors |
Blueprints | Create, add components, typed variables with replication, class defaults, compile |
Networking | Replication flags, multi-client PIE, project settings |
Audio | Import wavs, MetaSound sources, Sound Cues |
Free assets | Poly Haven, ambientCG and Kenney downloads (all CC0), plus any direct URL |
Full parameter list in docs/TOOLS.md.
Known limits
Blueprint node graphs cannot be authored. UE 5.8 does not expose graph editing to Python:
EdGraph.Nodesis protected, pins are not exposed and there is no linking API. Variables, components and defaults are scriptable; logic belongs in C++ or in the editor. Details in docs/UNREAL-NOTES.md.Compiling C++ needs the editor closed, unless the change only touches function bodies — then
ue_live_compileworks with it open.Packaging always needs the editor closed: the build step rewrites the DLLs the editor holds in memory.
Feature availability varies with the engine version — see the compatibility table;
ue_statusreports what the running engine supports.Fab/Marketplace content has no public API. Those tools shell out to the community client
legendary.
Configuration
Variable | Default | Purpose |
|
| Remote Control endpoint |
|
| Per-call timeout in seconds |
| — | Extra folders to search for engine installs |
|
| Where downloaded assets land |
| 4 GiB | Per-file download cap |
If the engine sits somewhere unusual, you can also drop an mcp_engine.txt next
to the .uproject containing its path, or pass engine_root explicitly.
Development
The test suite runs without Unreal installed: tests/fake_unreal.py stands
in for the unreal module and tests/fake_server.py emulates the Remote Control
API while actually executing the generated snippets — so the whole chain
tool → snippet → harness → result is covered.
pip install -e ".[dev]"
pytest -qAdding a tool: a reusable helper in src/unreal_mcp/ue_side.py (editor side),
an @mcp.tool() function in server.py, and a test in tests/.
ue_side.py is re-read from disk on every call, so editor-side changes take
effect without restarting the server; changes to server.py or local.py need
a client restart.
Troubleshooting
Symptom | Cause |
| Editor closed, or the web server never started → console: |
| Missing |
| Missing |
| Remote Control API plugin not enabled |
| Python Editor Script Plugin not enabled |
|
|
| Set |
Licence
MIT — see LICENSE.
References
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/FFZackFair92/unreal-engine-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server