VibeUE is an extension on Unreal Engine's native MCP endpoint (http://localhost:8000/mcp).
There is no separate VibeUE server, no API key, and no in-editor chat — VibeUE simply registers
extra Python services (unreal.<Service>) and skill packs on top of the engine's own toolsets.
Wait for VibeUE readiness after launch
BuildAndLaunchGame.ps1 / .sh print Editor-PID=<pid> — treat that as the process identity. Check
once, then watch the filesystem for <ProjectDir>/Saved/VibeUE/Signals/editor-<pid>-true.json before
using MCP. Wait at most 180 seconds, do not poll MCP while waiting, and fail if that Editor process
exits or the timeout expires. Ignore signal files for other or dead PIDs. The signal only means
RegisterToolsets() reached its end; Python, World, and level readiness remain separate checks.
The file is JSON, written atomically, so it is complete the moment it appears:
{"signal":"toolsets-registered","pid":21044,"createdUtc":"2026-08-03T17:04:11.921Z",
"sessionStartUtc":"2026-08-03T17:03:22.108Z","pluginVersion":"3.0"}
Process IDs get recycled. The launch scripts clear a matching stale signal right after starting the
Editor, but if you launch it some other way, verify sessionStartUtc is later than the moment you
started the process before trusting the signal.
Skill packs (this file and its siblings) are loaded through the engine's AgentSkillToolset.
Each skill carries exact API patterns and gotchas; load the relevant skill before writing any
code in a domain, or you will guess wrong property names and spiral into discovery loops.
Discover and load skills
Skills are discovered and read through the engine AgentSkillToolset, invoked with call_tool:
# List every available skill (full path → description)
call_tool(toolset_name="ToolsetRegistry.AgentSkillToolset", tool_name="ListSkills", arguments={})
# Read one or more skills — GetSkills takes the FULL paths that ListSkills returns
call_tool(toolset_name="ToolsetRegistry.AgentSkillToolset", tool_name="GetSkills",
arguments={"skillPaths": ["/VibeUE/Python/init_unreal_PY.VibeUE_pcg",
"/VibeUE/Python/init_unreal_PY.VibeUE_materials"]})
Naming rule (verified live): skill pack <slug> registers as VibeUE_<slug> (hyphens →
underscores) and sub-doc <slug>/<file>.md as VibeUE_<slug>__<file>, all under the path prefix
/VibeUE/Python/init_unreal_PY.. Short names such as "pcg" or "state-trees/api-reference"
return an empty result with no error — always pass full paths, taking them from ListSkills
when unsure. Run describe_toolset on ToolsetRegistry.AgentSkillToolset if the call signature
differs in your build. The old vibeue-skills-manager tool no longer exists.
Route by functional area. Find the area whose scope matches the task, then GetSkills the
listed skill(s) — full paths per the naming rule above. The NOT for column is the disambiguator —
when two areas seem to fit, the one that excludes your task is telling you where to go instead.
| Functional area |
Use for — NOT for… |
Load skill(s) |
| Scene & actors |
place / move / arrange / organize / tag actors in a level — NOT gameplay logic (→ Blueprints), NOT world-scale terrain/foliage (→ Environment), NOT attaching a Niagara/particle component (→ VFX) |
level-actors |
| Blueprints & gameplay logic |
author Blueprint classes & graphs, Enhanced Input, gameplay tags — NOT AI behavior (→ AI), NOT AnimBP graphs (→ Animation), NOT C++/source (coding-agent handoff) |
blueprints, blueprint-graphs, enhanced-input, gameplay-tags |
| AI |
author StateTree logic — states, tasks, transitions, event payloads, delegate bindings — NOT character body animation (→ Animation), NOT generic actor placement (→ Scene) |
state-trees |
| Animation & rigging |
AnimBP state machines, AnimSequence keyframes, montages & AnimNotify wiring, bone/skeleton editing & retarget — NOT cinematic timelines (Epic Sequencer), NOT AI movement (→ AI), NOT authoring/adding sound assets — even a character's footstep sounds (→ Audio) |
animation-blueprint, animsequence, animation-editing, animation-montage, skeleton |
| Materials & shading |
materials, instances, graph nodes, Custom HLSL — NOT Niagara particle materials (→ VFX), NOT landscape auto-materials (→ Environment) |
materials |
| VFX (Niagara) |
particle systems, emitters, scratch-pad HLSL, attaching/placing a Niagara component on an actor — NOT surface materials (→ Materials) |
niagara-systems, niagara-emitters |
| UI (UMG) |
widget blueprints, layout, fonts/brushes, MVVM — NOT the gameplay behind the UI (→ Blueprints) |
umg-widgets |
| Environment (world-scale) |
landscape sculpt/paint, landscape materials, foliage, PCG, map blockout, real-world terrain — NOT single-actor placement (→ Scene), NOT sound/audio (→ Audio) |
landscape, landscape-materials, landscape-auto-material, foliage, pcg, map-blockout, terrain-data |
| Audio |
MetaSound and SoundCue authoring — creating the sound asset itself: ambient, a character's footstep/foley, UI sounds — NOT triggering sounds from gameplay logic (→ Blueprints), NOT wiring an existing sound to anim-notify foot-plant frames (→ Animation) |
metasounds, sound-cues |
| Assets, data & project |
import/export assets, UV mapping, enums/structs, engine & project settings — NOT actors placed in a level (→ Scene) |
asset-management, uv-mapping, enum-struct, engine-settings, project-settings |
| Diagnostics, testing & run |
start/stop/query PIE, profile (CPU-vs-GPU / Insights), uncap frame rate — NOT fixing the logic a bug points to (→ its authoring area) |
pie-testing, profiling, frame-rate |
| Camera & viewport |
viewport camera, view mode, FOV, exposure, layout — NOT material look (→ Materials), NOT placing/editing light actors (→ Scene) |
viewport |
| Cinematics · Physics |
Sequencer cinematics and Physics assets (ragdoll/skeletal) are Epic-native — VibeUE adds no skill here — NOT enabling simulate-physics on a level actor (→ Scene) |
(none — use list_toolsets: animation_toolset.* / PhysicsToolsets) |
A loaded skill gives you:
- workflows, gotchas, and property formats for the domain
vibeue_classes / unreal_classes — class names to feed into discover_python_class for live method signatures
- sub-doc references (
<skill>/<section>) you can fetch via GetSkills for deeper detail
Always call discover_python_class on the classes in vibeue_classes before writing code — never
guess method names from the skill content alone. Batch the discovery into ONE call instead of
one call per class:
# ONE call covers all classes and all topics:
discover_python_class(
class_name="unreal.MaterialService, unreal.WidgetService, unreal.MaterialNodeService",
method_filter="create|delete|compile|property|color")
# WRONG — three separate calls for three classes wastes round-trips and repeats boilerplate
class_name accepts a comma-separated list (response gains a classes array, one entry per class);
method_filter ORs keywords with |.
How work gets done — execute_python_code is the workhorse
VibeUE services are plain Python on the editor's unreal module. Run everything through
execute_python_code:
import unreal
widgets = unreal.WidgetService.list_widget_blueprints()
unreal.StateTreeService.create_state_tree("/Game/AI/MyBehavior")
You get the full unreal.* API plus every unreal.<Service> VibeUE adds. Reserve call_tool for
engine toolsets and skills (e.g. AgentSkillToolset, EditorToolset.EditorAppToolset,
LogsToolset, GameplayTagsToolset, AssetTools).
Tools — what each is for
| Tool |
Use it for |
execute_python_code |
Run unreal.* Python in the editor — the workhorse for every VibeUE service |
call_tool |
Invoke engine toolsets and skills (skills, PIE control, logs, assets, gameplay tags) |
describe_toolset / list_toolsets |
Discover engine toolsets and their actions/args |
discover_python_class / discover_python_function / discover_python_module |
Get live signatures before writing code |
list_python_subsystems |
Enumerate editor subsystems for unreal.get_editor_subsystem(...) |
terrain_data |
Real-world heightmaps + water splines (see terrain-data skill) |
deep_research |
Web research / page fetch / geocoding |
Engine toolsets replace the old VibeUE tools
Several capabilities that used to be VibeUE-specific MCP tools are now the engine's native toolsets,
called via call_tool (run describe_toolset for action names/params):
| Need |
Engine toolset (via call_tool) |
| Start / stop / query PIE |
EditorToolset.EditorAppToolset → StartPIE / StopPIE / IsPIERunning |
| Capture a viewport screenshot |
EditorToolset.EditorAppToolset → CaptureViewport |
| List / read / filter / tail UE logs |
LogsToolset |
| Search / open / save / move / import assets |
AssetTools |
| Single-tag gameplay-tag CRUD |
GameplayTagsToolset (see gameplay-tags skill) |
Performance/Insights tracing is the one net-new VibeUE service — unreal.PerformanceService.* (see
the profiling skill) — because Unreal 5.8 ships no performance toolset.
1---2name: vibeue3description: Unreal Engine 5 development using the VibeUE Python API. Use when working in Unreal Engine — blueprints, state trees, materials, actors, landscapes, animation, niagara, widgets, sound, foliage, gameplay tags, enhanced input, skeletons, PCG (procedural content generation), and more. VibeUE is an extension of Unreal's native MCP endpoint.4---56VibeUE is an **extension on Unreal Engine's native MCP endpoint** (`http://localhost:8000/mcp`).7There is no separate VibeUE server, no API key, and no in-editor chat — VibeUE simply registers8extra Python services (`unreal.<Service>`) and skill packs on top of the engine's own toolsets.910## Wait for VibeUE readiness after launch1112`BuildAndLaunchGame.ps1` / `.sh` print `Editor-PID=<pid>` — treat that as the process identity. Check13once, then watch the filesystem for `<ProjectDir>/Saved/VibeUE/Signals/editor-<pid>-true.json` before14using MCP. Wait at most 180 seconds, do not poll MCP while waiting, and fail if that Editor process15exits or the timeout expires. Ignore signal files for other or dead PIDs. The signal only means16`RegisterToolsets()` reached its end; Python, World, and level readiness remain separate checks.1718The file is JSON, written atomically, so it is complete the moment it appears:1920```json21{"signal":"toolsets-registered","pid":21044,"createdUtc":"2026-08-03T17:04:11.921Z",22 "sessionStartUtc":"2026-08-03T17:03:22.108Z","pluginVersion":"3.0"}23```2425Process IDs get recycled. The launch scripts clear a matching stale signal right after starting the26Editor, but if you launch it some other way, verify `sessionStartUtc` is later than the moment you27started the process before trusting the signal.2829Skill packs (this file and its siblings) are loaded through the engine's `AgentSkillToolset`.30Each skill carries exact API patterns and gotchas; **load the relevant skill before writing any31code** in a domain, or you will guess wrong property names and spiral into discovery loops.3233## Discover and load skills3435Skills are discovered and read through the engine `AgentSkillToolset`, invoked with `call_tool`:3637```38# List every available skill (full path → description)39call_tool(toolset_name="ToolsetRegistry.AgentSkillToolset", tool_name="ListSkills", arguments={})4041# Read one or more skills — GetSkills takes the FULL paths that ListSkills returns42call_tool(toolset_name="ToolsetRegistry.AgentSkillToolset", tool_name="GetSkills",43 arguments={"skillPaths": ["/VibeUE/Python/init_unreal_PY.VibeUE_pcg",44 "/VibeUE/Python/init_unreal_PY.VibeUE_materials"]})45```4647> **Naming rule (verified live):** skill pack `<slug>` registers as `VibeUE_<slug>` (hyphens →48> underscores) and sub-doc `<slug>/<file>.md` as `VibeUE_<slug>__<file>`, all under the path prefix49> `/VibeUE/Python/init_unreal_PY.`. Short names such as `"pcg"` or `"state-trees/api-reference"`50> return an **empty result with no error** — always pass full paths, taking them from `ListSkills`51> when unsure. Run `describe_toolset` on `ToolsetRegistry.AgentSkillToolset` if the call signature52> differs in your build. The old `vibeue-skills-manager` tool no longer exists.5354**Route by functional area.** Find the area whose scope matches the task, then `GetSkills` the55listed skill(s) — full paths per the naming rule above. The *NOT for* column is the disambiguator —56when two areas seem to fit, the one that *excludes* your task is telling you where to go instead.5758| Functional area | Use for — **NOT** for… | Load skill(s) |59|---|---|---|60| **Scene & actors** | place / move / arrange / organize / tag actors in a level — NOT gameplay logic (→ Blueprints), NOT world-scale terrain/foliage (→ Environment), NOT attaching a Niagara/particle component (→ VFX) | `level-actors` |61| **Blueprints & gameplay logic** | author Blueprint classes & graphs, Enhanced Input, gameplay tags — NOT AI behavior (→ AI), NOT AnimBP graphs (→ Animation), NOT C++/source (coding-agent handoff) | `blueprints`, `blueprint-graphs`, `enhanced-input`, `gameplay-tags` |62| **AI** | author StateTree logic — states, tasks, transitions, event payloads, delegate bindings — NOT character body animation (→ Animation), NOT generic actor placement (→ Scene) | `state-trees` |63| **Animation & rigging** | AnimBP state machines, AnimSequence keyframes, montages & AnimNotify wiring, bone/skeleton editing & retarget — NOT cinematic timelines (Epic Sequencer), NOT AI movement (→ AI), NOT authoring/adding sound assets — even a character's footstep sounds (→ Audio) | `animation-blueprint`, `animsequence`, `animation-editing`, `animation-montage`, `skeleton` |64| **Materials & shading** | materials, instances, graph nodes, Custom HLSL — NOT Niagara particle materials (→ VFX), NOT landscape auto-materials (→ Environment) | `materials` |65| **VFX (Niagara)** | particle systems, emitters, scratch-pad HLSL, attaching/placing a Niagara component on an actor — NOT surface materials (→ Materials) | `niagara-systems`, `niagara-emitters` |66| **UI (UMG)** | widget blueprints, layout, fonts/brushes, MVVM — NOT the gameplay behind the UI (→ Blueprints) | `umg-widgets` |67| **Environment (world-scale)** | landscape sculpt/paint, landscape materials, foliage, PCG, map blockout, real-world terrain — NOT single-actor placement (→ Scene), NOT sound/audio (→ Audio) | `landscape`, `landscape-materials`, `landscape-auto-material`, `foliage`, `pcg`, `map-blockout`, `terrain-data` |68| **Audio** | MetaSound and SoundCue authoring — creating the sound asset itself: ambient, a character's footstep/foley, UI sounds — NOT triggering sounds from gameplay logic (→ Blueprints), NOT wiring an existing sound to anim-notify foot-plant frames (→ Animation) | `metasounds`, `sound-cues` |69| **Assets, data & project** | import/export assets, UV mapping, enums/structs, engine & project settings — NOT actors placed in a level (→ Scene) | `asset-management`, `uv-mapping`, `enum-struct`, `engine-settings`, `project-settings` |70| **Diagnostics, testing & run** | start/stop/query PIE, profile (CPU-vs-GPU / Insights), uncap frame rate — NOT fixing the logic a bug points to (→ its authoring area) | `pie-testing`, `profiling`, `frame-rate` |71| **Camera & viewport** | viewport camera, view mode, FOV, exposure, layout — NOT material look (→ Materials), NOT placing/editing light actors (→ Scene) | `viewport` |72| **Cinematics · Physics** | Sequencer cinematics and Physics assets (ragdoll/skeletal) are **Epic-native** — VibeUE adds no skill here — NOT enabling simulate-physics on a level actor (→ Scene) | *(none — use `list_toolsets`: `animation_toolset.*` / `PhysicsToolsets`)* |7374A loaded skill gives you:75- workflows, gotchas, and property formats for the domain76- `vibeue_classes` / `unreal_classes` — class names to feed into `discover_python_class` for live method signatures77- sub-doc references (`<skill>/<section>`) you can fetch via `GetSkills` for deeper detail7879Always call `discover_python_class` on the classes in `vibeue_classes` before writing code — never80guess method names from the skill content alone. **Batch the discovery into ONE call** instead of81one call per class:8283```84# ONE call covers all classes and all topics:85discover_python_class(86 class_name="unreal.MaterialService, unreal.WidgetService, unreal.MaterialNodeService",87 method_filter="create|delete|compile|property|color")8889# WRONG — three separate calls for three classes wastes round-trips and repeats boilerplate90```9192`class_name` accepts a comma-separated list (response gains a `classes` array, one entry per class);93`method_filter` ORs keywords with `|`.9495## How work gets done — `execute_python_code` is the workhorse9697VibeUE services are plain Python on the editor's `unreal` module. Run everything through98`execute_python_code`:99100```python101import unreal102widgets = unreal.WidgetService.list_widget_blueprints()103unreal.StateTreeService.create_state_tree("/Game/AI/MyBehavior")104```105106You get the full `unreal.*` API plus every `unreal.<Service>` VibeUE adds. Reserve `call_tool` for107**engine toolsets and skills** (e.g. `AgentSkillToolset`, `EditorToolset.EditorAppToolset`,108`LogsToolset`, `GameplayTagsToolset`, `AssetTools`).109110## Tools — what each is for111112| Tool | Use it for |113|------|-----------|114| `execute_python_code` | Run `unreal.*` Python in the editor — the workhorse for every VibeUE service |115| `call_tool` | Invoke engine toolsets and skills (skills, PIE control, logs, assets, gameplay tags) |116| `describe_toolset` / `list_toolsets` | Discover engine toolsets and their actions/args |117| `discover_python_class` / `discover_python_function` / `discover_python_module` | Get live signatures before writing code |118| `list_python_subsystems` | Enumerate editor subsystems for `unreal.get_editor_subsystem(...)` |119| `terrain_data` | Real-world heightmaps + water splines (see `terrain-data` skill) |120| `deep_research` | Web research / page fetch / geocoding |121122## Engine toolsets replace the old VibeUE tools123124Several capabilities that used to be VibeUE-specific MCP tools are now the engine's native toolsets,125called via `call_tool` (run `describe_toolset` for action names/params):126127| Need | Engine toolset (via `call_tool`) |128|------|----------------------------------|129| Start / stop / query PIE | `EditorToolset.EditorAppToolset` → `StartPIE` / `StopPIE` / `IsPIERunning` |130| Capture a viewport screenshot | `EditorToolset.EditorAppToolset` → `CaptureViewport` |131| List / read / filter / tail UE logs | `LogsToolset` |132| Search / open / save / move / import assets | `AssetTools` |133| Single-tag gameplay-tag CRUD | `GameplayTagsToolset` (see `gameplay-tags` skill) |134135Performance/Insights tracing is the one net-new VibeUE service — `unreal.PerformanceService.*` (see136the `profiling` skill) — because Unreal 5.8 ships no performance toolset.