Skip to main content
Glama
██╗   ██╗███████╗     █████╗ ██╗   ██╗██████╗ ██╗ ██████╗     ███╗   ███╗ ██████╗██████╗
██║   ██║██╔════╝    ██╔══██╗██║   ██║██╔══██╗██║██╔═══██╗    ████╗ ████║██╔════╝██╔══██╗
██║   ██║█████╗      ███████║██║   ██║██║  ██║██║██║   ██║    ██╔████╔██║██║     ██████╔╝
██║   ██║██╔══╝      ██╔══██║██║   ██║██║  ██║██║██║   ██║    ██║╚██╔╝██║██║     ██╔═══╝
╚██████╔╝███████╗    ██║  ██║╚██████╔╝██████╔╝██║╚██████╔╝    ██║ ╚═╝ ██║╚██████╗██║
 ╚═════╝ ╚══════╝    ╚═╝  ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝     ╚═╝     ╚═╝ ╚═════╝╚═╝
░░░░░░░░░░░░░░░░░░ AI Game Audio — Wwise + MetaSounds + Blueprints ░░░░░░░░░░░░░░░░░░░

UE Audio MCP

AI-powered game audio toolkit — MetaSounds graph generation & export, project scanning, and Wwise/Blueprint knowledge base via MCP for Unreal Engine 5.7.

One MCP server. UE5 Plugin, three audio engines, five custom nodes for SID chip emulation. 81 tools. 195 engine-verified MetaSounds nodes. Optimised for Unreal Engine 5.7 and Wwise 2025.

"Create a footsteps sound setup for my character -- use MetaSounds noise and filter in the patch, Blueprint trigger on anim notify"

MCP generates the MetaSounds DSP graph (noise -> filter -> AD envelope) and outputs Blueprint wiring for the animation trigger.


Architecture

                    Claude / Cursor / Any MCP Client
                                |
                                | MCP Protocol (stdio)
                                v
                    +---------------------------+
                    |      UE Audio MCP         |
                    |      81 tools             |
                    |      1042 catalogue rows   |
                    +---------------------------+
                            |
              +-------------+-------------------+
              v             v                   v
     +----------------+ +------------+  +------------------+
     |  Wwise Tools   | | MetaSounds |  | Blueprint Tools  |
     |  (WAAPI)       | |  Tools     |  | (TCP + Knowledge)|
     |  21 tools      | | 24 tools   |  | 16 tools         |
     +-------+--------+ +-----+------+  +--------+---------+
             |               |                   |
             v               v                   v
     +----------------+ +---------------------------+
     | Wwise App      | | UE5 C++ Plugin             |
     | WAAPI :8080    | | TCP:9877 (48 commands)     |
     +----------------+ | MetaSounds Builder API     |
                        | Blueprint Graph Scanner    |
                        | Editor Menu Integration    |
                        +---------------------------+

The Three Layers

Layer

Engine

Role

Analogy

Blueprint

UE5

WHEN -- detects game events, sets parameters

Stage manager

MetaSounds

UE5

WHAT -- procedural DSP, synthesis

The instrument

Wwise

Standalone

HOW -- mixing, buses, spatialization, delivery

The mixing desk

Signal Flow

BLUEPRINT (WHEN)              METASOUNDS (WHAT)           WWISE (HOW)
----------------              -----------------           ------------
Player shoots           ->    Gunshot synthesis      ->   SFX bus, reverb
Player steps on grass   ->    Soft filtered step     ->   Distance attenuation
Weather changes to rain ->    Layered rain + drops   ->   Ambient bus, RTPC mix
Vehicle accelerates     ->    Engine layer blend     ->   Vehicle bus, compression
C64 chiptune plays      ->    ReSID SID Chip node    ->   Music bus, stereo mix

Related MCP server: Monolith

Setup

# 1. MCP Server (Python)
git clone https://github.com/koshimazaki/UE-AUDIO-MCP.git
cd UE-AUDIO-MCP && pip install -e ".[dev]"
ue-audio-mcp
// 2. MCP Client Config (Claude Code, Cursor, etc.)
{
  "mcpServers": {
    "ue-audio-mcp": { "command": "ue-audio-mcp", "transport": "stdio" }
  }
}
// 3. UE5 Plugin — copy to project Plugins/ folder, enable in plugin manager
ue5_plugin/UEAudioMCP/        → Editor module (TCP server, 48 commands)
ue5_plugin/SIDMetaSoundNodes/  → Runtime module (SID chip nodes)

Works without Wwise or UE5 running -- knowledge base, templates, and offline mode always available.

Requirement

Version

Unreal Engine

5.7.2+ (MetaSounds Builder API, experimental since 5.4)

Wwise

2025.1.4+ (WAAPI enabled, WebSocket on localhost:8080)

Python

3.10+


What's Included

  • 81 MCP tools -- Wwise (21), MetaSounds (24), Blueprint (16), World Setup (7), Actor/Camera (5), UE5 Core (4), orchestration (2), audit (2)

  • 1042 seeded catalogue rows -- 195 MetaSounds nodes, 356 aliases, 66 WAAPI functions, 55 BP audio functions, 130 pin mappings, 26 engine plugin assets

  • 73 templates -- 33 MetaSounds DSP + 34 Blueprint logic + 6 Wwise hierarchy (33/33 MS validated)

  • 48 C++ TCP commands -- MetaSounds Builder API, Blueprint builder, world setup, actor/camera staging, graph scanning, asset queries

  • 5 custom C++ nodes -- ReSID SID chip emulator (oscillator, envelope, filter, voice, full chip)

  • 11 audio system patterns -- gunshot, footsteps, ambient, vehicle, weather, UI, SID synth...

  • Editor menu -- Scan Project, Export MetaSounds, Server Status from UE5 menu bar

  • Engine sync snapshots -- 897 MS nodes + 1173 audio BP functions exported from live UE5 editor

12 templates from shipped games: Lyra (random EQ, whizby, stereo balance, gameplay cues, anim notify audio) and StackOBot (array player, looped sound, EQ+delay).

See TOOLS_AND_COMMANDS.md for full tool listing, command reference, sound designer workflows, template catalogue, and knowledge base details. Run python scripts/db_inventory.py to reconcile source catalogue, SQLite, and engine export counts.


ReSID SIDKIT Edition -- C64 SID Chip in MetaSounds

5 custom C++ MetaSounds nodes wrapping a cycle-accurate MOS 6581/8580 SID chip emulator. The same reSID core running in the SIDKIT project, now available as native MetaSounds DSP nodes.

Node

Type

Description

SID Oscillator

Audio

24-bit accumulator, 8 waveforms (saw/tri/pulse/noise + combined)

SID Envelope

Float

Non-linear exponential ADSR with authentic SID timing and delay bug

SID Filter

Audio

Route any audio through the 6581's analog filter -- VICE VCR model

SID Voice

Audio

Oscillator x Envelope convenience combo

SID Chip

Audio

Complete 3-voice SID with filter, FM cross-modulation, per-voice outputs

SIDMetaSoundNodes is a separate Runtime module -- ships in games without the MCP TCP server.


Agent Skills

Install UE Audio agent skills for Claude Code, Cursor, Windsurf, and 35+ other agents:

npx skills add koshimazaki/ue-audio-skills

Skill

What it does

/mcp-plugin

TCP plugin control -- 48 commands for building MetaSounds graphs, scanning blueprints, world setup, actor/camera staging

/metasound-dsp

MetaSounds DSP specialist -- 195 nodes, Builder API, signal flow patterns, graph templates

/unreal-bp

Blueprint audio logic -- game event detection, parameter wiring, asset scanning

/build-system

Full pipeline orchestrator -- generates complete 3-layer audio systems from a single description


Prior Art

Existing Tool

Audio?

blender-mcp (16.9k stars) -- Controls Blender

No

unreal-mcp (1,370 stars) -- Controls UE5 editor

No

VibeComfy MCP -- 8,400+ ComfyUI nodes

No

BilkentAudio/Wwise-MCP -- Wwise wrapper

Partial

This project -- Complete 3-layer game audio + SID chip emulation

Yes


Credits

All templates and knowledge curated from public sources: Epic Games documentation, and tutorials, Audiokinetic SDK reference, and community tutorials. ReSID emulation based on reSID by Dag Lem with SIDKIT extensions.

See CREDITS.md for full attribution to tutorial authors and data sources.

Key sources: Craig Owen (YAGER), Matt Spendlove, Nick Pfisterer, Eric Buchholz (TechAudioTools), Chris Payne, Epic Games official documentation.


Author

Built by Koshi Mazaki


Licence

MIT

Available Tools

81 tools
audit_historyA

Query past session log events with optional filters.

Args: session_id: Filter by session ID event_type: Filter by type (tool_call, waapi_call, tcp_command, session_start, session_end) tool_name: Filter by tool name since: ISO date string — only events after this timestamp status_filter: Filter by result status (ok, error) limit: Max rows to return (default 50, max 500) summary_only: If true, return per-session aggregates instead of raw events

Inputs: limit, since, tool_name, event_type, +3 more. Returns: result

audit_session_statsB

Get overall session logging statistics.

Returns total sessions, event counts by type, error rate, and top 10 most-used tools.

Inputs: no named parameters. Returns: result

bp_add_bp_nodeA

Add a node to the active Blueprint's event graph.

Supports 4 node kinds:

  • CallFunction: Audio-allowlisted functions (SetFloatParameter, PlaySound2D, etc.)

  • CustomEvent: User-defined events

  • VariableGet: Read a Blueprint variable (must pre-exist)

  • VariableSet: Write a Blueprint variable (must pre-exist)

Args: node_id: Unique ID for this node (used in connect/set_pin calls) node_kind: One of: CallFunction, CustomEvent, VariableGet, VariableSet function_name: Required for CallFunction — the function to call event_name: Required for CustomEvent — the event name variable_name: Required for VariableGet/VariableSet — the variable name position_x: Editor X position position_y: Editor Y position

Inputs: node_id (required), node_kind (required), event_name, position_x, +3 more. Returns: result

bp_call_functionC

Execute a Blueprint function via the UE5 plugin.

Args: function_name: Blueprint function name to call args_json: JSON string of function arguments

Inputs: function_name (required), args_json. Returns: result

bp_compile_blueprintA

Compile the active Blueprint.

Returns compile status and any compiler messages. Must have called bp_open_blueprint first.

Inputs: no named parameters. Returns: result

bp_connect_bp_pinsA

Connect two pins between registered Blueprint nodes.

Both nodes must be registered (via bp_add_bp_node or bp_register_existing).

Args: from_node: Source node ID from_pin: Source output pin name to_node: Destination node ID to_pin: Destination input pin name

Inputs: to_pin (required), to_node (required), from_pin (required), from_node (required). Returns: result

bp_export_audioA

Export the audio-relevant subgraph from a Blueprint with full edge wiring.

Returns only audio nodes + their 1-hop neighbours, with pin data and connections between them. Useful for understanding how Blueprint events drive MetaSounds/Wwise parameters.

Requires the UE5 C++ plugin to be running.

Args: asset_path: Blueprint asset path (e.g. "/Game/Blueprints/BP_Character")

Inputs: asset_path (required). Returns: result

bp_list_assetsB

List project assets by class type via the UE5 plugin.

Queries the Asset Registry for all assets matching the given class under the specified path. Useful for discovering Blueprints, MetaSounds, SoundWaves, etc. before scanning.

Requires the UE5 C++ plugin to be running.

Args: class_filter: Asset class name — Blueprint, MetaSoundSource, SoundWave, etc. path: Path prefix to search under (default: /Game/) limit: Max results to return (default: 5000)

Inputs: path, limit, class_filter. Returns: result

bp_list_categoriesB

List Blueprint node categories with counts.

Args: source: Data source — "all", "curated", or "scraped"

Inputs: source. Returns: result

bp_list_node_pinsA

List all pins on a registered Blueprint node.

Returns pin name, direction, type, default value, and connection status.

Args: node_id: Registered node ID

Inputs: node_id (required). Returns: result

bp_node_infoA

Get full Blueprint node info including pin specs.

Prefers scraped data (richer pin info), falls back to curated.

Args: node_name: Exact node name (e.g. "PlaySound2D", "SpawnSoundAtLocation")

Inputs: node_name (required). Returns: result

bp_open_blueprintA

Open a Blueprint asset for editing via the UE5 plugin.

Must be called before adding nodes or connecting pins. Resets any previously registered node handles.

Args: asset_path: Blueprint asset path (e.g. "/Game/Blueprints/BP_Character")

Inputs: asset_path (required). Returns: result

bp_register_existingA

Register an existing Blueprint node by its GUID so it can be wired to.

Use bp_scan_blueprint with include_pins=true to find node GUIDs, then register them here before connecting pins.

Args: node_id: MCP handle ID you want to use for this node node_guid: The node's FGuid string from the Blueprint scan

Inputs: node_id (required), node_guid (required). Returns: result

bp_scan_blueprintB

Deep-scan a Blueprint asset to extract graph nodes, function calls, and audio relevance.

Inspects all graphs (event graphs, function graphs, macros) and classifies each node by type: CallFunction, Event, CustomEvent, VariableGet/Set, etc. Detects audio-relevant nodes (PlaySound, PostEvent, AudioComponent refs).

Requires the UE5 C++ plugin to be running.

Args: asset_path: Blueprint asset path (e.g. "/Game/Blueprints/BP_Character") audio_only: If True, only return audio-relevant nodes include_pins: If True, include full pin details per node

Inputs: asset_path (required), audio_only, include_pins. Returns: result

bp_set_bp_pinB

Set a default value on a Blueprint node's input pin.

Args: node_id: Registered node ID pin_name: Input pin name value: Default value as string

Inputs: value (required), node_id (required), pin_name (required). Returns: result

bp_sync_from_engineA

Sync Blueprint function catalogue from the running UE5 engine.

Calls list_blueprint_functions to enumerate all BlueprintCallable UFunctions with their parameter signatures directly from the engine. Optionally upserts results into the blueprint_nodes_scraped SQLite table.

Args: audio_only: Only fetch audio-relevant functions (default True) update_db: If True, upsert into the SQLite blueprint_nodes_scraped table filter: Optional substring filter on function or class name class_filter: Optional exact class name filter limit: Max functions to fetch (default 10000)

Returns: JSON summary: total functions, classes found, new vs updated counts.

Inputs: limit, filter, update_db, audio_only, +1 more. Returns: result

bp_wire_audio_paramA

High-level: wire a SetFloatParameter call into a Blueprint.

Opens the Blueprint, optionally registers a source node, adds a SetFloatParameter call, sets the parameter name, connects the source if provided, and compiles.

Args: asset_path: Blueprint asset path param_name: MetaSounds parameter name (e.g. "Speed", "Intensity") source_node_guid: Optional GUID of existing node to wire as value source source_pin: Output pin name on the source node for the float value

Inputs: asset_path (required), param_name (required), source_pin, source_node_guid. Returns: result

build_aaa_projectA

Build a complete AAA audio project: infrastructure + content for all categories.

Creates AAA Wwise infrastructure (buses, work units, switches, states), then generates 3-layer content (Wwise + MetaSounds + Blueprints) for each audio category, routes outputs to correct buses, and moves objects to dedicated work units.

Auto-detects connection state:

  • Full (Wwise + UE5): creates infrastructure, builds all content, routes + moves

  • Wwise-only: creates infrastructure, builds Wwise content, returns MS commands

  • Offline: returns complete manifest of what would be created (dry-run)

Args: categories: Comma-separated category filter (default: all). Available: player_footsteps, player_weapons, npc_footsteps, ambient_wind, weather, ui setup_params: JSON overrides for template_aaa_setup, e.g. {"include_reverbs": false}

Inputs: categories, setup_params. Returns: result

build_audio_systemA

Build a complete 3-layer audio system (Wwise + MetaSounds + Blueprints) from a pattern.

Auto-detects which backends are connected and degrades gracefully:

  • Full (Wwise + UE5): executes everything, returns created IDs

  • Wwise-only: executes Wwise, returns MetaSounds commands for later

  • Offline: returns all 3 layer specs as JSON (dry-run preview)

Available patterns: gunshot, footsteps, ambient, spatial, ui_sound, weather, preset_morph, macro_sequence, sfx_generator, vehicle_engine.

Args: pattern: Pattern name (e.g. "gunshot", "footsteps") name: Asset name prefix (defaults to pattern name) params_json: JSON overrides for all 3 layers, e.g. {"wwise": {"num_variations": 5}}

Inputs: pattern (required), name, params_json. Returns: result

execute_waapiB

Execute any WAAPI call directly (escape hatch).

Args: uri: WAAPI function URI (e.g. ak.wwise.core.object.getTypes) args_json: JSON string of arguments options_json: JSON string of options

Inputs: uri (required), args_json, options_json. Returns: result

find_actorA

Find actors in the current editor or PIE world.

Args: query: Optional label/name/path substring. class_filter: Optional class-name substring, e.g. "Character", "CameraActor". limit: Maximum actors to return, clamped by the plugin.

Inputs: limit, query, class_filter. Returns: result

focus_editor_cameraA

Frame an actor in the Unreal Editor viewport camera.

Args: actor: Actor label, object name, or full path returned by find_actor. active_viewport_only: When true, move only the active viewport camera.

Inputs: actor (required), active_viewport_only. Returns: result

import_sound_fileB

Import a .wav or .ogg sound file from disk into the UE5 Content folder.

Args: file_path: Absolute path to the audio file on disk dest_folder: Destination folder in Content (e.g. "/Game/Audio/SFX")

Inputs: file_path (required), dest_folder (required). Returns: result

ms_add_nodeB

Add a MetaSounds node to the current graph.

Args: node_type: Node type name (e.g. "Sine", "Wave Player (Mono)") node_id: Unique ID for this node instance position_x: Editor X position position_y: Editor Y position

Inputs: node_id (required), node_type (required), position_x, position_y. Returns: result

ms_add_variableA

Add a graph variable to the current MetaSounds builder (UE 5.7+).

Graph variables store state within a MetaSound graph, readable and writable by Get/Set Variable nodes.

Args: name: Variable name (must be unique within the graph) type: Data type (Float, Int32, Bool, Trigger, Audio, Time, String) default_value: Optional default value as string

Inputs: name (required), type (required), default_value. Returns: result

ms_add_variable_nodeA

Add a Get, Set, or GetDelayed variable node to the current graph.

Args: node_id: Unique ID for this node instance variable_name: Name of the graph variable to access mode: Access mode — "get" (read current), "set" (write), or "get_delayed" (read previous frame)

Inputs: node_id (required), variable_name (required), mode. Returns: result

ms_auditionB

Preview/audition the current MetaSounds graph in the editor.

Args: name: Optional asset name to audition (empty = current)

Inputs: name. Returns: result

ms_build_graphB

Validate a graph spec, convert to Builder commands, and send all to UE5.

This is the high-level tool that does everything: validate, convert, and execute the full command sequence via the UE5 plugin.

Args: graph_spec: JSON string of the MetaSounds graph specification

Inputs: graph_spec (required). Returns: result

ms_connect_pinsB

Connect two node pins in the current MetaSounds graph.

Args: from_node: Source node ID from_pin: Source output pin name to_node: Destination node ID to_pin: Destination input pin name

Inputs: to_pin (required), to_node (required), from_pin (required), from_node (required). Returns: result

ms_convert_to_presetA

Convert the current MetaSounds builder to a preset of a referenced asset.

The builder's graph becomes read-only, inheriting the referenced asset's topology. Only exposed input defaults can be overridden.

Args: referenced_asset: Content path of the source MetaSound (e.g. /Game/Audio/MySynth)

Inputs: referenced_asset (required). Returns: result

ms_create_sourceB

Create a new MetaSounds source builder in UE5.

Args: name: Name for the MetaSound asset asset_type: Asset type — Source, Patch, or Preset

Inputs: name (required), asset_type. Returns: result

ms_export_graphB

Export a complete MetaSounds graph from UE5 — nodes, pin types, defaults, variables, interfaces.

Returns the full graph data. Optionally converts to our reusable template format.

Args: asset_path: Content path of the MetaSound asset (e.g. /Game/Audio/MySound) convert_to_template: If True, also convert the export to template format

Inputs: asset_path (required), convert_to_template. Returns: result

ms_graph_from_templateB

Generate a complete graph spec from a template.

Templates are auto-discovered from the metasounds template directory.

Args: template_name: Template name (e.g. "gunshot", "footsteps") params: JSON string of template parameters (overrides defaults)

Returns: JSON with the complete graph specification ready for validation.

Inputs: template_name (required), params. Returns: result

ms_graph_to_commandsA

Convert a validated graph spec to Builder API command sequence.

The command sequence can be sent to the UE5 plugin (Phase 3) to construct the MetaSound asset via the Builder API.

Args: graph_spec: JSON string of a valid graph specification

Returns: JSON with ordered command list for the Builder API.

Inputs: graph_spec (required). Returns: result

ms_list_categoriesA

List all MetaSounds node categories with counts.

Returns: JSON with category names and node counts.

Inputs: no named parameters. Returns: result

ms_list_nodesB

List MetaSounds nodes, optionally filtered by category or tag.

Args: category: Filter by category (e.g. "Filters", "Generators") tag: Filter by tag (e.g. "underwater", "oscillator")

Returns: JSON with node list including name, category, description, and pin counts.

Inputs: tag, category. Returns: result

ms_macro_triggerA

Execute a named sequence of parameter changes and/or preset swaps.

Each step is a dict with:

  • "action": "set_default" or "convert_to_preset"

  • Plus action-specific fields (node_id/input/value or referenced_asset)

Useful for cinematic audio cues, dynamic music transitions, and scripted sound design sequences.

Args: name: Descriptive name for this macro sequence steps_json: JSON array of step dicts

Inputs: name (required), steps_json (required). Returns: result

ms_node_infoA

Get full details for a specific MetaSounds node.

Args: node_name: Exact node name (e.g. "Biquad Filter", "Wave Player (Mono)")

Returns: JSON with complete node definition including all pins and defaults.

Inputs: node_name (required). Returns: result

ms_open_in_editorA

Open the last built MetaSound asset in the UE5 MetaSounds editor.

Must call ms_save_asset first to create a .uasset on disk. Opens the graph editor showing all nodes and connections visually.

Inputs: no named parameters. Returns: result

ms_preset_morphA

Build a MetaSound Source that morphs between two parameter sets.

Creates a Source with a Morph input (0.0-1.0) that smoothly interpolates each parameter between set A (Morph=0) and set B (Morph=1). Uses Map Range nodes for each parameter and InterpTo for smooth transitions.

Args: name: Name for the morph MetaSound asset param_set_a_json: JSON object of param_name -> value at Morph=0 param_set_b_json: JSON object of param_name -> value at Morph=1 asset_path: Content path for the output asset

Inputs: name (required), param_set_a_json (required), param_set_b_json (required), asset_path. Returns: result

ms_preset_swapA

Create a preset variant from an existing MetaSound asset.

A preset shares the referenced asset's graph topology but overrides specific input defaults. Use this to create weapon/surface/character variants without duplicating the graph.

Args: preset_name: Name for the new preset asset referenced_asset: Content path of the source MetaSound to reference overrides_json: JSON object of input_name -> value overrides asset_path: Content path for the output asset

Inputs: preset_name (required), referenced_asset (required), asset_path, overrides_json. Returns: result

ms_save_assetC

Build the current MetaSounds graph to a UE5 asset.

Args: name: Asset name path: Content path (default /Game/Audio/Generated/)

Inputs: name (required), path. Returns: result

ms_search_nodesA

Semantic search for MetaSounds nodes by description or purpose.

Uses TF-IDF embeddings for meaning-based search with tag fallback. Examples: "underwater effect", "random variation", "smooth transition"

Args: query: Natural language search query

Returns: JSON with ranked results (name, score, category, description).

Inputs: query (required). Returns: result

ms_set_defaultB

Set a default value for a node input pin.

Args: node_id: Node instance ID input_name: Input pin name value: Default value (JSON-encoded for complex types)

Inputs: value (required), node_id (required), input_name (required). Returns: result

ms_stop_auditionB

Stop any currently playing MetaSounds audition preview.

Inputs: no named parameters. Returns: result

ms_sync_from_engineA

Sync MetaSounds node catalogue from the running UE5 engine.

Calls the list_metasound_nodes command to get ALL registered node classes with their complete pin specs directly from the engine registry. Updates the in-memory METASOUND_NODES dict and optionally the SQLite DB.

Args: update_db: If True, also upsert nodes into the SQLite knowledge DB filter: Optional substring filter for node class names limit: Max nodes to fetch (default 5000)

Returns: JSON summary: total nodes, new nodes added, existing nodes updated, categories.

Inputs: limit, filter, update_db. Returns: result

ms_validate_graphA

Validate a MetaSounds graph specification.

Checks node types exist, pin names are valid, type compatibility, required inputs are connected, no duplicate IDs.

Args: graph_spec: JSON string of the graph specification

Returns: JSON with validation result: errors list (empty = valid).

Inputs: graph_spec (required). Returns: result

place_anim_notifyB

Place an AnimNotify_PlaySound on an animation at a specific time.

This is the proper way to sync sounds to animation frames (e.g. footsteps at the exact moment each foot hits the ground).

Args: animation_path: Animation asset path (e.g. "/Game/Characters/Anims/Walk") time: Time in seconds where the notify fires sound: Optional SoundBase asset path to play notify_name: Name for the notify event (default "Footstep")

Inputs: time (required), animation_path (required), sound, notify_name. Returns: result

place_audio_volumeA

Place an AudioVolume actor — defines an ambient audio zone.

When the player enters this volume, reverb/interior settings activate. Use for rooms, caves, outdoor areas with different acoustic properties.

Args: location: World position as [x, y, z] extent: Half-size of the volume box as [x, y, z] (default [500,500,500]) name: Label for the volume actor reverb_effect: Optional ReverbEffect asset path priority: Volume priority (higher = takes precedence when overlapping)

Inputs: location (required), name, extent, priority, +1 more. Returns: result

place_bp_anim_notifyA

Place a Blueprint-based AnimNotify on an animation at a specific time.

Unlike place_anim_notify (which creates engine AnimNotify_PlaySound), this places BP AnimNotify classes that can do surface detection, line traces, and material-based sound selection — the Lyra footstep pattern.

Args: animation_path: Animation asset path (e.g. "/Game/Characters/Anims/Walk") time: Time in seconds where the notify fires notify_blueprint_path: Blueprint AnimNotify asset path (e.g. "/Game/Blueprints/AnimNotifies/BP_AnimNotify_FoleyEvent_Walk_L") notify_name: Name for the notify event (default "BPNotify")

Inputs: time (required), animation_path (required), notify_blueprint_path (required), notify_name. Returns: result

possess_pawnA

Possess a Pawn/Character with a runtime player controller.

Args: actor: Pawn/Character label, object name, or full path returned by find_actor. player_index: Local player/controller index. set_view_target_on_possess: Also set the possessed pawn as the camera target.

Inputs: actor (required), player_index, set_view_target_on_possess. Returns: result

set_actor_transformA

Move and/or rotate an actor in the current editor or PIE world.

Args: actor: Actor label, object name, or full path returned by find_actor. location: Optional world position as [x, y, z]. rotation: Optional rotation as [pitch, yaw, roll] in degrees. focus_camera: Also frame the actor in the active editor viewport.

Inputs: actor (required), location, rotation, focus_camera. Returns: result

set_physical_surfaceA

Set the surface type on a Physical Material (creates it if needed).

Surface types drive material-dependent sounds — e.g. footsteps on grass vs metal vs wood produce different sounds.

Args: material_path: Physical Material asset path (e.g. "/Game/Materials/PM_Grass") surface_type: Surface type name (e.g. "Grass", "Metal", "Wood", "SurfaceType1")

Inputs: surface_type (required), material_path (required). Returns: result

set_view_targetA

Set the runtime player camera view target to an actor.

This is intended for PIE/simulation. Use focus_editor_camera for the editor viewport.

Args: actor: Actor label, object name, or full path returned by find_actor. blend_time: Camera blend duration in seconds. player_index: Local player/controller index.

Inputs: actor (required), blend_time, player_index. Returns: result

spawn_audio_emitterA

Spawn a persistent AmbientSound actor at a world location.

Creates a spatial audio source that gets louder as the player approaches. Perfect for environmental sounds (campfire, waterfall, machinery).

Args: sound: SoundBase/MetaSound asset path (e.g. "/Game/Audio/Ambient/Fire") location: World position as [x, y, z] name: Label for the emitter actor auto_play: Whether to start playing immediately (default True)

Inputs: sound (required), location (required), name, auto_play. Returns: result

spawn_blueprint_actorA

Spawn an instance of a Blueprint actor into the editor level.

Use this to place a character/object in the scene so you can see it while wiring up audio. Great for demos and iterative sound design — spawn it, open its Blueprint, wire sounds, compile, hear it live.

Args: blueprint_path: Blueprint asset path (e.g. "/Game/Blueprints/BP_Creature") location: World position as [x, y, z] (default origin) rotation: Rotation as [pitch, yaw, roll] in degrees (default zero) label: Optional display label for the spawned actor

Inputs: blueprint_path (required), label, location, rotation. Returns: result

template_aaa_setupA

Create a complete AAA Wwise project structure (Bjorn Jacobson method).

Creates separate Work Units for merge-safe version control, structured bus hierarchy for clear signal routing, and switch/state groups for runtime control.

Naming convention: Type_Owner_Category_Action_Material_Variation Example: sfx_plyr_loc_walking_dirt_01

Everything goes into dedicated Work Units — nothing in Default Work Unit.

Args: bus_structure: JSON override for bus tree (default: AAA standard with AmbientMaster, NPCMaster, PlayerMaster, UIMaster, MusicMaster, Reverbs) actor_work_units: JSON array of Actor-Mixer Work Unit names (default: Player_Locomotion, Player_Weapons, NPC_Locomotion, NPC_Voice, Ambience, UI, Music) event_work_units: JSON array of Event Work Unit names (default: Player, NPC, Locomotion, Ambience, UI, Music) switch_groups: JSON dict of SwitchGroup name -> values array (default: Surface_Type, Footstep_Type) state_groups: JSON dict of StateGroup name -> values array (default: Weather, PlayerState, Zone) include_reverbs: Create Reverb AuxBuses (LargeRoom, SmallRoom, Cave, Outdoor)

Inputs: state_groups, bus_structure, switch_groups, include_reverbs, +2 more. Returns: result

template_ambientB

Create an RTPC-driven ambient blend system: GameParameter + BlendContainer + looped Sounds + Event.

Args: layer_names: JSON array of layer/sound names rtpc_parameter_name: Name for the RTPC GameParameter

Inputs: layer_names, rtpc_parameter_name. Returns: result

template_footstepsA

Create a surface-switched footstep system: SwitchGroup + SwitchContainer + per-surface RandomSeq + Event.

Args: surface_types: JSON array of surface type names with_switch_group: Create the SwitchGroup (set false if it already exists)

Inputs: surface_types, with_switch_group. Returns: result

template_gunshotB

Create a complete gunshot system: RandomSequenceContainer + Sound children + Event.

Args: weapon_name: Weapon name (used in object naming) num_variations: Number of sound variation slots to create pitch_randomization: Pitch randomization range in cents (stored as note)

Inputs: weapon_name, num_variations, pitch_randomization. Returns: result

template_ui_soundA

Create a non-spatial UI sound: ActorMixer(UI) + Sound + Event + bus routing.

Args: sound_name: Name for the UI sound bus_path: Output bus path (default: Master Audio Bus)

Inputs: bus_path, sound_name. Returns: result

template_weather_statesB

Create a state-driven weather ambient system: StateGroup + SwitchContainer + per-state Sounds + Event.

Args: weather_states: JSON array of weather state names

Inputs: weather_states. Returns: result

ue5_connectC

Connect to the UE5 audio plugin via TCP.

Args: host: Plugin host address (default 127.0.0.1) port: Plugin TCP port (default 9877)

Inputs: host, port. Returns: result

ue5_duplicate_assetB

Duplicate a UE5 asset from source to destination path.

Copies any asset (MetaSounds, Blueprints, SoundWaves, etc.) to a new location. Useful for cloning existing assets as starting points for modification.

Args: source_path: Source asset path (e.g. /Game/Audio/Foley/MetaSounds/MSS_FoleySound_Walk) dest_path: Destination asset path (e.g. /Game/Audio/Creatures/MSS_Creature_Walk)

Inputs: dest_path (required), source_path (required). Returns: result

ue5_get_infoB

Get UE5 engine info (version, project, features).

Inputs: no named parameters. Returns: result

ue5_statusB

Get combined status of Wwise and UE5 plugin connections.

Inputs: no named parameters. Returns: result

wwise_assign_switchB

Assign a child object to a switch/state value in a SwitchContainer.

Args: switch_container_path: Path to the SwitchContainer (for context only) child_path: GUID or path of the child to assign switch_value: GUID or path of the switch/state value

Inputs: child_path (required), switch_value (required), switch_container_path (required). Returns: result

wwise_connectB

Connect to Wwise via WAAPI.

Args: url: WebSocket URL (default ws://127.0.0.1:8080/waapi)

Inputs: url. Returns: result

wwise_create_eventB

Create a Wwise Event with an Action targeting an object.

Args: name: Event name (e.g. Play_Gunshot_Rifle) target_path: Path to the target object the action acts on action_type: Action type name (Play, Stop, Pause, etc.) event_parent: Parent path for the event (default: Events\Default Work Unit)

Inputs: name (required), target_path (required), action_type, event_parent. Returns: result

wwise_create_game_parameterA

Create a Game Parameter (RTPC) in Wwise.

Creates the GameParameter object. To bind it as an RTPC curve on a specific property, use execute_waapi with ak.wwise.core.object.setRTPCCurve or configure the binding in the Wwise Authoring GUI.

Args: name: GameParameter name (e.g. RTPC_Wind_Intensity) min_value: Minimum range value max_value: Maximum range value default_value: Default value

Inputs: name (required), max_value, min_value, default_value. Returns: result

wwise_create_objectB

Create a Wwise object in the hierarchy.

Args: parent_path: Parent object path (backslash-separated, e.g. \Actor-Mixer Hierarchy\Default Work Unit) object_type: Wwise type (Sound, RandomSequenceContainer, Event, etc.) name: Object name on_conflict: Name conflict mode: merge, rename, replace, fail

Inputs: name (required), object_type (required), parent_path (required), on_conflict. Returns: result

wwise_generate_banksB

Generate Wwise SoundBanks.

Args: bank_names: JSON array of bank names to generate (e.g. ["Weapons_Bank", "UI_Bank"])

Inputs: bank_names (required). Returns: result

wwise_get_infoA

Get Wwise application info (version, platform, project).

Inputs: no named parameters. Returns: result

wwise_import_audioB

Import audio files into Wwise.

Args: audio_files: JSON array of objects with 'audioFile' and 'objectPath' keys. Example: [{"audioFile": "/path/to/shot.wav", "objectPath": "\Actor-Mixer Hierarchy\Default Work Unit\Shot_01"}] import_operation: createNew, useExisting, or replaceExisting language: Import language (default SFX)

Inputs: audio_files (required), language, import_operation. Returns: result

wwise_previewB

Preview a Wwise object (Event, Sound, Container) via transport.

Args: object_path: Path to the object to preview action: Transport action — play, stop, or pause

Inputs: object_path (required), action. Returns: result

wwise_queryC

Query Wwise objects using WAQL.

Args: waql: WAQL query string (e.g. '$ from type sound') return_fields: JSON array of fields to return

Inputs: waql (required), return_fields. Returns: result

wwise_saveB

Save the current Wwise project.

Inputs: no named parameters. Returns: result

wwise_set_attenuationB

Create an Attenuation ShareSet and set its distance curve.

Args: name: Attenuation name curve_type: Curve type (VolumeDryUsage, LowPassFilterUsage, etc.) curve_points: JSON array of {x, y, shape} points parent_path: Parent path (default: Attenuations\Default Work Unit)

Inputs: name (required), curve_type (required), curve_points (required), parent_path. Returns: result

wwise_set_propertyB

Set a property on a Wwise object.

Args: object_path: Object path or GUID property_name: Property name (Volume, Pitch, Lowpass, IsLoopingEnabled, etc.) value: JSON-encoded value (number, bool, or string)

Inputs: value (required), object_path (required), property_name (required). Returns: result

wwise_set_referenceB

Set a reference on a Wwise object (e.g. OutputBus, Attenuation).

Args: object_path: Object path or GUID reference: Reference name (OutputBus, Attenuation, SwitchGroupOrStateGroup, etc.) value: Target object path or GUID

Inputs: value (required), reference (required), object_path (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 81 tools

    Disambiguation3/5

    Prefixes (wwise_, ms_, bp_) separate major domains, but there are overlapping high-level and low-level paths: ms_build_graph wraps ms_validate_graph/ms_graph_to_commands/ms_save_asset, bp_wire_audio_param wraps bp_add_bp_node/bp_connect_bp_pins, and wwise_create_object overlaps with wwise_create_event. Descriptions usually clarify intent, but several boundaries remain easy to confuse.

    Naming Consistency3/5

    Tool names use snake_case throughout, but the prefixing convention is mixed: some domains are consistently prefixed (wwise_, ms_, bp_), while many editor/system tools are generic and unprefixed (build_audio_system, place_anim_notify, find_actor, spawn_audio_emitter). This is readable but not a predictable single pattern.

    Tool Count1/5

    With 81 tools, the surface is far beyond a well-scoped set and well past the 50+ threshold for extreme mismatch. Even accounting for Wwise, MetaSounds, Blueprint, and UE5 editor domains, the count creates heavy selection and context burden.

    Completeness4/5

    The surface is very broad, covering Wwise authoring, MetaSounds graph construction, Blueprint wiring/scanning, UE5 actor/editor operations, templates, import/export, sync, and auditing. Explicit delete/move/rename operations and some asset lifecycle operations are missing, though WAAPI escape hatches and high-level builders cover most practical workflows.

    Maintenance

    ActivitySlowing
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      A comprehensive bridge connecting AI agents to Unreal Engine 5.7 through 39 MCP tools for scene manipulation, asset management, and blueprint control. It enables real-time perception and editor automation using the Remote Control API and file-based protocols.
      25
      3
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Unreal Engine 5.7 editor plugin that gives AI assistants full read/write access to Blueprints, Materials, Animation, Niagara, Config, and more via MCP. 119 actions across 9 domains, pure C++, embedded Streamable HTTP server.
      370
      MIT