Skip to content
NarshaADK
한국어
Get it on Fab

Unreal Engine C++ and Blueprint analysis examples

These are recorded MCP calls, not a live demo or a recreated IDE. They were captured with NarshaMCP v0.13.7, Lyra Starter Game, UE 5.8.1, and the Editor closed. They demonstrate those specific runs, not universal parsing coverage or a performance benchmark.

The website reads the checked-in public README during the build. Its JSON/JSONC excerpts are preserved below, including omission comments. These are the full published excerpts, not complete unabridged runtime responses. The linked public README may evolve after this site build.

The demonstrated improvement is project context an agent can inspect beyond source text. These are the product’s recorded responses, not an independent accuracy test or a comparison against every other MCP.

  • A saved value: the source check did not find FireDelayTimeSecs. Binary analysis returned its default as 0.1 in GA_Weapon_Fire. That gives an agent a concrete saved setting to inspect; it is not a runtime-evaluated pin value.
  • Call sites across formats: source search found the C++ declaration and definition of StartRangedWeaponTargeting. The MCP response added 2 Blueprint call sites, including their owning events. Matches are qualified, with score 0.75; the score is not an accuracy percentage.
  • Behavior structure: the StateTree response reported 9 states and 19 property bindings. An agent can inspect the returned tasks and transitions before an editing session. The published excerpt shows selected states, not the whole tree.

The source check searched readable .h and .cpp files under the sample project’s Source/ and Plugins/. This is a source-text baseline, not a measured failure rate for AI agents. A binary file can contain readable strings; finding those strings alone does not reconstruct its graph or typed values.

The recorded MCP reads ran after setup and indexing with the Editor closed. Supported disk reads therefore remove an Editor or commandlet launch from the research workflow. They do not remove the initial installation, project build, or indexing requirement. Some responses use metadata caches produced by binary parsing; each query is not necessarily a fresh parse of the package. An unsaved Editor change is not part of the file on disk.

Not measured by these captures: elapsed-time savings, peak memory, token savings, or improved AI answer accuracy. A speed or resource comparison needs the same asset and question, equivalent returned fields, and separate cold/warm runs with setup and indexing costs stated. The earlier results below preserve their original execution conditions and omissions.

Which Blueprints call this C++ function?

Find the owning Blueprint event and the matched C++ symbol. NarshaMCP v0.13.7 · Lyra Starter Game · UE 5.8.1 · Editor closed.

Source: recorded runs in the public README. The blocks below preserve its request and response excerpts verbatim; // comments identify omitted keys and array elements.

find_cpp_to_bp — Expand request & response

MCP request

{"name": "ue_analyze_symbols", "arguments": {"operation": "find_cpp_to_bp", "function_name": "ULyraGameplayAbility_RangedWeapon::StartRangedWeaponTargeting", "limit": 5}}

Recorded response excerpt

{
"function_name": "ULyraGameplayAbility_RangedWeapon::StartRangedWeaponTargeting",
"total_callers": 2,
"truncated": false,
"blueprint_callers": [
{
"blueprint_name": "GA_Weapon_Fire",
"blueprint_path": "/Game/Weapons/GA_Weapon_Fire",
"owning_function": "K2_ActivateAbility",
"node_name": "K2Node_CallFunction_31",
"match_tier": "qualified",
"confidence": 0.75
},
{
"blueprint_name": "GA_WeaponNetShooter",
"blueprint_path": "/ShooterCore/Weapons/NetShooter_PROTO/GA_WeaponNetShooter",
"owning_function": "K2_ActivateAbility",
"node_name": "K2Node_CallFunction_31",
"match_tier": "qualified",
"confidence": 0.75
}
]
// [truncated] blueprint_callers[] fields omitted: call_type, is_pure; keys omitted: operation, skip_dedup, success
}
find_bp_to_cpp — Expand request & response

MCP request

{"name": "ue_analyze_symbols", "arguments": {"operation": "find_bp_to_cpp", "blueprint_name": "GA_Weapon_Fire", "limit": 2, "offset": 18}}

Recorded response excerpt

{
"blueprint_name": "GA_Weapon_Fire",
"total_calls": 33,
"offset": 18,
"truncated": true,
"cpp_calls": [
{
"full_name": "LyraGameplayAbility_RangedWeapon::StartRangedWeaponTargeting",
"owning_function": "K2_ActivateAbility",
"node_name": "K2Node_CallFunction_31",
"is_pure": false
},
{
"full_name": "KismetSystemLibrary::SetTimerDelegate",
"owning_function": "K2_ActivateAbility",
"node_name": "K2Node_CallFunction_4",
"is_pure": false
}
]
// [truncated] cpp_calls[] fields omitted: function_name, owner_class; keys omitted: operation, returned, success, total_count
}
trace_hierarchy — Expand request & response

MCP request

{"name": "ue_analyze_symbols", "arguments": {"operation": "trace_hierarchy", "class_name": "ALyraCharacter", "direction": "down"}}

Recorded response excerpt

{
"class_name": "ALyraCharacter",
"cpp_descendants_count": 1,
"bp_descendants_count": 10,
"descendants": [
{"depth": 1, "name": "ALyraCharacterWithAbilities", "relation": "child", "source": "pdb"},
{"depth": 1, "name": "Character_Default", "relation": "child_blueprint", "source": "blueprint"},
{"depth": 2, "name": "B_Hero_Default", "relation": "child_blueprint", "source": "blueprint"},
{"depth": 2, "name": "B_ShootingTarget", "relation": "child_blueprint", "source": "blueprint"}
],
"interface_parents": ["IAbilitySystemInterface", "IGameplayCueInterface", "IGameplayTagAssetInterface", "ILyraTeamAgentInterface"]
// [truncated] descendants: 4 of 11 elements; descendants[] fields omitted: parent; keys omitted: 13 of 18
}

The forward lookup reports two Blueprint callers with match_tier: "qualified" and confidence: 0.75. This is the tool’s match score, not an independently measured accuracy rate. The reverse lookup reports 33 calls; its excerpt is truncated, starts at offset 18, and shows two calls. The hierarchy excerpt shows four of eleven descendants.

What is inside GA_Weapon_Fire?

Read events, variable defaults, and node connections from the asset. NarshaMCP v0.13.7 · Lyra Starter Game · UE 5.8.1 · Editor closed.

Source: recorded runs in the public README. The blocks below preserve its request and response excerpts verbatim; // comments identify omitted keys and array elements.

get_event_graph — Expand request & response

MCP request

{"name": "ue_manage_blueprint", "arguments": {"operation": "get_event_graph", "blueprint_name": "GA_Weapon_Fire"}}

Recorded response excerpt

{
"blueprint_name": "GA_Weapon_Fire",
"count": 5,
"events": [
{"node_title": "FireComplete", "node_class": "K2Node_CustomEvent"},
{"node_title": "FailureMontage Delay Complete", "node_class": "K2Node_CustomEvent"}
]
// [truncated] events: 2 of 5 elements; events[] fields omitted: node_id, owning_function; keys omitted: operation, success
}
search_variables — Expand request & response

MCP request

{"name": "ue_manage_blueprint", "arguments": {"operation": "search_variables", "blueprint_name": "GA_Weapon_Fire", "pattern": "*Fire*"}}

Recorded response excerpt

{
"parent_class": "LyraGameplayAbility_RangedWeapon",
"total_count": 2,
"results": [
{
"name": "CharacterFireMontage",
"default_value": "AM_MM_Rifle_Fire",
"default_value_type": "Object",
"edit_condition": "EditDefaultsOnly"
},
{
"name": "FireDelayTimeSecs",
"default_value": "0.1",
"default_value_type": "Double",
"edit_condition": "EditDefaultsOnly"
}
]
// [truncated] results[] fields omitted: 9 of 13; keys omitted: 14 of 17
}
get_raw_nodes — Expand request & response

MCP request

{"name": "ue_manage_blueprint", "arguments": {"operation": "get_raw_nodes", "blueprint_name": "GA_Weapon_Fire", "page": 1, "page_size": 1}}

Recorded response excerpt

{
"total_nodes": 98,
"has_more": true,
"nodes": [
{
"id": "K2Node_AsyncAction_ListenForGameplayMessages_0",
"node_class": "K2Node_AsyncAction_ListenForGameplayMessages",
"owning_function": "K2_OnAbilityAdded",
"pins": [
{
"name": "execute",
"category": "exec",
"direction": "input",
"linked_to": [
{"node_id": "K2Node_Event_1", "pin_name": "then", "export_index": 70}
]
},
{"name": "then", "category": "exec", "direction": "output", "linked_to": []}
]
}
]
// [truncated] nodes[].pins: 2 of 12 elements; nodes[].pins[].linked_to[] fields omitted: owning_function; nodes[].pins[] fields omitted: container_type, default_value, pin_id, sub_category; nodes[] fields omitted: 5 of 9; keys omitted: 10 of 13
}

The event excerpt shows two of five events. The variable result contains two defaults. The node request uses pagination; the published excerpt omits some fields as marked in its comments. Neither the homepage nor the excerpt represents the entire graph. Data pins are returned as connections, not evaluated values; only execution order is traced.

How does this StateTree transition?

Inspect tasks and outgoing transitions without opening the Editor. NarshaMCP v0.13.7 · Lyra Starter Game · UE 5.8.1 · Editor closed.

Source: recorded runs in the public README. The blocks below preserve its request and response excerpts verbatim; // comments identify omitted keys and array elements.

get_summary — Expand request & response

MCP request

{"name": "ue_manage_ai", "arguments": {"operation": "get_summary", "ai_type": "statetree", "asset_name": "L_STT_FollowPlayer"}}

Recorded response excerpt

{
"asset_name": "L_STT_FollowPlayer",
"root_state": "Root",
"state_count": 9,
"property_binding_count": 19,
"states": [
{
"name": "Wait 3s Follow",
"tasks": ["StateTreeDebugTextTask", "StateTreeDelayTask"],
"transitions": [
{"trigger": "OnStateCompleted", "to_state": "Wait 3s Follow TooClose"},
{"trigger": "OnStateCompleted", "to_state": "Follow"}
]
},
{
"name": "Follow",
"tasks": ["STT_Follow"],
"transitions": [
{"trigger": "OnStateSucceeded", "to_state": "Root"},
{"trigger": "OnStateFailed", "to_state": "Wait 3s FailFollow"}
]
}
]
// [truncated] states: 2 of 9 elements; states[] fields omitted: conditions, enabled, state_type; keys omitted: 11 of 16
}

The asset reports nine states and nineteen property bindings. The excerpt includes two states and omits conditions and other fields as marked. The homepage draws only the selected Wait 3s Follow → Follow → Root path; alternative and failure transitions remain visible in the recorded excerpt. This is structural data, not a simulation of runtime behavior.

  • Match quality depends on available source, PDBs, and supported asset data. A successful build is needed for PDB analysis; engine symbols are needed to include engine classes.
  • Cooked assets are not readable. Latent, asynchronous, and delegate edges are approximated.
  • A large result can return a local detail_handle. Resolve it with ue_cache_control / resolve_detail_handle, or request a narrower read with a limit.
  • Asset writes need a running Editor. These read-only examples do not demonstrate editing.

See compatibility for maturity and constraints, or get started to reproduce a read on your own project.