Skip to main content
Glama
fmod-studio-mcp

fmod-studio-mcp

by EYamanS

fmod-studio-mcp

PyPI Buy me a coffee

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_save to 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

module

studio.project.*, studio.system.*, console.* …

the member's args

global

alert(...)

the member's args

entity

studio.project.model[<className>].* (class introspection)

className + args

instance

studio.project.lookup(target).*

target (path or {guid}) + 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

fmod_get_property

Read any property of an object, including per-class managed properties.

fmod_set_property

Set any property (e.g. instrument audioFile = an asset).

fmod_add_relationship / fmod_remove_relationship

Edit a relationship (e.g. event banks → a bank).

fmod_class_names

List the project model's class names.

fmod_describe_class

List a class's schema-defined property + relationship names (discovery).

fmod_create_event

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:

  1. Launch FMOD Studio and open your project (File → Open Project… → your .fspro).

  2. Open Preferences — FMOD Studio → Preferences… (⌘,) on macOS, Edit → Preferences… on Windows.

  3. Select the Interface tab — the Script Server section is at the top. Set:

    • ✅ Enable Script Server (requires restart)

    • Port: 3663 (must match FMOD_STUDIO_PORT, default 3663).

  4. Quit and relaunch FMOD Studio, then reopen the project. The setting only takes effect after a restart.

  5. (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 3663

On 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 for ScriptServer 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_PORT must 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-mcp

Or 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-mcp

Configure 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_mcp

Regenerating 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.json

A 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_save to 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:

Buy me a coffee

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 tools
fmod_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_menu_addMenuItemC

Registers a menu item under the "Scripts" menu, based on the description object: Returns true if the operation succeeds, or false otherwise. [method · menu.addMenuItem]

Inputs: required (required).

fmod_menu_menuItemsB

Returns an Array of menu item descriptions added with menu.addMenuItem() . The order of the Array matches the order in which the items were added. Returns an Array of menu item descriptions added with menu. [method · menu.menuItems]

Inputs: no named parameters.

fmod_menu_removeMenuItemA

Removes a menu item that was added with menu.addMenuItem() . The description argument must match a description that the menu item was added with. Returns true if the operation succeeds, or false otherwise. [method · menu.removeMenuItem]

Inputs: description (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_navigateToC

Attempts to navigate to a ManagedObject in the UI. Will open a new window if required. Returns true if successful. Returns true if successful. [method · window.navigateTo]

Inputs: managedObject (required).

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

    C2.4/5.0

    Scored across 155 tools

    Disambiguation2/5

    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.

    Naming Consistency3/5

    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.

    Tool Count1/5

    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.

    Completeness4/5

    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

    ActivitySlowing
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      An 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
      -
    • A
      license
      A
      quality
      B
      maintenance
      This 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.
      9
      1
      MIT