Before you start
You need the McpAutomationBridge plugin installed and built in your project (status bar shows MCP off), and VS Code with GitHub Copilot's agent mode, which is where VS Code uses MCP tools. If the plugin isn't in yet, follow the quick start first.
Many Unreal C++ developers already use VS Code as their editor. Connecting EngineWire means the agent working on your source can also reach the assets that only exist inside the editor.
Native HTTP setup (recommended)
In Unreal, open Edit › Project Settings › Plugins › MCP Automation Bridge › Native MCP, tick Enable Native MCP Server, and restart the editor. The status bar reads
MCP :3000 (0).Create
.vscode/mcp.jsonin your workspace. Theinputsblock makes VS Code ask for the token once and store it, instead of keeping it in the file:
{
"inputs": [
{
"type": "promptString",
"id": "unreal-mcp-token",
"description": "Unreal MCP capability token (Saved/MCP/capability-token)",
"password": true
}
],
"servers": {
"unreal-engine": {
"type": "http",
"url": "http://127.0.0.1:3000/mcp",
"headers": {
"X-MCP-Capability-Token": "${input:unreal-mcp-token}"
}
}
}
}Start the server from VS Code and paste the contents of
<YourProject>/Saved/MCP/capability-tokenwhen prompted. It is 64 hexadecimal characters.Open Copilot Chat in agent mode. The server contributes one tool,
unreal, and the Unreal status bar count goes up toMCP :3000 (1).
Because the token is collected through inputs, this file is safe to commit and share with your team: each person enters their own project's token.
stdio setup
If you would rather let a local process find the token, VS Code can launch the Node.js server (Node.js 20.19 or later). VS Code uses "servers" instead of "mcpServers" and needs "type": "stdio":
{
"servers": {
"unreal-engine": {
"type": "stdio",
"command": "npx",
"args": ["-y", "unreal-engine-mcp-server@beta"],
"env": {
"UE_PROJECT_PATH": "C:/Path/To/MyGame"
}
}
}
}On Windows, if VS Code can't find npx, use "command": "cmd" with "args": ["/c", "npx", "-y", "unreal-engine-mcp-server@beta"]. Keep @beta: the plain package name installs 0.5.30, which doesn't match a 0.6 plugin.
What Copilot can do in the editor
Through the one unreal tool the agent searches nearly 400 capabilities. The areas the project documents:
| Area | Examples |
|---|---|
| Levels and actors | Spawn one actor or hundreds in a call, place and attach them, load, stream and save levels |
| Blueprints and UI | Create Blueprints, variables and components, build event graphs in one batch, lay out UMG widgets with a preview image |
| Materials and worlds | Material graphs and instances, lighting, landscapes, foliage, Niagara, PCG graphs |
| Gameplay | Characters and animation, Gameplay Ability System, Behavior Trees, State Trees, EQS, Enhanced Input |
| Cinematics and audio | Level Sequences, Movie Render Queue, Take Recorder, Sound Cues, MetaSounds |
| Play and verify | Play-In-Editor with synthetic input, screenshots the model can see, logs, profiling, packaging |
The full list is the generated Action Reference.
Approvals and safety
Use VS Code's tool confirmation for the unreal tool while you get used to it, so you approve each editor change. Independently of VS Code, the plugin refuses any request without the project token, requires a per-call consent grant for deletes and some other writes, blocks console commands that chain or quit the editor, and keeps asset paths under /Game, /Engine, /Script, /Temp and /Niagara plus prefixes you add. Details: security model.
FAQ
Do I need the Node.js server for VS Code?
No. VS Code supports HTTP MCP servers with headers, so the native route works without Node.js.
VS Code gets HTTP 400 from the server.
The client asked for an MCP protocol version the native server doesn't support. The native route supports 2025-11-25, 2025-06-18 and 2025-03-26. Update VS Code, or use the stdio route.
Can Copilot and Claude Code share the editor?
Yes. The native server serves up to 16 sessions at once.
Where do I see what the agent did?
In Unreal's Output Log, filtered by LogMcpNativeTransport: each call is logged with the internal tool and action it was routed to.