fmod-studio-mcp
This server provides a programmatic interface to control a running FMOD Studio instance in real-time, allowing AI agents to edit, create, and manage FMOD projects without manual interaction.
Project Management
Create, save, delete, and build projects; import audio files; export GUIDs; look up objects by path or GUID.
Event Authoring & Playback
Create events (with one-shot sound, audio track, and bank assignment in one call); add group/marker/return tracks and game parameters.
Control playback: play, stop, pause, key-off, return to start; query state (isPlaying, isPaused, is3D, isOneShot, etc.); manage 3D attributes and cursor/playhead positions.
Object Property & Relationship Management
Read/write any property of any object (including dynamic ones like
timeline,audioFile, pitch, looping).Add/remove relationships between objects (e.g., assign events to banks).
Mixer & Effects
Add effects to mixer bus effect chains (EQ, compressor, reverb, delay, chorus, limiter, spatialiser, etc.).
Set convolution reverb impulse responses; query bus input/output formats and mixer strip paths.
Automation & Modulation
Add automators and modulators (randomizer, ADSR, sidechain, autopitch); create automation curves and add automation points at specific positions/values.
Asset Management
Get/set asset file paths (absolute or relative); retrieve assets from the master asset folder.
Introspection & Discovery
List all project model class names; describe any class's properties and relationships.
Inspect entity metadata (isAbstract, isGlobal, isSingleton, superEntities) and ManagedObject details.
List available plugins; retrieve parameter presets and their paths.
Console & Scripting Utilities
Log messages, warnings, and errors to the FMOD console; dump object members; display popup alert dialogs.
Add/remove/list custom items under the Scripts menu.
System Information
Read OS platform (mac/win), application file path, and FMOD Studio version.
Callback Signals
Connect/disconnect to project events such as audio file import or build start/end.
Integrates with FMOD Studio to allow AI agents to manipulate audio projects live through the FMOD Studio Scripting API, including creating events, importing audio files, editing properties, and saving projects.
Click on "Deploy 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., "@fmod-studio-mcp Create an event for a gunshot sound"
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.
fmod-studio-mcp
An MCP server that drives FMOD Studio live
through its built-in scripting terminal (TCP, default 127.0.0.1:3663). Unlike
file-based approaches that edit a project's XML on disk (and require closing/reopening
Studio), this talks to the running editor: changes appear immediately, and Studio
itself writes them — so there's no clobbering and no reload dance.
It exposes the FMOD Studio Scripting API as one MCP tool per API member — generated from the crawled reference, not hand-written — plus a few generic tools for the parts the static docs can't enumerate. There is no arbitrary-script / eval tool: every capability is a named, schema-validated operation over FMOD's object model.
⚠️ Alpha. Built for an AI agent (Claude Code) to author game audio. It edits the live project — call
fmod_project_saveto persist, and keep it version-controlled.
How it works
FMOD Studio's Script Server exposes the scripting terminal over a TCP port: it evaluates anything it receives as UTF-8 JavaScript and returns the result as text. It's disabled by default — enable it once in Studio's preferences (see FMOD Studio setup). Opening the console with Ctrl + 0 shows script output but does not start the server. This MCP keeps one connection and uses read-until-idle framing, so it doesn't depend on a particular prompt string.
Each tool generates the small piece of scripting-API JavaScript for its member, runs it,
and returns the result as a string. Anything that returns an object reports that object's
path or {guid}, so results chain straight back in as another tool's target.
Related MCP server: fmod-mcp
The tool set
Generated — one per documented member (~148). Named fmod_<Owner>_<member>, e.g.
fmod_project_create, fmod_project_importAudioFile, fmod_Event_addGroupTrack,
fmod_GroupTrack_addSound, fmod_Bank_getPath, fmod_system_getText. A member's
target_kind decides how it's reached:
kind | reached as | tool inputs |
|
| the member's args |
|
| the member's args |
|
|
|
|
|
|
Method args are auto-embedded: numbers/booleans as JS literals, a path
(event:/…, bank:/Master) or {guid} as an object reference (lookup(...)), else a
string. Settable properties take an optional value (omit to read).
Generic — reach the dynamic, schema-defined members the static docs don't list
(an event's timeline, an instrument's audioFile, a sound's pitch/looping, …):
Tool | Purpose |
| Read any property of an object, including per-class managed properties. |
| Set any property (e.g. instrument |
| Edit a relationship (e.g. event |
| List the project model's class names. |
| List a class's schema-defined property + relationship names (discovery). |
| Composite: create event → import one-shot → add track/sound → assign bank. |
Requirements
FMOD Studio 2.02+, with a project open and the Script Server enabled (Preferences → Interface → Script Server, port 3663 — requires a restart; see FMOD Studio setup below). Opening the console (Ctrl+0) alone does not start it.
Python 3.10+.
FMOD Studio setup — enable the Script Server
The scripting terminal's TCP server (Script Server) is off by default, and opening the console with Ctrl + 0 is not enough — that only shows script output. Enable it once:
Launch FMOD Studio and open your project (
File → Open Project…→ your.fspro).Open Preferences —
FMOD Studio → Preferences…(⌘,) on macOS,Edit → Preferences…on Windows.Select the Interface tab — the Script Server section is at the top. Set:
✅ Enable Script Server (requires restart)
Port:
3663(must matchFMOD_STUDIO_PORT, default3663).
Quit and relaunch FMOD Studio, then reopen the project. The setting only takes effect after a restart.
(optional) Open the console with Ctrl + 0 to watch script output as tools run.
Verify it's listening
# macOS / Linux
nc -z 127.0.0.1 3663 && echo "listening ✓"
lsof -nP -iTCP:3663 -sTCP:LISTEN # shows the fmodstudio process bound to 3663On every launch, FMOD records the Script Server state in its log:
[Scripting] ScriptServer started on 127.0.0.1 (3663) ← enabled ✅
[Scripting] ScriptServer is disabled. ← not enabled ❌Log location: macOS ~/Library/Application Support/FMOD Studio/Logs/,
Windows %LOCALAPPDATA%\FMOD Studio\Logs\ (newest file).
Troubleshooting
Cannot reach FMOD Studio's scripting terminal…— the Script Server isn't running. Grep the newest log forScriptServer is disabled; if present, enable it in Preferences and restart (the checkbox literally says "requires restart" — toggling without relaunching won't bind the port).Enabled but still nothing on 3663 — confirm a project is open (the server won't bind on the start/welcome screen) and that no other app holds the port.
Port mismatch — the Preferences port and
FMOD_STUDIO_PORTmust be the same value.
Install
Run it straight from PyPI with uv — no clone, no venv.
uvx downloads and launches it on demand:
claude mcp add fmod-studio -- uvx fmod-studio-mcpOr add it to any MCP client's config (stdio):
"fmod-studio": { "command": "uvx", "args": ["fmod-studio-mcp"] }Prefer a persistent install over on-demand? Install the package directly:
uv tool install fmod-studio-mcp # exposes the `fmod-studio-mcp` command
# or, with pip:
pip install fmod-studio-mcpConfigure host/port if needed via env: FMOD_STUDIO_HOST (default 127.0.0.1),
FMOD_STUDIO_PORT (default 3663).
From source (development)
git clone https://github.com/EYamanS/fmod-studio-mcp
cd fmod-studio-mcp
python3 -m venv .venv && ./.venv/bin/pip install -e .
claude mcp add fmod-studio -- "$(pwd)/.venv/bin/python" -m fmod_studio_mcpRegenerating for a new FMOD version
The tool set is generated from fmod_studio_mcp/api_spec.json, which is built by crawling
the official Scripting API reference:
python tools/build_spec.py fmod_studio_mcp/api_spec.jsonA new FMOD release means re-running that crawler — not editing a tool registry by hand.
Example
Create an event with a one-shot sound and route it to the Master bank, step by step
(or use the fmod_create_event composite to do it in one call):
fmod_project_create { entityName: "Event" } -> event:/New Event
fmod_set_property { target: "event:/New Event", property: "name", value: "Hit" }
fmod_project_importAudioFile { filePath: "/abs/path/hit.wav" } -> {asset-guid}
fmod_Event_addGroupTrack { target: "event:/Hit", name: "Audio 1" } -> {track-guid}
fmod_get_property { target: "event:/Hit", property: "timeline" } -> {tl-guid}
fmod_GroupTrack_addSound { target: "{track-guid}", parameter: "{tl-guid}",
soundType: "SingleSound", start: 0, length: 2.5 } -> {inst-guid}
fmod_set_property { target: "{inst-guid}", property: "audioFile", value: "{asset-guid}" }
fmod_add_relationship { target: "event:/Hit", relationship: "banks", other: "bank:/Master" }
fmod_project_save {}Safety
Edits the live project. Run
fmod_project_saveto persist; commit the project to git.Avoid editing the same project in the Studio GUI and via this server simultaneously in conflicting ways.
Support
Built this in the open. If it saved you time, a one-off tip keeps it maintained:
License
MIT — see LICENSE.
Keywords: FMOD Studio MCP server · FMOD scripting API automation · AI game-audio tooling · Model Context Protocol server for FMOD · Claude / LLM game-audio agent · programmatic FMOD Studio control · game sound-design automation.
Available Tools
155 toolsfmod_add_relationshipB
Add an object to one of a target's relationships, e.g. relationship 'banks' on an event -> a 'bank:/...'. (target.relationships[name].add(other))
Inputs: other (required), target (required), relationship (required).
fmod_Asset_getAbsoluteAssetPathC
Retrieves the absolute path of the file the asset refers to. Returns the absolute path of the file the asset refers to. [method · Asset.getAbsoluteAssetPath]
Inputs: target (required).
fmod_Asset_getAssetPathB
Retrieves the path of the file the asset refers to, relative to the project assets directory. Returns the path of the file the asset refers to, relative to the project assets directory. [method · Asset.getAssetPath]
Inputs: target (required).
fmod_Asset_setAssetPathA
Sets the path of the file the asset refers to, relative to the project assets directory. Returns true if the operation succeeds, or false otherwise. [method · Asset.setAssetPath]
Inputs: target (required), filePath (required).
fmod_AudioTrack_addAutomationTrackB
Creates an automation track for a given property of an automatable object. Returns the automation track ManagedObject . [method · AudioTrack.addAutomationTrack]
Inputs: target (required), propertyName (required), automatableObject (required).
fmod_AutomatableObject_addAutomatorA
Creates a model.Automator for a given property of the automatable object. Returns the automator ManagedObject . [method · AutomatableObject.addAutomator]
Inputs: target (required), propertyName (required).
fmod_AutomatableObject_addModulatorB
Creates a model.Modulator for a given property of the automatable object. Returns the modulator ManagedObject . [method · AutomatableObject.addModulator]
Inputs: target (required), propertyName (required), modulatorType (required).
fmod_AutomationCurve_addAutomationPointC
Creates an automation point at the given position. Returns the automation point ManagedObject . [method · AutomationCurve.addAutomationPoint]
Inputs: value (required), target (required), position (required).
fmod_Automator_addAutomationCurveC
Creates a model.AutomationCurve on the parameter specified. Returns the automation curve ManagedObject . [method · Automator.addAutomationCurve]
Inputs: target (required), parameter (required).
fmod_Bank_getPathB
Retrieves the bank's unique path identifier. Returns the bank's path as a string . [method · Bank.getPath]
Inputs: target (required).
fmod_class_namesA
List the project model's class/entity names (introspection: keys of studio.project.model).
Inputs: no named parameters.
fmod_console_dumpC
Logs all members of object. [method · console.dump]
Inputs: object (required).
fmod_console_errorC
Logs an error. Alias for studio.system.error . [method · console.error]
Inputs: msg (required).
fmod_console_logC
Logs a message. Alias for studio.system.print . [method · console.log]
Inputs: msg (required).
fmod_console_warnB
Logs a warning. Alias for studio.system.warn . [method · console.warn]
Inputs: msg (required).
fmod_ConvolutionReverbEffect_setIRFromFilePathB
Sets the impulse response for a convolution reverb effect. [method · ConvolutionReverbEffect.setIRFromFilePath]
Inputs: target (required), filePath (required).
fmod_create_eventB
Composite: create an event, optionally import a one-shot sound onto a new audio track and assign the event to a bank. Equivalent to a create + importAudioFile + addGroupTrack + addSound + set audioFile + add bank relationship.
Inputs: name (required), sound, bank_name, folder_path.
fmod_describe_classA
List a class's schema-defined property and relationship names — how to discover the dynamic members (use with fmod_get_property/fmod_set_property/fmod_add_relationship).
Inputs: className (required).
fmod_entity_documentC
Returns a string describing the entity, including its properties and relationships. Returns a string describing the entity, including its properties and relationships. [method · entity.document]
Inputs: className (required).
fmod_entity_findInstancesC
Returns an array of ManagedObject instances of a given entity type. Returns an array of ManagedObject instances of a given entity type. (bracketed args are optional) [method · entity.findInstances]
Inputs: className (required), options.
fmod_entity_isAbstractC
A constant boolean value that is set to true if an object is the base class of another entity type. [property · entity.isAbstract]
Inputs: className (required), value.
fmod_entity_isGlobalC
A constant boolean value that is set to true if an entity exists globally, rather than on a per project basis. [property · entity.isGlobal]
Inputs: className (required), value.
fmod_entity_isSingletonC
A constant boolean value that is set to true if only a single ManagedObject instance of the entity can exist at any given time. [property · entity.isSingleton]
Inputs: className (required), value.
fmod_entity_propertiesD
Returns an array of property description objects containing named properties that represent each ManagedObject property available for this entity. Returns an array of property description objects containing named properties that represent each ManagedObject property available for this entity. [property · entity.properties]
Inputs: className (required), value.
fmod_entity_relationshipsC
Returns an array of relationship description objects, containing named relationships that represents each ManagedObject relationship available for this entity. Returns an array of relationship description objects, containing named relationships that represents each ManagedObject relationship available for this entity. [property · entity.relationships]
Inputs: className (required), value.
fmod_entity_singletonInstanceB
Returns the singleton ManagedObject instance of a particular entity type. Returns the singleton ManagedObject instance of a particular entity type. [method · entity.singletonInstance]
Inputs: className (required).
fmod_entity_superEntitiesC
An array of strings representing the entity type inherited by this entity. [property · entity.superEntities]
Inputs: className (required), value.
fmod_Event_addGameParameterC
Adds a game parameter to the event. Returns the game parameter ManagedObject . [method · Event.addGameParameter]
Inputs: target (required), parameterDefinition (required).
fmod_Event_addGroupTrackC
Adds an audio track with the given name to the event. Returns the newly created model. [method · Event.addGroupTrack]
Inputs: name (required), target (required).
fmod_Event_addMarkerTrackB
Adds a marker track to the event. Returns the newly created model. [method · Event.addMarkerTrack]
Inputs: target (required).
fmod_Event_addReturnTrackB
Adds a return track with the given name to the event. Returns the newly created return track ManagedObject . [method · Event.addReturnTrack]
Inputs: name (required), target (required).
fmod_Event_get3DAttributesC
Retrieves the 3D attributes of an event. [method · Event.get3DAttributes]
Inputs: target (required).
fmod_Event_getCursorPositionB
Retrieves the cursor position. Returns the cursor position as a number . [method · Event.getCursorPosition]
Inputs: target (required), parameter (required).
fmod_Event_getParameterPresetsC
Retrieves an array of preset parameters referenced by the event . Returns an array of all model. [method · Event.getParameterPresets]
Inputs: target (required).
fmod_Event_getPathA
Retrieves the event 's unique path identifier. Returns the event's path as a string . [method · Event.getPath]
Inputs: target (required).
fmod_Event_getPlayheadPositionC
Retrieves the playback position of a given parameter . Returns the playback position of a model. [method · Event.getPlayheadPosition]
Inputs: target (required), parameter (required).
fmod_Event_is3DB
Reports whether an event is 3D . Returns true if an event is 3D. [method · Event.is3D]
Inputs: target (required).
fmod_Event_isOneShotA
Reports whether an event is a one-shot. Returns true if an event is one-shot. [method · Event.isOneShot]
Inputs: target (required).
fmod_Event_isPausedB
Reports whether an event instance is paused. Returns true if an event instance is paused. [method · Event.isPaused]
Inputs: target (required).
fmod_Event_isPlayingB
Reports whether an event instance is playing. Returns true if an event instance is playing. [method · Event.isPlaying]
Inputs: target (required).
fmod_Event_isRecordingB
Reports whether an event instance is being recorded in a profiler session . Returns true for profiler sessions with recording enabled. [method · Event.isRecording]
Inputs: target (required).
fmod_Event_isStoppingB
Reports whether an event instance is stopping. Returns true if an event instance is stopping. [method · Event.isStopping]
Inputs: target (required).
fmod_Event_keyOffC
Sends the keyoff command to a currently playing event instance . [method · Event.keyOff]
Inputs: target (required).
fmod_Event_playC
Plays the event instance . [method · Event.play]
Inputs: target (required).
fmod_Event_returnToStartA
Moves the playback position to the cursor position if called while the event instance is playing, stopping, or paused, or to the start of the timeline while the event instance is stopped. [method · Event.returnToStart]
Inputs: target (required).
fmod_Event_set3DAttributesB
Sets the 3D attributes of an event instance being auditioned based on a 3D attributes object. [method · Event.set3DAttributes]
Inputs: target (required), attributes (required).
fmod_Event_setCursorPositionC
Sets the cursor position to a number. [method · Event.setCursorPosition]
Inputs: target (required), position (required), parameter (required).
fmod_Event_stopImmediateA
Stops an event instance immediately, skipping the stopping event state . [method · Event.stopImmediate]
Inputs: target (required).
fmod_Event_stopNonImmediateB
Commands a playing event instance to enter the stopping event state . [method · Event.stopNonImmediate]
Inputs: target (required).
fmod_Event_togglePauseC
Toggles the pause state of an event instance . [method · Event.togglePause]
Inputs: target (required).
fmod_Event_toggleRecordingB
Toggles the recording state for a profiler session. [method · Event.toggleRecording]
Inputs: target (required).
fmod_Folder_getItemC
Retrieves the item at the relative path specified. Returns the item at the relative path specified. [method · Folder.getItem]
Inputs: path (required), target (required).
fmod_GameParameter_getCursorPositionB
Retrieves the parameter 's cursor position. Returns the cursor position of the global user parameter as a number . [method · GameParameter.getCursorPosition]
Inputs: target (required).
fmod_GameParameter_setCursorPositionB
Sets the cursor position of the global , user , or built-in parameter to a number. [method · GameParameter.setCursorPosition]
Inputs: target (required), position (required).
fmod_get_propertyA
Read any property of an object — including dynamic, per-class managed properties not in the static reference (e.g. an event's 'timeline').
Inputs: target (required), property (required).
fmod_global_alertB
Logs a message in a popup dialog (blocking). Alias for studio.system.message . [method · (global).alert]
Inputs: msg (required).
fmod_GroupBus_getItemC
Retrieves the mixer bus at the relative path specified. Returns the model. [method · GroupBus.getItem]
Inputs: path (required), target (required).
fmod_GroupTrack_addSoundC
Adds an instrument to the track on the model.Parameter specified. Returns the model. [method · GroupTrack.addSound]
Inputs: start (required), length (required), target (required), parameter (required), +1 more.
fmod_ManagedObject_documentC
Returns a string describing this ManagedObject 's entity type. Returns a string describing this ManagedObject 's entity type. [method · ManagedObject.document]
Inputs: target (required).
fmod_ManagedObject_dumpC
Logs all members. [method · ManagedObject.dump]
Inputs: target (required).
fmod_ManagedObject_entityC
A string representing the object's project.Entity type. [property · ManagedObject.entity]
Inputs: target (required).
fmod_ManagedObject_idB
The object's unique ID. [property · ManagedObject.id]
Inputs: target (required).
fmod_ManagedObject_isOfExactTypeC
Returns true if the object type matches the provided entity name. Returns true if the object type matches the provided entity name. [method · ManagedObject.isOfExactType]
Inputs: target (required), entityName (required).
fmod_ManagedObject_isOfTypeB
Returns true if the object has an entity that matches the entity name, or is of a derived type. Returns true if the object has an entity that matches the entity name, or is of a derived type. [method · ManagedObject.isOfType]
Inputs: target (required), entityName (required).
fmod_ManagedObject_isValidC
Returns whether an object is in a valid state. Returns whether an object is in a valid state. [property · ManagedObject.isValid]
Inputs: target (required).
fmod_ManagedObject_propertiesC
Provides access to an object's properties. Returns a ManagedPropertyMap . [property · ManagedObject.properties]
Inputs: target (required).
fmod_ManagedObject_relationshipsC
Provides access to an object's relationships. Returns a ManagedRelationshipMap . [property · ManagedObject.relationships]
Inputs: target (required).
fmod_MarkerTrack_addNamedMarkerA
Adds a destination marker to the marker track at the given position. Returns the named marker ManagedObject . [method · MarkerTrack.addNamedMarker]
Inputs: name (required), target (required), position (required).
fmod_MarkerTrack_addRegionB
Adds a destination region to the marker track at the given position with the given length. Returns the newly created region's ManagedObject . [method · MarkerTrack.addRegion]
Inputs: name (required), length (required), target (required), loopMode (required), +1 more.
fmod_MarkerTrack_addSustainPointA
Adds a sustain point to the track at the given position. Returns the SustainPoint ManagedObject . [method · MarkerTrack.addSustainPoint]
Inputs: target (required), position (required).
fmod_MarkerTrack_addTransitionMarkerB
Adds a transition marker to the track at the given position. Returns the newly created TransitionMarker ManagedObject . [method · MarkerTrack.addTransitionMarker]
Inputs: target (required), position (required), destination (required).
fmod_MarkerTrack_addTransitionRegionA
Adds a transition region to the track at the given position with the given length. Returns the TransitionRegion ManagedObject . [method · MarkerTrack.addTransitionRegion]
Inputs: length (required), target (required), position (required), destination (required).
fmod_MasterAssetFolder_getAssetC
Retrieves the asset at the path specified. Returns the model. [method · MasterAssetFolder.getAsset]
Inputs: path (required), target (required).
fmod_MixerBusEffectChain_addEffectC
Creates an effect and adds it to the end of the chain. Returns the effect ManagedObject . [method · MixerBusEffectChain.addEffect]
Inputs: target (required), effectDefinition (required).
fmod_MixerBus_getInputFormatC
Retrieves the input format of the bus . Returns the effective input format for a model. [method · MixerBus.getInputFormat]
Inputs: target (required).
fmod_MixerBus_getOutputFormatB
Retrieves the output format of the bus . Returns the effective output format for a model. [method · MixerBus.getOutputFormat]
Inputs: target (required).
fmod_MixerStrip_getPathA
Retrieves the mixer strip's unique path identifier. Returns the model. [method · MixerStrip.getPath]
Inputs: target (required).
fmod_Parameter_getPlayheadPositionC
Retrieves the playback position of a parameter, within the context of the associated model.Event . [property · Parameter.getPlayheadPosition]
Inputs: target (required), value.
fmod_ParameterPreset_getPathB
Retrieves the preset parameter's unique path identifier. Returns the parameter's path as a string . [method · ParameterPreset.getPath]
Inputs: target (required).
fmod_ParameterProxy_getCursorPositionC
Retrieves the preset parameter 's cursor position. Returns the cursor position as a number , within the context of the associated event . [method · ParameterProxy.getCursorPosition]
Inputs: target (required).
fmod_ParameterProxy_setCursorPositionC
Sets the cursor position of the preset parameter to a number. [method · ParameterProxy.setCursorPosition]
Inputs: target (required), position (required).
fmod_project_audioFileImportedC
Callback triggered when an audio file has finished being imported. [property · project.audioFileImported]
Inputs: value.
fmod_project_audioFileImported_connectB
Sets a function to be called when an audio file is imported, with the signature function(audioFile) . [method · project.audioFileImported.connect]
Inputs: callback (required).
fmod_project_audioFileImported_disconnectA
Disconnects the connectFunction once it is no longer needed. It is important to disconnect the connected signals when they are no longer needed, otherwise they can accumulate and cause unexpected behavior. [method · project.audioFileImported.disconnect]
Inputs: connectFunction (required).
fmod_project_buildA
Builds all the banks to all the platforms listed in the build tab of the preferences dialog. Returns true if the operation succeeds, or false otherwise. [method · project.build]
Inputs: no named parameters.
fmod_project_buildEndedC
A callback that will be fired when a build has completed. [property · project.buildEnded]
Inputs: value.
fmod_project_buildEnded_connectA
Sets a function to be called after banks are built, with the signature function(success) . The success argument will be false if a build error occurs or the build is cancelled by the user, and true otherwise. For example: [method · project.buildEnded.connect]
Inputs: callback (required).
fmod_project_buildEnded_disconnectA
Disconnects the connectFunction once it is no longer needed. It is important to disconnect the connected signals when they are no longer needed, otherwise they can accumulate and cause unexpected behavior. [method · project.buildEnded.disconnect]
Inputs: no named parameters.
fmod_project_buildStartedC
A callback that will be fired when a build has commenced. [property · project.buildStarted]
Inputs: value.
fmod_project_buildStarted_connectC
Sets a function to be called before banks are built, with the signature function() . For example: [method · project.buildStarted.connect]
Inputs: callback (required).
fmod_project_buildStarted_disconnectB
Disconnects the connectFunction once it is no longer needed. It is important to disconnect the connected signals when they are no longer needed, otherwise they can accumulate and cause unexpected behavior. [method · project.buildStarted.disconnect]
Inputs: connectFunction (required).
fmod_project_createC
Returns a new instance of a ManagedObject of the given entity name. Returns a new instance of a ManagedObject of the given entity name. [method · project.create]
Inputs: entityName (required).
fmod_project_deleteObjectA
Deletes the ManagedObject and its references, if any, from the project. Returns true if the operation succeeds, or false otherwise. [method · project.deleteObject]
Inputs: managedObject (required).
fmod_project_distanceRolloffTypeC
An enum corresponding to different distance attenuation roll-off types available to spatial effects. [property · project.distanceRolloffType]
Inputs: value.
fmod_project_exportGUIDsA
Exports project "guids.txt". Returns true if the operation succeeds, or false otherwise. [method · project.exportGUIDs]
Inputs: no named parameters.
fmod_project_filePathC
The absolute path to the project's ".fspro` file on disk. [property · project.filePath]
Inputs: value.
fmod_project_findAvailablePluginsA
Returns an array of strings that lists all available plugins. Returns an array of strings that lists all available plugins. [method · project.findAvailablePlugins]
Inputs: no named parameters.
fmod_project_importAudioFileB
Imports an audio asset into the project. Returns an model. [method · project.importAudioFile]
Inputs: filePath (required).
fmod_project_lookupC
Lookup a ManagedObject by path or GUID. Returns a ManagedObject found by GUID or path. [method · project.lookup]
Inputs: idOrPath (required).
fmod_project_parameterTypeC
An enum corresponding to different model.Parameter types available. [property · project.parameterType]
Inputs: value.
fmod_project_regionLoopModeC
An enum corresponding to different loop modes of a loop region. [property · project.regionLoopMode]
Inputs: value.
fmod_project_saveA
Saves the project. Returns true if the operation succeeds, or false otherwise. [method · project.save]
Inputs: no named parameters.
fmod_remove_relationshipB
Remove an object from one of a target's relationships. (target.relationships[name].remove(other))
Inputs: other (required), target (required), relationship (required).
fmod_set_propertyA
Set any property of an object (e.g. instrument 'audioFile' = an asset, or 'name'). Value is auto-embedded: numbers/booleans as literals, a path or '{guid}' as an object reference, else a string.
Inputs: value (required), target (required), property (required).
fmod_Sound_setFadeInCurveC
Sets the fade-in curve of the instrument to the specified length and curve shape. [method · Sound.setFadeInCurve]
Inputs: length (required), target (required), curveShape (required).
fmod_Sound_setFadeOutCurveB
Sets the fade-out curve of the instrument to the specified length and curve shape. [method · Sound.setFadeOutCurve]
Inputs: length (required), target (required), curveShape (required).
fmod_studio_application_filePathC
The absolute file path of the FMOD Studio process's executable. [property · studio.application.filePath]
Inputs: value.
fmod_studio_os_platformC
The current operating system of the computer. Returns either "mac" for Mac OS X or "win" for all Windows versions. Returns either "mac" for Mac OS X or "win" for all Windows versions. [property · studio.os.platform]
Inputs: value.
fmod_studio_versionC
An object containing version information for the Studio tool: [property · studio.version]
Inputs: value.
fmod_system_backtraceC
Returns the callstack as an array of strings. Returns the callstack as an array of strings. [method · system.backtrace]
Inputs: no named parameters.
fmod_system_errorC
Logs an error. [method · system.error]
Inputs: msg (required).
fmod_system_getFileC
Returns a studio.system.File object representing the file at filePath . Returns a studio. [method · system.getFile]
Inputs: filePath (required).
fmod_system_getNumberB
Prompts for numeric input and returns the value, or null if cancelled (blocking). (bracketed args are optional) [method · system.getNumber]
Inputs: msg (required), defaultText.
fmod_system_getTextA
Prompts for text input and returns the string, or null if cancelled (blocking). (bracketed args are optional) [method · system.getText]
Inputs: msg (required), defaultText.
fmod_system_messageB
Logs a message in a popup dialog (blocking). [method · system.message]
Inputs: msg (required).
fmod_system_openModeC
An enumeration used with studio.system.File.open() to describe the mode in which a file is opened. Possible values are: [property · system.openMode]
Inputs: value.
fmod_system_permissionD
An enumeration used with studio.system.File.setPermissions() to alter the permissions of a file. The permissions of a file can be queried using studio.system.File.permissions . The values may be OR-ed together to test multiple permissions and ownership values. Possible values are: [property · system.permission]
Inputs: value.
fmod_system_printC
Logs a message. [method · system.print]
Inputs: msg (required).
fmod_system_questionA
Prompts for a 'yes'/'no' response to a given message and returns a boolean value (blocking). [method · system.question]
Inputs: msg (required).
fmod_system_readDirC
Returns a string array from the filters specified by readDirFiltersFlag from the filePath . If readDirFiltersFlag is not defined in the function call, a default of system.readDirFilters.AllEntries will be used. The available options are described by the system.readDirFilters enum. Returns a string array from the filters specified by readDirFiltersFlag from the filePath . [method · system.readDir]
Inputs: filePath (required), readDirFiltersFlag (required).
fmod_system_readDirFiltersC
An enumeration used with studio.system.readDir(filePath, readDirFiltersFlag) to describe the filters in which a string array will be returned. The filter value is specified by combining values from the following list using the bitwise OR operator: [property · system.readDirFilters]
Inputs: value.
fmod_system_requireC
Loads a javascript file as a library. The fileName passed can be either a relative or absolute path. The file being loaded should contain a module. For example: Returns the loaded js module object or null if unsuccessful. [method · system.require]
Inputs: no named parameters.
fmod_system_startA
Runs an external process with options object { workingDir, args, timeout (milliseconds) } (blocking). Returns a result object { exitCode, standardOutput, standardError } . [method · system.start]
Inputs: processOptions (required), pathToExecutable (required).
fmod_system_startAsyncC
Runs an external asynchronous process with options object { workingDir, args } . Returns a studio. [method · system.startAsync]
Inputs: processOptions (required), pathToExecutable (required).
fmod_system_verboseC
Logs a verbose message. [method · system.verbose]
Inputs: msg (required).
fmod_system_warnC
Logs a warning. [method · system.warn]
Inputs: msg (required).
fmod_Timeline_getCursorPositionA
Retrieves the timeline 's cursor position. Returns the cursor position as a number , within the context of the associated event . [method · Timeline.getCursorPosition]
Inputs: target (required).
fmod_Timeline_setCursorPositionC
Sets the cursor position of the timeline to a number. [method · Timeline.setCursorPosition]
Inputs: target (required), position (required).
fmod_Triggerable_addParameterConditionB
Adds a parameter condition for a given parameter to a triggerable object. Returns the parameter condition ManagedObject . [method · Triggerable.addParameterCondition]
Inputs: max (required), min (required), target (required), parameter (required).
fmod_ui_alignmentC
An enumeration corresponding to the alignment of an item within a layout widget. Possible values are: [property · ui.alignment]
Inputs: value.
fmod_ui_echoModeA
An enumeration corresponding to the echo mode of a LineEdit widget. This can be used to display asterisks instead of characters when entering a password. Possible values are: [property · ui.echoMode]
Inputs: value.
fmod_ui_layoutTypeC
An enumeration corresponding to different layout types available within a UI widget description of widgetType.Layout . Possible values are: [property · ui.layoutType]
Inputs: value.
fmod_ui_orientationC
An enumeration representing an orientation. Possible values are: [property · ui.orientation]
Inputs: value.
fmod_ui_pathTypeC
An enumeration corresponding to the different path types the PathLineEdit supports. This controls the behavior of browser dialog presented. Possible values are: [property · ui.pathType]
Inputs: value.
fmod_ui_showModalDialogC
Displays a dialog window. The function returns once the dialog has been closed. [method · ui.showModalDialog]
Inputs: description (required).
fmod_ui_showModelessDialogB
Displays a dialog window. The function returns once the dialog is shown. Returns a sibling widget with the matching widgetId . [method · ui.showModelessDialog]
Inputs: no named parameters.
fmod_ui_sizePolicyB
An enumeration corresponding to the size policy of a widget. This determines how much space it will try to consume within its layout, and how it will react when more or less space is made available. [property · ui.sizePolicy]
Inputs: value.
fmod_ui_widgetTypeC
An enumeration corresponding to different widget types available within a UI widget description. Possible values are: [property · ui.widgetType]
Inputs: value.
fmod_window_actionsD
An enumeration used with studio.window.triggerAction() to trigger the execution of an action. Possible values are: [property · window.actions]
Inputs: value.
fmod_window_browserCurrentC
Returns the currently selected ManagedObject in the active browser tab of the last active window. A tabName can optionally be specified to select from a different browser tab. Returns the currently selected ManagedObject in the active browser tab of the last active window. (bracketed args are optional) [method · window.browserCurrent]
Inputs: tabName.
fmod_window_browserSelectionB
Returns an Array of selected ManagedObject s in the active browser tab of the last active window. A tabName can optionally be specified to select from a different browser tab. Returns an Array of selected ManagedObject s in the active browser tab of the last active window. (bracketed args are optional) [method · window.browserSelection]
Inputs: tabName.
fmod_window_deckCurrentA
Returns the currently selected ManagedObject in the deck of the last active window. Returns the currently selected ManagedObject in the deck of the last active window. [method · window.deckCurrent]
Inputs: no named parameters.
fmod_window_deckSelectionB
Returns an array of selected ManagedObject s in the deck of the last active window. Returns an array of selected ManagedObject s in the deck of the last active window. [method · window.deckSelection]
Inputs: no named parameters.
fmod_window_editorCurrentC
Returns the currently selected ManagedObject in the last active editor (e.g. in the multitrack view). Returns the currently selected ManagedObject in the last active editor (e. [method · window.editorCurrent]
Inputs: no named parameters.
fmod_window_editorSelectionB
Returns an array of selected ManagedObject s in the last active editor (e.g. in the multitrack view). Returns an array of selected ManagedObject s in the last active editor (e. [method · window.editorSelection]
Inputs: no named parameters.
fmod_window_openC
Opens a new window of the given window type (e.g. "Event Editor"). Returns true if the window request is valid, or false otherwise. [method · window.open]
Inputs: windowType (required).
fmod_window_triggerActionB
Attempts to trigger the actionType action for the last active window. The available options are described by the window.actions enum. [method · window.triggerAction]
Inputs: actionType (required).
fmod_workspace_addEventC
Adds an event with the given name to the project . Returns the event's ManagedObject . [method · workspace.addEvent]
Inputs: name (required), withSpatializer (required).
fmod_workspace_addGameParameterC
Adds a preset parameter to the project. Returns the preset parameter ManagedObject . [method · workspace.addGameParameter]
Inputs: parameterDefinition (required).
fmod_workspace_addTagC
Adds a tag with the given name to the project . Returns the tag ManagedObject . [method · workspace.addTag]
Inputs: name (required).
fmod_workspace_createPluginC
Creates either a plug-in effect or a plug-in instrument . Returns the plug-in effect or plug-in instrument ManagedObject . [method · workspace.createPlugin]
Inputs: identfier (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 155 tools
The toolset includes both specific getter/setter methods and generic fmod_get_property/fmod_set_property, plus fmod_add_relationship/fmod_remove_relationship, leading to multiple ways to achieve similar results. Additionally, there are aliases for console logging (console vs system). This will confuse an agent.
Most tools follow the pattern fmod_Entity_method, but there are deviations like fmod_create_event and fmod_describe_class. Also, some methods use camelCase (getAbsoluteAssetPath) while others use underscores (add_relationship), creating inconsistency.
With 155 tools, the set is extremely large for an MCP server. This overwhelms an agent, making tool selection difficult. Typical well-scoped servers have 3-15 tools; this is an order of magnitude larger.
The toolset covers a vast range of FMOD functionality including assets, events, banks, parameters, automation, UI, and window management. However, there are gaps like no direct tool for creating banks (only via relationships) and some operations only accessible through generic set_property.
Maintenance
Related MCP Connectors
MCP server exposing the AceDataCloud Fish Audio API (text-to-speech with voice conditioning)
A MCP server built for developers enabling Git based project management with project and personal…
Make games with AI: one MCP server that connects your agent to Unity, Unreal and Godot editors.
One MCP server exposing every tool in the Gumball portfolio.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables remote control and automation of FL Studio via the flapi Python client. It provides tools for managing transport, mixer tracks, pattern sequencing, and plugin parameters, allowing users to execute Python code directly within the FL Studio environment.2-
- AlicenseBqualityCmaintenanceAn MCP server that enables AI coding agents to control FMOD Studio for audio import, event creation, and bank building via TCP scripting.211MIT
- AlicenseAqualityBmaintenanceA modular suite of MCP servers for Audiokinetic Wwise, enabling AI agents to browse, edit, audition, profile, and build Wwise projects through the Wwise Authoring API.155Apache 2.0
- AlicenseAqualityBmaintenanceThis MCP server drives Defold games through an in-game debug bridge, allowing MCP clients to build, launch, playtest, and interact with real game builds via tools for input, screen reading, state, and logs.91MIT