Unreal MCP + Codex Issue Analysis Report

Unreal MCP + Codex Issue Analysis Report

Executive Summary

The main conclusion is: Unreal MCP does start and can execute some tasks, but Codex + Unreal MCP currently lacks reliable readiness/state APIs, structured error reporting, and safe Blueprint-editing tools for full autonomous work .

Some issues are project-side Blueprint/compiler problems; others are limitations or rough edges in the experimental MCP/toolset layer. The most important product-level problem is that several tool failures are returned as ordinary successful text responses, making it difficult for Codex to programmatically distinguish success from failur e.

1. What the Unreal MCP Logs S how

MCP server starts, but readiness is unc lear

The Unreal project log shows the MCP server star ting:

ExampleProject_current.log: 2088

LogModelContextProtocol: Starting MCP server on port 8000

Toolsets are then registered gr adually:

ExampleProject_current.l og:2086

registered 3 meta-tools (1 toolsets disco verabl e)

ExampleProject_curren t.log:2795

registered 3 meta-tools (52 toolsets di scoverable)

In the Codex logs, this appeared as an initially incomplete toolset list:

rollout-2026-06-2 0T22-12-41…

list_toolsets initially returned only:

ToolsetRegistry.Ag entSki llToolset

Later it returned a much larger list of toolsets.

Problem:Codex can connect too early and receive an incomplete list of tools. There is no explicit “MCP is ready and all toolsets are registered” signal.

Recommended improvement:Add a tool such asget_server_statusorwait_until_readythat returns machine-rea dable readiness data:

mcp_ server_running: true

to olsets_loading: false

toolset_count: 55

editor_ready: true

current_map_loaded: true

bl ueprint_tools_ready: true

2. Co nnection and Protocol Issues

One Codex log shows a failed native MCP handshak e:

resources/list fa iled:

MCP startup failed

HTTP request failed for http://127.0.0.1:8000/mcp

when send initialize request

Manual initialization returned HTTP 200, but the server metad ata was empty:

“serverInfo”: {

“name”: “”,

" title": “”,

“version”: “”

}

A ma nual call to list_toolsets also timed out:

CALL E RROR after 8.33 TimeoutError(‘timed out’)

Conclusion:This does not look like a total Unreal MCP failure. It looks more like a combination of race conditions, early client connection, and stream/session behavior. The server is alive, but Codex does not a lways receive a stab le native MCP handshake.
Issue
Recommende d improvement
Empty serverInfo
Populate name, t itle, version, engineVersion, and projectName .
Early incomplete list_toolsets
Block list_toolsets until r egistration is complete, or return load ing=true.
Timeout on list_toolsets
Provide a fast lightweight status endpoint.
Transport errors are difficult to interpr et
Add a diagnostic tool such as diagnose_connection.

3. Main BlueprintTools Problem: Tool Failures Returned as Ok Text

MCP call statist ics show a major mismatch between real failures and formal tool results:

Total MCP calls: 1477

MCP result Err: 1

Most other failures were returned as Ok + error text.

Examp les:

Function “read_graph_dsl”, input param “graph” is required…

The node could not be created / |ExampleNewFunction does not exist

SetObjectProperties … properties could not be set: FunctionReference

Problem:MCP formally returns success, while the text body contains an error. Codex then has t o parse human-readable output instead of receiving a normal structured error obje ct.

Recommended improv ement:Every tool failure should return a stru ctured error:

{

“ok”: false,

" errorCode": “MissingRequiredParameter”,

“to ol”: “BlueprintTools.read_graph _dsl”,

“message”: “Inpu t param graph is required”,

“expectedSchema”: {…},

“received”: {…}

}

This is one of the most important impr ovements for making Codex + Unreal MCP reliable.

4. Missing Tools for Full Blueprint Editing

The clearest case was Codex a ttempting to repl ace a live call to the old function ExampleOldFunction with ExampleNewFunction.

What happen ed:

ObjectTools.set_properties(Fun ctionReference=…)

-> rejec ted, property cannot be set

BlueprintTools.cre ate_no de

type_id: |ExampleNewFunction

-> The node could not be created / … does not exist

create_node with ExampleCa tegory|…, CallFunction|…, Function|…, display-name variants

-> also failed to find the action

Problem:There is no reliable tool to “replace the function calle d by this K2Node_CallFunction” or to “create a call node for this exact Blueprint member function refPath.”

At the moment, Codex has to guess type_id values, read DSL, try create_node, try ObjectTools.set_properties, and eventually stop to avoid damaging the g raph. That is good saf ety behavior from Codex, but it exposes a tool gap in MCP.
Required tool
Purpose
replace_call_function_n ode(node, target_function_ref)
Safely retarget an exi sting K2Node_CallFunction to another function.
create_member_ function_call(graph, function_ref, pos)
C reate a call node by exact refPath without guessing type_id.

list_callable_member_functions(blu eprint)
List functions that can be created as call nodes.
get_call_function_ref erence(node)
Reliably read FunctionReference.
set_call_function_reference(node, f unction_ref)
Retarget the function call in a cont rolled way.
validate_ca ll_node_signature(node)
Check wheth er pins still match after replacement.

5. Node Introspectio n Limitations

The logs show repeated ObjectTools limitations:

get_properties on K2Node_CallFunction:

co uld no t be read:

Func tionReference, FunctionReference.MemberN ame, FunctionReference.MemberParent, NodeGuid, NodePosX, NodePosY

set_properties:

cou ld not be set: Functi onReference

This is crit ical because safe Blueprint editing requires knowing:

w hich function the node calls

which pins exist

which pins are connected

whether the node can be replaced w ithout losing l inks

Recommended improv ement:get_node_ infos should explici tly return the following for fu nction call nod es:

node_ref

node_class

title

function_ name

function_ref

declaring_class

input _pins

output_pins

exec_links

da ta_links

is_orphaned

is_compiler_generated

6. f ind_nodes Is Not Enough for Full Graph Analysis

Codex repeatedly hit schema errors such as:

Function “find_nodes”, input pa ram “title” is required…

For cleanup and verification tasks, Codex often ne eds a full graph listing, not a title search.
Current behavior
Better behav ior
find_nodes(graph, title) requires title

list_nodes(graph) without a filter.
get_node_ infos(nodes) as a separate step
list_nodes(gra ph, include_pins=true, include_links=true).
Codex has to bu ild reachability analysis manually
analyze_graph_rea chability(graph, entry_node).

7 . ProgrammaticToolset Is Useful but Fragile

Several Python-side errors appeared:

TypeError: _StrictDict.get() does not support a default value.

Use dire ct key access [] instead.

Codex naturally writes Python as if it were working with normal dictionaries. A custom _StrictDict where get(key, default) fails makes analysis scripts brit tle.

Recommended improvement:_Strict Dict.get(key, default=N one) should beha ve like norma l dict.get, or the tool should return ordinary dict/list objects.

A helper layer would also help:

node.input_pins

node.output_pins

pin.connected_pins

pin.is_exec

pin.name

8. Unreal Project Log: Projec t Errors Exist, but No Clear MCP Crash

In ExampleProject_current.log, there is no clear Fatal error and no obvious Model ContextProtocol crash. There are, however, project -level errors and warnings:

GameFeatureData rule missing

Asset manager settings do not inc lude a rule for assets of type GameFeatureDat a

ExampleUtilityFunction:

Unknown structure

In use p in … no longer exists on node Switch on EPhysicalSurface

Break

Chooser Table ExampleChooserTable:

expects ExampleCharacterAnimBP_C, but ExampleAIAnimBP_C was passed in

These must be separ ated from MCP issues. They can add noise to logs and in terfere with project compilation/validation, b ut they do not by themselves prove an Unreal MCP bug.

9. To ols Missing for Eff ective Codex + Unreal M CP Work

Blueprint g raph editing

duplicate_functi on_graph

rename_function

replace_function_call

create_function _call_node_by_ref

conne ct_pins_by_name

disconnec t_pin

delete_nodes_batch

delete_dead_nodes

move_nod es

format_graph

compile_and_return_errors

Blueprint diff and safety

snapshot_graph

di ff_graph_before_after

rollback_last_transaction

validate_no_callsite_changed

validate_only_function_chan ged

Witho ut these, Cod ex has to oper ate too ca utiously and cannot safely p erform co mplex Blueprint refactors.

Logs and diagnos tics

LogsToolset.GetLogEntries is useful, but it would be stronger if it r eturned structured data:

timestamp

category

verbosity

asset

message

source_file

line

Additional diagnos tic tools should include:

ge t_recent_compile_errors(asset)

get_blueprint_compile_result (asset)

get_mcp_diagnost ics()

Animation tools

For animation-heavy Blueprint workflows, direct animation inspection tools would be very useful:

inspect_anim_montage_ slots

i nspect_anim_notify_tracks

inspect_anim_blueprint_slots

inspect_skeleton_ sockets

inspect_ble ndspace_axes

Without these , Codex cannot reliably verify issues like wheth er a specific weapon montage is assigned to the correct slot.

UMG tools

For ExampleHUDWidget and ExampleSlotWidget workflows, the following are needed:

inspect_widget_tree

get_bound_widget_variables

get_widget_property

set_widget_property

validate_widget_references

10. Suggested Bug / Feedback Report

Based on the provided Unreal Engine bug-reporting instructions, this should be framed carefully. The report should distinguish an engine/plugin issue from project-specific development proble ms, include reprod uction steps, attach logs/screenshots/videos where relevant, and provide system/project details. The strongest framing is not “Unreal Engine is broken, ” but rath er feedback/bug report for the Experimental ModelContextProtocol + BlueprintTools layer.

Suggested title

UE 5.8 ModelContextProtocol: BlueprintTools return tool failures as Ok text and cannot safely retarget/create Blueprint member function call nodes

Summary

In UE 5. 8 Experimental ModelContextProtocol, Codex can connect to Unreal MCP and call BlueprintTools, but several Blueprint editing failures are returned as successful MCP Ok text responses. This makes automated agents unable to reliably distinguish success from failure.

Additionally, there appears to be no safe API to retarget an existing K2Node_CallFunction to another Blueprint member function, nor a reliable way to create a call node for a Blueprint membe r function by function refPath. create_node fails with “does not exist” for valid Blueprint member functions, and Obj ectTools.set_properties cannot set FunctionReference.

Reproduction steps

1. Open a UE 5.8 project with ModelContextProtocol and AllToolsets enabl ed.

2. Connect a Codex/MCP client to http://127.0.0.1:8000/mcp.

3. Call list_toolsets immediately after startup.

4. Observe that initially only AgentSkillToolset may be visibl e; later many toolsets appear.

5. Open a Blueprint with function A and function B.

6. Try to replace a K2Node _CallFunction from A to B through MCP:

- ObjectTools.set_properties(Function Reference=…)

- BlueprintTools.create_node(type_id variations for B)

7. Observe failures returned as text in Ok responses and the inability to safely create or retarget the call node.

Expected result

- MCP tool failures should return s tructured error responses.

- list_toolsets should expose readiness/loading state.

- BlueprintTools should provide safe APIs for function call retargeting and creating member function call nodes by exact function refPath.

Actual result

- Some fai lures return as Ok text.

- list_toolsets can be incomplete during start up.

- K2Node_CallFunction Functi onReference cannot be read/set via ObjectTools.

- create_node cannot find Blueprint member function actions by several valid-looking identifiers .

11. Improvement Priority

1. Structured errors instead of Ok text containing an error message.

2. MCP readines s/status tool.

3. Blueprint member function call creation and retargeting tools.

4. list_nodes / graph introspection without a required title filter.

5. Safe graph transaction, diff, and rollback.

6. ProgrammaticToolset compatibility with normal Python dict behavior.

7. Specialized AnimMontage, UMG, and socket inspection tools.

Final Conclusion

Codex can already perform limited safe operat ions, such as cleaning disconnected dead chains, creating backups, compiling, and saving. However, for truly autonomous Blueprint work in Unreal, the limiting factor is not compute power. The limiting factor is the absence of a reliable API for precise Blueprint edits and machine-readable diagnostics.