Files
mcp-ue/.claude/skills/ue-api/SKILL.md
Pierre-Marie Charavel 93ca33c36a Add UnrealDocGenerator tool and UE API skill
- ue_parser.py: position-based UE C++ header parser
- ue_markdown.py: compact agent-optimised Markdown renderer
- generate.py: two-pass CLI (parse-all → type index → render-all)
- samples/: representative UE headers (GeomUtils, AIController, GameplayTagsManager)
- .claude/skills/ue-api/: Claude Code skill for querying UE docs + source headers
- CLAUDE.md: architecture notes, usage, critical gotchas

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 06:55:05 -05:00

4.2 KiB

name, description
name description
ue-api Use this skill when the user asks anything about Unreal Engine C++ APIs, class hierarchies, system flows, or how engine subsystems work together. Trigger phrases include: "how does X work in UE", "what is the flow for", "which class handles", "what virtual functions", "UE API for", "Unreal Engine architecture", and any question that names UE types like ACharacter, UActorComponent, APlayerController, UBehaviorTreeComponent, APawn, etc. Always use this skill for Unreal Engine questions — don't rely on training data alone when local documentation is available.

UE API Skill

Answer questions about Unreal Engine C++ APIs and system flows using the local documentation corpus as the fast primary source, then source headers for depth.

Configuration

Two environment variables control where to look:

Variable Purpose Example
UE_DOCS_PATH Root of the generated documentation /home/user/ue-docs
UE_ENGINE_ROOT UE engine source root (for header fallback) /home/user/UnrealEngine

Resolve them at the start of every query:

echo "$UE_DOCS_PATH"
echo "$UE_ENGINE_ROOT"

If UE_DOCS_PATH is unset, ask the user where their generated docs are before proceeding. If UE_ENGINE_ROOT is unset, only ask when a question actually requires source headers — don't interrupt doc-only queries.

The type index is always at $UE_DOCS_PATH/type-index.txt.

Step 1 — Identify types, resolve paths

Extract UE type names from the question (e.g. APlayerController, APawn, UBehaviorTreeComponent). Resolve all of them in a single grep:

grep "^APlayerController:\|^APawn:\|^ACharacter:" "$UE_DOCS_PATH/type-index.txt"

Paths in the index are relative to $UE_DOCS_PATH — prepend it when reading:

# index returns: AController: Engine/Classes/GameFramework/Controller.md
# read as:
Read "$UE_DOCS_PATH/Engine/Classes/GameFramework/Controller.md"

The .md files are compact by design — only items with C++ doc comments, no deprecated entries, enums collapsed when undescribed.

Step 2 — Follow the trail

Inline links in *Inherits*: lines and function signatures point to related types. Follow them when the question spans multiple classes. A second grep on type-index.txt is always cheaper than guessing paths.

Step 3 — Escalate to source headers when docs aren't enough

The docs only surface items with C++ doc comments. Go to .h files when:

  • The exact call order or implementation logic isn't described in any comment
  • A function or member is absent from .md files (no doc comment)
  • The question involves macros: UCLASS, UPROPERTY, UFUNCTION, DECLARE_DELEGATE_*, GENERATED_BODY, etc.
  • Private or protected members are relevant to the answer
  • The user asks about edge-case behaviour ("what happens when X is null?")

Search under $UE_ENGINE_ROOT/Engine/Source/ — e.g.:

Glob("**/*Controller*.h", path="$UE_ENGINE_ROOT/Engine/Source/Runtime/Engine")
Grep("void Possess", path="$UE_ENGINE_ROOT/Engine/Source")

Output format

Lead with the direct answer or a concise flow description. For multi-step flows use an ASCII sequence or numbered list. For single-class API questions, a brief prose answer with the key function signatures is enough.

Cite every substantive claim — (Controller.md) for docs, (Controller.h:142) for source. Mark source-derived facts as implementation detail since they can change across engine versions; doc-derived facts reflect the stable API contract.

Examples

"How does APlayerController possess APawn?" → check $UE_DOCS_PATH → grep type-index for AController, APawn, APlayerController, ACharacter → read the four .md files → ASCII diagram

"What virtual functions does ACharacter expose for movement?" → grep for ACharacter, UCharacterMovementComponent → read docs → list virtuals

"What does UFUNCTION(BlueprintCallable) expand to?" → docs won't help (macro) → search $UE_ENGINE_ROOT for UFUNCTION definition

"How does the behavior tree pick which task to run?" → grep for UBehaviorTreeComponent, UBTCompositeNode, UBTDecorator → read docs → if execution order is still unclear, escalate to BehaviorTreeComponent.h