uefn-mcp-pro
Allows agents to work inside Unreal Editor for Fortnite (UEFN): write and build Verse, place and wire Creative devices, edit Scene Graph entities, manipulate actors and assets, run playtests, capture screenshots, and read editor/Fortnite client logs.
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., "@uefn-mcp-proCompile all Verse files and list any build errors."
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.
uefn-mcp-pro
A fast, complete MCP server for Unreal Editor for Fortnite (UEFN). It lets AI coding agents — Claude Code, Cursor, Codex, anything that speaks MCP — work inside a live UEFN session: write and compile Verse, place and wire Creative devices, edit Scene Graph entities, move actors and assets in bulk, take screenshots, run playtest sessions and read every log the editor produces.
It uses Epic's official Unreal MCP (embedded in UEFN 42.00+) as the executor for everything Epic exposes: Verse files and build diagnostics, devices and event bindings, Scene Graph, play sessions, UMG/MVVM, Niagara, materials, physics assets — about 400 tools.
Alongside it runs our own lightweight Python sidecar inside the editor for everything the official server does not expose: arbitrary editor Python, bulk actor/asset operations, screenshots, batching.
On top of that, uefn-mcp-pro ships the single biggest speed fix for UEFN automation (see Performance), a curated flat tool surface designed for agents, disk-speed Verse reading, and a complete "where do I look when it breaks" layer over the editor logs.
Contents
Related MCP server: Unreal-MCP-Ghost
What you get
Area | What the agent can do |
Verse | list/read/grep files at disk speed (30 ms), write and replace through the editor, compile with |
Creative devices | browse the device catalog (built-in and your Verse devices), place devices with a transform, read/set device properties in bulk, list bindable events/functions and wire event bindings (the Functions/Events panel) without touching the UI |
Scene Graph entities | find/create/delete entities, transforms, add/remove components, read/write component properties, browse entity and component classes |
Actors & level | filtered/projected actor queries, bulk spawn / transform / delete in one undo step, actor and component properties, selection and focus, save level |
Assets | Asset Registry search, asset info, import FBX/PNG/TGA/WAV, rename/duplicate/delete/save, Content Browser selection |
Playtest | start/stop a play session, start/stop the game, push changes (Verse-only or all), session status, read the Fortnite client log (Verse |
Viewport | get/set camera, render a PNG through a SceneCapture (works with the editor unfocused) |
Editor Python | run arbitrary Python on the game thread (sync or as a background job), batch many commands in one round-trip and one undo transaction |
Long tail | keyword search over all ~400 official tools, compact schema view, direct call with automatic object-reference wrapping (UMG, MVVM, Niagara, materials, physics, gameplay tags, …) |
Logs & errors | editor log with category/severity filters, "what went wrong in the last N minutes", Verse diagnostics, crash reports, revision-control log, sidecar log, play-session client log — and a built-in map of where each lives |
62 tools in total. The agent also receives a short instruction block telling it when to build, how to reference objects and where to look for errors, so it behaves sensibly without a custom prompt.
Requirements
UEFN 42.00 or newer (August 2026 release, the one that added Unreal MCP) on Windows.
Beta features enabled for the project (the installer writes them into
.uefnproject): Python Editor Scripting and UEFN MCP Toolsets. Your Epic account must have access to these betas.Python 3.11+ on the host with the packages
mcpandhttpx.An MCP client: Claude Code, Cursor, Codex CLI, or any other.
Installation
1. Get the code and dependencies
git clone https://github.com/novikit/uefn-mcp-pro.git C:/Projects/UEFN/uefn-mcp-pro
cd C:/Projects/UEFN/uefn-mcp-pro
pip install -e .2. Run the installer for your project
python install.py "C:/Projects/UEFN/MyIsland"What it does (all idempotent, backups are created next to each file it changes):
Step | File | Change |
editor side |
| copies |
beta flags |
|
|
editor prefs |
| MCP server auto-start on port 8000; |
MCP client |
| adds |
Run python install.py <project> --check at any time to see the state without changing anything. Do not edit .uefnproject while the project is open in UEFN — the editor reloads the whole project when that file changes.
3. Start UEFN, open the project, bootstrap once
Open the project. Then, in the Python console field at the bottom-left of the editor window (placeholder text "Enter Python script or a filename"), paste the path of the startup script and press Enter:
C:/Projects/UEFN/uefn-mcp-pro/editor/uefn_pro_startup.pyWithin half a second the Output Log shows a line like:
[uefn-pro] {"throttle_disabled": true, "official_mcp": "started", "toolset": "registered", "sidecar": "listening:8765", "seconds": 0.3}That single step turns off the background throttle, starts Epic's MCP server on port 8000 and starts the Python sidecar on port 8765. It has to be repeated after every editor restart (see Known limitations for why it is not automatic yet). The gateway tool editor_start_mcp can type it for you; it briefly brings the editor window to the front.
4. Connect your agent
Claude Code: open the project folder; approve the new servers from
.mcp.jsonwhen asked (or run with--mcp-config .mcp.json). If a session was already open, restart it.Cursor / Codex / others: add a stdio server with command
python -m uefn_mcp_pro.server, working directory = your project folder (or setUEFN_PROJECT_DIR), andPYTHONPATHpointing at this repository.
Ask the agent to call status. Expected: both official_mcp.up and sidecar.up are true and verse_build.status is success.
Working in a team (UEFN revision control)
.uefnproject, .mcp.json and Content/Python/ are tracked by UEFN's revision control (Lore) and shared with every
teammate, so treat them like any other shared file:
Sync before installing. Run
install.pyonly after "Sync latest"; otherwise both of you edit.uefnprojectand get a conflict.One person enables the beta flags, checks in, everyone else syncs.
install.py --checkon the other machines will report the flags as already on..mcp.jsonis machine-independent by design (python -m uefn_mcp_pro.server, no absolute paths), so it can be shared as-is. Each teammate only needspip install -e <repo>on their machine.If a conflict appears in the Conflict Resolution panel for
.uefnprojector.mcp.json: take the teammate's version, then re-runpython install.py <project>— it re-adds the beta flags and the server entries without touching anything else. Take your version only if you know the teammate did not change those files.Per-machine things (editor prefs, the bootstrap line, ports 8000/8765) never sync; each editor talks only to its own local agent, so two people using uefn-mcp-pro on the same island do not interfere with each other.
Configuration (environment variables, all optional)
Variable | Default | Meaning |
|
| official server endpoint |
|
| first port to probe for the sidecar (8765–8770 are scanned) |
| auto (cwd or parents containing | project root for disk-speed Verse tools |
|
| where logs, crashes and screenshots are read from |
|
| script typed by |
Every-day workflow
A typical loop the agent runs on its own:
verse_grep/verse_read(disk, instant) to understand the code,verse_replaceorverse_writeto change it — both triggerverse_buildand return diagnostics.device_catalog→device_place→device_set_props→device_bindings(options=True)→device_bindto add and wire a device.actors_find(fields=[...], limit=...)to inspect the level cheaply;actors_spawn/actors_transform/actors_deletein bulk.screenshotand read the PNG to check the result visually.session_start→game_start→session_client_log(pattern="Print|Error")→session_push(verse_only=True)for an automated playtest.errors_recentafter anything unexpected;crash_reportsif the editor died.
The gateway never reports a green build on a red log: verse_build cross-checks the official diagnostics with the editor log.
Tool reference
System
Tool | Purpose |
| health of both paths (official MCP, sidecar), latencies, last Verse build state |
| run the bootstrap (throttle off, official server, sidecar); falls back to typing the startup script into the editor console |
| run Python on the editor game thread; |
| long-running Python as a background job |
| many sidecar commands in one round-trip and optionally one undo step |
| bring the UEFN window to the foreground (rarely needed now) |
Logs and diagnostics
Tool | Purpose |
| map of every log source with paths, freshness and the tool that reads it |
| tail any log in the Logs folder with filters |
| errors/warnings of the last N minutes grouped by category with samples |
| last Verse build parsed from the log: status + diagnostics (file, line, col, code, text) |
| recent crash folders: error message, fatal lines, log tail |
| messages of the in-editor bridge |
| Fortnite client log of a running play session |
Long tail (official server pass-through)
Tool | Purpose |
| registered official toolsets |
| keyword search over all official tools with brief params |
| compact description of a toolset or one tool; short names accepted ( |
| call any official tool; plain paths are wrapped as |
Verse
Tool | Purpose |
| list |
| read a file or a line range (disk by default) |
| replace a whole file through the editor, then build |
| exact-string edit through the editor, then build |
| regex search → file/line/col/text (disk by default) |
|
|
| move / copy / delete / mkdir |
Devices
Tool | Purpose |
| placeable devices: displayName, assetPath, category, isVerseDevice |
| place devices |
| list or read properties |
| set many properties at once |
| current event bindings, or the bindable events/functions |
| add or remove an event binding |
Scene Graph entities
entity_find, entity_classes(name_filter, components), entity_create, entity_delete, entity_transform, entity_components(entity, add_class, remove_class), entity_prop(component, name, value).
Actors
actors_find(class_filter, class_contains, label_contains, folder, fields, limit, offset, count_only), actors_selected, actors_spawn(items, transaction), actors_delete(actor_paths), actors_transform(items), actor_props(actor_path, properties), actor_set_props(actor_path, properties), actor_components(actor_path), component_props(actor_path, component_name, properties, set_values), select_actors(actor_paths, add_to_selection, focus).
Assets and project
assets_search(class_name, directory, name_contains, recursive, limit, offset), asset_info(asset_path), asset_import(file_path, destination_path, asset_name, replace_existing, save), asset_ops(op, asset_path, dest_path) with rename | duplicate | delete | exists | save | selected, project_info, save_level.
Play sessions
session_start(location, rotation, timeout_seconds), session_stop, session_status, session_push(verse_only), game_start(stop), session_client_log(pattern, max_results, start_line).
Viewport
camera(location, rotation) (get when called without arguments), screenshot(filename, res_x, res_y, camera_location, camera_rotation, fov).
Logs and errors: where the agent looks
The gateway's instructions teach the agent this map, and logs_overview returns it with live paths:
Symptom | Tool | Source |
Verse does not compile |
|
|
Something failed silently in the editor |
| Error/Warning lines of the last N minutes, grouped by category |
Need the raw text |
| any file in |
Python script errors | returned inline by | editor log |
In-game behaviour, |
| Fortnite client log via Epic's SessionToolset |
Editor crashed |
|
|
Revision control (Lore) trouble |
| Lore client log |
The bridge itself |
| ports 8000 / 8765 |
All of these except session_client_log and sidecar_log read files from disk and cost no editor time.
Performance
UEFN's default preference Editor Performance → Throttle CPU when not in foreground drops the whole editor main loop to 3 ticks per second while the window is not focused. Every automation call — Slate callbacks, ticker callbacks and Epic's own MCP server alike — then waits for the next tick, about 333 ms. That is why earlier bridges had to focus the editor window or batch everything.
uefn-mcp-pro turns the setting off (persistently in the editor prefs and at bootstrap). Measured on UEFN 42.00 with the editor not focused:
Call | throttle on (default) | throttle off (uefn-mcp-pro) |
sidecar | 337 ms | 14–31 ms |
sidecar | 338 ms | 9–23 ms |
official | 332 ms | 11–28 ms |
official | 336 ms | 19 ms |
official | 334 ms | 51–74 ms |
official | ~1300 ms | ~1000 ms (editor) / 34–44 ms (uefn-mcp-pro disk path) |
editor tick rate | 3 Hz | 60 Hz |
Do not minimize the editor window. A minimized UEFN ticks at 3 Hz no matter what the setting says (~333 ms per call again). Keep it restored behind other windows or on a second monitor; status warns when it is minimized and focus_editor(restore_only=True) un-minimizes it without stealing focus. The sidecar also re-applies the throttle setting every 15 s in case the editor reloads its preferences.
Other design choices that keep latency down: one persistent HTTP session to the official server, background pre-indexing of all tool schemas (so ue_search_tools is instant), server-side filtering/projection (fields, limit, count_only), bulk tools and batch.
Comparison
Epic's official Unreal MCP (built into UEFN 42.00+)
Pros
Zero install: it is in the editor. Supported by Epic and will follow UEFN to UE6.
Deep, native C++ tools that nothing else can reach from Python: Verse write/build with diagnostics, device event bindings, Scene Graph, play sessions and the client log, UMG/MVVM/VerseFields, Niagara, materials, physics assets — about 400 tools in 29 toolsets.
Tools run on the game thread with proper async support; object references are typed.
Cons
Agent-hostile surface: three meta-tools (
list_toolsets,describe_toolset,call_tool); a singledescribe_toolsetanswer is ~44 KB of JSON, and every action needs the nestedcall_toolenvelope.Same 3 Hz background throttle as everything else: ~333 ms per call while the editor is not focused.
No arbitrary editor Python, no bulk actor/asset helpers, no screenshots, no log/crash tooling beyond a basic log reader.
Custom Python toolsets are silently dropped by Epic's
ToolsetPolicyin UEFN, so it cannot be extended by creators.Beta: not all UE 5.8 toolsets are enabled, coordinates and hitches are documented rough edges, the API may change.
Earlier community bridges (Python listener inside the editor + external MCP process)
Pros
Pure Python, no C++: a FastMCP process plus an in-editor HTTP listener; 41 practical tools (actors, components, assets, viewport, screenshots,
execute_python, jobs, batch).Works on any UEFN build with the Python beta, independent of Epic's MCP.
Good ergonomics for agents: flat tools, server-side filters, object paths, an explicit cost model in the prompt.
Cons
Cannot touch what only Epic's C++ exposes: no Verse compile diagnostics beyond log scraping, no device bindings, no Scene Graph, no play sessions, no UMG.
Executes on a Slate post-tick callback: fully exposed to the 3 Hz throttle, hence
focus_editorand "batch everything".Listener copied by hand into each project's
Content/Python; stopped running once the UEFN MCP Toolsets beta changed when Python is initialised.
uefn-mcp-pro (this project)
Pros
Everything above in one flat, documented surface of 62 tools, plus search/describe/call over the whole official registry.
The throttle fix: 10–50 ms per call with the editor unfocused; disk-speed Verse reading.
Complete log/error layer: Verse diagnostics, recent errors by category, crash reports, session client log, revision-control log, with the agent told where to look.
Degrades gracefully: if the official server is unavailable the sidecar still provides the actor/asset/Python tools; if the sidecar is down the official tools still work.
Installer, unit tests, a live end-to-end test, research notes on UEFN internals — all open, MIT.
Cons
The in-editor bootstrap must be triggered once per editor start (one line in the Python console) until Epic runs project startup scripts after enabling the Toolsets beta.
Depends on two betas and on Epic's beta API; when Epic renames a toolset the pass-through still works but curated wrappers may need a one-line update.
Windows only (as is UEFN).
Architecture
Claude Code / Cursor / Codex
│ stdio (MCP)
▼
uefn-mcp-pro gateway (host Python: uefn_mcp_pro/server.py)
├─ 62 curated tools, instructions for the agent, background schema index
├─ disk readers: Verse files, editor log, crash reports (0 editor ticks)
├──HTTP──▶ Epic's Unreal MCP inside the editor 127.0.0.1:8000/mcp
│ VerseToolset · DeviceToolset · EntityToolset · SessionToolset · UMG · MVVM · Niagara · editor_toolset.*
└──HTTP──▶ Python sidecar inside the editor 127.0.0.1:8765 (editor/uefn_pro/sidecar.py)
execute_python · jobs · batch · bulk actor/asset ops (ops.py) · SceneCapture screenshotseditor/uefn_pro/bootstrap.py— throttle off,ModelContextProtocol.StartServer, sidecar start; idempotent.editor/uefn_pro/sidecar.py—ThreadingHTTPServeron a daemon thread; editor commands are queued and executed from anFTSTickercallback on the game thread (never a Slate tick — double-unregistering those crashes the editor); thread-safe commands answer directly.editor/uefn_pro/ops.py— pure functions for every actor/asset/viewport command.uefn_mcp_pro/unreal_client.py— streamable-HTTP client for the official server: session handling, serialization lock, schema cache, tool search,{"refPath"}wrapping.Sidecar wire format:
POST {"command", "params"}on 127.0.0.1:8765 (JSON in,{"success", "result"|"error"}out).
Known limitations (UEFN 42.00 beta)
Bootstrap is manual. With UEFN MCP Toolsets enabled, UEFN turns Python on during
OpenProject_PrePluginLoading, before the project content is mounted, so<Project>/Content/Python/init_unreal.pynever runs.Engine.inistartup scripts,UE_PYTHONPATHand the MCP auto-start preference were tested and are not honoured. One line in the editor's Python console (or theeditor_start_mcptool) does the job.Custom Python toolsets are rejected by Epic's
ToolsetPolicy; our own tools therefore live in the sidecar, not in Epic's registry.The official server executes tools serially on the game thread; the gateway serializes calls accordingly. Long operations (
BuildAll,StartSession) can take seconds to minutes; timeouts are per-tool parameters.Editing
.uefnprojectwhile the project is open reloads the project and kills the sidecar. The editor rewrites its ini files on exit; re-runinstall.pyif MCP auto-start or the throttle setting disappears.A play session (
session_start) launches the Fortnite client and takes a while; usesession_statusto poll.
Development and tests
python -m pytest tests -q # offline unit tests (log parsers, client helpers)
python -m pyflakes uefn_mcp_pro editor tests # lint
python tests/smoke_gateway.py # live end-to-end test against a running editor (spawns/deletes one actor)
python tests/smoke_gateway.py --quick # read-only subset
python install.py <project> --check # report install stateResearch material: PLAN.md (full write-up of the investigation, measurements and decisions), docs/research/official_toolsets.md and docs/research/toolset_schemas_full.json (every official UEFN toolset with schemas).
Credits and license
Epic Games — Unreal MCP, the Toolset Registry and the UEFN toolsets that do the heavy lifting.
Built by NOVIKIT while making Fortnite islands with AI agents; a tutorial series on that workflow is in progress.
MIT License — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Remote MCP server for AI.TV creators — delegate account operations to your AI agent over MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server that gives AI agents broad control over Unreal Engine 5.7, enabling actor/asset/level management, Blueprint and material creation, screenshots, automation, and arbitrary editor Python execution.35MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI clients to control Unreal Engine 5 editor for automated Blueprint authoring, level inspection, actor spawning, and other editor workflows via a local Python MCP server and UE plugin.3AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to control and query Unreal Engine 4.27.2 editor through MCP, supporting asset creation, level editing, and project inspection via Python remote execution.8618MIT
- AlicenseNot gradedqualityAmaintenanceExposes the Unreal Editor for Fortnite to AI assistants via MCP, enabling actor manipulation, device property editing, Verse building, and more through a Python bridge.3GPL 3.0
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/novikit/uefn-mcp-pro'
If you have feedback or need assistance with the MCP directory API, please join our Discord server