UEFN-TOOLBELT (Unpolished-tagusriver58/UEFN-TOOLBELT) is an MCP server listed on the M8ven Trust Index. It scores 56 out of 100, grade D. It declares 398 tools. No publisher has claimed this listing.

D
Caution
56/100

UEFN-TOOLBELT

Build UEFN Python tools for asset registry, device cataloging, and workflow automation with 355 utility functions

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

Unpolished-tagusriver58

Source: github_repo_search

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
⚠️
Tool descriptions don’t match what handlers do
2 tools describe read intent but their handlers mutate — device_catalog_scan (line 662: with open(out_path, "w", encoding="utf-8") as f:); text_export_manifest (line 69: with open(out_path, "w", newline="", encoding="utf-8") as f:)
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
// tools this server exposes395 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

mcp_start

Start the HTTP listener so Claude Code can control UEFN directly

mcp_stop

Stop the MCP HTTP listener

mcp_restart

Restart the MCP HTTP listener (useful after hot-reload)

mcp_status

Print MCP listener status — port, running state, command count

execute_python

Execute arbitrary Python inside the UEFN editor on the main thread.

mcp_get_log

Get the last N lines from the MCP listener's internal log ring.

run_toolbelt_tool

Run any registered UEFN Toolbelt tool by name.

list_toolbelt_tools

List all registered UEFN Toolbelt tools.

describe_toolbelt_tool

Get the full parameter schema for a single UEFN Toolbelt tool.

get_all_actors

List all actors in the current UEFN level.

get_selected_actors

Get the actors currently selected in the UEFN viewport.

spawn_actor

Spawn an actor in the current level.

delete_actors

Delete actors by path name or label.

set_actor_transform

Set an actor's transform (any combination of location, rotation, scale).

set_actor_property

Set a single editor property on an actor.

get_actor_properties

Read specific editor properties from an actor.

list_assets

List assets in a Content Browser directory.

get_asset_info

Get detailed info (class, package, path) about an asset.

get_selected_assets

Get assets currently selected in the Content Browser.

rename_asset

Rename or move an asset.

delete_asset

Delete an asset permanently.

duplicate_asset

Duplicate an asset to a new path.

does_asset_exist

Check if an asset exists at the given path.

save_asset

Save a modified asset to disk.

import_asset

Import an external file (FBX, PNG, WAV, etc.) into the Content Browser.

search_assets

Search for assets using the Asset Registry.

create_material_instance

Create a new MaterialInstanceConstant from a parent material.

batch_exec

Execute multiple bridge commands in a single UEFN editor tick.

undo

Undo the last action in the UEFN editor.

redo

Redo the last undone action in the UEFN editor.

get_history

Get recent command history with per-command timing (elapsed_ms).

save_current_level

Save the current level to disk.

get_level_info

Get info about the current level: world name and actor count.

get_viewport_camera

Get the current editor viewport camera location and rotation.

set_viewport_camera

Move the editor viewport camera.

verse_book_search

Search the authoritative Verse language spec for a keyword or concept.

verse_book_chapter

Fetch a complete chapter from the Verse language spec by topic.

verse_book_update

Pull the latest Verse spec from upstream (git pull on verse-book/).

debug_dump_verse_actor

Dump all internal properties of a selected Verse actor for discovery.

toolbelt_activity_log

Return the most recent tool execution entries.

toolbelt_activity_stats

Return aggregate stats across all recorded tool calls this session.

toolbelt_activity_clear

Wipe the activity log buffer and the persisted JSON file.

actor_attach_to_parent

Attach selected actors to the last selected actor as children.

actor_detach

Detach all selected actors from their current parent. Preserves world transforms.

actor_move_to_folder

Move all selected actors into a named World Outliner folder (created automatically).

actor_move_to_root

Move all selected actors out of any World Outliner folder to the root level.

actor_rename_folder

Rename a World Outliner folder by re-pathing every actor inside it.

actor_select_by_folder

Select all actors whose World Outliner folder exactly matches folder_name.

actor_select_same_folder

Select all actors in the same folder as the first currently selected actor.

actor_select_by_class

Select all level actors whose class name contains the given filter string (case-insensitive).

actor_folder_list

List all World Outliner folders with actor counts. Root actors are listed under '(root)'.

actor_match_transform

Match transform components from the first selected actor to all others.

actor_hide

Hide all currently selected actors in the editor viewport.

actor_show

Make the currently selected hidden actors visible again.

actor_isolate

Hide all level actors except those currently selected. Workflow: select what you want to see → actor_isolate → work → actor_show_all.

actor_show_all

Un-hide every actor in the level — the global 'get everything back' command.

folder_hide

Hide all actors whose World Outliner folder path starts with folder_name.

folder_show

Restore visibility for all actors in a named World Outliner folder.

actor_lock

Lock selected actors so they cannot be dragged or transformed in the viewport.

actor_unlock

Unlock selected actors — restores full move/rotate/scale in the viewport.

align_to_reference

Snap every selected actor's position on one axis to a reference actor's position.

distribute_with_gap

Lay out selected actors along an axis with a precise gap between their bounds.

rotate_around_pivot

Rotate and orbit selected actors around a pivot point.

align_to_surface

Drop selected actors to the nearest surface below them.

match_spacing

Redistribute actor pivots evenly between the outermost two actors along an axis.

align_to_grid_two_points

Snap actors to a user-defined grid derived from two anchor points.

anim_list_skeletons
anim_list_sequences
anim_list_montages
anim_list_blend_spaces
anim_create_montage
api_crawl_selection

Deep introspect selected actors, components, and properties to JSON.

api_crawl_level_classes

Headless map of all unique classes (and exposed properties) in the current level.

api_sync_master

The Ultimate One-Click Sync: Combines Level Crawling + Verse Schema IQ and updates docs/DEVICE_API_MAP.md.

world_state_export

Export the full live state of every actor in the level — transforms + readable device properties — to a single JSON Claude can reason about.

device_catalog_scan

Query the UEFN Asset Registry for every Blueprint that looks like a Creative device — covering all Fortnite packages, not just the current level.

api_search

Fuzzy-search class/function names across the live unreal module

api_inspect

Print full signature + docstring for any unreal.* class or function

api_generate_stubs

Write .pyi stub file for one class (or all classes if name omitted)

api_list_subsystems

Print every *Subsystem class available in this UEFN build

api_export_full

Export monolithic unreal.pyi stub file for full IDE autocomplete

arena_generate

Generate a symmetrical Red vs Blue arena instantly.

import_image_from_url

Downloads an image directly from a URL into the Editor Content Browser as a Texture2D.

import_image_from_clipboard

Captures the current image sitting on the Windows Clipboard and imports it as a Texture2D.

rename_dry_run

Preview naming convention violations without changing anything.

rename_enforce_conventions

Rename all assets in a folder to follow Epic's naming convention.

rename_strip_prefix

Strip a specific prefix from all assets in a folder.

rename_report

Generate a full naming convention audit report for a folder.

tag_add

Add a searchable metadata tag to all selected Content Browser assets

tag_remove

Remove a metadata tag from all selected Content Browser assets

tag_show

Print every Toolbelt metadata tag on all selected Content Browser assets

tag_search

Find assets by metadata tag — returns matching paths to the Output Log

tag_list_all

List every unique Toolbelt tag key used under a folder with asset counts

tag_export

Export full tag → asset index to JSON (Saved/UEFN_Toolbelt/tag_export.json)

audio_list_metasounds
audio_list_sound_classes
audio_list_sound_cues
audio_list_sound_mixes
audio_list_synesthesia
audio_place

295 further tools are not listed here. The complete surface is in the source.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configUEFN_MCP_PORT
configCLAUDE_TOOL_NAME
configCLAUDE_TOOL_INPUT
configProgramFiles
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

398/398 tools missing one or more hints — mcp_start (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); mcp_stop (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); mcp_restart (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +395 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Destructive tools are labelled

3 tools perform destructive updates without destructiveHint — snapshot_delete deletes at line 506 (os.remove(path)); snapshot_compare_live deletes at line 617 (os.remove(path_live)); stamp_delete deletes at line 404 (os.remove(fp))

Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.

Descriptions match behaviour

2 tools describe read intent but their handlers mutate — device_catalog_scan (line 662: with open(out_path, "w", encoding="utf-8") as f:); text_export_manifest (line 69: with open(out_path, "w", newline="", encoding="utf-8") as f:)

Rename the tool, rewrite the description, or move the side-effect into a separate clearly-named tool.

Tool inputs are validated

395/397 tool handlers declare input schemas (99%)

Declare an inputSchema with zod/joi/yup on every tool definition.

Tool test coverage

214/398 tools referenced in tests (54%)

Write tests that reference each tool by name so every tool has at least one test.

Tool description accuracy

device_catalog_scan: description implies read-only but handler writes/deletes/executes; text_export_manifest: description implies read-only but handler writes/deletes/executes

Update tool descriptions to accurately reflect all capabilities — especially write, delete, or execute operations.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 7 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/unpolished-tagusriver58/uefn-toolbelt?variant=verified)](https://m8ven.ai/mcp/unpolished-tagusriver58/uefn-toolbelt)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 000b58765488d4b8fe19342882fe633d52f6ff40
code hash: cd0a24c6dc9b875e85b39f448fefe9a6bddf4dbd9a73a285278a787b8adedf37
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client