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.