Atlas / MCP servers / undergroundrap / UEFN Toolbelt

UEFN ToolbeltBLOCK

mcp/undergroundrap/uefn-toolbelt

UEFN Toolbelt: 362 Python automation tools across 55 categories, with a PySide6 dashboard and an experimental, authenticated same-user loopback bridge for local AI control. Complements Epic's official UEFN MCP; Toolbelt is not exposed through Epic's MCP server.

Verdict
BLOCK
Grade
D
Trust score
65 /100
Exposed tools
34 21r · 11w · 2d
Transport
—
License
NOASSERTION
Stars
51
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

362 Professional Tools for UEFN Python Integration.

Built by Ocean Bennett — 2026

[](https://github.com/undergroundrap/UEFN-TOOLBELT/actions/workflows/ci.yml) [](LICENSE) [](docs/CHANGELOG.md) [](https://github.com/undergroundrap/UEFN-TOOLBELT/discussions)

Historic Discovery — March 22, 2026 On this date, Ocean Bennett became the first person to programmatically catalogue the complete Fortnite Creative device palette using UEFN Python's Asset Registry — 4,698 Creative device Blueprints across 35 categories, extracted from 24,926 total Blueprint assets in the sandboxed UEFN environment. Prior to this, no public tool, script, or documentation existed that mapped the full set of placeable Creative devices accessible from Python. Epic's own documentation covers individual devices. This is the first machine-readable index of the entire palette. The scan also uncovered a critical silent failure pattern in UEFN 40.00's Asset Registry API: deprecated AssetData properties (object_path, asset_class) silently throw inside a try/except block, causing every asset to be skipped with no error message — a bug that would defeat any developer who didn't know to split the exception handling. The full technical breakdown, the category table, and the discovery story are in docs/AI_AUTONOMY.md.

Automate the tedious, script the impossible, and bridge the gap between Python and Verse. UEFN Toolbelt is a master utility designed to leverage the 2026 UEFN Python 3.11 Update, allowing creators to manipulate actors,

Read from source at commit d43fba5dd3a0OBSERVED · 2026-10-08
Advertisement
02

Exposed tools (34)

21 read · 11 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
batch_execwriteExecute multiple bridge commands in a single UEFN editor tick.
create_material_instancewriteCreate a new MaterialInstanceConstant from a parent material.
delete_actorsdestructiveDelete actors by path name or label.
delete_assetdestructiveDelete an asset permanently.
describe_toolbelt_toolreadGet the full parameter schema for a single UEFN Toolbelt tool.
does_asset_existreadCheck if an asset exists at the given path.
duplicate_assetreadDuplicate an asset to a new path.
get_actor_propertiesreadRead specific editor properties from an actor.
get_all_actorsreadList all actors in the current UEFN level.
get_asset_inforeadGet detailed info (class, package, path) about an asset.
get_historyreadGet recent command history with per-command timing (elapsed_ms).
get_level_inforeadGet info about the current level: world name and actor count.
get_selected_actorsreadGet the actors currently selected in the UEFN viewport.
get_selected_assetsreadGet assets currently selected in the Content Browser.
get_viewport_camerareadGet the current editor viewport camera location and rotation.
import_assetwriteImport an external file (FBX, PNG, WAV, etc.) into the Content Browser.
list_assetsreadList assets in a Content Browser directory.
list_toolbelt_toolsreadList all registered UEFN Toolbelt tools.
mcp_get_logreadGet the last N lines from the MCP listener
pingreadCheck if the UEFN Toolbelt listener is running and get its status.
redoreadRedo the last undone action in the UEFN editor.
rename_assetwriteRename or move an asset.
run_toolbelt_toolwriteRun any registered UEFN Toolbelt tool by name.
save_assetwriteSave a modified asset to disk.
save_current_levelwriteSave the current level to disk.
search_assetsreadSearch for assets using the Asset Registry.
set_actor_propertywriteSet a single editor property on an actor.
set_actor_transformwriteSet an actor
set_viewport_camerawriteMove the editor viewport camera.
spawn_actorreadSpawn an actor in the current level.
undoreadUndo the last action in the UEFN editor.
verse_book_chapterreadFetch a complete chapter from the Verse language spec by topic.
verse_book_searchreadSearch the authoritative Verse language spec for a keyword or concept.
verse_book_updatewritePull the latest Verse spec from upstream (git pull on verse-book/).
03

Trust audit

BLOCKgrade D · trust 65/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (4 observation(s))
Network
declared (11 observation(s))
Shell
declared (2 observation(s))
Dependencies
pinned
Secrets in source
none-found

Findings (25)

HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
docs/audits/evidence/wo004-session-c/editor-log-excerpts.redacted.txt:6
L:1	Log file open, 09/28/26 16:02:00
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
Content/Python/UEFN_Toolbelt/__init__.py:277
importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
init_unreal.py:62
_mod = importlib.import_module(_name)
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
Content/Python/UEFN_Toolbelt/tools/api_capability_crawler.py:501
"Mutator", "Beacon", "Guard", "Ammo", "Chest",
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
Content/Python/UEFN_Toolbelt/tools/verse_device_editor.py:75
"Beacon", "Trigger", "Timer", "SpawnPad", "Zone", "Tracker",
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
Content/Python/UEFN_Toolbelt/tools/verse_snippet_generator.py:104
"beacon":        "capture_area_device",
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Content/Python/UEFN_Toolbelt/tools/mcp_bridge.py:1113
_log(f"Listener started on http://127.0.0.1:{port}")
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Content/Python/UEFN_Toolbelt/tools/mcp_bridge.py:1189
"url":     f"http://127.0.0.1:{_bound_port}" if _bound_port else None,
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Content/Python/UEFN_Toolbelt/tools/mcp_bridge.py:1219
f"[MCP] ✓ Listener running on http://127.0.0.1:{p}\n"
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
Content/Python/UEFN_Toolbelt/dashboard_pyside6.py:747
h_zmov.addWidget(QLabel("ΔX:")); h_zmov.addWidget(zone_dx_s)
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
Content/Python/UEFN_Toolbelt/dashboard_pyside6.py:748
h_zmov.addWidget(QLabel("ΔY:")); h_zmov.addWidget(zone_dy_s)
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
Content/Python/UEFN_Toolbelt/dashboard_pyside6.py:749
h_zmov.addWidget(QLabel("ΔZ:")); h_zmov.addWidget(zone_dz_s); h_zmov.addStretch()
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_actors, delete_asset
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.claudeignore
.claudeignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcp.json.template
.mcp.json.template
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
Content/Python/UEFN_Toolbelt/smoke_test.py:154
__import__(mod)
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/smoke_test.py:119
__import__(mod)
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_repo_integrity.py:1270
"../../audits/2026-09-28-wo004-session-c-live-acceptance.md",
LOWNetwork egress · net.env_exfil · CWE-200, CWE-319
tests/test_mcp_security.py:1252
dict(os.environ) ... urllib.request
Why it matters. reads secrets in the same file that sends data out
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
ARCHITECTURE.md:177
│  HTTP POST to http://127.0.0.1:8765
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CLAUDE.md:459
# Output Log: [MCP] ✓ Listener running on http://127.0.0.1:8765
INFOInventory / provenance · inv.oversize · CWE-1104
docs/uefn_reference_schema.json
docs/uefn_reference_schema.json
Why it matters. 1571384 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
docs/uefn_tutorial_schema.json
docs/uefn_tutorial_schema.json
Why it matters. 3590883 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
docs/unreal_key_classes.pyi
docs/unreal_key_classes.pyi
Why it matters. 1718904 bytes not read
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
README.md:218
> Python editor scripts run with full access to your project — treat them like executable code.

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha d43fba5dd3a0full audit observations/trust-audit/mcp-server/undergroundrap__uefn-toolbelt.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-08d43fba5dd3a0BLOCKD65first audit
05

Questions

What is the UEFN Toolbelt MCP server?

UEFN Toolbelt: 362 Python automation tools across 55 categories, with a PySide6 dashboard and an experimental, authenticated same-user loopback bridge for local AI control. Complements Epic's official UEFN MCP; Toolbelt is not exposed through Epic's MCP server.

What tools does UEFN Toolbelt expose?

34 in total: 21 read-only, 11 that write, and 2 that can delete or overwrite (delete_actors, delete_asset). Every one is listed on this page with its risk.

Is UEFN Toolbelt safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (65/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does UEFN Toolbelt need?

It reads UEFN_MCP_TOKEN_FILE from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How current is this page?

The grade is for one exact copy of the source (d43fba5dd3a0), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement