-
Notifications
You must be signed in to change notification settings - Fork 169
Troubleshooting
Find your symptom, follow the steps. The logs usually name the problem, so the first section says where they are.
| Symptom | Go to |
|---|---|
🌐 The client can't connect over HTTP, or gets 401 / 400 / 403 / 503
|
Native HTTP client cannot connect |
🔌 Every call answers NOT_CONNECTED
|
NOT_CONNECTED from the stdio server |
🔢 The client lists 23 tools, or unreal twice |
Wrong tool list |
| 🟩 The stdio server doesn't start | The stdio server doesn't start |
| 🧱 The plugin doesn't compile or load | The plugin does not build or load |
| 🤖 The model keeps inventing names | The assistant invents names |
✋ CONSENT_REQUIRED, PATH_NOT_PERMITTED, COMMAND_BLOCKED, RESULT_TOO_LARGE
|
Calls fail |
⏳ Timeouts, or EDITOR_BLOCKED
|
Calls time out |
| 🐢 The editor is slow, or Play-In-Editor runs at a few frames per second | Background throttling |
| What | Where |
|---|---|
| Is the plugin loaded? | The status bar at the bottom-right of the level editor: MCP off means loaded with native HTTP off; MCP :3000 (N) means native HTTP is on with N clients connected. No indicator means the plugin didn't load. |
| Plugin log |
Window › Output Log, filtered by LogMcp. The native HTTP server logs as LogMcpNativeTransport. The same lines are in <YourProject>/Saved/Logs/<YourProject>.log. |
| stdio server log | stderr, which your client shows in its MCP server log. Claude Desktop writes it under %APPDATA%\Claude\logs\ (Windows) or ~/Library/Logs/Claude/ (macOS); in Claude Code, use claude --debug or /mcp. Set LOG_LEVEL=debug for connection details. |
| The failing call | The reply's errorCode, message and nextCall. Its receipt.correlationId matches log lines. |

Work down the list:
-
Is the editor running with the project open? The native server lives inside the editor, so a client started first simply fails to connect. Reconnect the client once the editor is up (in Claude Code, through
/mcp). -
Does the status bar read
MCP :3000? If it readsMCP off, tick Enable Native MCP Server in the plugin settings and restart the editor. -
Is the port free?
Failed to start Native MCP server on port 3000in the Output Log means another program holds it. Change Native MCP Port (or setMCP_NATIVE_PORT) and update the client URL. -
Is the URL right? It's
http://127.0.0.1:3000/mcp, including/mcp, using the client's Streamable HTTP transport (Claude Code calls ithttp). Clients limited to the old SSE-only transport won't work.
Then match the HTTP status:
| Status | Meaning | Fix |
|---|---|---|
401 Invalid capability token
|
The X-MCP-Capability-Token header is missing or wrong |
Copy Saved/MCP/capability-token again, without a trailing newline. If you deleted the file or changed Capability Token, the token changed. |
401 Capability token does not match this session
|
The token changed mid-session | Reconnect the client |
| 400 | The client asked for a protocol version the native server doesn't support | Update the client, or use the stdio route (protocol versions) |
403 Invalid Origin
|
The request came from a web page | Browser origins are only accepted while token auth is on |
| 503 | More than 32 simultaneous connections | Close clients you don't use |
Note
The native server keeps at most 16 sessions. When all are taken, one idle for two minutes gives up its slot, and any session expires after an hour without activity. Reconnect after an expiry.
The stdio server starts without the editor and connects on the first call, so the tool appears even when nothing is running. Every execute then answers like this:
Unreal Engine is not connected: no bridge listener responded at ws://127.0.0.1:8090.
- Start the editor with the plugin, and check that the status bar indicator is there.
-
Check the port. The server dials
MCP_AUTOMATION_PORT; otherwise the first Listen Ports entry of the project inUE_PROJECT_PATH; otherwise8090. IfUE_PROJECT_PATHpoints at a different project from the one that is open, the port can be wrong. -
Is port 8090 taken by another program? The plugin skips a busy port and still listens on
8091. SetMCP_AUTOMATION_PORT=8091, or change Listen Ports. -
Was the handshake refused? A
UE_PROJECT_PATH is not set; cannot locate the capability-token fileorToken file not readablewarning means the server had no token to present, so the plugin refused it. FixUE_PROJECT_PATH(the project folder or its.uproject), or setMCP_AUTOMATION_CAPABILITY_TOKEN. - Always Listen must be on in the plugin settings (it is by default).
That is the 0.5.30 server: npm's default tag still installs it. Use unreal-engine-mcp-server@beta (⬆️ Upgrading).
If the client shows the unreal tool twice, it has both routes configured. Keep one.
-
node --versionmust be 20.19 or later. - On Windows, some clients can't launch
npxdirectly. Use"command": "cmd"with"args": ["/c", "npx", "-y", "unreal-engine-mcp-server@beta"]. - Run the same command in a terminal to see its error:
npx -y unreal-engine-mcp-server@beta. Started by hand, it sits waiting for MCP messages on stdin. That's normal; stop it with Ctrl+C.
| You see | Fix |
|---|---|
| "Missing Modules … Engine modules cannot be compiled at runtime. Please build through your IDE." | Generate project files, build the Editor target in Visual Studio, Rider or Xcode, then open the project |
| No way to compile at all | The project is Blueprint-only. Add a C++ class (Tools › New C++ Class) or use prebuilt binaries. |
| "Plugin 'McpAutomationBridge' failed to load" on the first open | Close the editor and open the project again |
| Compile errors after an update | Delete Plugins/McpAutomationBridge/Binaries and Intermediate, then rebuild. Make sure the plugin folder was replaced, not merged with the old one. |
| Compile errors on your engine version | Open an issue with the engine version and the first errors from the build log |
| The build runs out of memory | The plugin has many source files. Close other programs, or lower UnrealBuildTool's parallel job count. |
| A capability says its engine plugin is missing | Enable that engine plugin (list). PCG is compiled in only when the project itself enables PCG: enable it and rebuild. |
UNKNOWN_CAPABILITY, UNKNOWN_TOOL, UNKNOWN_ACTION or UNDECLARED_PARAMETER, again and again, means the model guesses instead of following the workflow. The tool description and the server instructions both explain it, but not every client passes the instructions to the model.
Tip
Add one line to your prompt or project instructions: "Use the unreal tool: search, then describe, then execute, and copy each nextCall." Smaller models benefit most.
| Code | Why | Fix |
|---|---|---|
CONSENT_REQUIRED |
Expected for deletes and some other writes | The model should send the consentGrant from describe as consent; if it doesn't, tell it to (Security › Consent) |
PATH_NOT_PERMITTED |
The path isn't under /Game, /Engine, /Script, /Temp or /Niagara
|
Content from a plugin with its own mount point (e.g. /MyPlugin/...) needs that prefix in MCP_ADDITIONAL_PATH_PREFIXES on the stdio route. With a scoped token, the path must also be inside its allowed prefixes. |
COMMAND_BLOCKED |
The console command chains commands (;, &&, |, …) or is blocked, such as quit
|
Send one command per call |
RESULT_TOO_LARGE |
The reply would exceed about 100,000 characters (6,000,000 for images) | Narrow it with a filter, a folder or a limit
|
- Long operations (lighting builds, imports, packaging, renders) can outlast your client's limit per tool call. In Claude Code, raise
MCP_TOOL_TIMEOUT. - Either route stops waiting for a single call after 5 minutes (a native Movie Render Queue render can wait longer). See ⚙️ Configuration › Timeouts.
-
EDITOR_BLOCKEDmeans the editor's game thread hasn't ticked for over 15 seconds, almost always because a modal dialog (save prompt, restore packages, an error) is waiting in the editor. Dismiss it and retry.
Important
The editor keeps working after a timeout. Read the state again before retrying, or retry with the same options.idempotencyKey so the work can't run twice.
Unreal throttles an editor that isn't the foreground window. Automation mostly runs while you're in another window, so everything slows down, and timing-sensitive Play-In-Editor checks (movement, physics) give nonsense results.
- Turn off Edit › Editor Preferences › General › Performance › Use Less CPU when in Background.
- Don't minimize the editor. A minimized editor is throttled even with that setting off.
Open an issue or a discussion with:
- plugin and server versions, engine version, operating system
- the route (native HTTP or stdio) and the client
- the failing request and its full reply (
errorCode,message) - the relevant
LogMcplines from the Output Log, and the stdio server log atLOG_LEVEL=debugif you use that route
Caution
Remove your capability token from anything you paste.
📖 This wiki covers the 0.6 line (dev branch, npm @beta) · ✏️ Something wrong or missing? Open an issue or start a discussion
🏠 Home
Get started
🚀 Quick Start
📦 Installation
🔌 Connecting Clients
Use it
🧭 Using the Gateway
🧰 Tools Reference
📚 Resources and Prompts
Set it up
⚙️ Configuration
🔐 Security
Help
🩺 Troubleshooting
💬 FAQ
⬆️ Upgrading from 0.5.x
Contribute
🛠️ Development
Covers the 0.6 line · Releases · Discussions