FmodStudioMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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 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 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 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 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 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 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. 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/xDarkzx/Dans_Fmod_Studio_MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server