Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
event_playA

Play an event instance — the equivalent of pressing play in FMOD Studio's transport controls. This is how you actually hear a result instead of guessing from the event tree.

Args: target: event:// path or {guid}.

event_stopA

Stop a playing event instance.

Args: target: event:// path or {guid}. immediate: True (default) stops instantly, skipping the stopping state. False lets release/fade-outs and one-shot tails play out before stopping.

event_toggle_pauseC

Toggle the pause state of a playing event instance.

Args: target: event:// path or {guid}.

event_key_offA

Send the keyoff command to a playing event instance — triggers the release behavior for any sustain point ahead of the playhead.

Args: target: event:// path or {guid}.

event_return_to_startA

Return a playing/paused/stopping event instance's timeline playback position to the cursor (or to the timeline start, if the instance is stopped).

Args: target: event:// path or {guid}.

event_playback_statusA

Check whether an event instance is playing/paused/stopping, and its current timeline playhead position — use this to validate a play/stop/pause call actually took effect.

Args: target: event:// path or {guid}.

automation_add_curveA

Bind a property to a curve so it changes as the driver changes — e.g. crossfade music layers by automating each layer's volume against an "Intensity" parameter. Reuses an existing curve for the same target/property/driver if one exists (adding these points to it) rather than creating a duplicate — call automation_list first if unsure whether one's already there.

Args: target: Mixer group/bus/VCA/event mixer group {guid} — NOT a track guid (use mixerGroupGuid, not trackGuid). property: 'volume' | 'pitch' | 'gain'. driver: 'parameter:/Name' (parameter-driven) or 'event:/...' (timeline-driven). driver_type: 'parameter' | 'timeline'. points: [[position, value], ...]. Parameter-driven: position is a parameter value. Timeline-driven: position is seconds.

automation_addA

Add one point to an existing curve (or start a new one). Same target/driver/property reuses the matching curve.

Args: target: Mixer group/bus/VCA/event mixer group {guid}. property: 'volume' | 'pitch' | 'gain'. driver: 'parameter:/Name' or 'event:/...'. driver_type: 'parameter' | 'timeline'. position: Parameter value or timeline seconds. value: Mapped property value.

automation_listA

List the real automation curves + points on a target's automator for a given property — every curve's guid, the driver parameter it's bound to, and its actual [position, value] points.

Args: target: The automated object (mixer group, bus, VCA, event). property: 'volume' | 'pitch' | 'gain' (default 'volume').

bank_createA

Create a bank to hold events and sounds.

Args: name: Bank name. Note: the "Master" bank always exists already.

bank_listA

List every bank in the project (capped).

bank_infoC

Get a bank's guid, name and path.

Args: target: bank:/ path or {guid}.

bank_renameA

Rename a bank.

Args: target: bank:/ path or {guid}. name: New name.

bank_deleteB

Delete a bank and its contents.

Args: target: bank:/ path or {guid}.

bank_add_eventA

Assign an event to a bank (so it ships with the build).

Args: bank_target: bank:/ path or {guid}. event_target: event:/ path or {guid}.

bank_remove_eventA

Remove an event from a bank.

Args: bank_target: bank:/ path or {guid}. event_target: event:/ path or {guid}.

bank_list_eventsB

List the events assigned to a bank (capped).

Args: bank_target: bank:/ path or {guid}.

event_createB

Create an event in the master event folder (or an event:// folder).

Args: name: Event name (e.g. "Hit", "UI/Hover"). folder: Optional event:// path or {guid} of the owning folder.

event_deleteC

Delete an event.

Args: target: event:// path or {guid}.

event_infoB

Get an event's guid, name, path and maxVoices.

Args: target: event:// path or {guid}.

event_listA

List every event in the project (capped).

event_lookupA

Resolve an event reference to its canonical event:/ path and guid.

Args: target: A path (event:/...) or {guid}.

event_set_nameC

Rename an event.

Args: target: event:// path or {guid}. name: New name.

event_set_folderB

Move an event into a folder (or the master folder root).

Args: target: event:// path or {guid}. folder: event:// folder path or {guid}.

event_add_trackA

Add a group (audio) track to an event's timeline.

Returns two distinct GUIDs — a track and its mixer group are different objects. Use trackGuid for sound_add_to_track (placing instruments on the timeline). Use mixerGroupGuid for automation_add_curve, mixer_group_volume, mixer_effect_add, and anything else that operates on the mixer strip — a track itself has no addAutomator().

Args: target: event:// path or {guid}. name: Optional mixer-group name for the track ("Audio 1" by default).

event_list_tracksA

List an event's group tracks (mixer-group name + both guids each).

Args: target: event:// path or {guid}. include_master: Whether to include the event's master track (True).

event_set_max_voicesA

Cap simultaneous instances of an event (maxVoices).

Args: target: event:// path or {guid}. max_voices: 1-1000.

event_timeline_cursorA

Scrub an event's timeline cursor to a position (in seconds).

Args: target: event:// path or {guid}. position: Cursor position in seconds (>= 0).

folder_createA

Find-or-create a folder chain (e.g. "UI/HUD" resolves/creates UI then HUD) — safe to call repeatedly, reuses existing folders.

Args: kind: EventFolder | AssetFolder. AssetFolder isn't creatable in FMOD Studio 2.03.14 (errors clearly rather than no-op'ing). path: Slash-separated, e.g. "UI/HUD".

folder_listA

List folders in the project browser (capped).

Args: kind: Optional filter — EventFolder | AssetFolder. Omit for all.

event_add_marker_trackA

Get-or-create a marker (logic) track on an event's timeline. Reuses an existing marker track if the event already has one (most events only need one) — check event_list_tracks-style state before assuming a fresh track is needed; call this and it will tell you via reused.

Args: target: event:// path or {guid}.

marker_add_namedA

Add a named (destination) marker — a labeled point on the timeline that transition markers/regions elsewhere can jump to. Errors if a marker with this name already exists on the track, rather than creating a duplicate — use marker_list to check first.

Args: track_target: Marker track {guid} from event_add_marker_track. name: Marker name. position: Timeline position in seconds (>= 0).

marker_add_regionB

Add a destination (loop) region to a marker track — a labeled range, e.g. a section transition markers/regions can jump into. Errors if a region with this name already exists on the track, rather than creating a duplicate.

Args: track_target: Marker track {guid} from event_add_marker_track. name: Region name. position: Start position in seconds (>= 0). length: Region length in seconds (> 0). loop_mode: None | Looping | Magnet (default Looping).

marker_add_sustain_pointA

Add a sustain point — playback holds here until a keyoff command (event_key_off) releases it. Used for loop-until-released sounds (e.g. a footstep that holds mid-loop until the game says "stop").

Args: track_target: Marker track {guid} from event_add_marker_track. position: Timeline position in seconds (>= 0).

marker_add_transitionA

Add a transition marker — when playback crosses this point, the timeline jumps to the given destination.

Args: track_target: Marker track {guid} from event_add_marker_track. position: Timeline position in seconds (>= 0). destination_target: {guid} of a NamedMarker or LoopRegion (from marker_add_named / marker_add_region).

marker_add_transition_regionA

Add a transition region — while playback is inside this range, the timeline jumps to the given destination.

Args: track_target: Marker track {guid} from event_add_marker_track. position: Start position in seconds (>= 0). length: Region length in seconds (> 0). destination_target: {guid} of a NamedMarker or LoopRegion.

marker_listA

List every marker/region/sustain point/transition on a marker track (capped at 200), tagged with its marker type.

Args: track_target: Marker track {guid} from event_add_marker_track.

marker_renameA

Rename a named marker or region.

Args: target: Marker/region {guid}. name: New name.

marker_set_positionA

Move a point-type marker (named marker, sustain point, transition marker) to a new timeline position.

Args: target: Marker {guid}. position: New position in seconds (>= 0).

marker_set_regionA

Move/resize a region-type marker (loop region, transition region).

Args: target: Region {guid}. position: New start position in seconds (>= 0). length: New length in seconds (> 0).

marker_deleteB

Delete a marker/region/sustain point/transition.

Args: target: Marker {guid}.

marker_add_transition_timelineA

Add a transition timeline to a transition marker/region/loop region/magnet region, with a source+destination sound pair — FMOD's "Add Transition Timeline" feature: a crossfaded transition instead of a hard jump-cut, the professional technique for a seamless loop.

Structurally verified live: this produces a valid TransitionTimeline plus TransitionSourceSound/TransitionDestinationSound, both correctly bound (a TransitionSourceSound/TransitionDestinationSound requires both its audioTrack and parameter relationships set to be valid — confirmed by creating one without them and observing isValid: false) and overlapped by crossfade_length seconds, which is what makes FMOD blend them as a crossfade rather than play them back to back. The exact blend hasn't been audibly verified against a real render — audition it in Studio and adjust crossfade_length if the blend isn't right; there's no scripted way to "listen" from here.

Args: transition_target: TransitionMarker/TransitionRegion/LoopRegion/ MagnetRegion {guid} to add the timeline to. audio_track_target: The GroupTrack {guid} whose audio is transitioning — the track being looped, for a simple single-track loop. crossfade_length: Overlap between outgoing and incoming audio, in seconds (default 1.0, must be > 0). Larger = smoother/slower blend.

mixer_group_createB

Create a mixer group (routed to Master by default).

Args: name: Group name. output_target: Optional output bus/group path or {guid}.

mixer_group_listB

List every mixer group in the project (capped).

mixer_group_infoA

Get a mixer group's guid, name, path and current volume (dB).

Args: target: Group path or {guid}.

mixer_group_renameB

Rename a mixer group.

Args: target: Group path or {guid}. name: New name.

mixer_group_deleteA

Delete a mixer group.

Warning: objects routed through it will need re-routing afterwards.

Args: target: Group path or {guid}.

mixer_group_routeA

Route a group's output to a bus or group. Keep routing inside the same event/mixer surface — routing an event's master track into a different event's mixer has been known to crash Studio.

Args: target: Group path or {guid}. output_target: Destination bus/group path or {guid}.

mixer_group_volumeA

Set a mixer group's volume, in dB (-80 .. +10).

Args: target: Group path or {guid}. db: Volume in decibels.

mixer_effect_addB

Add an effect to a group's effect chain.

Args: target: Group path or {guid}. effect: Effect type, e.g. CompressorEffect, LimiterEffect, ParamEqEffect, LowpassEffect, DelayEffect, ConvolutionReverbEffect, DistortionEffect, ...

mixer_effect_listB

List the effects on a group's chain.

Args: target: Group path or {guid}.

mixer_master_infoA

Get the master bus guid, name and volume.

mixer_master_volumeA

Set the master bus volume, in dB (-80 .. +10).

Args: db: Volume in decibels.

vca_createA

Create a VCA (Voltage-Controlled Amplifier) — a volume control that scales every mixer strip assigned to it, for grouping several buses under one fader (e.g. "Music", "SFX", "Voice").

Args: name: VCA name.

vca_listA

List every VCA in the project (capped).

vca_infoA

Get a VCA's guid, name and current volume (dB).

Args: target: vca:/ path or {guid}.

vca_volumeA

Set a VCA's volume, in dB (-80 .. +10).

Args: target: vca:/ path or {guid}. db: Volume in decibels.

vca_assignA

Assign a mixer strip (group/bus) to a VCA so the VCA's fader scales it alongside every other strip assigned to it.

FMOD's docs don't name the exact assignment relationship — this tries a couple of plausible names and raises a clear error instead of silently doing nothing if neither applies.

Args: vca_target: vca:/ path or {guid}. strip_target: Mixer group/bus path or {guid} to assign.

mixer_send_createA

Create a return track + send within one event's mixer (e.g. a shared reverb bus). Per-event only — no cross-event/global send here.

Args: event_target: event:// path or {guid}, owns both the source group and the new return. source_group_target: Source mixerGroupGuid to send from. return_name: Name for the new return track. level_db: Send level in dB (-80..+10, default 0).

parameter_addA

Add a game parameter to an event. Errors if a parameter with this name already exists on the event, rather than creating a duplicate — use parameter_set_initial/parameter_list on the existing one instead.

The parameter is then settable by the game at runtime, or provides an automation line target on the event's timeline.

Args: event_target: event:/ path or {guid}. name: Parameter name. param_type: User | UserEnumeration | Distance | Direction | Elevation | EventConeAngle | EventOrientation. min: Minimum value (default 0). max: Maximum value (default 1).

parameter_listA

List an event's game parameters (name + guid). A parameter's name lives behind its presetOwner relationship, not a direct property — don't read .name on the result of getParameterPresets() directly.

Args: event_target: event:/ path or {guid}.

parameter_set_initialA

Set a game parameter's initial value on an event.

Args: event_target: event:/ path or {guid}. parameter_name: Name of the parameter (from parameter_list). value: Initial value.

parameter_set_labelsA

Set enumeration labels on a UserEnumeration parameter.

Args: event_target: event:/ path or {guid}. parameter_name: The parameter's name. labels: Human-readable labels, in order (e.g. ["Off","Quiet","Loud"]).

project_get_infoA

Get the open project's file path and display name.

project_saveB

Save the open FMOD Studio project (the active .fspro).

project_save_allA

Save the project and every edited file (assets, banks, plugins).

project_buildB

Build banks for the selected platform(s), or scope to specific banks/platforms (scoping a big project to one bank is much faster).

Args: banks: Bank name or list (default: every bank). platforms: Platform name or list (default: every platform).

project_get_modifiedA

Check whether the project has unsaved changes.

snapshot_createB

Create a mixer snapshot.

A snapshot captures a set of mixer state changes (group/bus/VCA volumes, effect settings) that the game activates as a blendable state — e.g. a 'dungeon' or 'night' reverb/level shift layered over the base mix. Mixer settings are captured by Studio when you move a control while the snapshot is armed; pass the returned path to snapshot_bind_group to pin a group's current settings.

Args: name: Snapshot name.

snapshot_listA

List every mixer snapshot in the project (capped).

snapshot_infoA

Get a snapshot's guid, name and path.

Args: target: snapshot:/ path or {guid}.

snapshot_renameB

Rename a mixer snapshot.

Args: target: snapshot:/ path or {guid}. name: New name.

snapshot_deleteA

Delete a mixer snapshot.

Args: target: snapshot:/ path or {guid}.

snapshot_bind_groupA

Bind a mixer group's captured settings to a snapshot.

Snapshots store per-group mixer states. Binding a group to a snapshot tells Studio that group owns a setting within it, so later mixer edits while the snapshot is armed capture into that snapshot.

Args: snapshot_target: snapshot:/ path or {guid}. group_target: bus:/ or mixer group path/{guid}.

audio_importA

Import an audio file into the project as a reusable asset.

Returns the asset's {guid} so it can be assigned to an instrument. Long operation — asset files are copied into the project.

Args: file_path: Absolute path to a .wav/.aiff/.flac/.mp3/.ogg file.

audio_assetsA

List imported audio assets in the project (capped).

sound_add_to_trackA

Place an instrument on an event's track timeline. Returned {guid} is for follow-up calls (sound_set_audio_file, sound_set_owner).

Args: event_target: event:/ path or {guid}. track_target: trackGuid (not mixerGroupGuid) from event_list_tracks. sound_type: SingleSound | MultiSound | ProgrammerSound | SoundScatterer | EventSound. start: Start position, seconds. length: Length in seconds (0 = untrimmed). name: Optional instrument name.

sound_createB

Create a standalone instrument (usually a SingleSound for a Multi's playlist).

Args: sound_type: SingleSound | MultiSound | ProgrammerSound | SoundScatterer | EventSound. name: Optional instrument name.

sound_set_audio_fileA

Assign an imported audio asset to an instrument.

Reads the assignment back before returning — a guid alone isn't proof the audio actually attached, only that the JS call didn't throw. If audioFileGuid comes back null, the assignment silently didn't take (this raises instead of reporting a false success).

Args: target: Instrument {guid} or path. audio: Asset {guid} from audio_import.

sound_set_ownerB

Set a sound's owning instrument (e.g. a SingleSound into a MultiSound).

Reads the assignment back before returning — see sound_set_audio_file.

Args: target: SingleSound {guid}. owner: Owner MultiSound/Scatterer {guid}.

sound_set_nameA

Rename an instrument.

Args: target: Instrument {guid} or path. name: New name.

sound_infoA

Get an instrument's guid, name, path, and whether it actually has an audio asset attached (hasAudioFile / audioFileName) — a SingleSound with no audio assigned shows an empty box with no waveform in Studio and plays silence; check this after sound_set_audio_file rather than assuming the assignment stuck.

Args: target: Instrument {guid} or path.

utility_lookupB

Resolve any object (event, bank, group, asset, ...) to its identity.

Args: target: Path (event:/..., bank:/...) or {guid}.

utility_listB

List every object of a given type (capped).

Args: obj_type: Event | Bank | MixerGroup | MixerBus | MixerVCA | Snapshot | Folder | Preset.

utility_is_validC

Check whether an object is valid (survived recent edits).

Args: target: Object path or {guid}.

utility_deleteA

Delete any object from the project.

Warning: destructive and not undoable from the terminal.

Args: target: Object path or {guid}.

utility_dumpA

Real introspection: every plain property (with value) + every relationship (cardinality + count) on a live object. Use this BEFORE concluding a capability "doesn't exist" — FMOD's docs only list methods, not plain properties (e.g. looping), and FMOD's own dump() only logs to Studio's console and returns nothing here.

Args: target: Object path or {guid}.

utility_validateB

Run the project's validation and report issues.

workspace_infoA

Get the workspace's key roots: event/asset/bank roots and the master bus.

workspace_browser_currentA

Get the object currently selected in the project browser.

workspace_navigateA

Open an object in the relevant editor (event editor, mixer, ...).

Args: target: Object path or {guid}.

workspace_editor_selectionB

Get the object currently selected in the open editor window.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/xDarkzx/Dans_Fmod_Studio_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server