BlueprintAIAssistant Documentation
Blueprint AI Assistant — Complete Plugin Documentation
Version: 1.0.0 Engine Compatibility: Unreal Engine 5.7 Platform: Win64 (Editor only) Loading Phase: PostEngineInit
Table of Contents
• Overview
• Installation & Setup
• Architecture Overview
• Plugin Module Lifecycle
• Settings Reference
• AI Providers
• 6.1 Provider Interface (IAIProvider)
• 6.2 Base Provider (FAIProviderBase)
• 6.3 Claude Provider
• 6.4 OpenAI Provider
• 6.5 OpenRouter Provider
• 6.6 Custom Provider
• Conversation Manager (Agentic Loop)
• 7.1 System Prompt Construction
• 7.2 Tool Call Parsing
• 7.3 Agent Loop Flow
• 7.4 Context Management & Summarization
• 7.5 Safety Mechanisms
• Action System (Tools)
• 8.1 Action Interface (IBlueprintAction)
• 8.2 Action Registry
• 8.3 Complete Tool Reference
• User Interface (Slate Chat Panel)
• Logging System
• Memory System
• Node & Blueprint Tracking
• File Structure Reference
• Module Dependencies
• Workflow Reference for AI
• Troubleshooting
1. Overview
Blueprint AI Assistant is an Unreal Engine 5 editor plugin that provides AI powered Blueprint creation and manipulation directly within the Unreal Editor. It functions as an agentic AI system that can:
• Create new Blueprints from natural language descriptions
• Add nodes (events, functions, flow control, variables, etc.) to Blueprint graphs
• Connect nodes with fuzzy pin name matching
• Add and configure variables, components, and functions
• Compile Blueprints and report errors
• Spawn actors and mesh assets directly into the current level
• Generate procedural meshes using primitives or custom topology (vertices/triangles)
• Author Enhanced Input assets and mappings and wire input events into Blueprints
• Inspect existing Blueprints, project assets, and class functions
• Remember user preferences across sessions via a persistent memory system
The plugin supports multiple AI providers — Anthropic Claude, OpenAI (Chat Completions & Responses API), OpenRouter, and Custom endpoints — allowing users to choose their preferred LLM. It uses a text based tool calling approach with <tool call XML tags for maximum compatibility across different providers, bridges, and proxies.
Key Differentiators
• Agentic loop: The AI can chain multiple tool calls autonomously, creating complex Blueprints across many iterations without user intervention.
• Provider agnostic: Works with any OpenAI compatible or Claude compatible API endpoint, including bridges like CopilotAPI and local LLM servers like LM Studio.
• Self correcting: Detects error loops, duplicate calls, narration without action, and automatically nudges the AI to course correct.
• Context aware: Tracks created Blueprints and nodes across the session, manages token budgets, and auto summarizes conversation when context fills up.
2. Installation & Setup
Installation
• Place the BlueprintAIAssistant folder inside your project's Plugins/ directory.
• Restart the Unreal Editor.
• The plugin loads automatically (LoadingPhase: PostEngineInit).
• Or just install it from FAB.
Required Engine Plugins
The assistant depends on several Unreal Engine plugins for specific tool families. These are declared in BlueprintAIAssistant.uplugin and should auto enable, but if your project has them disabled, enable them manually:
• EnhancedInput — Input Action / Mapping Context creation and input event wiring tools
• IKRig — animation retarget helper workflows
• LevelSequenceEditor — Level Sequence authoring/editing tools
• ProceduralMeshComponent — procedural mesh actor generation tools
• Open Edit → Plugins in Unreal Editor.
• Search each plugin name above and enable it if disabled.
• Restart the editor when prompted.
Initial Configuration
• Go to Project Settings → Plugins → Blueprint AI Assistant.
• Select your Active Provider (Claude, OpenAI, OpenRouter, or Custom).
• Enter your API Key for the selected provider.
• (Optional) Change the Model name, temperature, or other settings.
• Open the assistant via Tools → Blueprint AI Assistant in the Level Editor menu, or through the "Blueprint AI Assistant" tab in the tab spawner.
Quick Start
• Open the AI chat panel.
• Type a natural language request, e.g., "Create a Blueprint called BP Enemy that is an Actor with a StaticMesh component and moves forward every tick."
• The AI will autonomously create the Blueprint, add nodes, connect them, and compile — all in real time.
3. Architecture Overview
The plugin follows a modular architecture with clear separation of concerns:
┌─────────────────────────────────────────────────────────────┐ │ FBlueprintAIAssistantModule │ │ (Plugin entry point — registers tab, menu, core systems) │ ├─────────────────────────────────────────────────────────────┤ │ │ │ IAIProvider FConversationMgr FActionRegistry │ │ (Claude, (Agentic loop, (82 tools, │ │ OpenAI, system prompt, node tracking, │ │ OpenRouter, tool execution, BP tracking) │ │ Custom) summarization) │ │ │ │ SBlueprintAIChat IBlueprintAction (82 actions) │ │ (Slate UI panel) │ │ │ │ FBlueprintAILogger FBlueprintAIMemory │ │ (Desktop .txt log) (memories.json) │ └─────────────────────────────────────────────────────────────┘
Data Flow
• User types a message in the Slate chat panel ( SBlueprintAIChat ).
• The ConversationManager builds a system prompt (tools, project state, memory), appends the user message to history, and sends it to the AI Provider.
• The AI Provider (Claude, OpenAI, etc.) sends an HTTP POST request and parses the response.
• The ConversationManager extracts tool calls from the response (structured or text based <tool call tags).
• Each tool call is dispatched to the matching IBlueprintAction via the ActionRegistry.
• The action executes on the game thread (creating nodes, connecting pins, etc.) and returns a result.
• Results are aggregated and sent back to the AI for the next iteration (agentic loop).
• The loop continues until the AI responds with pure text (no tool calls) or max iterations are reached.
4. Plugin Module Lifecycle
File: BlueprintAIAssistantModule.h / .cpp
The module class FBlueprintAIAssistantModule implements IModuleInterface and manages:
StartupModule()
• Initialize Logger — Creates a timestamped debug log file on the Desktop.
• Create ActionRegistry — Registers all built in actions (currently 82 tools).
• Create ConversationManager — Initializes the agentic loop, linked to the ActionRegistry.
• RefreshAIProvider() — Creates the initial AI provider based on settings.
• RegisterTab() — Registers a Nomad tab spawner ( BlueprintAIAssistantTab ) under the Tools category.
• RegisterMenus() — Adds "Blueprint AI Assistant" to the Level Editor → Tools menu (deferred via UToolMenus::RegisterStartupCallback ).
ShutdownModule()
• Unregisters startup callbacks and menu owner.
• Unregisters the tab spawner.
• Resets ConversationManager, ActionRegistry, and CurrentProvider.
• Shuts down the Logger (flushes and closes the file).
RefreshAIProvider()
Creates a new provider instance based on UBlueprintAISettings::ActiveProvider:
• Claude → FClaudeProvider(ApiKey, Model, ApiVersion)
• OpenAI → FOpenAIProvider(ApiKey, Model, Endpoint)
• OpenRouter → FOpenRouterProvider(ApiKey, Model)
• Custom → FCustomProvider(Endpoint, ApiKey, Model, Format)
Also calls ConversationManager SetProvider() to wire it up.
Tab & Menu
• Tab ID: BlueprintAIAssistantTab
• Tab Role: NomadTab (can be docked anywhere)
• Menu Location: Level Editor → Tools → "Blueprint AI Assistant"
• Icon: Icons.Help from the default app style
5. Settings Reference
File: BlueprintAISettings.h / .cpp
Settings are stored as UDeveloperSettings and appear in Project Settings → Plugins → Blueprint AI Assistant. The config file is BlueprintAIAssistant.ini (saved in Saved/Config/ ).
Setting
Type
Default
Description
ActiveProvider
EAIProviderType
Claude
Which AI provider to use (Claude, OpenAI, OpenRouter, Custom)
ClaudeApiKey
FString
""
Anthropic API key (password field)
ClaudeModel
FString
claude sonnet 4 20250514
Claude model ID
ClaudeApiVersion
FString
2023 06 01
Anthropic API version header
OpenAIApiKey
FString
""
OpenAI API key (password field)
OpenAIModel
FString
gpt 4o
OpenAI model ID
OpenAIEndpoint
FString
https://api.openai.com/v1/responses
OpenAI endpoint URL (auto detects Chat Completions vs Responses API)
OpenRouterApiKey
FString
""
OpenRouter API key (password field)
OpenRouterModel
FString
anthropic/claude sonnet 4 20250514
OpenRouter model ID
CustomEndpoint
FString
""
Custom API endpoint URL
CustomApiKey
FString
""
Custom API key
CustomModel
FString
""
Custom model name
CustomApiFormat
EAIProviderType
OpenAI
Whether custom endpoint uses Claude or OpenAI request format
Temperature
float
0.3
Generation temperature (0.0–2.0)
MaxTokens
int32
8192
Max output tokens per response (256–65536)
bAutoCompile
bool
true
Auto compile Blueprints after modification
MaxToolIterations
int32
200
Max agentic tool call iterations per user turn (1–500)
MaxMessageChars
int32
8000
Max characters per individual message (500–100000)
MaxToolResultChars
int32
12000
Max characters per tool result (500–50000)
MaxTotalPayloadChars
int32
32000
Max total characters across all messages in one request (0=unlimited, 0–500000)
bEnableFileLogging
bool
true
Enable debug log file on Desktop
HttpRequestTimeoutSeconds
int32
180
HTTP request timeout in seconds (30–600)
Endpoint Reference (built in)
The settings include a read only "Endpoint Reference" field showing:
• OpenAI Chat (GPT 4o, o3, o4 mini): https://api.openai.com/v1/chat/completions
• OpenAI Codex / Responses API (gpt 5.3 codex): https://api.openai.com/v1/responses
• Anthropic Claude (direct): https://api.anthropic.com/v1/messages
• OpenRouter (any model): https://openrouter.ai/api/v1/chat/completions
Auto Refresh
When any setting is changed via the Project Settings UI, PostEditChangeProperty() automatically:
• Saves the config to disk ( SaveConfig() )
• Calls FBlueprintAIAssistantModule::Get().RefreshAIProvider() so changes take effect immediately without restarting the editor.
6. AI Providers
The plugin uses a clean provider abstraction layer to support multiple AI APIs.
6.1 Provider Interface (IAIProvider)
File: Public/AI/IAIProvider.h
Defines the abstract interface all providers must implement:
IAIProvider (abstract) ├── GetProviderName() → FString ├── SendRequest(Request, OnResponse, OnError) → void ├── CancelRequest() → void ├── SupportsToolCalling() → bool ├── FormatToolDefinition(Name, Desc, Schema) → FJsonObject └── FetchAvailableModels(OnSuccess, OnError) → void
Key Data Structures
Structure
Purpose
FAIToolCall
Represents a single tool call: Id, Name, Parameters (JSON)
EAIMessageRole
Message roles: System, User, Assistant, ToolResult
FAIMessage
One conversation message with role, content, optional tool calls
FAICompletionRequest
Full request payload: messages, tools, temperature, max tokens, model
FAICompletionResponse
Parsed response: success flag, text content, tool calls, token usage, raw JSON
FModelInfo
Model metadata: ID, display name, pricing (per 1M tokens), free flag, context length
Delegates
• FOnAIResponse — Called with parsed response on success
• FOnAIError — Called with error string on failure
• FOnModelsReceived — Called with model list when fetching available models
6.2 Base Provider (FAIProviderBase)
File: Public/AI/AIProviderBase.h / Private/AI/AIProviderBase.cpp
Abstract base class implementing shared HTTP logic:
HTTP Request Management
• SendHttpRequest() — Builds and sends HTTP POST requests with JSON body
• Sets configurable timeout ( HttpRequestTimeoutSeconds )
• Sets ActivityTimeout for reasoning models that send 0 bytes while "thinking"
• Logs full request/response bodies via FBlueprintAILogger
• Automatic retry: On connection failure, retries once automatically (copies headers, re sends same payload)
• Uses TWeakPtr<IAIProvider to prevent dangling captures in lambda callbacks
• SendHttpGetRequest() — For model listing (GET requests)
• Returns empty data on 404 (graceful degradation for endpoints without model listing)
• CancelRequest() — Unbinds the completion delegate BEFORE cancelling to prevent stale callbacks from corrupting state
Model List Parsing
• Default parser handles OpenAI style { "data": [ { "id": "..." }, ... ] }
• Extracts OpenRouter pricing: { "pricing": { "prompt": "0.000003", "completion": "0.000015" } }
• Filters out non chat models: embeddings, TTS, DALL E, Whisper, Moderation, Realtime, legacy (davinci/babbage/curie/ada)
• Sorts: free models first, then alphabetically by ID
JSON Helpers (Static)
• JsonToString() / StringToJson() — Serialize/deserialize JSON objects
• MakeStringProp() / MakeIntProp() / MakeBoolProp() / MakeArrayProp() — Build JSON Schema properties
6.3 Claude Provider
File: Public/AI/ClaudeProvider.h / Private/AI/ClaudeProvider.cpp
Endpoint: https://api.anthropic.com/v1/messages
Request Format
• System message → top level "system" field (not in messages array)
• Auth headers: x api key, anthropic version
• Tools → "tools" array in Claude format
• Temperature and max tokens at top level
Claude Tool Format
{ "name": "tool name", "description": "What it does", "input schema": { / JSON Schema / } }
Response Parsing
• Content blocks: "text" (text) and "tool use" (tool calls)
• Tool call parameters from "input" field
• Usage: input tokens, output tokens
• Error detection via "error" field
Message Building
• User messages → { "role": "user", "content": "..." }
• Assistant messages → content blocks array with text + tool use blocks
• Tool results → user role with "tool result" content block and "tool use id"
Model Listing
• Endpoint: https://api.anthropic.com/v1/models
• Uses base class's OpenAI style parser
6.4 OpenAI Provider
File: Public/AI/OpenAIProvider.h / Private/AI/OpenAIProvider.cpp
Supports two API formats, auto detected from the endpoint URL:
Chat Completions API ( /v1/chat/completions )
• Default endpoint: https://api.openai.com/v1/chat/completions
• Uses max completion tokens (not max tokens ) for newer models
• Omits temperature entirely to avoid HTTP 400 errors with models that reject custom temperature (o1, o3, o4, etc.)
• Auth: Authorization: Bearer <key
Responses API ( /v1/responses )
• Auto detected when endpoint URL contains "/responses"
• System message → top level "instructions" field
• Messages → "input" array with:
• { "role": "user", "content": "..." }
• { "role": "assistant", "content": "..." }
• { "type": "function call", "name": "...", "arguments": "...", "call id": "..." }
• { "type": "function call output", "call id": "...", "output": "..." }
• Uses max output tokens instead of max completion tokens
OpenAI Tool Format
{ "type": "function", "function": { "name": "tool name", "description": "What it does", "parameters": { / JSON Schema / } } }
Response Parsing (Chat Completions)
• Text from choices[0].message.content
• Tool calls from choices[0].message.tool calls[] with function.name and function.arguments
• Usage: prompt tokens, completion tokens
Response Parsing (Responses API)
• Output array with "message" (containing "output text" ) and "function call" items
• Usage: input tokens, output tokens
Smart Error Messages
When a model is incompatible with the selected API format, the provider returns a user friendly error suggesting the correct endpoint URL.
Model Listing
• Derives endpoint from chat completions URL: …/v1/chat/completions → …/v1/models
• Fallback: https://api.openai.com/v1/models
6.5 OpenRouter Provider
File: Public/AI/OpenRouterProvider.h / Private/AI/OpenRouterProvider.cpp
Inherits from FOpenAIProvider but overrides request building:
• Endpoint: https://openrouter.ai/api/v1/chat/completions
• Uses max tokens (not max completion tokens ) for broad upstream compatibility
• Includes temperature in requests (unlike direct OpenAI)
• Models endpoint: https://openrouter.ai/api/v1/models
• Model list includes pricing information (per token costs converted to per 1M)
6.6 Custom Provider
File: Public/AI/CustomProvider.h / Private/AI/CustomProvider.cpp
Wraps either a FClaudeProvider or FOpenAIProvider internally based on CustomApiFormat setting.
Endpoint Normalization
Automatically normalizes user entered URLs:
• http://host:port/v1/models → http://host:port/v1/chat/completions
• http://host:port/v1 → http://host:port/v1/chat/completions
• http://host:port → http://host:port/v1/chat/completions
• Already correct URLs pass through unchanged
Model Listing
Derives models endpoint from the configured URL by finding /v1/ and appending /models.
7. Conversation Manager (Agentic Loop)
File: Public/AI/ConversationManager.h / Private/AI/ConversationManager.cpp Lines: ~1860 (implementation)
The FConversationManager is the brain of the plugin. It orchestrates the entire conversation flow, tool execution, and AI guidance.
7.1 System Prompt Construction
The system prompt is rebuilt every iteration and includes:
• Role & Format Instructions — Tells the AI to use <tool call XML tags
• Workflow Rules — Strict 4 step workflow:
• Step 1: Create ALL nodes (add node) — no wiring in the same response
• Step 2: Read the NODE ID REFERENCE from results
• Step 3: Issue connect nodes and set pin value using returned IDs
• Step 4: Compile
• Pin Name Reference — Detailed guide for exec pins, branch conditions, loops, events, etc.
• Collision Configuration Guide — How to use set component property for physics/collision
• Function Name Reference — K2 prefix mapping for common UE5 functions
• Behavioral Rules —
• Act immediately, never describe without calling tools
• Never ask for confirmation
• Never re call with same parameters
• Use memory for persistent facts
• AI Memory Section — Persistent memories from memories.json
• Tool Documentation — Ultra compact one line per tool format
• Working State — Created Blueprints and tracked nodes this session
• Project Snapshot — Asset counts by type, Blueprint names in the project
7.2 Tool Call Parsing
The plugin supports four tool call formats with fallback parsing:
1. Structured Tool Calls (Primary)
Standard OpenAI/Claude tool calls array in the response JSON. Used when the provider returns structured tool calls.
2. Text Based <tool call Tags (Primary Fallback)
<tool call {"name":"add node","parameters":{"blueprint":"BP Enemy","node type":"Event","event name":"BeginPlay"}}</tool call
This is the primary format used by the system prompt. It works with any provider/bridge.
3. XML Function Format (Secondary Fallback)
<function=add node <parameter=blueprint BP Enemy</parameter <parameter=node type Event</parameter </function
Supports free models (Gemma, Llama) that use this XML style format.
4. Code Block Fallback
tool call {"name":"add node","parameters":{...}}
JSON Repair
The TryParseJsonWithRepair() function handles malformed JSON from AI:
• Attempt 1: Parse as is
• Attempt 2: Fix unbalanced braces (count { vs }, trim trailing extras)
• Attempt 3: Trim trailing non JSON characters
7.3 Agent Loop Flow
User message | v SendUserMessage() | ← Reset counters, set bIsBusy=true v SendToProvider() | ← Build system prompt + sanitize history | ← Apply payload limits (sliding window) | ← Hard safety cap at 60K chars v HTTP Request → AI Provider | v HandleResponse() | | Structured tool calls? ExecuteToolCalls() append results SendToProvider() | | Text <tool call tags? ExecuteTextToolCalls() append results SendToProvider() | | Deferred wiring pending? Inject wiring nudge SendToProvider() | | Narration without action? Inject action nudge SendToProvider() | ' Pure text (end of turn) Display to user Summarize if needed bIsBusy=false
History Sanitization (SendToProvider)
Before sending, the conversation history is sanitized for maximum compatibility:
• ToolResult → User role: Converts tool results to user messages (bridges don't support "tool" role)
• Strip tool calls from assistant messages: Clean text only
• Skip empty content: Never send blank messages
• Merge consecutive same role messages: Ensures strict alternation (user/assistant/user/assistant)
• Truncate oversized messages: Caps individual messages at MaxMessageChars
• Preserve NODE ID REFERENCE: When truncating, keeps the node ID block intact
• Sliding window: Drops oldest messages (after system prompt) when total exceeds MaxTotalPayloadChars
• Hard safety cap: Non configurable 60K char limit to prevent HTTP connection drops
7.4 Context Management & Summarization
Token Tracking
• Tracks cumulative InputTokens and OutputTokens from provider responses
• For providers returning 0 tokens (bridges/proxies), estimates ~4 chars per token
• Broadcasts OnContextUsageUpdated for the UI status bar
Summarization Trigger
Summarization is triggered when:
• Token based: LastRequestInputTokens 75% of ModelContextWindow
• Char based: TotalHistoryChars 75% of EffectiveMaxPayloadChars (fallback when tokens unavailable)
Summarization Process
• Builds conversation text (first 500 chars of each message)
• Saves the last real user message (not tool results)
• Sends a summarization request to the same AI provider:
• Temperature: 0.2
• MaxTokens: 1024
• Asks for: created Blueprints, added components, connected nodes, remaining work, user preferences
• Replaces entire history with: summary message + last user message
• Gracefully handles summarization failures (keeps original history)
7.5 Safety Mechanisms
The ConversationManager includes multiple safety mechanisms to prevent infinite loops and wasted API calls:
1. Max Iterations
Configurable limit (default: 200). Stops the loop when reached.
2. Duplicate Call Detection
• Caches results keyed by "toolName|serializedParams"
• Duplicate calls return immediately with a "DUPLICATE" message
• Cache invalidation: After any state changing action, stale observation caches (compile, get blueprint info, etc.) AND state changing caches are cleared
• compile blueprint is never deduped (always re executed)
3. Error Loop Detection
• Tracks ConsecutiveFailedIterations (batches where all calls fail)
• Per tool failure counter ( RecentErrorCounts )
• At 5 failures of the same tool: Injects guidance to try a different approach
• At 3 consecutive all fail iterations: Injects "CRITICAL" guidance to inspect Blueprint state
4. Success Loop Detection
• Computes a deterministic BatchSignature (sorted tool names + params)
• Tracks ConsecutiveIdenticalBatches
• At 3 identical batches: Injects strong guidance to stop repeating or try a different approach
5. Narration Nudge
• Detects when AI describes intent without calling tools (e.g., "I'll create...", "Let me add...")
• Only triggers in first 2 iterations, max 5 nudges per turn
• Skips nudging if AI is asking a question
• Injects a forceful user message demanding <tool call tags
6. Wiring Deferral Enforcement
• Detects when AI mixes add node with connect nodes / set pin value in the same batch
• Defers the wiring calls (skips execution, logs the deferral)
• Appends a NODE ID REFERENCE block and deferral notice in results
• Sends a separate short wiring message (guaranteed not to be truncated) with node IDs
• If AI still doesn't follow up: Injects wiring nudge messages (up to 3 times)
7. Stale Response Guard
Both HandleResponse() and HandleError() check bIsBusy before processing. If false (user stopped generation), the response is silently ignored.
8. Poisoned History Cleanup
On error, walks backwards through history and removes:
• ToolResult messages
• Assistant messages with tool calls
• Aggregated text tool call results
• Empty assistant messages
This prevents a corrupted state from poisoning subsequent requests.
8. Action System (Tools)
8.1 Action Interface (IBlueprintAction)
File: Public/Actions/IBlueprintAction.h
Every tool implements this interface:
class IBlueprintAction { virtual FString GetName() const = 0; // e.g. "create blueprint" virtual FString GetDescription() const = 0; // Human readable virtual TSharedPtr<FJsonObject GetParameterSchema() const = 0; // JSON Schema virtual FBlueprintActionResult Execute(const TSharedPtr<FJsonObject & Params) = 0; };
FBlueprintActionResult
struct FBlueprintActionResult { bool bSuccess; FString Message; TSharedPtr<FJsonObject Data; // Optional structured data
FString ToJsonString() const; // Serializes to {"success":true,"message":"...","data":{...}} };
8.2 Action Registry
File: Public/Actions/ActionRegistry.h / Private/Actions/ActionRegistry.cpp
The FActionRegistry manages all registered actions and provides:
• Action Registration: RegisterAction() — adds to both array and name indexed map
• Action Lookup: FindAction(Name) — O(1) hash map lookup
• Tool Definitions: BuildToolDefinitions(Provider) — generates provider specific tool JSON using each provider's FormatToolDefinition()
• Tool Documentation: GenerateToolDocumentation() — ultra compact one liner format: tool name(required, optional?) description
• Node Tracking: Short IDs (N1, N2, ...) mapped to TWeakObjectPtr<UEdGraphNode
• TrackNode() — registers a node, returns ID, prevents duplicate tracking of same pointer
• FindTrackedNode() — lookup by ID, validates weak pointer
• GetTrackedNodesInfo() — grouped by owning Blueprint, format: BPName: N1=NodeTitle, N2=NodeTitle
• Blueprint Tracking: TrackCreatedBlueprint(Name, Path) with duplicate prevention
• Session Reset: ClearSessionState() — resets node IDs back to N1, clears all tracking
8.3 Complete Tool Reference
Tool coverage evolves quickly. The list below focuses on core and representative tools. For the exact live set (currently 82), use ActionRegistry::RegisterBuiltInActions() as the source of truth.
create blueprint
Creates a new Blueprint asset.
Parameter
Type
Required
Description
name
string
Blueprint name (e.g., "BP Enemy")
path
string
Content path (default: "/Game")
parent class
string
Parent class: Actor, Pawn, Character, GameModeBase, HUD, PlayerController, PlayerState, GameStateBase, WidgetBlueprint (default: Actor)
• Idempotent: If a Blueprint with the same name exists, returns success with existing path.
• Uses UBlueprintFactory for creation.
• Tracks created Blueprint via ActionRegistry::TrackCreatedBlueprint().
• Returns the full asset path.
add node
Adds a node to a Blueprint graph. 645 lines — the most complex action.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
node type
string
Type of node (see below)
function name
string
For CallFunction: function to call
target class
string
For CallFunction: owning class
variable name
string
For GetVariable/SetVariable
event name
string
For Event node type
x
integer
X position in graph
y
integer
Y position in graph
graph name
string
Target graph name (default: EventGraph)
Supported node type values:
Node Type
Description
CallFunction
Call any UFunction by class + name
Event
Custom or built in event (BeginPlay, Tick, BeginOverlap, etc.)
Branch
If/else flow control
Sequence
Sequential execution (then 0, then 1, ...)
ForLoop
For loop with index
ForEachLoop
Array iteration
WhileLoop
While loop
DoOnce
Fire once, with reset
FlipFlop
Alternating execution (A/B)
Gate
Enter/Open/Close/Toggle gate
Delay
Delay execution node
PrintString
Print debug string
GetVariable
Variable getter (pure)
SetVariable
Variable setter
MakeArray
Create array
Self
Self reference
SpawnActor
Spawn actor from class
SetTimer
Set timer by function name
GetPlayerController
Get player controller (index 0)
Cast
Cast to type
IsValid
Validity check
MakeTransform
Create transform from components
Special behaviors:
• Function alias resolution: Automatically adds K2 prefix for known UE functions (GetActorLocation → K2 GetActorLocation, etc.)
• Tracks created node via ActionRegistry::TrackNode() and returns the assigned ID (N1, N2, ...)
• Returns all pins with their names, types, and directions (input/output)
connect nodes
Connects two node pins together.
Parameter
Type
Required
Description
source node
string
Source node ID (e.g., "N1")
source pin
string
Source pin name
target node
string
Target node ID
target pin
string
Target pin name
Fuzzy pin matching — The plugin tries multiple strategies to find the correct pin:
• Exact match
• Alias mapping: true ↔ then, false ↔ else, A ↔ boolean, etc.
• Remove "b" prefix (boolean convention)
• Case insensitive match
• Normalized match (remove spaces, underscores)
• Single pin fallback: if a direction has only one pin, use it automatically
Safety: Cross Blueprint connections are blocked with a clear error message. Uses K2Schema TryCreateConnection().
disconnect nodes
Disconnects two connected node pins.
Parameter
Type
Required
Description
source node
string
Source node ID
source pin
string
Source pin name
target node
string
Target node ID
target pin
string
Target pin name
Uses the same fuzzy pin matching as connect nodes. Verifies the connection exists before breaking it.
add variable
Adds a variable to a Blueprint.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
variable name
string
Variable name
variable type
string
Type string (see below)
category
string
Category for organization
tooltip
string
Variable tooltip
default value
string
Default value
Supported types (15+): bool, int, float, double, string, text, name, vector, rotator, transform, color, linearcolor, class, object:ClassName, array:ElementType
• Idempotent: If variable already exists, returns success.
• Sets CPF BlueprintVisible and CPF Edit flags.
• For object references, resolves class name via FindObject<UClass .
rename variable
Renames an existing variable.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
old name
string
Current variable name
new name
string
New variable name
Uses FBlueprintEditorUtils::RenameMemberVariable. Validates the old variable exists.
set variable defaults
Sets variable default value and flags.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
variable name
string
Variable name
default value
string
New default value
expose on spawn
boolean
Set CPF ExposeOnSpawn flag
read only
boolean
Set CPF BlueprintReadOnly flag
add function
Creates a new function graph in a Blueprint.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
function name
string
Function name
is pure
boolean
Pure function (no exec pins)
access specifier
string
"Public", "Protected", or "Private"
category
string
Function category
• Creates a new UEdGraph for the function.
• Tracks the entry node and returns its ID with pin information.
• The AI should connect the entry node's "then" output to the first functional node.
compile blueprint
Compiles a Blueprint and reports errors.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
• Uses FKismetEditorUtilities::CompileBlueprint.
• Returns up to 10 compilation errors with node/pin details.
• Never deduplicated — always re executed even if called with same parameters.
get blueprint info
Returns detailed information about a Blueprint.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
include nodes
boolean
Include node details (default: false)
Returns:
• Blueprint name, path, parent class
• All variables (name, type)
• All graphs (name, type)
• All functions (name)
• If include nodes=true: First 20 nodes per graph with pins, connections (using tracked IDs like N1.pinName), position, and comments
delete node
Deletes a node from a Blueprint graph.
Parameter
Type
Required
Description
node id
string
Tracked node ID (e.g., "N5")
Breaks all pin links before removing the node from its graph.
set pin value
Sets the default value of a node's input pin.
Parameter
Type
Required
Description
node id
string
Tracked node ID
pin name
string
Pin name
value
string
Value to set
Uses the same fuzzy pin matching as connect nodes. Applies value via K2Schema TrySetDefaultValue.
list assets
Lists assets in the project.
Parameter
Type
Required
Description
path
string
Content path filter (default: "/Game")
type
string
Asset type filter (e.g., "Blueprint")
name filter
string
Name substring filter
Returns up to 50 matching assets with name, path, and type.
get project structure
Returns folder tree and asset type counts from AssetRegistry.
Parameter
Type
Required
Description
path
string
Root path (default: "/Game")
open blueprint
Opens a Blueprint in the Blueprint Editor.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
Uses UAssetEditorSubsystem to open the asset editor.
add component
Adds a component to a Blueprint's Simple Construction Script (SCS).
Parameter
Type
Required
Description
blueprint
string
Blueprint name
component type
string
Component class name (e.g., "StaticMesh", "SphereCollision")
component name
string
Name for the component
parent component
string
Parent component name for attachment
is root
boolean
Replace the default scene root
• Class resolution: Automatically appends "Component" suffix if needed (e.g., "StaticMesh" → "StaticMeshComponent")
• Idempotent: Returns success if component already exists
• When is root=true, replaces the existing scene root
set component property
Sets a property on a Blueprint component. 415 lines — extensive property handling.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
component name
string
Component name
property name
string
Property name
value
string
Property value
Special collision property handlers:
Property
Values
CollisionProfileName
NoCollision, OverlapAll, BlockAll, Projectile, etc.
CollisionEnabled
NoCollision, QueryOnly, PhysicsOnly, QueryAndPhysics
bSimulatePhysics (SimulatePhysics)
true/false
bGenerateOverlapEvents (OverlapEvents)
true/false
CollisionResponseToAllChannels
Block, Overlap, Ignore
bNotifyRigidBodyCollision (NotifyRigidBody)
true/false
For non special properties: Uses UE reflection ( FindFProperty ) and ImportText for struct values (vectors, colors, etc.).
remove component
Removes a component from a Blueprint.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
component name
string
Component to remove
Uses SCS RemoveNode(). On failure, lists all available component names.
get class functions
Lists callable functions for a given class.
Parameter
Type
Required
Description
class name
string
UClass name (e.g., "Actor", "CharacterMovementComponent")
name filter
string
Filter by name substring
include inherited
boolean
Include inherited functions (default: false)
max results
integer
Maximum results (default: 30)
Uses TFieldIterator<UFunction . Filters to BlueprintCallable and Pure functions. Returns function name, return type, and parameter list.
save memory
Saves a persistent memory entry.
Parameter
Type
Required
Description
content
string
The fact/preference to remember
Returns the assigned memory ID (e.g., "M1"). Saved to memories.json.
remove memory
Removes a persistent memory entry.
Parameter
Type
Required
Description
memory id
string
Memory ID to remove (e.g., "M3")
get open blueprint
Gets currently open Blueprints in the editor.
No parameters required.
Returns a list of all edited assets via UAssetEditorSubsystem GetAllEditedAssets() with name, path, and parent class.
get selected nodes
Gets currently selected nodes in the active Blueprint Editor.
No parameters required.
Uses FBlueprintEditor GetSelectedNodes(). For each selected node:
• Tracks the node and returns its ID
• Serializes all pins (name, type, direction, default value, connections)
• Includes position and comment info
set node comment
Sets or updates a comment on a node.
Parameter
Type
Required
Description
node id
string
Tracked node ID
comment
string
Comment text
Sets NodeComment string and enables bCommentBubblePinned and bCommentBubbleVisible.
add comment box
Adds a comment box (grouping box) to a Blueprint graph.
Parameter
Type
Required
Description
blueprint
string
Blueprint name
comment
string
Comment text
node ids
array
Array of node IDs to enclose
x
integer
Explicit X position
y
integer
Explicit Y position
width
integer
Explicit width
height
integer
Explicit height
color
string
Color name (red, green, blue, yellow, etc.) or R,G,B,A
font size
integer
Font size (default: 18)
group movement
boolean
Move enclosed nodes with the comment box (default: true)
When node ids is provided: Auto calculates position and size to enclose all specified nodes with 100px padding. When explicit position/size is provided, uses those values instead.
Creates a UEdGraphNode Comment and configures its visual properties.
9. User Interface (Slate Chat Panel)
File: Public/UI/SBlueprintAIChat.h / Private/UI/SBlueprintAIChat.cpp
The SBlueprintAIChat widget is a Slate compound widget providing the chat interface:
Layout
┌──────────────────────────────────────────────────────────────┐ │ Provider: [Claude] Model: [claude sonnet 4] [↻] [Clear] [Stop] [Save] [Settings] │ ├──────────────────────────────────────────────────────────────┤ │ [System] Blueprint AI Assistant ready... │ │ [User] Create a BP Enemy actor with health variable │ │ [AI] I'll create that Blueprint now. │ │ [add node] OK: Created EventGraph node 'ReceiveBeginPlay' │ │ [connect nodes] OK: Connected N1.then → N2.execute │ ├──────────────────────────────────────────────────────────────┤ │ Describe what Blueprint to create or modify... [Send] │ ├──────────────────────────────────────────────────────────────┤ │ Ready | Context: 12.5K / 200K tokens (6.3%) │ │ AI can make mistakes. Always verify results. │ └──────────────────────────────────────────────────────────────┘
Features
Message Display
Color coded by sender:
• User — Blue (0.3, 0.7, 1.0)
• AI — Green (0.3, 1.0, 0.5)
• Error — Red (1.0, 0.3, 0.3)
• System — Gray (0.7, 0.7, 0.7)
• Tool actions — Yellow (1.0, 0.8, 0.2) with italic font
Read only SEditableText for each message (allows copy/paste). Auto scrolls to bottom on new messages.
Provider Dropdown
Four options: Claude, OpenAI, OpenRouter, Custom. Changing provider:
• Updates ActiveProvider in settings
• Saves config
• Refreshes the AI provider
• Updates model display
Model Dropdown
• Populated by fetching models from the provider API
• Shows pricing info: "model id ($2.50/$10.00)" or "[FREE]"
• Free models highlighted in green
• Refresh button (↻) to re fetch model list
Selecting a model:
• Updates the model setting for the active provider
• Passes context window size to ConversationManager
• Refreshes the provider
Input Area
• Multi line editable text box (40 120px height)
• Enter sends the message
• Shift+Enter inserts a newline
• Send button disabled while AI is busy
Control Buttons
• Clear — Empties message list and clears conversation history
• Stop — Cancels the current AI generation
• Save Chat — Exports entire chat log as timestamped.txt file to Desktop
• Settings — Opens Project Settings → Plugins → Blueprint AI Assistant
Status Bar
• Shows "AI is thinking..." when busy, "Ready" otherwise
• Displays context usage: 12.5K / 200K tokens (6.3%)
• Color coded: Green (<50%), Yellow (50 80%), Red ( 80%)
Disclaimer
Fixed footer text: "AI can make mistakes. Always verify results and use the latest models."
ChatMessageEntry Structure
struct FChatMessageEntry { FString Sender; // "User", "AI", "System", "Error", or tool name FString Message; // Message content FDateTime Timestamp; // When the message was created bool bIsToolAction; // If true, renders with italic font };
10. Logging System
File: Public/Logging/BlueprintAILogger.h / Private/Logging/BlueprintAILogger.cpp
Overview
A singleton file logger that creates a comprehensive debug log on the user's Desktop for each editor session.
File Location
• Primary: C:\Users\{Name}\Desktop\BlueprintAI FullLog {timestamp}.txt
• Fallback (if Desktop doesn't exist): {ProjectDir}/Saved/Logs/BlueprintAI FullLog {timestamp}.txt
What Gets Logged
Category Tag
Content
INIT
Session start, engine version, project path, provider settings
SHUTDOWN
Session end
USER
User chat messages
AI
End of turn markers
AI RAW
Response metadata (char count, tool call count)
AI TEXT
Full AI text responses
AI JSON
Raw JSON responses (first 5000 chars)
HTTP REQ
Outgoing HTTP request URL and size
HTTP REQ BODY
Full request payload (first 10000 chars)
HTTP RESP
Response status code and size
HTTP RESP BODY
Full response body (first 10000 chars)
HTTP ERR
HTTP connection failures
HTTP RETRY
Retry attempts
HTTP OUT
Message breakdown before sending
TOOL
Tool call detection and counting
TOOL EXEC
Individual tool execution with parameters
TOOL RESULT
Tool execution results
TOOL DEDUP
Duplicate call detection
CONTEXT
Token usage and context window tracking
TRUNCATE
Message/result truncation events
AGENT
Agent loop start with max iterations
NUDGE
Narration nudge events
WIRING NUDGE
Wiring deferral nudge events
WORKFLOW
Wiring deferral events
ERROR
General errors
ERROR LOOP
Error loop detection
SUCCESS LOOP
Success loop (identical batch repetition) detection
SUMMARIZE
Conversation summarization
WARN
Warnings (stale responses, hard safety cap)
SYSTEM
System events (stop generation, etc.)
Implementation Details
• Thread safe: Uses FCriticalSection for write locking
• Flush on write: Flushes after every write to prevent data loss on crash
• UTF 8 encoding: Converts from TCHAR to UTF 8 for file writing
• Configurable: Toggle via bEnableFileLogging setting
• Format: [HH:MM:SS.mmm] [CATEGORY] message
• Logf(): Printf style convenience (4096 char buffer)
Session Header
Each log starts with:
• Plugin name and session timestamp
• Engine version and project path
• Active provider name
• Temperature, MaxTokens, MaxIterations
• MaxMessageChars, MaxTotalPayloadChars
• HttpRequestTimeoutSeconds
11. Memory System
File: Public/Memory/BlueprintAIMemory.h / Private/Memory/BlueprintAIMemory.cpp
Overview
The memory system allows the AI to persist facts, preferences, and conventions across editor sessions. This enables the AI to "remember" things like:
• User's preferred naming conventions
• Project architecture decisions
• Common patterns the user likes to use
Storage
File: {ProjectDir}/Saved/BlueprintAI/memories.json
Format:
{ "memories": [ { "id": "M1", "content": "User prefers Hungarian notation for variables", "created at": "2026 02 27T14:30:00Z" }, { "id": "M2", "content": "Project uses BP prefix for all Blueprint actors", "created at": "2026 02 27T15:00:00Z" } ] }
API
Method
Description
FBlueprintAIMemory::Get()
Singleton access (auto loads on first call)
AddMemory(Content)
Creates entry with next available ID (M1, M2, ...), saves to disk
RemoveMemory(Id)
Removes by ID, saves to disk
GetMemories()
Returns all entries
BuildMemoryPromptSection()
Generates system prompt section: [M1] fact one\n[M2] fact two\n...
Load()
Parses memories.json from disk
Save()
Serializes to JSON and writes to disk (creates directory if needed)
ID Management
• IDs are sequential: M1, M2, M3, ...
• On load, scans existing IDs to find the highest number and sets NextMemoryId accordingly (prevents collisions)
Integration
• System Prompt: Memory section is always included between behavioral rules and tool documentation
• AI Tools: save memory and remove memory tools let the AI manage memories during conversation
• The section header says "=== AI MEMORY (persistent across sessions) ===" with instructions to use save/remove memory
12. Node & Blueprint Tracking
The tracking system is critical for the agentic loop — it provides a stable, short reference system for nodes created across multiple AI iterations.
Node Tracking
Every node created by add node, discovered by get blueprint info, or selected by get selected nodes is assigned a short ID: N1, N2, N3, etc.
• Storage: TMap<FString, TWeakObjectPtr<UEdGraphNode in FActionRegistry
• Deduplication: If the same node pointer is tracked again, returns the existing ID
• Validation: FindTrackedNode() checks if the weak pointer is still valid
• Display: GetTrackedNodesInfo() groups nodes by owning Blueprint:
BP Enemy: N1=ReceiveBeginPlay, N2=PrintString, N3=K2 SetActorLocation BP Player: N4=ReceiveBeginPlay, N5=InputAction
Blueprint Tracking
Created Blueprints are tracked as TArray<TPair<FString, FString (Name → Path):
• Used in the system prompt's Working State section
• Prevents the AI from re creating existing Blueprints
• Duplicate checked by name (case insensitive)
Session Reset
ClearSessionState() resets:
• Node counter back to N1
• All tracked nodes cleared
• All tracked Blueprints cleared
• Called when user clicks "Clear" in the chat
13. File Structure Reference
BlueprintAIAssistant/ ├── BlueprintAIAssistant.uplugin Plugin manifest ├── Config/ │ └── FilterPlugin.ini Package filter (empty) ├── Binaries/Win64/ │ ├── UnrealEditor BlueprintAIAssistant.dll Compiled module │ ├── UnrealEditor BlueprintAIAssistant.pdb Debug symbols │ └── UnrealEditor.modules Module metadata └── Source/BlueprintAIAssistant/ ├── BlueprintAIAssistant.Build.cs Module build rules ├── Public/ │ ├── BlueprintAIAssistantModule.h Module interface │ ├── Actions/ │ │ ├── IBlueprintAction.h Action interface + result struct │ │ ├── ActionRegistry.h Registry + node/BP tracking │ │ ├── CreateBlueprintAction.h │ │ ├── AddNodeAction.h 20+ node types │ │ ├── ConnectNodesAction.h Fuzzy pin matching │ │ ├── DisconnectNodesAction.h │ │ ├── AddVariableAction.h 15+ type resolution │ │ ├── RenameVariableAction.h │ │ ├── SetVariableDefaultsAction.h │ │ ├── AddFunctionAction.h │ │ ├── CompileBlueprintAction.h │ │ ├── GetBlueprintInfoAction.h │ │ ├── DeleteNodeAction.h │ │ ├── SetPinValueAction.h │ │ ├── ListAssetsAction.h │ │ ├── GetProjectStructureAction.h │ │ ├── OpenBlueprintAction.h │ │ ├── AddComponentAction.h │ │ ├── SetComponentPropertyAction.h Collision property handlers │ │ ├── RemoveComponentAction.h │ │ ├── GetClassFunctionsAction.h │ │ ├── SaveMemoryAction.h │ │ ├── RemoveMemoryAction.h │ │ ├── GetOpenBlueprintAction.h │ │ ├── GetSelectedNodesAction.h │ │ ├── SetNodeCommentAction.h │ │ └── AddCommentBoxAction.h │ ├── AI/ │ │ ├── IAIProvider.h Provider interface + data types │ │ ├── AIProviderBase.h HTTP base class │ │ ├── ClaudeProvider.h │ │ ├── OpenAIProvider.h Chat Completions + Responses API │ │ ├── OpenRouterProvider.h │ │ ├── CustomProvider.h │ │ └── ConversationManager.h Agentic loop │ ├── Logging/ │ │ └── BlueprintAILogger.h File logger │ ├── Memory/ │ │ └── BlueprintAIMemory.h Persistent memory │ ├── Settings/ │ │ └── BlueprintAISettings.h UDeveloperSettings │ └── UI/ │ └── SBlueprintAIChat.h Slate chat widget └── Private/ ├── BlueprintAIAssistantModule.cpp Module lifecycle ├── Actions/ (80+ .cpp files) Action implementations (tool set evolves frequently) ├── AI/ (6 .cpp files) Provider + conversation implementations ├── Logging/BlueprintAILogger.cpp ├── Memory/BlueprintAIMemory.cpp ├── Settings/BlueprintAISettings.cpp └── UI/SBlueprintAIChat.cpp
File counts change over time as new tools are added; inspect this directory for exact current totals.
14. Module Dependencies
Public Dependencies
• Core
• CoreUObject
• Engine
• InputCore
Private Dependencies
Category
Modules
Settings
DeveloperSettings
Editor
UnrealEd, BlueprintGraph, KismetCompiler, Kismet, GraphEditor, AssetTools, AssetRegistry, AIModule, BehaviorTreeEditor, LevelSequence, MovieScene, MovieSceneTracks, IKRig, IKRigEditor, EnhancedInput, InputBlueprintNodes, UMG, UMGEditor, NavigationSystem, BSPUtils, ProceduralMeshComponent
HTTP & JSON
HTTP, Json, JsonUtilities
UI
Slate, SlateCore, EditorFramework, ToolMenus, WorkspaceMenuStructure, Projects, EditorWidgets, PropertyEditor
Required Engine Plugins (must be enabled)
• EnhancedInput
• IKRig
• LevelSequenceEditor
• ProceduralMeshComponent
These are declared in BlueprintAIAssistant.uplugin. If your project disables them manually, related tool families will fail at runtime until re enabled.
15. Workflow Reference for AI
The system prompt enforces a strict workflow to ensure reliable Blueprint creation:
Step 1: Create Nodes
• Issue all add node calls in one response
• Do NOT mix with connect nodes or set pin value
• If mixed, wiring calls are automatically deferred (not executed)
Step 2: Read Node IDs
• Every add node returns a tracked ID (N1, N2, ...)
• The AI must use these EXACT IDs — never predict or assume IDs
Step 3: Wire Nodes
• In the NEXT response, issue all connect nodes and set pin value calls
• Use the IDs from Step 2
• This step is critical — nodes remain unconnected if skipped
Step 4: Compile
• Call compile blueprint to check for errors
• Fix any errors reported
Pin Name Conventions
Situation
Pin Names
Exec output
then
Exec input
execute
Branch true
then
Branch false
else
Branch condition
Condition
Variable getter output
Variable name (e.g., Health )
Variable setter input
Variable name
Sequence outputs
then 0, then 1, ...
ForLoop
FirstIndex, LastIndex, LoopBody, Completed, Index
ForEachLoop
Array, LoopBody, Completed, ArrayElement, ArrayIndex
SpawnActor
SpawnTransform, Class
IsValid
ReturnValue (bool), then (exec)
Events
ReceiveBeginPlay, ReceiveTick, ReceiveActorBeginOverlap
Pure nodes
NO exec pins (math, getters, IsValid, etc.)
16. Troubleshooting
Common Issues
Issue
Cause
Solution
"No AI provider configured"
Missing API key
Set your API key in Project Settings → Plugins → Blueprint AI Assistant
HTTP 401
Invalid API key
Verify your API key is correct and has the right permissions
HTTP 400
Incompatible model/endpoint
Check the endpoint URL matches your model (Chat Completions vs Responses API)
"HTTP connection failed"
Network issues or timeout
Increase HttpRequestTimeoutSeconds; check firewall/proxy
Tools fail with module/plugin errors
Required UE plugins disabled
Enable EnhancedInput, IKRig, LevelSequenceEditor, and ProceduralMeshComponent in Edit → Plugins, then restart the editor.
AI describes actions without doing them
Model doesn't follow <tool call format well
Use a more capable model (Claude Sonnet 4, GPT 4o, etc.)
"Reached maximum tool iterations"
Complex task exceeded iteration limit
Increase MaxToolIterations in settings
Nodes remain unconnected
AI mixed add node with connect nodes
The plugin auto defers and nudges — usually self corrects. If not, manually instruct the AI to connect nodes.
Context limit errors
Long conversation filling up context
Clear conversation, or increase MaxTotalPayloadChars. The plugin auto summarizes at 75% usage.
Compilation errors after AI work
AI connected incompatible pins
Instruct the AI to call get blueprint info with include nodes=true and fix connections
Debug Log
Enable bEnableFileLogging (on by default) to get a comprehensive log file on your Desktop. This log captures:
• Every HTTP request and response
• Every tool call and its result
• Token usage and context tracking
• Error loop detection events
• The full system prompt sent each iteration
The log file name follows the pattern: BlueprintAI FullLog YYYYMMDD HHMMSS.txt
Performance Tips
• Use a capable model: Claude Sonnet 4 and GPT 4o produce the best results. Free/small models often fail to follow the <tool call format.
• Keep MaxToolIterations reasonable: Default of 200 is generous. For simple tasks, 50 is usually enough.
• Adjust payload limits for bridges: If using CopilotAPI or similar bridges, lower MaxTotalPayloadChars and MaxMessageChars to prevent oversized payloads.
• Use memory: Save frequently used conventions with save memory so the AI doesn't need repeated instructions.
Discord Support