debug kit
7 tools. Generated from the plugin source; do not edit by hand.
Guide
The debug kit is a read-only evidence surface. It reports current runtime state, a bounded stack for the MCP request thread, and entries from an already registered Unreal Message Log listing. It does not open debugger windows, run console commands, load modules, change filters, pause threads, or change project state. Enable it with edit.enable_kits when adaptive exposure is active.
Start here
- Call
debug.get_runtime_diagnostics {}to establish whether the editor, PIE, and live worlds are present before interpreting runtime behavior. - Use
debug.get_memory_stats {}anddebug.get_gc_state {}for cheap process observations. - In an editor world,
debug.get_world_timers_summary {}returns public timer-manager tick state; Unreal does not export a portable timer count.debug.count_objects_by_classis bounded and should use a narrow class and limit. - For an existing Unreal Message Log listing, call
debug.read_message_log {"listing":"MapCheck","limit":100}. A listing must already be registered and the MessageLog module must already be loaded. - When diagnosing the MCP request path itself, call
debug.capture_callstack {"maxCharacters":8192}. Treat empty output as an availability observation, usually related to installed symbols or the active platform. - Follow the ownership map below for the diagnostic surface that owns the next action.
Tools
| Tool | Use |
|---|---|
debug.get_runtime_diagnostics | Snapshots timing, frame count, editor/PIE state, and live worlds grouped by type. |
debug.get_memory_stats / debug.get_gc_state | Process memory totals and instantaneous GC state. |
debug.get_world_timers_summary | Read-only editor-world timer tick state; it does not reveal or alter delegates. |
debug.count_objects_by_class | Bounded loaded-UObject count for a requested class. |
debug.read_message_log | Reads bounded severity/text entries from a registered listing's current filtered view. |
debug.capture_callstack | Captures a bounded stack for the current MCP request thread only. |
Ownership map
| Need | Owner |
|---|---|
| Blueprint breakpoints, watched pins, debug object, execution trace | bp.add_breakpoint, bp.list_breakpoints, bp.watch_pin, bp.list_watches, bp.get_execution_trace, bp.set_debug_object |
| Console commands and CVars | console.exec, console.get_cvar, console.search, console.list_categories |
| Log category levels, capture, and log file markers | log.list_categories, log.get_verbosity, log.set_verbosity, log.read_capture, log.read_file_since |
| PIE lifecycle and editor diagnostics | edit.* play/diagnostic tools |
| Net drivers and live net modes | network.list_net_drivers, network.get_runtime_diagnostics |
| Render-target and project-renderer inspection | rendering.audit_render_target, rendering.audit_project_renderer |
Interpreting results
get_runtime_diagnostics is a point-in-time snapshot. PIE can transition after the reply, and an idle editor can validly expose no live world context. Use its world inventory as evidence of the process state at the call, not as a request to create or activate a world.
read_message_log does not enumerate listings because Unreal's public Message Log contract does not expose a registered-listing enumeration. The supplied listing is checked before it is read, so the tool cannot create one. Entries follow the listing's current editor filters; they do not execute hyperlinks/tokens or change selection, pages, filters, or UI.
capture_callstack returns only the worker thread serving this request. It cannot capture the game thread, debugger-paused threads, or another process. Its text can omit symbols when the installed engine has no matching debug symbols. Use the editor log and the owning kit's diagnostics when the issue is gameplay, Blueprint, rendering, networking, or console-related.
Validation is pending the deferred UE 4.27 and UE 5.8 build/smoke cycle.
Tools
Legend. risk 0 = read-only, 1 = harmless editor op, 2 = modifies asset, 3 = deletes/replaces asset, 4 = project/config/build op, 5 = potentially destructive (calls above
MaxAutoRiskneed"_confirm": true). mutates = runs in a transaction (edit.undo reverts). requires PIE / requires world = refused without a PIE session / an open level. requires plugin = unavailable while the plugin is disabled. dryRun = honours thedryRunargument. smoke = covered byedit.self_test.
debug.capture_callstack (risk 0, UE 5.3+, smoke)
Captures a bounded stack for the current MCP request thread; it cannot inspect or pause another thread.
| Argument | Type | Description |
|---|---|---|
maxCharacters | integer | Maximum UTF-8 characters to retain, from 1024 through 65536. Default 8192. |
Returns: callstack, available, maxCharacters, notes.
debug.count_objects_by_class (risk 0, smoke)
Counts loaded objects assignable to a class, with a required response limit to bound the scan.
| Argument | Type | Description |
|---|---|---|
class | string | required. Native or Blueprint class path to count among loaded objects. |
limit | integer | required. Maximum matching objects counted before the scan stops, from 1 through 100000. |
includeDerived | boolean | Include subclasses of the requested class. Default true. |
Returns: class, count, truncated, note.
debug.get_gc_state (risk 0, smoke)
Reports whether Unreal garbage collection is currently in progress.
No arguments.
Returns: garbageCollecting, objectCount.
debug.get_memory_stats (risk 0, smoke)
Returns platform process-memory totals from the exported Core memory stats API.
No arguments.
Returns: totalPhysical, availablePhysical, usedPhysical, peakUsedPhysical.
debug.get_runtime_diagnostics (risk 0, smoke)
Reports the current frame, timing, PIE/editor flags, and live world-context inventory.
No arguments.
Returns: frameCounter, currentTimeSeconds, deltaTimeSeconds, game, playInEditor, editorAvailable, worldCount, worlds, notes.
debug.get_world_timers_summary (risk 0, requires world, smoke)
Summarizes the current editor world's public timer-manager tick state without listing or modifying timers.
No arguments.
Returns: world, tickedThisFrame, note.
debug.read_message_log (risk 0, smoke)
Reads bounded entries from an already registered Message Log listing without opening it or executing tokens.
| Argument | Type | Description |
|---|---|---|
listing | string | required. Registered Unreal Message Log listing name, for example MapCheck or CompilerResultsLog. |
limit | integer | Maximum filtered messages to return, from 1 through 1000. Default 100. |
Returns: listing, label, entries, totalFiltered, truncated, notes.