Unreal Blueprint Authoring
flopperam/unreal-engine-mcp
Walks an agent through creating and editing Unreal Engine Blueprints with the Flopperam MCP's bp_* tools, from inspection to commit and verification.
Unreal Engine 5 development using the VibeUE Python API. An agent skill from kevinpbuckley/VibeUE.
$ npx skills add kevinpbuckley/VibeUE --skill vibeue -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kevinpbuckley/VibeUE vibeue --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .claude/skills && cp -r skills-src/Content/Skills/vibeue .claude/skills/vibeue && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "vibeue" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/vibeue into .claude/skills/vibeue/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibeue", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/vibeueType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kevinpbuckley/VibeUE --skill vibeue -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kevinpbuckley/VibeUE vibeue --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .agents/skills && cp -r skills-src/Content/Skills/vibeue .agents/skills/vibeue && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "vibeue" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/vibeue into .agents/skills/vibeue/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibeue", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kevinpbuckley/VibeUE --skill vibeue -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kevinpbuckley/VibeUE vibeue --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/Content/Skills/vibeue .cursor/skills/vibeue && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "vibeue" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/vibeue into .cursor/skills/vibeue/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibeue", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kevinpbuckley/VibeUE.git --path Content/Skills/vibeue--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kevinpbuckley/VibeUE --skill vibeue -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kevinpbuckley/VibeUE vibeue --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/Content/Skills/vibeue .gemini/skills/vibeue && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "vibeue" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/vibeue into .gemini/skills/vibeue/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibeue", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kevinpbuckley/VibeUE vibeueInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kevinpbuckley/VibeUE --skill vibeue -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .github/skills && cp -r skills-src/Content/Skills/vibeue .github/skills/vibeue && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "vibeue" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/vibeue into .github/skills/vibeue/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibeue", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kevinpbuckley/VibeUE --skill vibeue -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kevinpbuckley/VibeUE vibeue --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/Content/Skills/vibeue .opencode/skills/vibeue && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "vibeue" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/vibeue into .opencode/skills/vibeue/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibeue", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
vibeueUnreal Engine 5 development using the VibeUE Python API. An agent skill from kevinpbuckley/VibeUE.
Vibeue is an agent skill from kevinpbuckley/VibeUE. 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.
Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Game Development, covering Game development and MCP servers. It works with Python, Model Context Protocol and Unreal Engine. The repository describes itself as: Unreal Engine Vibe Coding tool. The licence is MIT.
Read from SKILL.md and the folder at commit dc051be. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python and json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
JINA_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Vibeue loads about 5.2k tokens when it runs. Until then it costs about 87 tokens; SKILL.md has 2,470 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from kevinpbuckley/VibeUE at commit dc051be, republished under its MIT licence (© kevinpbuckley). 2,470 words, ~5,239 tokens.
.claude/skills/vibeue/SKILL.md (or your agent's skills folder).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.
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",
"currentMap":"/Game/Maps/Level1_FullBody","mcpPort":8000,"mcpListening":true}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.
currentMap is the loaded map's package name and the signal is re-published on every map open
(issue #554) — gate world-edit scripts on it. A relaunch opens the project default map unless
you pass -Map /Game/Maps/YourMap (--map on the .sh) to the launch script; editing "the current
world" after a relaunch without checking has silently modified the wrong level before.
Signals/editor-<pid>-health.json is rewritten every ~5s by a background thread (issue #555):
{"signal":"health","pid":21044,"updatedUtc":"2026-08-03T17:09:00.000Z",
"sessionStartUtc":"2026-08-03T17:03:22.108Z","gameThreadStallSeconds":0.03,
"mcpPort":8000,"mcpListening":true}Epic's MCP endpoint runs on the game thread with no request timeout, so a dead or wedged editor
hangs MCP calls for the client's full timeout — and even JSON-RPC ping hangs with it. Read the
health file instead: file missing or updatedUtc older than ~15s → the process is gone (relaunch);
gameThreadStallSeconds above ~10 → alive but wedged (modal dialog / crash handler; MCP will
hang — relaunch); fresh and small → the editor is healthy, debug something else.
Both the readiness and health JSON also carry mcpPort and mcpListening (issue B6). Check
mcpListening before assuming a live link. The very first readiness signal is written the instant
RegisterToolsets() ends, which is ~10 ms before Epic's MCP module finishes binding its HTTP listener,
so mcpListening is normally false for a fraction of a second at startup and then flips to true.
VibeUE republishes the readiness signal the moment the listener reports running, so a brief
false-then-true is expected and healthy — poll the file (or the health heartbeat) rather than
trusting the first read. If mcpListening stays false for more than the startup grace window
(~15 s), this editor's MCP module has no running HTTP server and every MCP call to it will fail to
connect; VibeUE logs one LogVibeUEMcp: Error line at that point saying whether the port is FREE
(this editor's server failed to start / never started) or held by ANOTHER process (it lost the
port fight). The usual cause of the latter is the port-8000 fight: a headless UnrealEditor-Cmd and
the GUI editor started together, one lost the bind, and the loser looks healthy while owning no MCP.
Restart the loser (never run a headless editor while the GUI editor is starting; also grep for Epic's
LogHttpListener ... unable to bind to 127.0.0.1:<port>). Note that a bind-probe issued from inside
the process cannot tell whether this editor or another holds the port, so mcpListening=true means
only that this process's module started a server, not that it won the port — and VibeUE never forces
mcpListening true from a probe result, it only ever reflects the module's own claim.
The MCP client aborts an execute_python_code call after its own timeout (~30s for most clients,
300s for some), but the script keeps running in the editor. Read the persisted result before
re-running -- re-running double-executes a mutation. Every run's outcome is written to
Signals/python-<pid>-last.json (always the latest) and appended to Signals/python-<pid>-runs.jsonl
(last ~200 runs / ~2 MB):
A run that COMPLETES but overruns the server-side timeout is no longer reported as an error: the
reply comes back success:true with timed_out:true, its run_id, and signal_file_path (the
python-<pid>-last.json path), so a client whose own budget is longer -- or a retry -- gets the real
output instead of a bare PYTHON_EXECUTION_TIMEOUT. Only a call the client actually abandoned (it
gave up while the script was still running) returns nothing to you; that is the case
last_python_result() below is for. Error replies now also append run_id=<N> and the signal path
to the message for the same recovery.
{"runId":7,"pid":21044,"success":true,"label":"#7 execute_python_code","output":"...",
"error":"","result":"","execution_time_ms":48210.5,"startedUtc":"...","finishedUtc":"..."}The record deliberately does not store the submitted Python source: snippets commonly contain credentials passed to SDKs, and timeout recovery must not create a plaintext source-code secret log.
Recovery after a timeout -- the aborted call kept running in THIS same editor process, so the next call just reads the file:
import vibeue
print(vibeue.last_python_result()) # dict of the most recent run, or None
print(vibeue.python_run(7)) # a specific run by its runId, from the JSONL historylast_python_result() sees the lost run because the read happens before this recovery call's own
result is persisted. A SECOND read reflects the recovery read itself -- grab the runId from the
first read and use python_run(run_id) for a stable handle. Successful MCP replies also carry
run_id so you can correlate a reply that did return with its record.
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.
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 asVibeUE_<slug>(hyphens → underscores) and sub-doc<slug>/<file>.mdasVibeUE_<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 fromListSkillswhen unsure. Rundescribe_toolsetonToolsetRegistry.AgentSkillToolsetif the call signature differs in your build. The oldvibeue-skills-managertool 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, Gameplay Ability System (abilities/attributes/effects/cues) — NOT AI behavior (→ AI), NOT AnimBP graphs (→ Animation), NOT C++/source (coding-agent handoff) | blueprints, blueprint-graphs, enhanced-input, gameplay-tags, gas |
| AI | author StateTree or Behavior Tree logic, Blackboards, states, tasks, transitions, event payloads, and delegate bindings — NOT character body animation (→ Animation), NOT generic actor placement (→ Scene) | state-trees, behavior-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 |
| Character customization (Mutable) | Customizable Object graphs: modular character parts, mesh sections, skin/clothing parameters, switches, hat/outfit groups and child objects, compiling a CO — NOT plain skeletal mesh or skeleton edits (→ Animation), NOT ordinary material graphs (→ Materials) | customizable-object |
| 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, Fab catalog acquisition, UV mapping, enums/structs, engine & project settings, and bounded bulk asset maintenance/migrations — NOT actors placed in a level (→ Scene) | asset-management, fab, bulk-maintenance, 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:
vibeue_classes / unreal_classes — class names to feed into discover_python_class for live method signatures<skill>/<section>) you can fetch via GetSkills for deeper detailAlways 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 boilerplateclass_name accepts a comma-separated list (response gains a classes array, one entry per class);
method_filter ORs keywords with |.
execute_python_code is the workhorseVibeUE 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).
code is Python source, never a script path. A path such as C:/scripts/build.py passed as
code is compiled as Python and fails (SyntaxError / NameError); it is not run as a file. (Code
that merely mentions a .py file in a comment or string runs normally.) To run a script file, pass
code that runs it:
import unreal, runpy
runpy.run_path(r"C:/scripts/build.py") # the script gets its own globals
# or, sharing the console globals every execute_python_code call sees:
exec(open(r"C:/scripts/build.py").read())auto_save (default true). Before running your script, execute_python_code saves every dirty
content AND world package headlessly (issue #433: this avoids the modal save dialog that would hang
the call). Every reply reports what actually happened: auto_save (true only when the sweep really
ran), auto_save_note (empty when it ran, otherwise opted_out, previous_run_crashed,
editor_unavailable, pie_active, or save_failed) and saved_packages (the package names it
wrote). auto_save is the OUTCOME, not an echo of your argument -- so auto_save: true, saved_packages: [] means "swept, nothing was dirty", never "skipped". Pass auto_save=false to run
the script WITHOUT that sweep -- use it when you do not want in-flight editor edits flushed to disk,
or to keep a mutation you are about to make from being interleaved with an unrelated dirty package.
The sweep is skipped anyway after a crashed run, when GEditor is missing, or in PIE.
Opening a map as an asset keeps it resident:
w = unreal.load_asset("/Game/Maps/Foo") # loads and KEEPS Foo
unreal.EditorAssetLibrary.load_asset("/Game/Maps/Foo")
unreal.find_object(None, "/Game/Maps/Foo.Foo")The engine checks on every level load that no other map package is still alive. That check is a
fatal, not a warning - the editor dies with World Memory Leaks (EditorServer.cpp) and
Old level package /Game/Maps/Foo not cleaned up by garbage collection. The crash lands on whoever
calls load_level next, which may be minutes later and a different tool entirely, and the message
names neither the script nor the map that caused it.
execute_python_code reports this in every reply so the warning arrives with its cause:
"resident_maps": ["/Game/Maps/Foo.Foo"]Non-empty resident_maps means the next level load will crash the editor.
There is no reliable in-process cure. A map package loads with RF_Standalone, and neither
unreal.SystemLibrary.collect_garbage() nor EditorLoadingAndSavingUtils.unload_packages()
releases it - both were tried against a live editor and the world stayed resident. Once a map is
stranded, restart the editor (BuildAndLaunchGame.ps1) before changing levels.
So treat this as prevention, not repair:
ar = unreal.AssetRegistryHelpers.get_asset_registry()
maps = ar.get_assets_by_path("/Game/Maps", recursive=True)unreal.get_editor_subsystem(unreal.LevelEditorSubsystem).load_level(path),
which swaps the open world properly. Never load_asset a map to "look at it".The open level is never reported - only stragglers.
| 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. If Jina Reader refuses your network (HTTP 401), set a free Jina key in the JINA_API_KEY environment variable and restart the editor |
deep_research and terrain_data run off the game thread, so the editor keeps working while they wait. Four run at
a time and more wait their turn; past 16 running or waiting, a call is refused with BUSY (retry when one finishes).
Cancelling one from the client (notifications/cancelled) matches it by JSON-RPC request id only: with several MCP
clients connected, a cancel can also end another client's call that carries the same id.
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) |
| Inspect a live Ability System (attributes/tags/effects/abilities), attribute-set discovery, gameplay cues | GASToolsets.* (see gas 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.
vibeue.last_python_result()) let you read the outcome on the next call rather than re-running.UnrealEditor-Cmd while the GUI editor is starting — they fight over the MCP port and the loser runs with no MCP; the readiness signal's mcpListening flag tells you when the port is claimed. -run=pythonscript fully substitutes for pure-asset work when no editor runs, but not for World Partition world surgery.LogsToolset.GetLogEntries requires a pattern; StartPIE via execute_tool needs the full options object; results can be double-encoded (vibeue.exec_tool decodes them). A genuinely async tool like CaptureAssetImage never completes inside one call — fire it with vibeue.exec_tool_async and read it with vibeue.collect_tool_result on the next call.register_slate_post_tick_callback can survive its own unregister; an editor restart is the only reliable purge.© kevinpbuckley, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in Content/Skills/vibeue of kevinpbuckley/VibeUE.
Open the folder on GitHubat commit dc051be
Vibeue next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Vibeue this skillkevinpbuckley/VibeUE | 730 | — | ~5.2k | Automated safety check: Pass | MIT | |
| Unreal Blueprint Authoringflopperam/unreal-engine-mcp | 1.1k | — | ~1.6k | Automated safety check: Pass | None | |
| Unreal Engine MCPEpicGames/unreal-engine-skills-for-claude-code-plugin | 338 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Fmodel Unpackpa001024/dna-builder | 137 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Unreal Scene Buildingflopperam/unreal-engine-mcp | 1.1k | — | ~1.4k | Automated safety check: Pass | None | |
| Unreal Engine MCP Overviewflopperam/unreal-engine-mcp | 1.1k | — | ~1.7k | Automated safety check: Pass | None |
flopperam/unreal-engine-mcp
Walks an agent through creating and editing Unreal Engine Blueprints with the Flopperam MCP's bp_* tools, from inspection to commit and verification.
EpicGames/unreal-engine-skills-for-claude-code-plugin
Drives a live Unreal Editor through the unreal-mcp server: spawn actors, edit Blueprints, materials and sequences, change properties and trigger Live Coding.
pa001024/dna-builder
This skill documents how to use the fmodel-mcp toolkit (a CUE4Parse-based .NET CLI plus a thin Python MCP server) to inspect and export Unreal Engine game assets — pak files, textures, meshes…
flopperam/unreal-engine-mcp
Guides scene and world building in Unreal Engine through the Flopperam MCP: placing actors, sculpting landscapes, scattering foliage, editing materials and verifying the level.
flopperam/unreal-engine-mcp
Maps the tools of the Flopperam Unreal Engine MCP server and how to choose among them when working with a live Unreal Editor.
Luciole-Studio/Misaka-Agent
Automate Unreal Engine editor scenes, actors, and renders. An agent skill from Luciole-Studio/Misaka-Agent.
kevinpbuckley/VibeUE
Previews, validates and bakes bone-rotation edits on Unreal Engine AnimSequences, enforcing a coordinate space and a constraint-checked preview-validate-bake loop.
kevinpbuckley/VibeUE
Creates and edits Unreal Engine Animation Montages through AnimMontageService: sections, slots, segments, branching points, notifies and blend settings.
kevinpbuckley/VibeUE
Creates and edits AnimSequence keyframes and bone tracks in Unreal Engine through AnimSequenceService, following an inspect, preview, validate and bake workflow with correct bone-space handling.
kevinpbuckley/VibeUE
Imports files into Unreal Engine, exports textures, reads the Content Browser selection and checks open assets via VibeUE, plus mesh reimport material fixes.
kevinpbuckley/VibeUE
Changes Unreal Engine console variables, scalability levels and raw INI values through VibeUE's Python API, now that registered settings moved to the engine's own toolset.
kevinpbuckley/VibeUE
Creates and wires Unreal Engine Enhanced Input assets through VibeUE's InputService: Input Actions, Mapping Contexts, key bindings, triggers and modifiers.
Categories
Unreal Engine 5 development using the VibeUE Python API. An agent skill from kevinpbuckley/VibeUE. Vibeue is an agent skill from kevinpbuckley/VibeUE. Unreal Engine 5 development using the VibeUE Python API.
Vibeue fits situations like: working in Unreal Engine †blueprints; PCG (procedural content generation).
Run `npx skills add kevinpbuckley/VibeUE --skill vibeue -a claude-code`. Or copy the skill folder (Content/Skills/vibeue in kevinpbuckley/VibeUE) into .claude/skills/vibeue in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kevinpbuckley/VibeUE --skill vibeue -a codex`. Or copy the skill folder (Content/Skills/vibeue in kevinpbuckley/VibeUE) into .agents/skills/vibeue in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kevinpbuckley/VibeUE --skill vibeue -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vibeue, .gemini/skills/vibeue, .github/skills/vibeue and .opencode/skills/vibeue in your project.
Going by SKILL.md and its folder, Vibeue needs credentials named JINA_API_KEY. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Vibeue is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Vibeue: Unreal Blueprint Authoring (flopperam/unreal-engine-mcp, 1.1k stars), Unreal Engine MCP (EpicGames/unreal-engine-skills-for-claude-code-plugin, 338 stars), Fmodel Unpack (pa001024/dna-builder, 137 stars) and Unreal Scene Building (flopperam/unreal-engine-mcp, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kevinpbuckley (a GitHub user) maintains it in kevinpbuckley/VibeUE, which has 730 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 7, 2026.
Source: kevinpbuckley/VibeUE on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.