Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
AUDACITY4_MCP_PROFILENoOptional profile to load only a subset of tools (e.g. cleanup, editing, mastering, transcription, minimal).

Instructions

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

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

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

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

Tools

Functions exposed to the LLM to take actions

NameDescription
auto_analyze_audioA

Analyze the current project's audio and recommend a cleanup pipeline. Selects all audio first, exports it to a temp WAV, measures it, and returns peak/noise/clipping/click/silence-gap/dynamic-range diagnostics plus a recommendation for which pipeline to run next.

analyze_beat_finderA

Find beats in the selected audio and add a label at each one.

Adds labels to the project's label track (creating one if needed) - call label_list afterward to read the detected beat positions.

Args: threshold_percent: Sensitivity threshold, 5-100. Lower finds more beats. Default: 65

analyze_label_soundsA

Detect sounds separated by silence and add a label for each one (or for each silence gap, depending on label_type).

Adds labels to the project's label track (creating one if needed) - call label_list afterward to read the detected regions.

Args: threshold_db: Level below which audio counts as silence, -100 to 0. Default: -30.0 measurement: How to measure level - "peak", "avg", or "rms". Default: "peak" min_silence_duration: Minimum silence length to count as a gap, in seconds. Default: 1.0 min_label_interval: Minimum spacing between labels, in seconds. Default: 1.0 label_type: "before"/"after" (point at sound edge), "around" (region around each sound), or "between" (region between sounds - i.e. the silences). Default: "between"

analyze_sample_data_exportA

Export raw sample values from the selection to a text/CSV/HTML file.

Args: path: Absolute output path. Extension determines format (.txt, .csv, .html). limit: Maximum number of samples to export, 1-1000000. Default: 100 units: Measurement scale - "dB" or "Linear". Default: "dB"

auto_cleanup_audioA

SAFE CLEANUP: Remove noise and artifacts WITHOUT changing loudness or dynamics. Use this when audio levels are already good and you just want to clean it up. Runs in background - returns a job_id immediately. Use check_pipeline_status to monitor.

Pipeline: DC offset removal > noise reduction (opt) > click removal (opt). NO compression, NO normalize, NO LUFS. Just clean.

Args: remove_noise: Apply noise reduction using the first 0.5s as a noise profile. Default: True. IMPORTANT: the first 0.5s should be room tone/silence if this is True. remove_clicks: Remove clicks/pops (useful for vinyl/old recordings). Default: False.

auto_cleanup_podcastA

ONE-CLICK PODCAST CLEANUP. Runs in background - returns a job_id immediately. Use check_pipeline_status to monitor.

Pipeline: DC offset > noise reduction (opt) > compress 4:1 > safe LUFS loudness (-16 LUFS, Apple Podcasts target) with clip-safe fallback.

Args: remove_noise: Apply noise reduction using the first 0.5s as a noise profile. Default: True. IMPORTANT: the first 0.5s should be room tone/silence if this is True.

auto_audiobook_masteringA

ONE-CLICK AUDIOBOOK MASTERING: ACX/Audible compliant processing. Runs in background - returns a job_id immediately. Use check_pipeline_status to monitor.

Pipeline: DC offset > noise reduction (opt) > compression 2.5:1 > RMS -20dB (safe, clip-checked) > peak cap -3.5dB. Targets ACX requirements: RMS -23 to -18 dB, peaks below -3 dB (capped at -3.5 for safety margin), noise floor below -60 dB.

Args: remove_noise: Apply noise reduction using the first 0.5s as a noise profile. Default: True. IMPORTANT: the first 0.5s should be room tone/silence if this is True.

auto_cleanup_interviewA

ONE-CLICK INTERVIEW CLEANUP: Light-touch processing for dialogue and multiple speakers. Runs in background - returns a job_id immediately. Use check_pipeline_status to monitor.

Pipeline: DC offset > noise reduction 8dB (opt) > compression 2.5:1 > safe LUFS loudness. Lighter than podcast - preserves natural conversation dynamics.

Args: remove_noise: Apply noise reduction using the first 0.5s as a noise profile. Default: True. IMPORTANT: the first 0.5s should be room tone/silence if this is True.

auto_cleanup_vocalA

ONE-CLICK VOCAL CLEANUP: Professional processing for singing and studio vocals. Runs in background - returns a job_id immediately. Use check_pipeline_status to monitor.

Pipeline: DC offset > noise reduction 10dB (opt) > compression 3:1 > presence EQ (treble+3dB/bass-1dB) > safe LUFS loudness.

Args: remove_noise: Apply noise reduction using the first 0.5s as a noise profile. Default: True. IMPORTANT: the first 0.5s should be room tone/silence if this is True.

auto_cleanup_liveA

ONE-CLICK LIVE RECORDING CLEANUP: Aggressive processing for noisy/field recordings. Runs in background - returns a job_id immediately. Use check_pipeline_status to monitor.

Pipeline: DC offset > click removal > noise reduction 12dB (always on) > compression 5:1 > safe LUFS loudness. Designed for live performances, field recordings, and noisy environments.

IMPORTANT: The first 0.5 seconds MUST be room tone / ambient noise for noise profiling.

auto_master_musicA

ONE-CLICK MUSIC MASTERING: Professionally master your music track with genre-tuned settings pushed toward a real, published genre loudness target (not just a peak ceiling). Runs in background - returns a job_id immediately. Use check_pipeline_status to monitor.

Pipeline: click removal > noise reduction (opt, off by default for produced music) > compression (genre-tuned) > bass/treble sweetening (genre-tuned) > safe loudness push toward the genre's real integrated- LUFS target (EDM -7.5, hip-hop -9.0, pop -9.5, rock -10.5, classical/ acoustic -14.0 - see _mastering_pipeline's docstring for sources), clip-checked first and falling back to a peak-only reduction if hitting the target would clip. NOTE: if your track was already louder than its genre target going in, this pipeline can make it measure QUIETER, not louder - it targets a specific published loudness level, not "as loud as possible."

Args: style: Genre preset - "edm", "hiphop", "rock", "pop", "classical", "acoustic". Default: "edm" noise_reduce: Apply gentle noise reduction. Default: False

auto_lofi_effectA

CREATIVE LO-FI EFFECT: Apply a vintage/lo-fi sound to your audio. Runs in background - returns a job_id immediately. Use check_pipeline_status to monitor.

Pipeline: bass/treble warmth > compression 2:1 > safe peak ceiling. NOTE: currently warmth + compression only, not the full frequency-cutoff filtering v3 had (see auto_lofi_effect's result "note" field for why).

Args: intensity: "light" (subtle warmth), "medium" (classic lo-fi), "heavy" (extreme tape sound). Default: "medium"

check_pipeline_statusA

Check the status of a running cleanup pipeline.

Args: job_id: The job ID returned by an auto_ pipeline tool.

edit_cutB

Cut the selected audio to clipboard. Select tracks and a time range first.

edit_copyA

Copy the selected audio to clipboard. Select tracks and a time range first.

edit_pasteA

Paste audio from clipboard at the start of the current selection. Select the destination position first with select_region (or cursor_set).

edit_deleteA

Delete the selected audio, closing the gap (does not copy to clipboard). Select tracks and a time range first.

edit_splitA

Split the selected clip(s) at the selection boundaries (in place, no new track). Select tracks and a time range first.

edit_trimA

Trim audio outside the selection (delete everything except the selected region). Select tracks and a time range first.

edit_silenceA

Replace the selected audio with silence. Select tracks and a time range first.

edit_duplicateA

Duplicate the selected audio into a new track. Select tracks and a time range first.

edit_split_newA

Split the selected audio into a new track at the selection boundaries, leaving the original track unchanged. Select tracks and a time range first.

edit_split_cutA

Cut the selected audio to clipboard WITHOUT closing the gap - leaves silence where the audio was. Select tracks and a time range first.

edit_split_deleteA

Delete the selected audio WITHOUT closing the gap - leaves silence where the audio was. Select tracks and a time range first.

edit_disjoinA

Split the selected audio into separate clips at detected silences. Select tracks and a time range first.

edit_joinA

Join the selected clips into one clip. Select tracks and a time range first.

clip_set_pitchA

Non-destructively change one clip's pitch, without processing any audio - purely a playback-time transform. Reversible via clip_reset_pitch, or bake it in permanently with clip_render_pitch_speed.

Args: key: The clip's key, in "trackId:itemId" format (from track_get_info). semitones: Pitch shift in semitones (can be negative).

clip_reset_pitchA

Revert a clip's pitch change made via clip_set_pitch.

Args: key: The clip's key, in "trackId:itemId" format.

clip_set_speedA

Non-destructively change one clip's speed, without processing any audio. Reversible via clip_reset_speed, or bake it in permanently with clip_render_pitch_speed.

CONFIRMED LIVE: speed is a DURATION multiplier, not a playback-rate multiplier - new_duration = original_duration * speed. speed=2.0 makes the clip take twice as long on the timeline (plays slower/stretched), speed=0.5 makes it half as long (plays faster/compressed) - the opposite of what "speed" implies in most other software.

Args: key: The clip's key, in "trackId:itemId" format. speed: Duration multiplier. 1.0 = unchanged, 2.0 = twice as long (slower), 0.5 = half as long (faster).

clip_reset_speedA

Revert a clip's speed change made via clip_set_speed.

Args: key: The clip's key, in "trackId:itemId" format.

clip_render_pitch_speedA

Permanently bake a clip's pitch/speed changes into its audio - use once you're happy with a non-destructive preview from clip_set_pitch/clip_set_speed. Cannot be undone via clip_reset_pitch/ clip_reset_speed after this - use edit_undo instead if needed right away.

Args: key: The clip's key, in "trackId:itemId" format.

clip_reset_pitch_speedA

Revert both pitch and speed changes on a clip in one call.

Args: key: The clip's key, in "trackId:itemId" format.

clip_split_at_silencesA

Automatically split one specific clip into multiple clips at its detected silence boundaries. Unlike edit_disjoin (which acts on whatever's currently selected), this targets one clip directly by key.

Args: key: The clip's key, in "trackId:itemId" format.

split_range_at_silencesA

Automatically split every clip on the selected track(s) within a time range at detected silence boundaries. Select tracks first with select_tracks.

Args: start: Start time in seconds. end: End time in seconds (>= start).

clip_trimA

Trim a clip's left or right edge inward by a delta in seconds, discarding that audio.

CONFIRMED LIVE: positive delta_sec shrinks the clip inward from the given edge, for both "left" and "right" - e.g. side="left", delta_sec=1.0 moves the clip's start forward by 1 second.

Args: key: The clip's key, in "trackId:itemId" format. side: "left" or "right". delta_sec: Positive shrinks the clip inward from this edge; negative grows it back outward (same convention as clip_stretch). min_clip_duration: Minimum duration the clip must retain, in seconds. Default: 0.

clip_stretchA

Grow or shrink a clip's left or right edge, revealing previously- trimmed audio when growing (or time-stretching if none remains).

CONFIRMED LIVE: same delta_sec sign convention as clip_trim, despite the name suggesting the opposite - positive delta_sec SHRINKS the clip inward from the given edge, negative GROWS it outward. e.g. to restore 1 second previously trimmed off the right edge, call with side="right", delta_sec=-1.0, not +1.0.

Args: key: The clip's key, in "trackId:itemId" format. side: "left" or "right". delta_sec: Positive shrinks inward, negative grows/reveals outward. min_clip_duration: Minimum duration the clip must retain, in seconds. Default: 0.

nearest_zero_crossingA

Find the nearest zero-crossing time to a given timestamp, for precise, click-free edit points - independent of the current selection, unlike select_zero_crossing.

Args: time: Time in seconds to search near.

clip_set_colorA

Set a clip's color tag for visual organization.

Args: key: The clip's key, in "trackId:itemId" format. color_index: 0 (no custom color, inherit from track) to 9.

edit_undoA

Undo the last edit. Fails cleanly if there's nothing to undo.

edit_redoA

Redo the last undone edit. Fails cleanly if there's nothing to redo.

list_effectsA

List available effects/plugins actually installed in this Audacity - builtin, VST3, Nyquist, etc. Each result's "title" is the effect_id to pass to apply-effect (or any effect_* tool's underlying command) - that path resolves by title with a fallback. Its "id" is the real internal PluginID, which add_realtime_effect REQUIRES instead - confirmed live that passing a title there fails ("cannot load the effect"), since RealtimeEffectService::addRealtimeEffect has no title fallback.

IMPORTANT (confirmed live): "category" only works for Builtin/Nyquist effects - third-party VST3 plugins are NOT auto-categorized by Audacity's discovery (they all come back with category "None", even real reverbs/delays like Valhalla's whole lineup). To find VST effects, use family="VST3" combined with a search keyword (plugin name or vendor, e.g. search="valhalla" for reverb/delay VSTs) - category filtering will silently miss them.

Args: category: Category substring filter (case-insensitive), e.g. "reverb", "eq", "compression", "distortion", "pitch", "fading". Only matches Builtin/Nyquist effects - see note above. family: Exact family filter: "Builtin", "VST3", "Nyquist", "LV2", "AudioUnit", or "Extension". Default: no filter. search: Title substring filter (case-insensitive). limit: Max results to return, 1+. Default: 100. Check "totalMatched" in the response to see if results were capped.

normalizeA

Normalize the selected audio to a target peak level.

Args: peak_level_db: Target peak level in dB (-145 to 0). Default: -3.0 remove_dc: Remove DC offset before normalizing. Default: True stereo_independent: Normalize L/R channels separately. Default: False

get_noise_profileA

Capture a noise profile from the currently selected audio region. IMPORTANT: Select a region of pure noise (e.g. 0.5-2 seconds of silence/background noise) before calling this. This profile is used by the noise_reduction tool.

Sets NoiseReductionEffect's GetProfile flag and runs it - the same call the "Get Noise Profile" button in Audacity's Noise Reduction dialog makes.

noise_reductionA

Apply noise reduction to the selected audio. You MUST call get_noise_profile first on a region of pure noise, then select the audio you want to clean, then call this.

Args: sensitivity: Detection sensitivity (0.01-24). Default: 6.0 noise_gain_db: Amount of noise reduction in dB (0-48). Default: 12.0 frequency_smoothing_bands: Frequency smoothing bands (0-12). Default: 3

compressorA

Apply dynamic range compression to the selected audio.

Args: threshold_db: Level above which compression starts (dB). Default: -12 ratio: Compression ratio (e.g. 4.0 = 4:1). Default: 4.0 attack_ms: Attack time in milliseconds. Default: 3.0 release_ms: Release time in milliseconds. Default: 100.0 makeup_gain_db: Makeup gain applied after compression (dB). Default: -3.0 knee_width_db: Soft-knee width in dB. Default: 6.0

limiterA

Apply a limiter to prevent audio from exceeding a ceiling.

Args: threshold_db: Level above which limiting starts (dB). Default: -6 makeup_target_db: Output ceiling (dB) - the industry-standard streaming ceiling is -1.0. Default: -1.0 release_ms: Release time in milliseconds. Default: 20.0 knee_width_db: Soft-knee width in dB. Default: 2.0

loudness_normalizeA

Normalize audio to a target LUFS loudness. DANGER: can boost quiet/badly recorded audio by 20-30dB causing clipping - measure levels with auto_analyze_audio first. Targets: -16 LUFS (Apple Podcasts), -14 LUFS (Spotify/YouTube), -11 LUFS (loud masters).

Args: lufs_level: Target loudness in LUFS (-145 to 0). Default: -16.0 stereo_independent: Normalize L/R channels independently. Default: False dual_mono: Treat mono as dual-mono for correct LUFS measurement. Default: True

click_removalA

Remove clicks and pops from the selected audio (e.g. vinyl recordings).

Args: threshold: Click detection threshold (0-900). Higher = fewer clicks removed. Default: 200 spike_width: Maximum width of a click in samples (0-40). Default: 20

bass_and_trebleB

Adjust bass and treble frequencies with a simple tonal shaping tool.

Args: bass: Bass adjustment in dB (-30 to 30). Default: 0 treble: Treble adjustment in dB (-30 to 30). Default: 0 gain: Output gain in dB (-30 to 30). Default: 0

effect_amplifyA

Amplify (or attenuate) the selected audio by a linear ratio.

Args: ratio: Amplification ratio (e.g. 2.0 = +6dB, 0.5 = -6dB). Range: 0.003162-316.227766. Default: 1.0 allow_clipping: Allow the result to clip instead of being limited. Default: False

effect_fade_inA

Apply a fade-in to the selected audio. Select the region to fade first.

effect_fade_outA

Apply a fade-out to the selected audio. Select the region to fade first.

effect_reverbB

Apply reverb to the selected audio.

Args: room_size: Room size percentage (0-100). Default: 75 pre_delay: Pre-delay in ms (0-200). Default: 10 reverberance: Reverberance percentage (0-100). Default: 50 hf_damping: High frequency damping percentage (0-100). Default: 50 tone_low: Tone low percentage (0-100). Default: 100 tone_high: Tone high percentage (0-100). Default: 100 wet_gain: Wet signal gain in dB (-20 to 10). Default: -1.0 dry_gain: Dry signal gain in dB (-20 to 10). Default: -1.0 stereo_width: Stereo width percentage (0-100). Default: 100 wet_only: Output only the wet (reverb) signal. Default: False

effect_change_pitchB

Change the pitch of the selected audio without changing tempo.

Args: semitones: Number of semitones to shift (negative = lower, positive = higher) use_high_quality_stretching: Use the higher-quality SBSMS algorithm (slower). Default: False

effect_paulstretchA

Extreme time-stretch effect (creates ambient/drone textures). Select audio first.

Args: stretch_factor: How much to stretch (1.0 = no change, 10.0 = 10x longer). Default: 10.0 time_resolution: Time resolution in seconds - smaller = better quality, slower (>= 0.00099). Default: 0.25

effect_reverseA

Reverse the selected audio. Select a region first.

effect_invertA

Invert (flip phase) the selected audio. Useful for phase cancellation.

effect_repairA

Repair a very short damaged section of audio (a few dozen samples at most). Select the damaged region first - it must be extremely short, or the effect will refuse to run.

effect_sliding_stretchA

Change tempo and/or pitch gradually across the selection (sliding time stretch).

Args: rate_change_start: Tempo change at start in % (-90 to 500). Default: 0 rate_change_end: Tempo change at end in % (-90 to 500). Default: 0 pitch_change_start_semitones: Pitch change at start in semitones (-12 to 12). Default: 0 pitch_change_end_semitones: Pitch change at end in semitones (-12 to 12). Default: 0

effect_remove_dc_offsetA

Remove DC offset from the selected audio without changing its peak level.

v4's "Remove DC offset" is invoked here as Normalize with only the DC checkbox on and level-normalization off (ApplyVolume=0) - confirmed the same parameter set as the already-verified normalize() tool, just with volume application disabled. Takes no parameters.

effect_adjustable_fadeA

Apply a customizable fade to the selected audio.

Requires a SINGLE-clip selection - confirmed live that a selection spanning multiple clips triggers an unguarded assert/crash (Au3SelectionController::rightMostSelectedClipEndTime). A clean single-clip selection was also confirmed live to work correctly (isError: false, no crash). Normalize has the same "single clip only" precondition but fails gracefully with a normal error instead of crashing when violated - this one does not, so get the selection right.

Args: fade_type: "Up", "Down", "SCurveUp", or "SCurveDown". Default: "Up" mid_fade_adjust_percent: Adjusts the fade curve's midpoint, -100 to 100. Default: 0.0 units: Interpret start_level/end_level as "Percent" (of original) or "dB" gain. Default: "Percent" start_level: Level at the start of the fade. Default: 0.0 end_level: Level at the end of the fade. Default: 100.0

truncate_silenceA

Find and shorten runs of silence in the selected audio.

Args: threshold_db: Silence threshold in dB, -80 to -20. Default: -20.0 minimum_silence: Minimum silence duration to detect, in seconds, >= 0.001. Default: 0.5 truncate_to: Duration to truncate silence down to, in seconds. Default: 0.5 compress_ratio: Percent to compress the remaining silence by, 0-99.9. Default: 50.0 independent_channels: Detect silence independently per channel. Default: False

effect_clip_fixA

Repair clipped (distorted) peaks in the selected audio.

Args: threshold: Clipping threshold percent, 0-100. Default: 95.0 gain_db: Gain adjustment in dB, -30 to 0. Default: -9.0

effect_crossfade_clipsA

Crossfade the overlap between two adjacent, overlapping clips. Select the overlapping region across both clips first. Takes no parameters.

effect_crossfade_tracksA

Crossfade the selected region between two overlapping tracks.

Args: curve_type: 0=Constant Gain, 1=Constant Power (1), 2=Constant Power (2), 3=Custom Curve. Default: 0

effect_studio_fade_outA

Apply a smoother, more natural fade-out than effect_fade_out to the selected audio. Takes no parameters.

effect_notch_filterA

Apply a notch filter to remove a narrow frequency band (e.g. mains hum) from the selected audio.

Args: frequency_hz: Center frequency to notch out in Hz, > 0. Default: 60.0 q: Q (narrowness) of the notch, 0.1-1000. Default: 1.0

effect_tremoloA

Apply a tremolo (amplitude modulation) effect to the selected audio.

Args: wave_type: 0=Sine, 1=Triangle, 2=Sawtooth, 3=Inverse Sawtooth, 4=Square. Default: 0 phase_degrees: LFO starting phase, -180 to 180. Default: 0 wet_percent: Wet mix percent, 1-100. Default: 40 lfo_hz: LFO rate in Hz, 0.001-1000. Default: 4.0

generate_toneA

Generate a tone. Fills the currently selected time range - call select_region first to control duration.

Args: waveform: "Sine", "Square", "Sawtooth", "Square, no alias", or "Triangle". Default: "Sine" frequency: Frequency in Hz (>= 1). Default: 440 amplitude: Amplitude (0-1). Default: 0.8

generate_chirpA

Generate a chirp (frequency sweep). Fills the currently selected time range - call select_region first to control duration.

Args: waveform: "Sine", "Square", "Sawtooth", "Square, no alias", or "Triangle". Default: "Sine" start_freq: Starting frequency in Hz (>= 1). Default: 440 end_freq: Ending frequency in Hz (>= 1). Default: 1320 start_amp: Starting amplitude (0-1). Default: 0.8 end_amp: Ending amplitude (0-1). Default: 0.1

generate_noiseB

Generate noise. Fills the currently selected time range - call select_region first to control duration.

Args: noise_type: "White", "Pink", or "Brownian". Default: "White" amplitude: Amplitude (0-1). Default: 0.8

generate_dtmfA

Generate DTMF (telephone) tones. Fills the currently selected time range - call select_region first to control duration.

Args: sequence: Text to encode as DTMF tones. Default: "audacity" (Audacity's own default) duty_cycle: Tone vs silence ratio percentage (0-100). Default: 55 amplitude: Amplitude (0-1). Default: 0.8

generate_silenceA

Generate silence. Fills the currently selected time range - call select_region first to control duration. Takes no parameters.

generate_rhythm_trackA

Generate a metronome/click rhythm track.

Args: tempo_bpm: Tempo, 30-300 beats/minute. Default: 120.0 beats_per_bar: Time signature numerator, 1-20. Default: 4 swing: Swing amount, -1 to 1. Default: 0.0 num_bars: Number of bars to generate, 0-1000. Set to 0 to use duration_seconds instead. Default: 16 duration_seconds: Duration to fill, used only when num_bars is 0. Default: 0.0 start_offset: Silence before the first beat, in seconds. Default: 0.0 click_type: One of: Metronome, Ping (short), Ping (long), Cowbell, ResonantNoise, NoiseClick, Drip (short), Drip (long). Default: "Metronome" strong_beat_pitch: MIDI pitch of the strong (first) beat, 18-116. Default: 84 weak_beat_pitch: MIDI pitch of weak beats, 18-116. Default: 80

label_listA

List all labels on the project's (first) label track, with key, text, and time range.

label_add_trackA

Create a new, empty label track.

label_addA

Add a label at the current selection/playback position. Creates a label track automatically if none exists yet.

Args: text: Optional text for the new label.

label_removeA

Remove a label by its key.

Args: key: The label's key, in "trackId:itemId" format (from label_list/label_add).

label_update_textB

Change the text of an existing label.

Args: key: The label's key, in "trackId:itemId" format. text: The new text for the label.

label_editA

Edit an existing label's text and/or timing in one call. Only the fields you pass are changed.

Args: key: The label's key, in "trackId:itemId" format (from label_list). text: New label text. Default: unchanged. start: New start time in seconds. Default: unchanged. end: New end time in seconds. Default: unchanged.

label_add_atA

Add a label at an exact time range, regardless of the current selection.

Composed from select_region + label_add (add-label places the new label at whatever is currently selected - confirmed in handleAddLabel's source comments). Changes the current selection as a side effect.

Args: start: Start time in seconds. end: End time in seconds (>= start). text: Optional text for the new label.

label_add_batchB

Add multiple labels in one call.

Args: labels: List of {"start": float, "end": float, "text": str (optional)}.

label_importA

Import labels from a standard Audacity label text file (tab-separated start\tend\ttext per line; point labels have start == end).

There is no C++ import/export primitive for this in v4 (unlike v3's ImportLabels/ExportLabels scripting commands) - implemented here in pure Python instead, parsing the file directly and adding each label via the same primitives label_add_batch uses. Lines that don't parse as start/end/text are skipped and reported rather than failing the whole import.

Args: path: Absolute path to the labels text file.

label_exportA

Export all labels to a standard Audacity label text file (tab-separated start\tend\ttext per line) - the same format label_import reads back.

There is no C++ export primitive for this in v4 - implemented here in pure Python instead, formatting label_get_all's data directly.

Args: path: Absolute path for the output labels file. overwrite: Set true to replace an existing file. Default: False.

label_export_chaptersA

Export labels as a chapter/marker file.

Turns a label track into a standard marker file - chapter navigation for long-form audio, a track listing for a continuous mix, an index for a lecture or interview recording. Formats: "simple" (HH:MM:SS.mmm Title per line), "cue" (cue sheet), "podlove" (Podlove Simple Chapters JSON). Labels with no text become "Chapter 1", "Chapter 2" and so on.

Args: path: Absolute path for the output file. format: Chapter format - simple, cue or podlove. Default: simple. overwrite: Set true to replace an existing file. Default: False.

label_export_audio_segmentsA

Export the audio under each label as its own mono WAV file.

Splits a long recording into per-segment audio files, named "01_Segment_Title.wav" and so on from the label text. ALWAYS tell the user which directory the files will be written to BEFORE calling this. Point labels (zero length) have no audio to export and are skipped. Existing files are never overwritten - they are skipped and reported. This can take a while for many or long segments.

Only mono WAV output is available - v4's underlying export-wav command (unlike v3's Export2) has no format/channel-count parameters yet.

Args: directory: Absolute path to the output directory.

label_get_allA

Get all labels as structured data (key, text/title, start, end) rather than the raw MCP content blocks label_list returns.

label_findA

Find labels whose text contains the given (case-insensitive) substring.

Args: query: Substring to search for in label text.

label_regular_intervalsA

Add labels at regular intervals across a known duration.

There is no C++ primitive to query project/selection duration yet, so the caller must supply it explicitly (e.g. from project_export_audio's or an analysis tool's measured length) rather than this tool guessing.

Args: interval: Spacing between labels, in seconds (> 0). duration: Total duration to cover, in seconds (> 0). text_prefix: Text prefix for each label; each gets a "N" suffix, 1-based. Default: "Marker"

label_delete_audio_atB

Delete the audio under a single label (by key), closing the gap.

Args: key: The label's key, in "trackId:itemId" format (from label_list).

label_cut_regionsA

Cut the audio under every label to the clipboard, closing the gaps.

Only the LAST cut survives on the clipboard (each cut overwrites it) - this collapses every labeled region but only the final one is recoverable via paste. Processes labels last-to-first so earlier label times stay valid as later regions are removed. Label track itself is unaffected.

label_delete_regionsA

Delete the audio under every label, closing the gaps.

Processes labels last-to-first so earlier label times stay valid as later regions are removed. Re-read label_list afterwards - the timeline shifted.

label_silence_regionsA

Replace the audio under every label with silence, keeping the timeline length.

Order doesn't matter - silencing doesn't shift anything. Labels stay put.

label_split_regionsA

Split the audio clips at every label's start and end boundary.

Order doesn't matter - splitting doesn't shift anything. Labels stay put.

label_join_regionsA

Join the audio clips across every labeled region back together.

The inverse of label_split_regions. Order doesn't matter. Labels stay put.

get_default_export_folderA

Get the default folder for exporting audio files. Returns the user's Music folder path (falling back to their home folder if Music doesn't exist). Use this when the user doesn't specify where to save.

project_newA

Create a new project in the current window. Only works when no project is currently open - if one is open, close it first with project_close (after saving with project_save_as if needed), since replacing an open project here would open a whole separate application window instead.

project_openA

Open an existing Audacity project file (.aup4 - Audacity 4's native format; .aup3 files are Audacity 3 format and will trigger an interactive conversion prompt in the app, which is not safe to trigger over MCP).

Args: path: Absolute path to the .aup4 project file

project_import_audioA

Import an audio file into the current project as a new track. Requires a project to already be open - use project_new or project_open first.

Args: path: Absolute path to the audio file (wav, mp3, ogg, flac, etc.)

project_closeA

Close the current project. Refuses if there are unsaved changes - save with project_save_as first, since closing a dirty project would otherwise require an interactive save-changes dialog that isn't safe to trigger over MCP.

project_save_asA

Save the current project to a new .aup4 file. ONLY call when the user explicitly asks - do NOT auto-save after effects or pipelines.

Args: path: Absolute path for the new .aup4 file overwrite: Set true to replace an existing file at that path - refused by default

project_export_audioA

Export the full project's audio (all tracks, stereo, 44.1kHz WAV).

MANDATORY: ALWAYS tell the user where the file will be saved BEFORE exporting. NEVER save directly to the user's home folder root - use a subfolder like Music, Documents, or Desktop.

Args: path: Absolute path for the exported .wav file overwrite: Set true to replace an existing file at that path - refused by default

project_export_selectionA

Export only the current selection's audio (mono, 44.1kHz WAV). Select a time range first with select_region or select_all.

MANDATORY: ALWAYS tell the user where the file will be saved BEFORE exporting. NEVER save directly to the user's home folder root - use a subfolder like Music, Documents, or Desktop.

Args: path: Absolute path for the exported .wav file overwrite: Set true to replace an existing file at that path - refused by default

project_saveA

Save the current project. Refuses if the project has never been saved before (has no file path yet) or has no unsaved changes - check the returned message for why, if isError is true.

recent_commandsA

List recently executed MCP commands with their id, timestamp, success, and result message. Useful for checking what an earlier command actually did, or finding a command's id to look up with command_status.

command_statusA

Look up the recorded result of a previously executed command by its id.

Args: command_id: The command id, as returned in a recent_commands entry.

project_get_infoA

Get project-wide info: path, display name, unsaved-changes state, duration, and a summary of every track (id, title, type, rate, mute/solo, clip count). Use a track's id with track_get_info for its full clip (or label) list.

project_get_metadataA

Get project metadata tags: artist, track title, album, track number, year, comments. NOTE: a brand new project's "year" field is NOT empty - confirmed live it defaults to "2018" (a stale template default, not today's date).

project_set_metadataA

Set one or more project metadata tags. Only the fields you pass are changed - pass an empty string to clear a field.

Args: artist: Artist name. track_title: Track title. album: Album title. track_number: Track number. year: Year. comments: Comments.

suggest_and_add_effectA

Find a good installed effect for a stated goal and add it as a realtime effect - the "pick the right plugin for me" workflow, so the user doesn't have to know which of their installed VSTs does reverb, compression, EQ, etc. Searches every actually-installed, realtime- capable effect (Builtin and VST3 alike) by matching category keywords against its title/vendor - VST3 plugins don't reliably self-report a usable category (confirmed live: they all come back "None"), so text matching is the only signal that works across formats. "Best" here is a soft preference among real matches (a few well-regarded vendors, see _PREFERRED_VENDORS), not an objective quality ranking - there isn't one. Returns the alternatives too, so the choice isn't a black box the user can't override.

Args: track_id: Track id, from project_get_info's track list. Use -2 for the Master bus. category: One of "reverb", "compressor", "eq", "delay", "limiter", "distortion", "gate", "chorus", "phaser", "flanger", "deesser".

add_realtime_effectA

Add a non-destructive realtime effect to a track's (or the Master bus's) effect chain. Unlike apply-effect/effect_* tools, this stays adjustable and removable afterward - the actual VST/plugin GUI can still be opened live in Audacity to tweak it, same as adding it by hand via the Realtime Effects panel.

Args: track_id: Track id, from project_get_info's track list. Use -2 for the Master bus. effect_id: The real PluginID, from list_effects' "id" field - NOT "title". Confirmed live: passing a title here fails with "cannot load the effect" (this path has no title fallback, unlike apply-effect).

list_realtime_effectsA

List the realtime effect chain on a track or the Master bus, with each effect's index (for remove_realtime_effect/set_realtime_effect_active), name, and active state.

Args: track_id: Track id, from project_get_info's track list. Use -2 for the Master bus.

remove_realtime_effectA

Remove one effect from a track's (or the Master bus's) realtime effect chain by index.

Args: track_id: Track id, from project_get_info's track list. Use -2 for the Master bus. index: Position in the chain, from list_realtime_effects.

set_realtime_effect_activeA

Enable or bypass one effect in a track's (or the Master bus's) realtime effect chain, without removing it.

Args: track_id: Track id, from project_get_info's track list. Use -2 for the Master bus. index: Position in the chain, from list_realtime_effects. active: True to enable, False to bypass.

list_effect_parametersA

List a realtime effect's real, plugin-reported parameters - name, units, min/max/default/current value, and a human-formatted current value string. Works uniformly across Builtin/VST3/LV2/AudioUnit plugins via Audacity's own parameter-extraction layer - no need to guess a plugin's parameter names or ranges (e.g. a reverb's actual "Mix"/"Decay"/"Size" parameters, a compressor's "Threshold"/"Ratio").

Args: track_id: Track id, from project_get_info's track list. Use -2 for the Master bus. index: Position in the chain, from list_realtime_effects.

set_effect_parameterA

Set one real-time parameter on a realtime effect to an exact value - e.g. the actual wet/dry mix or decay time of a reverb, not just add/remove/bypass the whole effect.

Args: track_id: Track id, from project_get_info's track list. Use -2 for the Master bus. index: Position in the chain, from list_realtime_effects. parameter_id: Parameter id, from list_effect_parameters' "id" field. value: New value within [minValue, maxValue] from list_effect_parameters. CONFIRMED LIVE: for VST3 plugins this range is typically normalized 0-1, NOT real display units, even though list_effect_parameters' currentValueString shows a real unit (e.g. "21.26 s") - after setting, re-read currentValueString to see the actual resulting value, don't assume the input scale matches it.

list_effect_presetsA

List a realtime effect's real factory presets (e.g. a reverb's named room/hall presets), if the plugin format exposes any. Not every plugin has factory presets - an empty list is a normal result, not an error.

Args: track_id: Track id, from project_get_info's track list. Use -2 for the Master bus. index: Position in the chain, from list_realtime_effects.

apply_effect_presetB

Apply one of a realtime effect's factory presets by id.

Args: track_id: Track id, from project_get_info's track list. Use -2 for the Master bus. index: Position in the chain, from list_realtime_effects. preset_id: Preset id, from list_effect_presets.

select_allA

Select all tracks and all audio data in the project.

select_noneA

Deselect all tracks and clear the time selection.

select_regionA

Select a time region. Applies to whichever tracks are currently selected - call select_tracks or select_all first if needed.

Args: start: Start time in seconds end: End time in seconds

select_tracksA

Select one or more tracks by index.

Args: track: Starting track index (0-based) count: Number of tracks to select

select_zero_crossingA

Adjust the current selection boundaries to the nearest zero crossings. Useful before cuts to avoid audible clicks at edit points.

cursor_setA

Move the playback cursor / edit point to a specific time.

Args: time: Position in seconds

cursor_to_project_startA

Move the cursor to the very start of the project (t=0).

cursor_to_project_endA

Move the cursor to the end of the project (its total duration).

cursor_to_track_startA

Move the cursor to the start of a track's earliest clip.

Args: track_id: The track's id, from project_get_info's track list.

cursor_to_track_endA

Move the cursor to the end of a track's latest clip.

Args: track_id: The track's id, from project_get_info's track list.

select_clipA

Select a specific clip by key - selects its track, the clip itself, and the time range spanning it.

Args: key: Clip key "trackId:itemId", from track_get_info's clip list.

select_cursor_to_track_endA

Select from the current cursor position to the end of a track's latest clip.

Args: track_id: The track's id, from project_get_info's track list.

track_add_monoA

Add a new mono audio track to the project.

track_add_stereoA

Add a new stereo audio track to the project.

track_removeA

Remove the currently selected track(s). Select tracks first with select_tracks.

track_set_propertiesA

Set one or more properties of a track by index. Only the properties you pass are changed - omit any you don't want to touch.

Args: track: Track index (0-based) name: New track name gain: Track gain in dB (-36 to 36) pan: Track pan (-1.0=left to 1.0=right) mute: Mute the track solo: Solo the track

track_duplicateA

Duplicate the currently selected track(s). Select tracks first with select_tracks.

track_resampleA

Resample the selected track(s) to a new sample rate. Select tracks first with select_tracks.

Args: rate: Target sample rate in Hz (e.g. 44100, 48000, 96000). Must be 1-384000.

track_get_infoA

Get detailed info about one track: title, type, rate, mute/solo, and its full clip list (start/end/title per clip), or label list for a label track.

Args: track_id: The track's id, from project_get_info's track list. NOT the same as track_set_properties'/track_resample's 0-based "track" index - use the "id" field from project_get_info.

track_muteA

Mute or unmute a track by index. Convenience wrapper over track_set_properties' mute parameter.

Args: track: Track index (0-based) - same convention as track_set_properties, NOT the "id" field from project_get_info/track_get_info. mute: True to mute, False to unmute. Default: True

track_mute_allA

Mute every track in the project, including any not currently selected.

Uses a dedicated C++ command that iterates the real track list by id - NOT composed from track_set_properties' index-based addressing, which would silently hit the wrong track whenever a label track sits before an audio track (project_get_info's track list excludes label tracks, but the raw index space includes them).

track_unmute_allA

Unmute every track in the project, including any not currently selected.

track_set_colorA

Set the color tag for the currently selected track(s), for visual organization. Select tracks first with select_tracks.

Args: color_index: 0 (no custom color, inherit default) to 9.

get_default_transcription_folderA

Get the default folder for saving transcription files. Returns the user's Documents folder. Call this when the user doesn't specify where to save.

check_transcription_statusA

[EXPERIMENTAL] Check the status of a running transcription job. Call this after starting transcribe_audio, transcribe_to_labels, or transcribe_to_file. Poll every 10-15 seconds until status is 'complete' or 'error'.

Args: job_id: The job ID returned when you started the transcription.

transcribe_audioA

[EXPERIMENTAL] Transcribe the entire project audio using faster-whisper (local, offline). Requires separate setup (pip install faster-whisper).

Runs in BACKGROUND - returns a job_id immediately. Use check_transcription_status to monitor progress. Poll every 10-15 seconds.

Language auto-detection can occasionally misidentify the language. If you already know the audio's language, pass language explicitly (e.g. "en"), or set task="translate" to force English output regardless of the spoken language.

Args: model_size: Whisper model - "tiny", "base", "small", "medium", "large-v3". Default: "small" language: ISO language code (e.g. "en", "fr") or None for auto-detect task: "transcribe" or "translate" (translate converts any language to English)

transcribe_selectionA

[EXPERIMENTAL] Transcribe only the currently selected audio region. Requires separate setup (pip install faster-whisper).

Runs in BACKGROUND - returns a job_id immediately. Select a region first, then call this tool.

Args: model_size: Whisper model - "tiny", "base", "small", "medium", "large-v3" language: ISO language code or None for auto-detect task: "transcribe" or "translate"

transcribe_to_labelsA

[EXPERIMENTAL] Transcribe audio and add Audacity labels at each segment timestamp. Requires separate setup (pip install faster-whisper).

Runs in BACKGROUND - returns a job_id immediately.

If labels from a previous attempt need clearing first: select_tracks the label track, then track_remove, before re-running this.

Args: model_size: Whisper model - "tiny", "base", "small", "medium", "large-v3" language: ISO language code (e.g. "en") or None for auto-detect task: "transcribe" (labels in the spoken language) or "translate" (labels always in English, regardless of the spoken language)

transcribe_to_fileA

[EXPERIMENTAL] Transcribe audio and export to a subtitle or text file. Requires separate setup (pip install faster-whisper).

ALWAYS tell the user where the file will be saved BEFORE starting. If user doesn't specify a path, call get_default_transcription_folder for a real path.

Runs in BACKGROUND - returns a job_id immediately.

Args: path: Absolute path for the output file (e.g. "C:/Users/You/Documents/transcript.srt") format: Output format - "srt", "vtt", or "txt" model_size: Whisper model - "tiny", "base", "small", "medium", "large-v3" language: ISO language code (e.g. "en") or None for auto-detect task: "transcribe" (spoken language) or "translate" (always English)

transcription_set_modelA

[EXPERIMENTAL] Pre-download a whisper model. ONLY call this if the user explicitly asks to download or change the model. Do NOT call this before transcribe_audio - transcription tools handle model loading automatically.

Runs in BACKGROUND - returns a job_id immediately.

Model sizes:

  • tiny: ~75MB (fastest, least accurate)

  • base: ~150MB (good balance for most use cases)

  • small: ~500MB (better accuracy, recommended)

  • medium: ~1.5GB (high accuracy)

  • large-v3: ~3GB (best accuracy, slowest)

Args: model_size: Model to load - "tiny", "base", "small", "medium", "large-v3"

transport_playA

Start playback from the current cursor position, unconditionally - unlike transport_play_stop (a toggle), this never stops playback that's already running. There is no dedicated "always play" action in v4 (only a play/stop toggle and play-selection, which requires an actual selection); composed here by checking transport_get_play_position first and only toggling if not already playing.

transport_play_stopA

Toggle playback of the current project (play if stopped, stop if playing).

transport_pauseB

Pause playback.

transport_stopA

Stop playback.

transport_rewind_startA

Move the playback cursor to the start of the project.

transport_recordA

Start recording on a new track. Requires a working audio input device - if none is configured, this dispatches without error but recording won't actually engage. Use transport_stop to stop recording.

transport_get_play_positionA

Get the current playhead position, whether playback is active, and the current time selection (start/end).

transport_play_regionB

Select a time region and play it, starting from the region's beginning.

Args: start: Start time in seconds end: End time in seconds (>= start)

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xDarkzx/Audacity4-MCP'

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