UE-MCP
Drives the Unreal Engine editor from an MCP client: levels, Blueprints, materials, builds and more
Builds inside a running Unreal Editor through a C++ plugin, behind one search-and-run MCP tool
By Chirag Panwar (individual) TypeScript Remote (hosted) · Streamable HTTPLocal · stdio, Streamable HTTP Developer toolsMedia
70 popularity score ★ 1.0k ↓ 890/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
claude mcp add --transport http enginewire http://127.0.0.1:3000/mcp --header 'X-MCP-Capability-Token: <CAPABILITY_TOKEN>'{
"mcpServers": {
"enginewire": {
"url": "http://127.0.0.1:3000/mcp",
"headers": {
"X-MCP-Capability-Token": "<CAPABILITY_TOKEN>"
}
}
}
}{
"servers": {
"enginewire": {
"type": "http",
"url": "http://127.0.0.1:3000/mcp",
"headers": {
"X-MCP-Capability-Token": "<CAPABILITY_TOKEN>"
}
}
}
}[mcp_servers.enginewire]
url = "http://127.0.0.1:3000/mcp"
http_headers = { "X-MCP-Capability-Token" = "<CAPABILITY_TOKEN>" }gemini mcp add --scope user --transport http --header 'X-MCP-Capability-Token: <CAPABILITY_TOKEN>' enginewire http://127.0.0.1:3000/mcpOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs UE_PROJECT_PATH. Replace each <NAME> with your value.
claude mcp add enginewire -e UE_PROJECT_PATH=<UE_PROJECT_PATH> -- npx -y unreal-engine-mcp-server{
"mcpServers": {
"enginewire": {
"command": "npx",
"args": [
"-y",
"unreal-engine-mcp-server"
],
"env": {
"UE_PROJECT_PATH": "<UE_PROJECT_PATH>"
}
}
}
}{
"mcpServers": {
"enginewire": {
"command": "npx",
"args": [
"-y",
"unreal-engine-mcp-server"
],
"env": {
"UE_PROJECT_PATH": "<UE_PROJECT_PATH>"
}
}
}
}{
"servers": {
"enginewire": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"unreal-engine-mcp-server"
],
"env": {
"UE_PROJECT_PATH": "<UE_PROJECT_PATH>"
}
}
}
}[mcp_servers.enginewire]
command = "npx"
args = ["-y", "unreal-engine-mcp-server"]
[mcp_servers.enginewire.env]
UE_PROJECT_PATH = "<UE_PROJECT_PATH>"gemini mcp add --scope user -e UE_PROJECT_PATH=<UE_PROJECT_PATH> enginewire npx -- -y unreal-engine-mcp-serverOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs UE_PROJECT_PATH. Replace each <NAME> with your value.
git clone --branch v0.6.0 https://github.com/ChiR24/Unreal_mcp.git
cd Unreal_mcp
npm install
npm run buildclaude mcp add enginewire -e UE_PROJECT_PATH=<UE_PROJECT_PATH> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js'{
"mcpServers": {
"enginewire": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js"
],
"env": {
"UE_PROJECT_PATH": "<UE_PROJECT_PATH>"
}
}
}
}{
"mcpServers": {
"enginewire": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js"
],
"env": {
"UE_PROJECT_PATH": "<UE_PROJECT_PATH>"
}
}
}
}{
"servers": {
"enginewire": {
"type": "stdio",
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js"
],
"env": {
"UE_PROJECT_PATH": "<UE_PROJECT_PATH>"
}
}
}
}[mcp_servers.enginewire]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js"]
[mcp_servers.enginewire.env]
UE_PROJECT_PATH = "<UE_PROJECT_PATH>"gemini mcp add --scope user -e UE_PROJECT_PATH=<UE_PROJECT_PATH> enginewire node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js'UE_PROJECT_PATH |
Required: Project folder or .uproject file. The proxy reads the capability token from Saved/MCP/capability-token under it, unless MCP_AUTOMATION_CAPABILITY_TOKEN is set. |
|---|---|
MCP_AUTOMATION_CAPABILITY_TOKEN secret |
Optional: The capability token itself, used instead of the token file (for Docker or when the project folder is out of reach). |
UNREAL_MCP_URL |
Optional: The plugin's /mcp endpoint the proxy forwards to. |
UNREAL_MCP_PROXY_CACHE |
Optional: File where the proxy keeps the editor's last tool list. Defaults to unreal-mcp/proxy-<port>.json in the user's cache folder. |
LOG_LEVEL |
Optional: debug, info, warn or error. Logs go to stderr. |
EngineWire, published on npm as unreal-engine-mcp-server, hooks an MCP client up to an Unreal Editor (5.0 to 5.8) that you have open. A C++ editor plugin does the actual work on the editor's game thread, and it serves MCP over Streamable HTTP itself, on 127.0.0.1:3000 by default. Clients that can talk HTTP connect to it directly. The npm package is only a small stdio proxy for clients that launch a local command, such as Claude Desktop. While the editor is closed the proxy answers NOT_CONNECTED and keeps the client's session alive, then picks up again once the editor comes back.
You get a single tool, `unreal`. The model searches it in plain words, asks for one capability's exact parameters, then runs it. Over 400 capabilities sit behind it: assets and materials, actors, Blueprints and UMG widgets, levels and World Partition, landscapes, PCG, Geometry Script, animation, Niagara, the Gameplay Ability System, AI, audio, Sequencer, networking, and editor control such as Play-In-Editor, screenshots, logs, builds, tests and Python. Deletes and a few risky writes only go through with a consent grant that the plugin checks.
The old 23 tools still exist inside the plugin, but clients no longer see them, and a direct call by an old name gets a refusal that points to the new route. If you want the 23-tool version you have to pin 0.5.30 on both sides. One thing the README skips: the proxy gives each editor call up to 10 minutes before it gives up (src/proxy/native-proxy.ts).
| To run it yourself | Node.js 20.19+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Also |
|
Install the EngineWire plugin into the project from Fab (no compiler needed), from a release zip, or from the repository's plugins folder. Building from source needs a project with C++ code. Blueprint-only projects use Fab or a prebuilt zip for the same engine minor and platform. The Fab build ships with Enable Native MCP Server off, so tick it in Project Settings and restart the editor. For the HTTP route, read the token from <Project>/Saved/MCP/capability-token and send it as X-MCP-Capability-Token. Node.js 20.19 or later is needed only for the stdio proxy. The Docker image is built from the repository with docker build and needs host networking (Linux) plus the token.
It needs a running editor on the same machine unless LAN access is enabled on both sides. The 0.5.30 server and plugin must match: the README's main page and plugin downloads are for 0.6, which needs `unreal-engine-mcp-server@beta` and the EngineWire plugin, and 0.5.30 does not work with a 0.6 plugin. Prebuilt plugin binaries load only in the engine minor version and platform they were built for. Some features need optional engine plugins, such as PCG, Control Rig or MetaSound, and are skipped when those plugins are missing. The README does not document the Smithery-hosted endpoint, and a hosted copy cannot reach an editor on your machine.
Suits Unreal developers and technical artists who want an assistant working in an open editor: placing actors, wiring Blueprints, setting up materials, effects or AI, and checking the result with screenshots and Play-In-Editor. Clients that speak HTTP can skip Node.js and connect to the plugin directly. Use the npm proxy for Claude Desktop and other command-only clients, or when you want a session to survive editor restarts. It needs the engine and a running editor, so it does nothing for headless builds or machines without Unreal. It is a community project, not Epic's. It can delete assets and run Python inside the editor, so keep the project under source control.
1 can delete or overwrite. A ? marks an optional parameter.
unreal deletesoperation: enum