SK Wwise MCP
Provides tools for interacting with Audiokinetic Wwise through its WAAPI, enabling AI agents to browse, edit, audition, profile, and build Wwise projects.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SK Wwise MCPbrowse the current Wwise project and list all SoundBanks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SK Wwise MCP
A modular suite of MCP (Model Context Protocol) servers for Audiokinetic Wwise, enabling AI agents to browse, edit, audition, profile, and build Wwise projects through the Wwise Authoring API (WAAPI).
Each server is capped at 15 tools to minimize LLM tool confusion, with Agent Skills routing for multi-agent orchestration.
Easy Setup (Windows, no Python required)
For Windows users who don't want to install Python or clone the repo:
Download
sk-wwise-mcp.zipfrom the latest release.Unzip anywhere on disk.
Open Wwise with WAAPI enabled (Project Settings → Authoring API → "Enable Wwise Authoring API").
Open a terminal in the unzipped folder and run:
claudeApprove the MCP servers when prompted.
That's it. The bundle ships a single sk-wwise-mcp.exe (no Python install needed), a pre-configured .mcp.json registering all 12 servers, and .claude/skills/ for routing — all auto-discovered by Claude CLI on launch.
First launch shows a Windows SmartScreen warning because the binary isn't code-signed. Click More info → Run anyway once and Windows remembers it.
Using the bundle with other agents
The sk-wwise-mcp.exe speaks standard MCP over stdio, so it works with any MCP-compatible agent — Cursor, VS Code Copilot, Windsurf, Continue, Gemini CLI, etc. Auto-detection of a top-level .mcp.json is Claude Code-specific; other agents need the entries copied into their own config file. Generic shape, point your agent's MCP config at the exe with the matching --server arg:
{
"command": "C:/path/to/sk-wwise-mcp/sk-wwise-mcp.exe",
"args": ["--server", "browse"]
}Common locations for the MCP config:
Agent | Config path | Root key | Notes |
Claude Code |
|
| Already in the bundle — no setup |
Cursor |
|
| ~40-tool ceiling — see below |
VS Code Copilot |
|
| NOT |
Windsurf |
|
| User-level only; 100-tool ceiling |
Gemini CLI |
|
| Supports project-level config |
The bundled .mcp.json registers all 12 servers — copy entries from there into your agent's config and adjust the command path to where you unzipped the bundle. Agent Skills in .claude/skills/ follow the open spec and load automatically in tools that support it; agents that don't read skills still work, you'll just need to nudge tool selection in your prompts.
Cursor users: This bundle exposes 97 tools across 12 servers. Cursor caps active MCP tools at ~40 across all servers combined — register only the servers you need (e.g.,
browse+objects+auditioncovers most workflows at ~25 tools).
For development setup (Python, editable install, testing) see Quick Start below.
Related MCP server: Hayba
Features
97 tools across 12 MCP servers, covering the full WAAPI surface
Agent Skills spec compliant — works with Claude Code, Cursor, VS Code Copilot, Gemini CLI, and 30+ other agent tools
Thread-safe WAAPI dispatcher with queue-based serialization and backpressure handling
WwiseConsole CLI integration for headless operations (project creation, SoundBank generation, migration)
450 unit tests (mocked WAAPI) + 44 integration tests (live Wwise)
Servers
Server | Tools | Description |
| 14 | Read-only project inspection, object queries, property discovery |
| 7 | Create, delete, rename, move, copy objects; set properties and references |
| 9 | Switch/Blend Container assignments, State Groups, randomizer, attenuations, Game Parameter ranges |
| 12 | Audio import/conversion, SoundBank management, tab-delimited generation, project save, logs |
| 4 | Transport-based playback preview |
| 3 | Audio source peaks, Media Pool queries |
| 13 | Wwise UI automation — layouts, commands, selection, screenshots |
| 12 | Read-only profiler data — voices, busses, CPU, meters, RTPCs |
| 7 | Profiler capture control, meter registration, cursor navigation |
| 4 | Remote connection to devkits and game instances |
| 9 | WwiseConsole CLI — no WAAPI needed |
| 3 | Fallback — discover and call any WAAPI function |
Requirements
Python 3.12+
Wwise 2024.1+ (with WAAPI enabled for most servers)
uv(recommended) orpipfor dependency management
Wwise 2025.1 Hierarchy Rename
Wwise 2025.1 renamed the top-level hierarchies:
Pre-2025.1 | 2025.1+ |
|
|
|
|
All paths in this project (tool descriptions, test cases, examples) use the 2025.1+ names. If you're running Wwise 2024.x or earlier, replace \Containers with \Actor-Mixer Hierarchy and \Busses with \Master-Mixer Hierarchy in your queries.
Quick Start
1. Clone and run setup
Windows:
git clone https://github.com/silver-rain-dev/sk-wwise-mcp
cd sk-wwise-mcp/sk-wwise-mcp
setup.batmacOS / Linux:
git clone https://github.com/silver-rain-dev/sk-wwise-mcp
cd sk-wwise-mcp/sk-wwise-mcp
./setup.shThe setup script will:
Install dependencies (via
uvorpip)Let you choose which servers to enable
Generate a
.mcp.jsonwith the correct paths for your machine
2. Start Wwise
Open Wwise with a project and ensure WAAPI is enabled (Project > User Preferences > Enable Wwise Authoring API).
3. Verify connectivity
In Claude Code or your agent:
Ping Wwise to check if it's availablecd sk-wwise-mcp/sk-wwise-mcp
uv sync # or: python -m venv .venv && .venv/Scripts/pip install -e .Then add servers to your .mcp.json (project root) or ~/.claude.json (global):
{
"mcpServers": {
"sk-wwise-browse": {
"command": "/path/to/.venv/Scripts/python.exe",
"args": ["/path/to/mcp_browse/server.py"]
}
}
}Use forward slashes on Windows. Repeat for each server — see .mcp.json in the repo root for the full list.
Project Structure
sk-wwise-mcp/
├── .claude/skills/ # Agent Skills (SKILL.md per server)
│ ├── wwise-global/ # Global rules and workflows
│ ├── wwise-browse/ # Browse server skill
│ ├── wwise-objects/ # Objects server skill
│ └── ... # One per server
├── core/ # Shared business logic
│ ├── waapi_util.py # WAAPI connection, dispatcher, ping
│ ├── query.py # Object queries, property inspection
│ ├── objects.py # Object CRUD operations
│ ├── pipeline.py # Import, SoundBank, save
│ ├── transport.py # Transport playback
│ ├── media.py # Audio peaks, Media Pool
│ ├── profiling.py # Profiler data retrieval
│ ├── ui.py # UI automation
│ ├── wwise_cli.py # WwiseConsole CLI wrapper
│ ├── audio_convert.py # Non-WAV to WAV conversion (ffmpeg)
│ └── generic_handling.py # Generic WAAPI passthrough
├── mcp_browse/ # Read-only project inspection
├── mcp_objects/ # Object editing
├── mcp_containers/ # Container-specific config
├── mcp_pipeline/ # Import and build pipeline
├── mcp_audition/ # Transport playback
├── mcp_media_read/ # Audio analysis
├── mcp_ui/ # UI automation
├── mcp_profiling/ # Profiler data (read-only)
├── mcp_profiling_control/ # Profiler control
├── mcp_remote/ # Remote connection
├── mcp_command_line/ # WwiseConsole CLI
├── mcp_generic/ # Fallback WAAPI passthrough
└── tests/ # 450 unit + 44 integration testsPhilosophy
This project is an exploration of how AI agents can assist with large-scale Wwise production work — the tedious, repetitive tasks that eat hours (bulk renaming, auditing property consistency across hundreds of objects, generating SoundBanks, diffing configurations) — while minimizing the risk of unwanted changes to the project.
The core tension: AI is most useful when it can take action, but Wwise projects are complex and a wrong edit can silently break audio behavior in ways that surface much later. This project's architecture is designed around that tension — let the agent help with the heavy lifting, but make it structurally difficult for it to do things it shouldn't.
This is not a finished product. It's a working experiment in finding the right boundary between AI assistance and human control for audio middleware.
Why no Sound Engine (ak.soundengine) coverage
WAAPI exposes both authoring functions (ak.wwise.*) and sound engine functions (ak.soundengine.*). This project deliberately covers only the authoring side.
The sound engine API triggers real-time audio behavior — posting events, setting RTPCs, setting states and switches, seeking — the same operations that the game runtime performs. Exposing these to an AI agent creates a debugging nightmare: if something sounds wrong during a session, was it the game posting an event, or the LLM? With authoring operations the scope is clear — the agent changed a property in the project, and the change is visible in the UI and saved to the work unit. Sound engine calls leave no such trail.
Sound engine interaction belongs in a more controlled environment: game-side tooling, automated test harnesses, or direct scripting where every call is logged and traceable. Not behind an AI agent whose decision-making is opaque by nature.
The one exception is transport-based playback (mcp_audition), which uses ak.wwise.core.transport.* — an authoring API that previews sounds within the Wwise editor without affecting game-side state.
Architecture
Server Separation Philosophy
Most MCP projects expose one server with all tools. This project deliberately splits into 12 servers for three reasons:
Role-based access control
Not every user needs every tool. By separating servers along permission boundaries, teams can grant access by role:
Role | Servers | Can do |
Sound designer (junior) | browse, audition, media_read | Explore the project, preview sounds, inspect audio |
Sound designer (senior) | + objects, containers | Create/edit objects, configure containers |
Build engineer | + pipeline, command_line | Import audio, generate SoundBanks, run CLI operations |
QA / profiling | + profiling, profiling_control, remote | Profile performance, connect to devkits |
Admin | all servers | Full access including UI automation and generic WAAPI |
An agent with only browse enabled physically cannot delete objects or overwrite SoundBank settings — the tools don't exist in its context. This is a stronger guarantee than relying on prompt instructions like "don't modify anything."
Read/write separation
Servers are split by intent and access level, not by WAAPI namespace:
Read-only servers (
browse,profiling,media_read) cannot modify the project. Safe to give to any agent or user without risk.Edit servers (
objects,containers) modify project state — object creation, deletion, property changes.Pipeline servers (
pipeline,command_line) handle import/build operations that affect files on disk.Runtime servers (
audition,remote,profiling_control) control playback, profiling, and remote connections through the authoring tool.
This means you can build a "read-only assistant" by enabling only the read servers, or a "full authoring agent" by enabling everything. The separation is enforced at the transport level — there's no way to accidentally call a write tool from a read-only server.
LLM tool routing accuracy
LLMs get worse at selecting the right tool as the tool count grows. By capping each server at ~15 tools, the model sees a focused set of tools relevant to the task. Agent Skills (.claude/skills/) route the LLM to the correct server based on the user's intent, keeping the active tool set small even though 95 tools exist across the suite.
Thread-Safe WAAPI Dispatcher
All WAAPI calls are serialized through a queue-based dispatcher (core/waapi_util.py), ensuring:
Thread-safe access to the WebSocket connection
Backpressure handling (queue max: 10,000)
Automatic reconnection on stale connections
Agent Skills
The .claude/skills/ directory contains Agent Skills files that route LLMs to the correct server based on the task. The wwise-global skill contains shared rules and workflow patterns.
Testing
Unit Tests
cd sk-wwise-mcp
uv run pytest tests/ -vUnit tests use mocked WAAPI calls — no Wwise instance needed.
Integration / Eval Tests
The tests/eval/ directory contains an integration test suite that verifies MCP tool routing against a live Wwise project. It checks that the LLM selects the correct tools for each prompt.
39 test cases across 6 categories: browse, audition, generic, objects, media-read, cross-server.
Running the eval
Setup — create a test project with known objects via the
eval-setupClaude Code skill:/eval-setupThis creates a headless WwiseConsole project at
tests/eval/EvalTestProject/with:Actor-Mixer hierarchy (Sounds, Random Container, Switch Container)
Events, State Groups, Switch Groups with assignments
Audio files imported into all Sounds (for media/peaks tests)
Attenuation ShareSet with volume curve
Differing properties on Footstep_01/02 (for diff tests)
Run — iterate through all test cases using either skill:
/eval-batch— runs up to 10 cases per invocation (recommended):/loop 60s /eval-batchFinishes all 39 cases in ~4 iterations. Each invocation picks up where the last left off.
/eval-routing— runs 1 case per invocation (fine-grained):/loop 30s /eval-routingBoth log which MCP tools were called and verify against expected tools.
Report — view results:
python tests/eval/report.pyTeardown — clean up:
/eval-teardown
Eval architecture
test_cases.json— prompt + expected tools for each caseverify.py— compares actual tool calls against expected, writestest_results.jsonreport.py— generates pass/fail summary by categorylog_tool.py— PostToolUse hook that logs MCP tool calls totool_log.jsonl.claude/settings.json— configures the PostToolUse hook
Connection resilience
core/waapi_util.py includes self-healing connection logic:
Ping before call — detects stale WAAPI connections
Auto-reconnect — creates a fresh WaapiClient if the connection is dead
Auto-restart headless server — if a
.waapi_server.lockfile exists (written bycli_start_waapi_server), the server is automatically restarted when unresponsiveNo-op for UI sessions — if the user runs Wwise with the UI (no lockfile), connection failures surface as clear errors without attempting restart
Example Prompts
Show me all Events in my Wwise project
How many Sound objects are under Containers?
Compare the settings between Footstep_Walk and Footstep_Run
Import all .wav files from C:/audio/ into a Random Container
Play the sound at \Containers\Default Work Unit\Footstep
What's the CPU usage in the profiler right now?
Create a new Wwise project at C:/MyGame/MyGame.wproj for Windows and PS5Contributing
This project is not accepting direct tool contributions. Adding or modifying MCP tools affects LLM routing accuracy across the entire suite — each change requires running the eval framework against a live Wwise project, which involves LLM API costs and manual verification.
If you'd like to extend the tool suite:
Bug reports and feature requests — please open an issue
Custom tools for your team — fork the repo and add tools to your fork. Use the eval framework (
tests/eval/) to validate that your changes don't break routing accuracy
Why not automate routing tests in CI? Full routing validation requires sending prompts to an LLM to see which tools it selects — results aren't fully deterministic, and each run takes time to verify. The current eval framework runs interactively via Claude Code skills, validating routing accuracy across 39 test cases with manual review. If you're already on a Claude Max/Pro subscription, running the eval incurs no additional API costs.
License
See LICENSE for details.
Available Tools
15 toolsbuild_object_info_queryARead-onlyIdempotent
Builds a WAAPI ak.wwise.core.object.get query dict from structured parameters. Use this to construct a query before calling execute_waapi_query.
Args: from_path: Root paths to query from. e.g. ["\Containers"] or ["\Events"] from_type: Object types to query from. e.g. ["Sound", "Event", "RandomSequenceContainer"] return_fields: Fields to return per object. Common: "id", "name", "type", "path", "shortId", "parent" select_transform: Traversal direction. One of: "descendants", "ancestors", "children", "parent" where_name_contains: Filter results to objects whose name contains this string. where_type_is: Filter results to specific object types. e.g. ["Sound", "BlendContainer"]
Examples: All descendants of Containers: from_path=["\Containers"], select_transform="descendants"
All Events containing "footstep":
from_path=["\Events"], select_transform="descendants",
where_name_contains="footstep", where_type_is=["Event"]
All busses:
from_path=["\Busses"], select_transform="descendants",
where_type_is=["Bus", "AuxBus"]
Children of a specific container:
from_path=["\Containers\Default Work Unit\SFX"],
select_transform="children"IMPORTANT — Inherited properties: Properties like @OutputBus return the LOCAL value, not the effective (inherited) value. If @OverrideOutput is false, the object inherits its output bus from an ancestor. To find the actual routing, query the object's ancestors (select_transform="ancestors") and return @OutputBus and @OverrideOutput to find the nearest ancestor that sets the effective bus.
| Name | Required | Description | Default |
|---|---|---|---|
| from_path | No | ||
| from_type | No | ||
| return_fields | No | ||
| select_transform | No | ||
| where_name_contains | No | ||
| where_type_is | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds critical behavioral information beyond annotations: it explains that properties like @OutputBus return the local, not effective, inherited value, and how to obtain the effective value by querying ancestors. This is substantial additional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections: main purpose, Args, Examples, and an Important note. It is front-loaded with the key purpose. However, it is somewhat verbose, containing extensive examples and detailed parameter descriptions, which could be slightly condensed without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no output schema, but rich annotations), the description covers the purpose, parameter details, usage context, and an important behavioral nuance (inherited properties). Examples cover typical use cases, making it complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, yet the description provides detailed explanations for all 6 parameters, including types, defaults, and examples. It fully compensates for the schema's lack of descriptions, adding significant meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Builds a WAAPI ak.wwise.core.object.get query dict from structured parameters.' It specifies the verb 'Builds' and the resource 'query dict', and differentiates from siblings like execute_waapi_query by setting up the query to be used with it. Examples further solidify the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to construct a query before calling execute_waapi_query,' providing clear usage context. Examples demonstrate common cases. However, it does not explicitly list when not to use it or alternatives, which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_wwise_objectsARead-onlyIdempotent
Compare two Wwise objects and return the properties, references, and lists that differ between them.
Useful for auditing ("do these two sounds have the same settings?") and Paste Properties workflows.
Args: source_path: Project path of source object. source_guid: GUID of source object. source_name_with_type: type:name of source object. e.g. "Sound:Footstep_Walk" target_path: Project path of target object. target_guid: GUID of target object. target_name_with_type: type:name of target object. e.g. "Sound:Footstep_Run"
Provide exactly one source identifier and one target identifier.
Object identification (same for source and target): - path: "\Containers\Default Work Unit\Footstep" - GUID: "{aabbcc00-1122-3344-5566-77889900aabb}" - type:name: "Sound:Footstep_Walk", "Event:Play_Sound_01", "Global:245489792"
Returns: properties: array of property/reference names that differ (e.g. ["Volume", "Pitch", "Lowpass"]) lists: array of list names that differ (e.g. ["Effects", "RTPC"])
| Name | Required | Description | Default |
|---|---|---|---|
| source_path | No | ||
| source_guid | No | ||
| source_name_with_type | No | ||
| target_path | No | ||
| target_guid | No | ||
| target_name_with_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds the return format (properties and lists arrays) and confirms it is a comparison operation. No behavioral traits beyond annotations, but it provides useful output context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear purpose sentence, usage suggestion, parameter list with examples, and return format. Every sentence adds value without unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains the return structure (properties and lists arrays). It covers input requirements, identifier formats, and output expectations. The tool is simple enough that this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides detailed parameter semantics: explains each parameter (source_path, source_guid, source_name_with_type, etc.), gives examples of identifier formats (path, GUID, type:name), and states that exactly one identifier per object should be provided. This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares two Wwise objects and returns differing properties, references, and lists. The verb 'compare' and resource 'Wwise objects' are specific, and the tool is distinct from siblings like get_wwise_object_info which retrieves info for a single object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions use cases 'auditing' and 'Paste Properties workflows' but does not explicitly state when not to use this tool or provide alternatives. It implies usage but lacks clear exclusions or comparison with siblings like get_property_and_reference_names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blend_track_assignmentsARead-onlyIdempotent
Get the list of assignments for a Blend Track. Only accepts GUIDs.
Use this to inspect which children are assigned to a Blend Track and their crossfade edge config.
Args: blend_track_guid: The GUID of the Blend Track. e.g. "{aabbcc00-1122-3344-5566-77889900aabb}"
Returns {"return": [...]} — array of assignments, each containing: child: GUID of the assigned child object index: position among the Blend Track's assignments edges: array of 2 edge configs [left, right], each with: fadeMode: "None", "Manual", or "Automatic" fadeShape: curve shape (Linear, SCurve, etc.) edgePosition: position within the Game Parameter range fadePosition: fade curve start/end (Manual mode only)
| Name | Required | Description | Default |
|---|---|---|---|
| blend_track_guid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, destructiveHint=false, and idempotentHint=true. The description adds value by detailing the return format (child, index, edges) and the GUID constraint, without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, opening with a clear purpose, followed by parameter details and a structured explanation of the return value. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple resource (one parameter, read-only), the description fully covers the input constraint, parameter, and output structure. No output schema exists, so the detailed return format is essential and provided. No gaps for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides a clear explanation for the single parameter blend_track_guid, including an example GUID. This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it retrieves a list of assignments for a Blend Track, including child GUIDs, index, and edge configs. While the name already identifies the resource, it does not explicitly differentiate from similar sibling tools like get_switch_container_assignments, but the focus on Blend Tracks is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Only accepts GUIDs' and implies usage for inspecting assignments, but lacks explicit guidance on when to use this tool versus alternatives (e.g., get_switch_container_assignments) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_effective_output_busARead-onlyIdempotent
Resolve the effective (inherited) output bus for an Actor-Mixer hierarchy object.
WAAPI's @OutputBus returns the LOCAL value, which defaults to "Master Audio Bus" when an object has not set Override Output. This tool walks the ancestor chain to find the first non-default @OutputBus assignment and returns its full bus path.
Args: object_path: Project path. e.g. "\Actor-Mixer Hierarchy\Default Work Unit\SFX\Barrage" object_guid: GUID. e.g. "{aabbcc00-1122-3344-5566-77889900aabb}" object_name_with_type: type:name. e.g. "Sound:Barrage"
Provide exactly one of object_path, object_guid, or object_name_with_type.
Returns: object: {name, path, type} of the queried object effective_bus: {id, name} of the resolved output bus bus_path: full project path of the bus (e.g. "\Master-Mixer Hierarchy\Default Work Unit\Master Audio Bus\SFX") is_hdr: whether the object is inside an HDR window (true if the resolved bus or any of its bus ancestors has HdrEnable=true) hdr_bus: {id, name, path} of the bus that establishes the HDR window, or null if not in one set_by: "self", the ancestor path that sets the override, or "default (no ancestor overrides)"
| Name | Required | Description | Default |
|---|---|---|---|
| object_path | No | ||
| object_guid | No | ||
| object_name_with_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent, but the description adds behavioral details: walking ancestor chain, returning effective bus, HDR detection, and explaining the difference from local @OutputBus. This adds significant context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, parameter list, and return explanation. It is slightly verbose but each section earns its place. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity with inheritance and multiple return fields. The description covers inputs, behavior, and all return fields comprehensively. Despite no output schema, the return structure is fully documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining each parameter with format examples (project path, GUID, type:name) and the constraint to provide exactly one. This is essential for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it resolves the effective inherited output bus for an Actor-Mixer hierarchy object, distinguishing itself from WAAPI's local @OutputBus. The verb 'Resolve' and resource 'output bus' are specific, and sibling tools do not overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides parameter usage guidance (provide exactly one of three identifiers) but does not explicitly state when to use this tool over siblings or context. It implies its purpose but lacks situational guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_property_and_reference_namesARead-onlyIdempotent
Get all valid property and reference names for a Wwise object.
Returns lists of properties (e.g. Volume, Pitch) and references (e.g. Attenuation, OutputBus) that can be used with setProperty / setReference calls.
Args: object_path: Project path to the object. e.g. "\Containers\Default Work Unit\Footstep" object_guid: GUID of the object. e.g. "{aabbcc00-1122-3344-5566-77889900aabb}" object_name_with_type: Name qualified by type or short ID. e.g. "Sound:Footstep_Walk", "Event:Play_Sound_01", "Global:245489792" Supported types: StateGroup, SwitchGroup, SoundBank, GameParameter, Event, Effect, AudioDevice, Trigger, Attenuation, DialogueEvent, Bus, AuxBus, Conversion, ModulatorLfo, ModulatorEnvelope, ModulatorTime, Platform, Language, AcousticTexture, Global class_id: Class ID (unsigned 32-bit integer) of the object type.
Provide exactly one of object_path, object_guid, object_name_with_type, or class_id.
| Name | Required | Description | Default |
|---|---|---|---|
| object_path | No | ||
| object_guid | No | ||
| object_name_with_type | No | ||
| class_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, destructiveHint false, and idempotentHint true. The description adds value by specifying the return structure (lists of properties and references) and the constraint that exactly one identifier must be provided. This context is not captured by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, return description, and parameter list. It is slightly lengthy due to detailed examples for each parameter, but every sentence adds value. Front-loading the purpose aids quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with no output schema, the description adequately explains the input constraints and output content (lists of properties/references). It does not cover error cases or how to choose between identifiers, but given the complexity, it is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must fully explain parameters. It does so with clear examples and supported types for object_name_with_type. Additionally, it states the crucial constraint that exactly one parameter must be provided, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves valid property and reference names for a Wwise object, with examples of properties and references. It distinguishes from sibling tools like get_wwise_object_info or get_wwise_property_info by focusing specifically on names usable with setProperty/setReference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need names for setting properties/references, but does not explicitly contrast with alternatives or state when not to use it. Sibling tools exist for other object information, but no guidance is given on choosing this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_switch_container_assignmentsARead-onlyIdempotent
Get the switch/state-to-child assignments for a Switch Container.
Returns which child object plays for each switch or state value. Use this to audit assignments, find unassigned switches, or document switch mappings.
Args: object_path: Project path to the Switch Container. e.g. "\Containers\Default Work Unit\Footstep_Switch" object_guid: GUID of the Switch Container. object_name_with_type: type:name. e.g. "Global:245489792"
Provide exactly one of object_path, object_guid, or object_name_with_type.
Returns {"return": [...]} — array of assignment pairs, each containing: child: GUID/name/path of the child object assigned to a switch/state stateOrSwitch: GUID/name/path of the switch or state value
| Name | Required | Description | Default |
|---|---|---|---|
| object_path | No | ||
| object_guid | No | ||
| object_name_with_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the description adds limited behavioral context beyond return structure. It discloses that the tool returns an array of assignment pairs, which is helpful but not required given annotations. Overall, annotations cover safety, and description adds moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a single-line summary, two usage sentences, a clear parameter list with examples, and a return type definition. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description includes the return structure (array with 'child' and 'stateOrSwitch' fields). The tool has three parameters but is simple; the description covers use cases and parameter constraints, making it complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, but the description documents all three parameters with clear roles and an example for object_name_with_type. It also specifies the mutual exclusivity requirement. This fully compensates for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets 'switch/state-to-child assignments for a Switch Container,' specifies what it returns, and uses action verbs like 'Get' and 'Returns.' It distinguishes this tool from siblings by being specific to switch container assignments, unlike generic 'get_wwise_object_info' or 'get_blend_track_assignments.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context: 'Use this to audit assignments, find unassigned switches, or document switch mappings.' It also instructs to provide exactly one of the three parameters. However, it does not explicitly say when NOT to use this tool or mention alternative sibling tools, which would improve guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wwise_attenuation_curveARead-onlyIdempotent
Get the curve points for an attenuation object.
Args: curve_type: Type of attenuation curve. One of: Volume: "VolumeDryUsage", "VolumeWetGameUsage", "VolumeWetUserUsage" Filter: "LowPassFilterUsage", "HighPassFilterUsage", "DualShelfUsage" Spatial: "SpreadUsage", "FocusUsage" Obstruction: "ObstructionVolumeUsage", "ObstructionHPFUsage", "ObstructionLPFUsage", "ObstructionDSFUsage" Occlusion: "OcclusionVolumeUsage", "OcclusionHPFUsage", "OcclusionLPFUsage", "OcclusionDSFUsage" Diffraction: "DiffractionVolumeUsage", "DiffractionHPFUsage", "DiffractionLPFUsage", "DiffractionDSFUsage" Transmission:"TransmissionVolumeUsage", "TransmissionHPFUsage", "TransmissionLPFUsage", "TransmissionDSFUsage" object_path: Project path to the attenuation object. e.g. "\Attenuations\Default Work Unit\Att_Footstep" object_guid: GUID of the attenuation object. object_name_with_type: type:name. e.g. "Attenuation:Att_Footstep" platform: Platform name or GUID. Optional — omit for linked/default curve.
Provide exactly one of object_path, object_guid, or object_name_with_type.
Returns: curveType: the curve type name use: "None" (no points), "Custom" (own points), "UseVolumeDry" (shares VolumeDry curve), or "UseProject" (uses global Project Settings curve) points: array of {x, y, shape} where x=distance, y=value, shape=curve segment type (Constant, Linear, Log1-3, Exp1-3, SCurve, InvertedSCurve)
| Name | Required | Description | Default |
|---|---|---|---|
| curve_type | Yes | ||
| object_path | No | ||
| object_guid | No | ||
| object_name_with_type | No | ||
| platform | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds value by detailing the return format (curveType, use, points) and implying a read-only operation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with a clear opening, parameter list, usage note, and return specification. Every sentence adds value, though some slight verbosity could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 0% schema coverage, the description provides complete context for the 5-parameter tool, including return values with possible enumerations. It is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining each parameter: curve_type with its enum-like list, object_path with an example, and platform as optional. It adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the curve points for an attenuation object,' specifying the verb, resource, and scope. It distinguishes itself from sibling tools like get_wwise_object_info by focusing on attenuation curves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit guidance on parameter usage: 'Provide exactly one of object_path, object_guid, or object_name_with_type' and details curve_type options. It does not explicitly state when not to use this tool, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wwise_installation_infoARead-onlyIdempotent
Get information about the running Wwise installation, including version, platform, and build number.
Use this to verify which version of Wwise is running and confirm connectivity to the authoring tool.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, non-destructive, and idempotent. The description adds value by specifying the tool returns version, platform, and build number and can confirm connectivity, which is behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary purpose, and contains no extraneous information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, has thorough annotations, and no output schema, the description is fully complete. It explains what the tool does, what information it returns, and why to use it, leaving no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100%. The description does not need to add parameter information. Per the guidelines, a baseline score of 4 is appropriate for a tool with zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves information about the running Wwise installation, including version, platform, and build number. This verb+resource combination distinguishes it from sibling tools like get_wwise_project_info or get_wwise_object_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: verify Wwise version and confirm connectivity to the authoring tool. While it lacks explicit when-not-to-use or alternatives, the sibling tools cover different aspects, and the use case is clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wwise_object_infoARead-onlyIdempotent
Query Wwise objects and return a summary preview.
IMPORTANT: Always use build_object_info_query() first to construct the query dict, then pass its output to this function. Do NOT hand-craft the query dict directly — the WAAPI query format is complex and error-prone; build_object_info_query() ensures correct structure (from, transform, options) every time.
IMPORTANT: The returned 'preview' only contains the first 10 results. The COMPLETE results are saved to the file path in 'output_file'. You MUST read that file to see all results — do not treat the preview as the full dataset.
Example workflow: query = build_object_info_query( from_path=["\Events"], select_transform="descendants", where_type_is=["Event"], ) results = get_wwise_object_info(query=query)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that preview contains only first 10 results and complete results are saved to a file. No contradiction with annotations (readOnly, idempotent).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear warnings, example workflow, and no unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations and schema, description covers all essential behavioral details, including usage constraints and output handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has only query object with 0% coverage, but description compensates fully by explaining query structure and dependency on build_object_info_query.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it queries Wwise objects and returns a summary preview. It distinguishes from siblings by mentioning the companion function build_object_info_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use build_object_info_query first, warns against hand-crafting queries, and explains limits of preview vs saved file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wwise_object_typesARead-onlyIdempotent
Get all available Wwise object types. No arguments required.
Use this to discover valid type names for queries — pass them to build_object_info_query's from_type or where_type_is parameters. Also useful for getting classId values for build_property_reference_query and build_property_info_query.
Returns {"return": [{"classId": int, "name": str, "type": str}, ...]} Each entry contains: classId: The class ID (unsigned 32-bit integer) of the object type. name: The display name of the object type. type: The type identifier string (e.g. "Sound", "Event", "Bus").
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds 'No arguments required' and details the return format, which provides useful behavioral context beyond annotations. However, it does not add significant new safety or side-effect information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three brief paragraphs: purpose, usage guidance, and return structure. Every sentence provides value, and the most critical information (purpose and no arguments) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, comprehensive annotations, and no output schema, the description is complete. It explains what the tool returns, how to interpret the output, and how to use it with sibling tools. No gaps are evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and schema description coverage is 100%. The description adds 'No arguments required,' which is consistent. With no parameters, the baseline score is 4, and no further parameter meaning is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Get all available Wwise object types,' which is a specific verb+resource combination. It distinguishes itself from sibling tools by explaining that it returns type definitions (classId, name, type) to be used in other queries like build_object_info_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use this to discover valid type names for queries — pass them to build_object_info_query's from_type or where_type_is parameters' and 'Also useful for getting classId values for build_property_reference_query and build_property_info_query.' This provides clear context and links to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wwise_project_infoARead-onlyIdempotent
Get metadata about the currently open Wwise project, including project name, default language, and available platforms.
Use this to understand the project context before performing queries or modifications.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description complements the annotations (readOnlyHint, etc.) by specifying that it returns metadata about the 'currently open' project, adding a behavioral constraint. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the first clearly stating the action and the second providing usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, rich annotations, and no output schema, the description fully covers the necessary context: purpose, what it returns, and when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to explain parameters, and it correctly omits any parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves metadata about the currently open Wwise project, listing specific items like project name, default language, and available platforms. This distinguishes it from sibling tools that focus on individual objects or properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool 'before performing queries or modifications,' providing clear usage context. However, it does not mention when not to use it or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wwise_property_infoARead-onlyIdempotent
Get detailed info about a specific property on a Wwise object (type, min, max, default).
Use get_property_and_reference_names first to discover valid property names. Use this to validate values before calling setProperty.
Args: property_name: The property name to get info for. e.g. "Volume", "Pitch", "Lowpass", "IsLoopingEnabled" object_path: Project path to the object. e.g. "\Containers\Default Work Unit\Footstep" object_guid: GUID of the object. e.g. "{aabbcc00-1122-3344-5566-77889900aabb}" object_name_with_type: Name qualified by type or short ID. e.g. "Sound:Footstep_Walk", "Event:Play_Sound_01", "Global:245489792" class_id: Class ID (unsigned 32-bit integer) as an alternative to object.
Provide property_name plus one of object_path, object_guid, object_name_with_type, or class_id.
Returns the property's type, default value, min/max range, and display name.
| Name | Required | Description | Default |
|---|---|---|---|
| property_name | Yes | ||
| object_path | No | ||
| object_guid | No | ||
| object_name_with_type | No | ||
| class_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering safety. The description adds value by specifying the returned information (type, default, min/max, display name) and the prerequisite tool usage, but does not disclose any additional behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, usage guidance, and a parameter list. It is front-loaded with the most important information and avoids redundancy. The inclusion of 'Args:' and examples adds clarity without being overly verbose, though slightly longer than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, 1 required, multiple identification methods) and lack of output schema, the description is fully complete. It explains return values, prerequisite steps, parameter selection, and provides examples, covering all aspects an agent needs to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, so the description fully compensates. It provides detailed descriptions of each parameter with examples (e.g., property_name: 'Volume', 'Pitch', object_path: '\Containers\Default Work Unit\Footstep', etc.) and clarifies that only one object identifier is needed, adding essential meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets detailed info about a specific property on a Wwise object, listing the returned attributes (type, min, max, default). It distinguishes from sibling tools by recommending use of get_property_and_reference_names first, establishing a clear purpose and differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides the agent to first use get_property_and_reference_names to discover valid property names, and to use this tool to validate values before calling setProperty. It also explains the alternative object identification methods, providing clear context for when and how to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_wwise_property_enabledARead-onlyIdempotent
Check if a property is enabled on a Wwise object for a given platform.
A property can be disabled when it's overridden by a parent or not applicable on a specific platform. All three arguments (object, property, platform) are required.
Args: property_name: The property to check. e.g. "Volume", "Pitch", "Lowpass" platform: Platform name or GUID. e.g. "Windows", "Mac", "iOS", "Android", "PS5", "XboxSeriesX" or a GUID "{aabbcc00-1122-3344-5566-77889900aabb}" object_path: Project path. e.g. "\Containers\Default Work Unit\Footstep" object_guid: GUID. e.g. "{aabbcc00-1122-3344-5566-77889900aabb}" object_name_with_type: type:name. e.g. "Sound:Footstep_Walk"
Provide exactly one of object_path, object_guid, or object_name_with_type.
Returns {"return": true} if the property is enabled, or {"return": false} if the property is disabled.
| Name | Required | Description | Default |
|---|---|---|---|
| property_name | Yes | ||
| platform | Yes | ||
| object_path | No | ||
| object_guid | No | ||
| object_name_with_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, and idempotent behavior. The description adds context about property disablement causes and clarifies the return format. No contradictions or hidden side effects are disclosed, but the description enhances understanding of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary followed by detailed parameter explanations and return format. It is slightly verbose due to examples but remains clear and organized without redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, object identification options) and the presence of annotations covering safety, the description adequately covers purpose, usage, parameter semantics, and return format. It leaves no critical gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed semantics for all parameters, including examples and format for property_name, platform, and object identifiers. It also specifies that exactly one object identifier must be provided, which is critical for correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool checks if a property is enabled on a Wwise object for a given platform. It uses a specific verb and resource, and the purpose is distinct from sibling tools like 'is_wwise_property_linked'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool, including scenarios where a property is disabled due to override or platform inapplicability. It provides guidance on identifying objects via one of three methods, but does not explicitly mention when not to use or compare with alternatives like 'get_wwise_object_info'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_wwise_property_linkedARead-onlyIdempotent
Check if a property on a Wwise object is linked (shared across all platforms) or unlinked (has platform-specific values).
All three arguments (object, property, platform) are required.
Args: property_name: The property to check. e.g. "Volume", "Pitch", "Lowpass" platform: Platform name or GUID to check against. e.g. "Windows", "Mac", "iOS", "Android", "PS5", "XboxSeriesX" or a platform GUID "{aabbcc00-1122-3344-5566-77889900aabb}" object_path: Project path. e.g. "\Containers\Default Work Unit\Footstep" object_guid: GUID. e.g. "{aabbcc00-1122-3344-5566-77889900aabb}" object_name_with_type: type:name. e.g. "Sound:Footstep_Walk"
Provide exactly one of object_path, object_guid, or object_name_with_type.
Returns {"linked": true} if the property is linked (shared across platforms), or {"linked": false} if it has a platform-specific override for the given platform.
| Name | Required | Description | Default |
|---|---|---|---|
| property_name | Yes | ||
| platform | Yes | ||
| object_path | No | ||
| object_guid | No | ||
| object_name_with_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnly, destructive false, idempotent. The description adds that it returns {'linked': true/false} and the constraint of providing exactly one object identifier. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear summary first, then parameter list with examples. It is appropriately sized for a tool with 5 parameters, but could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description includes the return format. It covers parameter constraints and usage comprehensively, but could mention potential error cases or platform format variations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully explains all 5 parameters with examples and constraints (e.g., 'Provide exactly one of object_path, object_guid, or object_name_with_type'). This compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Check if a property on a Wwise object is linked...' with specific verb 'Check' and resource 'property on a Wwise object'. It distinguishes from sibling tools by focusing on the linked/unlinked aspect, and provides full argument details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to check linking status) and the required arguments, but does not explicitly state when not to use it or provide alternative tools. However, the context is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_wwiseARead-onlyIdempotent
Check if WAAPI is currently available. No arguments required.
Returns {"isAvailable": true} if Wwise is running and WAAPI is ready. Returns {"isAvailable": false} if Wwise is not running, WAAPI is disabled, or a modal dialog is blocking WAAPI access.
Use this before other calls to verify connectivity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, idempotentHint. The description adds detail: it explains possible failure states (Wwise not running, WAAPI disabled, modal dialog blocking) and the exact return format. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences. Each sentence provides essential information: purpose, return behavior, and usage guidance. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple ping tool with no parameters, the description fully covers what the tool does, when to use it, and what to expect in return. It is complete and self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters expected, and schema coverage is 100%. The description doesn't need to add parameter info but still adds value by explaining what the tool does and returns. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Check if WAAPI is currently available.' It specifies the resource (WAAPI) and the action (ping/check). It distinguishes from sibling tools like build_object_info_query or get_wwise_object_info by being a simple connectivity check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this before other calls to verify connectivity.' This gives direct guidance on when to use the tool, and the context of being a prerequisite for other operations is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: query building, object comparison, assignment inspection, property info, connectivity checks, etc. No two tools overlap significantly; even closely related tools like build_object_info_query and get_wwise_object_info serve different roles (constructor vs executor).
All tool names follow a consistent verb_noun pattern in snake_case. Groupings like 'get_wwise_*' and 'is_wwise_*' are predictable, and each verb clearly indicates the action (ping, build, diff, get). No mixed conventions or vague verbs.
15 tools is an appropriate scope for a Wwise middleware server. It covers essential query, inspection, and validation operations without being overwhelming. Each tool earns its place, providing a focused but useful interface.
The tool set is strong on inspection (query, diff, property info) but lacks any mutation tools (create, update, delete, setProperty). Given that the domain includes audio project editing, the absence of write operations is a notable gap that forces agents into a read-only workflow, limiting practical use.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server that enables AI coding agents to control FMOD Studio for audio import, event creation, and bank building via TCP scripting.211MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server enabling AI agents to author Unreal Engine 5 scenes directly, with tools for spawning actors, building PCG graphs, validating physics, generating terrain, and more through a single MCP connection.12MIT
- AlicenseNot gradedqualityDmaintenanceA comprehensive audio MCP server that enables AI agents to generate speech, transcribe audio, clone voices, analyze speech quality, design soundscapes, and manage audio assets through a standardized interface.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI-powered game audio creation for Unreal Engine 5.7, integrating Wwise, MetaSounds, and Blueprint through MCP tools to generate DSP graphs, sound systems, and trigger logic.6MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/silver-rain-dev/sk-wwise-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server