analyze_beat_finder
Find beats in the selected audio and add labels at beat positions.
Args: thres_val: Beat detection threshold (0-100, lower = more sensitive). Default: 65
Edit audio in Audacity by talking to it — clean up noise, master a podcast, cut and label, apply effects, and transcribe — all locally, with one-call cleanup pipelines.
LABSCO SUMMARY
With 144 tools, the pipelines are what make it usable rather than overwhelming: auto_cleanup_podcast or auto_audiobook_mastering run the whole chain — noise, dynamics, loudness — in one call, and check_pipeline_status lets you watch it work. It drives your own local Audacity through the scripting pipe, so the audio and the transcription both stay on your machine; the tradeoff is that Audacity has to be open with mod-script-pipe enabled, which is the usual first-run snag.
A server that gives an AI assistant control of Audacity through its named-pipe scripting interface: 144 tools spanning effects, cleanup, mastering, editing, labels, tracks, transcription and one-call pipelines. Everything runs locally through Audacity — no cloud, no API keys for the audio processing.
A local Audacity 3.x installation (4.x is not yet supported) with mod-script-pipe enabled under Preferences → Modules, and Python 3.10 or later. The bundled installer installs audacity-mcp from the cloned folder, enables mod-script-pipe, and configures the client, with a --dry-run to preview. Transcription runs entirely offline through faster-whisper, so audio never leaves the machine.
One command — pip install audacity-mcp-server
USE CASES
Run the podcast pipeline to handle noise, clicks, silence and loudness in one pass, then check its progress rather than applying each effect by hand.
Run the audiobook mastering pipeline toward ACX targets, or master music, letting it chain the analysis and dynamics steps for you.
Transcribe offline to labels placed at each timestamp, then export those labels as chapters or as separate audio segments.
Cut, split and trim the regions you want, apply targeted effects like a notch filter or a fade, and normalize the result.
Capture a noise profile from a quiet section, reduce the noise, strip the clicks, and clip out the dead air.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
analyze_beat_finderFind beats in the selected audio and add labels at beat positions.
Args: thres_val: Beat detection threshold (0-100, lower = more sensitive). Default: 65
analyze_contrastAnalyze the contrast between foreground and background audio. Select a region first. Useful for checking accessibility compliance (WCAG).
analyze_find_clippingFind clipping in the selected audio and create labels at clipped regions.
Args: duty_cycle_start: Min number of consecutive clipped samples to detect (1-1000, default 3) duty_cycle_end: Min number of consecutive non-clipped samples to end a region (1-1000, default 3)
analyze_label_soundsAutomatically label regions of sound separated by silence.
A good starting point for segmenting a long recording: label every passage of sound, or with label_type="between" label the silences instead so they can be trimmed with label_delete_regions.
measurement, label_type, pre_offset, post_offset and label_text are new and not yet independently live-tested against a running Audacity — verified against the scripting reference and unit tests with mocked responses only. threshold_db/min_silence_duration/min_sound_duration predate this and are unaffected.
Args: threshold_db: Volume threshold to distinguish sound from silence (dB). Default: -30 min_silence_duration: Minimum duration of silence between sounds (seconds). Default: 0.5 min_sound_duration: Minimum duration of a sound region (seconds). Default: 0.1 measurement: How level is measured — peak, avg or rms. Default: peak label_type: What to label — before, after, around or between the sounds. Default: before pre_offset: Seconds to extend each label before the sound starts. Default: 0 post_offset: Seconds to extend each label after the sound ends. Default: 0 label_text: Text for each label. Default: Audacity's own default
analyze_plot_spectrumOpen the Plot Spectrum window for the selected audio. Select a region first.
analyze_sample_data_exportExport raw sample data from the selected audio to a text file for analysis.
Args: path: Absolute path for the output file limit: Maximum number of samples to export. Default: 100
auto_analyze_audioAnalyze the current audio track and recommend the best pipeline to use. This is SYNCHRONOUS — it returns the analysis directly, no job_id needed.
Returns peak level, estimated noise floor, duration, clipping status, and a recommendation for which auto_ pipeline to use next.
IMPORTANT: Load your audio into Audacity before calling this.
auto_audiobook_masteringONE-CLICK AUDIOBOOK MASTERING: ACX/Audible compliant processing. Runs in background — returns a job_id immediately. Use check_pipeline_status to monitor.
Pipeline: DC offset > HPF 80Hz > noise reduction 12dB > compression 2.5:1 > RMS -20dB > peak cap -3.5dB Meets 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 first 0.5s as noise profile. Default: True
IMPORTANT: If remove_noise is True, the first 0.5 seconds should be room tone / silence. DO NOT call this again if a pipeline is already running — use check_pipeline_status instead.
auto_cleanup_audioSAFE 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 > HPF 80Hz > noise reduction (opt) > click removal (opt) NO compression, NO normalize, NO LUFS. Just clean.
Args: remove_noise: Apply noise reduction using first 0.5s as noise profile. Default: True remove_clicks: Remove clicks/pops (useful for vinyl/old recordings). Default: False
IMPORTANT: If remove_noise is True, the first 0.5 seconds should be room tone / silence. DO NOT call this again if a pipeline is already running — use check_pipeline_status instead.
auto_cleanup_interviewONE-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 > HPF 80Hz > noise reduction 8dB > compression 2.5:1 > safe loudness check. Lighter than podcast — preserves natural conversation dynamics.
Args: remove_noise: Apply noise reduction using first 0.5s as noise profile. Default: True remove_silence: Truncate long silences. Default: False
IMPORTANT: If remove_noise is True, the first 0.5 seconds should be room tone / silence. DO NOT call this again if a pipeline is already running — use check_pipeline_status instead.
auto_cleanup_liveONE-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 > HPF 100Hz > click removal > noise reduction 12dB > compression 5:1 > safe loudness check. Designed for live performances, field recordings, and noisy environments. Noise reduction is always on at 12dB — max safe level before artifacts appear.
IMPORTANT: The first 0.5 seconds MUST be room tone / ambient noise for noise profiling. DO NOT call this again if a pipeline is already running — use check_pipeline_status instead.
auto_cleanup_podcastONE-CLICK PODCAST CLEANUP: Professional broadcast-quality processing. Runs in background — returns a job_id immediately. Use check_pipeline_status to monitor. Safe for badly recorded audio — only reduces peaks if too hot, never boosts.
Pipeline: DC offset > HPF 80Hz > NR 12dB > compress 3:1 (30ms attack, 200ms release) > safe loudness check. Optional: noise reduction (on by default), silence truncation (off by default).
After the pipeline finishes, the user can manually apply LUFS normalization using the loudness_normalize tool if they want to hit a specific streaming target.
Args: remove_noise: Apply noise reduction using first 0.5s as noise profile. Default: True remove_silence: Truncate long silences/dead air. Default: False
IMPORTANT: If remove_noise is True, the first 0.5 seconds should be room tone / silence. DO NOT call this again if a pipeline is already running — use check_pipeline_status instead.
auto_cleanup_vocalONE-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 > HPF 100Hz > noise reduction 10dB > compression 3:1 > presence EQ > safe loudness check. Tuned for singing — presence boost for clarity, higher HPF for plosive removal.
Args: remove_noise: Apply noise reduction using first 0.5s as noise profile. Default: True
IMPORTANT: If remove_noise is True, the first 0.5 seconds should be room tone / silence. DO NOT call this again if a pipeline is already running — use check_pipeline_status instead.
auto_lofi_effectCREATIVE 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: HPF > LPF > bass/treble warmth > compression 2:1 > safe loudness check Creates that warm, muffled, vintage sound by cutting highs and boosting low-mids.
Args: intensity: "light" (subtle warmth), "medium" (classic lo-fi), "heavy" (extreme tape sound). Default: "medium"
DO NOT call this again if a pipeline is already running — use check_pipeline_status instead.
auto_master_musicONE-CLICK MUSIC MASTERING: Professionally master your music track with genre-tuned settings. Runs in background — returns a job_id immediately. Use check_pipeline_status to monitor.
Pipeline:
Args: style: Genre preset - "edm", "hiphop", "rock", "acoustic", "pop", "classical". Default: "edm" noise_reduce: Apply gentle noise reduction. Default: False DO NOT call this again if a pipeline is already running — use check_pipeline_status instead.
check_pipeline_statusCheck the status of a running pipeline. Call this after starting any auto_ pipeline to monitor progress. Poll every 15-30 seconds.
Args: job_id: The job ID returned by any auto_ pipeline tool
check_transcription_status[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.
click_removalRemove 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
compressorApply dynamic range compression. Evens out volume differences.
For mastering, use ratio 1.5-2:1 with attack > 80ms to preserve transients. For podcasts/voice, use ratio 4-8:1 with use_peak=True for tighter control. Higher ratios (4:1+) and fast attacks are mixing tools, not mastering tools.
WARNING: normalize=True will re-peak your audio to 0 dB after compression, which can make loud audio even louder. Use loudness_normalize() instead for proper LUFS-based loudness control.
Args: threshold_db: Level above which compression starts (dB). Default: -12 noise_floor_db: Level below which audio is not boosted (dB). Default: -40 ratio: Compression ratio (e.g. 2.0 = 2:1). Default: 2.0 attack_time: How fast compressor engages (seconds). Default: 0.2 release_time: How fast compressor releases (seconds). Default: 1.0 normalize: Normalize to 0dB peak after compression. Default: False use_peak: Compress based on peaks instead of RMS (better for voice/podcast). Default: False
cursor_set_positionMove the cursor to a specific time position.
Args: time: Position in seconds
cursor_to_project_endMove the cursor to the end of the project (last audio).
cursor_to_project_startMove the cursor to the start of the project (time 0).
cursor_to_track_endMove the cursor to the end of the selected track.
cursor_to_track_startMove the cursor to the start of the selected track.
edit_copyCopy the selected audio to clipboard. Select a region first.
edit_cutCut the selected audio to clipboard. Select a region first.
edit_deleteDelete the selected audio (does not copy to clipboard). Select a region first.
edit_disjoinSplit the selected audio at detected silences, creating separate clips.
edit_duplicateDuplicate the selected audio into a new track.
edit_joinJoin selected clips into one clip.
edit_pastePaste audio from clipboard at the cursor position.
edit_silenceReplace the selected audio with silence.
edit_splitSplit the clip at the cursor position or selection boundaries (in place, no new track).
edit_split_cutCut the selected audio without closing the gap (leaves silence where audio was).
edit_split_deleteDelete the selected audio without closing the gap (leaves silence where audio was).
edit_split_newSplit the selected audio into a new track at the selection boundaries.
edit_trimTrim audio outside the selection (delete everything except selected region).
effect_adjustable_fadeApply an adjustable fade with curve control.
Args: fade_type: 0=fade up (in), 1=fade down (out). Default: 0 curve: Curve shape (0=linear, positive=exponential, negative=logarithmic). Default: 0
effect_amplifyAmplify the selected audio by a ratio. Select audio first.
Args: ratio: Amplification ratio (e.g. 1.5 = 150%, 0.5 = 50%). Must be > 0. Default: 1.0
effect_auto_duckAuto Duck: automatically reduce volume when audio is detected on another track. Place the control track (e.g. narration) above the track to duck (e.g. music). Select the track to duck before running.
Args: duck_amount_db: How much to reduce volume in dB (-24 to 0). Default: -12 inner_fade_down_len: Inner fade down length in seconds (>= 0). Default: 0 inner_fade_up_len: Inner fade up length in seconds (>= 0). Default: 0 outer_fade_down_len: Outer fade down length in seconds (>= 0). Default: 0.5 outer_fade_up_len: Outer fade up length in seconds (>= 0). Default: 0.5 threshold_db: Threshold for duck trigger in dB (-100 to 0). Default: -30 maximum_pause: Maximum pause between ducking regions in seconds (>= 0). Default: 1.0
effect_bass_and_trebleAdjust 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_change_pitchChange the pitch of the selected audio without changing tempo.
Args: semitones: Number of semitones to shift (negative = lower, positive = higher)
effect_change_speedChange speed of the selected audio (changes both tempo and pitch together).
Args: percent: Percentage change (-99 to 4900, e.g. 100 = double speed)
effect_change_tempoChange the tempo of the selected audio without changing pitch.
Args: percent: Percentage change (-95 to 3000, e.g. 50 = 50% faster, -25 = 25% slower)
effect_clip_fixAttempt to repair clipped (distorted) audio by reconstructing peaks.
Args: threshold: Clipping threshold as percentage of max amplitude (0-100). Default: 95
effect_crossfade_clipsCrossfade between two adjacent clips on the same track. Select the junction point between two clips first.
effect_crossfade_tracksCrossfade between two overlapping tracks. Align the tracks so they overlap, select both, then run this effect.
effect_distortionApply distortion effect to the selected audio.
Args: distortion_type: Type of distortion. Default: "Hard Clipping" threshold_db: Distortion threshold in dB (-100 to 0). Default: -6.0
effect_echoApply echo effect to the selected audio.
Args: delay: Delay time in seconds. Default: 0.5 decay: Decay factor (0-1, lower = faster decay). Default: 0.5
effect_equalizationApply EQ curve to the selected audio.
Args: curve_name: Name of the EQ preset curve. Default: "Default" length: Filter length (odd number, 21-8191). Default: 4001
effect_fade_inApply a fade-in to the selected audio. Select the region to fade first.
effect_fade_outApply a fade-out to the selected audio. Select the region to fade first.
effect_high_pass_filterApply a high-pass filter to remove low frequencies below the cutoff. Essential as step 1 in mastering chains to remove sub-rumble.
Args: frequency: Cutoff frequency in Hz. Default: 40 (removes sub-bass rumble) rolloff: Rolloff steepness - "dB6" (6 dB/octave) or "dB12" (12 dB/octave). Default: "dB12"
effect_invertInvert (flip phase) the selected audio. Useful for phase cancellation.
effect_low_pass_filterApply a low-pass filter to remove high frequencies above the cutoff.
Args: frequency: Cutoff frequency in Hz. Default: 20000 rolloff: Rolloff steepness - "dB6" (6 dB/octave) or "dB12" (12 dB/octave). Default: "dB6"
effect_notch_filterRemove a specific frequency (e.g. 50/60Hz hum) with a notch filter.
Args: frequency: Center frequency to remove in Hz. Default: 60 (US mains hum) q: Q factor / sharpness of the notch (0.1-20). Higher = narrower notch. Default: 1.0
effect_paulstretchExtreme 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). Default: 0.25
effect_phaserApply phaser effect to the selected audio.
Args: stages: Number of phaser stages (2-24, even only). Default: 2 dry_wet: Dry/wet mix (0=dry, 255=wet). Default: 128 frequency: LFO frequency in Hz (0.01-40). Default: 0.4 phase: LFO start phase in degrees (0-360). Default: 0 depth: Modulation depth (0-255). Default: 100 feedback: Feedback percentage (-100 to 100). Default: 0
effect_repairRepair a very short damaged section of audio (max 128 samples). Select the damaged region first — must be extremely short. Audacity will show an error popup if the selection is too long.
effect_repeatRepeat the selected audio a number of times.
Args: count: Number of times to repeat (1-128). Default: 1
effect_reverbApply reverb effect 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 (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. Default: -1.0 dry_gain: Dry signal gain in dB. Default: -1.0 stereo_width: Stereo width (0-100). Default: 100 wet_only: Output only the wet signal. Default: False
effect_reverseReverse the selected audio. Select a region first.
effect_sliding_stretchChange tempo and/or pitch gradually across the selection (sliding time stretch).
Args: rate_change_start: Tempo change at start in % (-99 to 3000). Default: 0 rate_change_end: Tempo change at end in % (-99 to 3000). Default: 0 pitch_change_start: Pitch change at start in semitones (-12 to 12). Default: 0 pitch_change_end: Pitch change at end in semitones (-12 to 12). Default: 0
effect_studio_fade_outApply a professional studio-quality fade out to the selected audio. Uses a specially shaped curve that sounds more natural than a linear fade.
effect_tremoloApply tremolo (volume oscillation) effect to the selected audio.
Args: frequency: Tremolo speed in Hz (1-1000). Default: 5 depth: Tremolo depth as percentage (0-100). Default: 40 waveform: 0=Sine, 1=Triangle, 2=Sawtooth, 3=InverseSawtooth, 4=Square. Default: 0
effect_vocal_reductionVocal Reduction and Isolation: remove or isolate vocals from a stereo track.
Args: action: 0=Remove Vocals, 1=Isolate Vocals, 2=Remove Vocals (Mono), 3=Isolate Vocals (Mono), 4=Remove Center, 5=Isolate Center. Default: 0 low_cutoff: Low frequency cutoff in Hz. Default: 120 high_cutoff: High frequency cutoff in Hz. Default: 9000 strength: Effect strength (0-50). Default: 1.0
effect_wahwahApply wahwah effect to the selected audio.
Args: frequency: LFO frequency in Hz (0.1-4.0). Default: 1.5 phase: LFO start phase (0-360). Default: 0 depth: Modulation depth (0-100). Default: 70 resonance: Resonance (0.1-10). Default: 2.5 offset: Frequency offset (0-100). Default: 30
generate_chirpGenerate a chirp (frequency sweep).
Args: waveform: "Sine", "Square", "Sawtooth", or "Square (no alias)". Default: "Sine" start_freq: Starting frequency in Hz. Default: 440 end_freq: Ending frequency in Hz. Default: 1320 start_amp: Starting amplitude (0-1). Default: 0.8 end_amp: Ending amplitude (0-1). Default: 0.1 duration: Duration in seconds. Default: 1.0
generate_dtmfGenerate DTMF (telephone) tones.
Args: sequence: DTMF characters (0-9, A-D, *, #). Default: "0123456789" duty_cycle: Tone vs silence ratio percentage (0-100). Default: 55 amplitude: Amplitude (0-1). Default: 0.8 duration: Total duration in seconds. Default: 1.0
generate_noiseGenerate noise.
Args: noise_type: "White", "Pink", or "Brownian". Default: "White" amplitude: Amplitude (0-1). Default: 0.8 duration: Duration in seconds. Default: 1.0
generate_rhythm_trackGenerate a click/rhythm track.
Args: tempo: Tempo in BPM (30-300). Default: 120 beats_per_bar: Beats per bar (1-32). Default: 4 number_of_bars: Number of bars to generate (1-1000). Default: 4 rhythm_pattern: "Uniform" or "Swing". Default: "Uniform"
generate_toneGenerate a tone signal.
Args: waveform: Wave type - "Sine", "Square", "Sawtooth", or "Square (no alias)". Default: "Sine" frequency: Frequency in Hz (1-20000). Default: 440 amplitude: Amplitude (0-1). Default: 0.8 duration: Duration in seconds. Default: 1.0
get_default_export_folderGet the default folder for exporting audio files. Returns the user's Music folder path. Use this when the user doesn't specify where to save.
get_default_transcription_folderGet the default folder for saving transcription files. Returns the user's Documents folder. Call this when the user doesn't specify where to save.
get_noise_profileCapture 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.
How it works: The first call to NoiseReduction without an existing profile captures the selection as the noise profile. The next call applies reduction.
label_addAdd a label at the current cursor position or selection.
Args: text: Label text. Default: empty
label_add_atAdd a label at a specific time range.
Args: start: Start time in seconds end: End time in seconds text: Label text. Default: empty
label_add_batchAdd many labels at once — a whole marker list in one call.
Each item is {"start": seconds, "end": seconds (optional, defaults to start for a point label), "text": string (optional)}. Every item is validated before anything is sent to Audacity, so a bad item fails the whole call rather than leaving a half-written list behind.
Args: labels: List of {"start", "end", "text"} label definitions
label_cut_regionsCut the audio under every label to the clipboard, closing the gaps.
Acts on labeled regions within the current selection on the SELECTED AUDIO TRACKS — select the audio tracks and time range first. Because the timeline closes up, the labeled regions collapse rather than surviving unchanged — re-read label_list afterwards to see what remains.
Not yet independently live-tested against a running Audacity, unlike label_delete_regions/label_silence_regions/label_split_regions/ label_join_regions.
label_deleteDelete a single label without touching the audio.
Get the index from label_list. Audacity has no scripting command for deleting one label, so this selects the label's own span on its own label track and split-deletes it — audio tracks are never in the selection, and nothing downstream shifts in time.
Other labels on the same track that sit entirely inside the deleted label's span would be removed as collateral, so they are re-added afterwards. A label that only partially overlaps the span may be trimmed to the boundary; check label_list afterwards if labels on that track overlap each other.
To delete a label *and* the audio under it, use label_delete_audio_at.
Args: index: Flat label index from label_list
label_delete_audio_atDelete the audio under ONE label, picked by index — not label_delete (marker only) or label_delete_regions (every label in the current selection, no index).
This is a custom, composite operation built for podcast/transcript-based editing, not a 1:1 wrapper over a single Audacity scripting command — unlike label_cut_regions/label_delete_regions/label_silence_regions/ label_split_regions/label_join_regions, which each call exactly one Audacity command. Audacity has no "delete this one labeled take" command, so this orchestrates several: SelAllTracks, then SelectTime, then Delete/SplitDelete, then clears the leftover marker.
By default the gap closes and everything after shifts left, exactly as label_delete_regions does. Pass close_gap=False to leave silence of the same length instead, keeping the timeline length and everything after it in place.
All tracks are selected first, so label tracks ripple along with the audio and later labels stay aligned with it.
Deleting the audio does NOT remove the label — it collapses to a zero-length marker sitting where the audio used to be. This tool clears that leftover marker too, matching what clicking a label and pressing Delete does in Audacity: the audio and the label both go. Pass delete_label=False to keep it as a marker of where the cut was made. Use label_delete instead to remove a label without touching any audio.
Args: index: Flat label index from label_list close_gap: Close the gap and shift later audio left. Default: True delete_label: Also remove the label left behind. Default: True
label_delete_regionsDelete the audio under every label, closing the gaps.
Label every unwanted stretch — bad takes, dead air, noise bursts — then remove them all in one pass. Use label_delete_audio_at for a single label. Acts on labeled regions within the current selection on the SELECTED AUDIO TRACKS — select the audio tracks and time range first. Because the timeline closes up, the labeled regions collapse rather than surviving unchanged — re-read label_list afterwards to see what remains.
label_editEdit an existing label's text and/or timing. Only the fields you pass are changed.
Get the index from label_list. Renaming a label is label_edit(index, text="..."); moving one of its boundaries is label_edit(index, start=...).
Args: index: Flat label index 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_exportExport all labels to a text file.
Args: path: Absolute path for the output labels file
label_export_audio_segmentsExport the audio under each label as its own 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.
Not yet independently live-tested against a running Audacity — verified against the scripting reference and unit tests with mocked responses only.
Args: directory: Absolute path to the output directory format: Audio format — wav, mp3, ogg, flac, aiff, mp4. Default: wav num_channels: 1 for mono, 2 for stereo. Default: 2
label_export_chaptersExport 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.
Not yet independently live-tested against a running Audacity — verified against the scripting reference and unit tests with mocked responses only.
Args: path: Absolute path for the output file (must not already exist) format: Chapter format — simple, cue or podlove. Default: simple
label_findFind labels whose text contains a search string (case-insensitive).
Useful for locating a specific marker in a long recording without reading through every label.
Args: query: Text to search for within label text
label_get_allGet all labels in the project as Audacity's raw GetInfo response.
Prefer label_list — it returns the same labels already parsed, with the index each one needs for label_edit and label_delete.
label_importImport labels from a text file.
Args: path: Absolute path to the labels text file
label_join_regionsJoin the audio clips across every labeled region back together.
The inverse of label_split_regions. Acts on labeled regions within the current selection on the SELECTED AUDIO TRACKS — select the audio tracks and time range first. The labels themselves stay where they are.
label_listList every label with its index, timing and text.
Returns labels sorted by Audacity's own flat index, which is what label_edit and label_delete take. Call this first whenever you need to modify a specific label, rather than guessing an index.
label_regular_intervalsCreate labels at regular time intervals across the selection or project.
Args: interval: Time between labels in seconds. Default: 30 adjust: Adjust interval to fit selection evenly. Default: False label_text: Text for each label (labels will be numbered). Default: empty
label_silence_regionsReplace the audio under every label with silence, keeping the timeline length.
Use when the material must not get shorter — redacting a name, muting a noise burst in a take that has to stay in sync. Acts on labeled regions within the current selection on the SELECTED AUDIO TRACKS — select the audio tracks and time range first. The labels themselves stay where they are.
label_split_regionsSplit the audio clips at every label boundary.
Prepares segment boundaries for separate handling without removing anything. Acts on labeled regions within the current selection on the SELECTED AUDIO TRACKS — select the audio tracks and time range first. The labels themselves stay where they are.
limiterApply a limiter to prevent audio from exceeding a threshold. Use after compression.
Default ceiling is -1.0 dB, the industry standard for streaming platforms.
Args: limit_db: Maximum output level (dB). Default: -1.0 hold_ms: Hold time in milliseconds. Default: 10.0 makeup_gain: Apply makeup gain ("Yes" or "No"). Default: "No" limiter_type: "SoftLimit", "HardLimit", "SoftClip", "HardClip". Default: "SoftLimit" gain_left: Input gain for left channel (dB). Default: 0.0 gain_right: Input gain for right channel (dB). Default: 0.0
loudness_normalizeNormalize audio to a target perceived loudness in LUFS.
DANGER — READ BEFORE USING: This tool can DESTROY audio if used incorrectly. It boosts OR reduces audio to hit the target LUFS. On quiet or poorly recorded audio, it may boost by 20-30 dB, causing severe clipping and distortion that ruins the file.
DO NOT use this tool:
ONLY use this tool when the user EXPLICITLY asks for LUFS normalization AND the audio has already been processed and has healthy levels (peaks between -6 dB and -1 dB).
Targets (only use these values):
Args: lufs_level: Target loudness in LUFS (-50 to -5). 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
noise_reductionApply 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.
WARNING: Values above 20 dB risk audible artifacts (warbling, metallic sound). Use 6-12 dB for gentle cleanup, 12-20 dB for moderate noise. Only exceed 20 dB for extremely noisy recordings where some artifact trade-off is acceptable.
Args: noise_reduction_db: Amount of noise reduction in dB (0-48). Default: 12 sensitivity: How sensitive the detection is (0-24). Default: 6 frequency_smoothing: Number of frequency smoothing bands (0-12). Default: 3
normalizeNormalize the selected audio to a target peak level.
WARNING: This boosts OR reduces audio to hit the target. If audio peaks at -30 dB and you normalize to -1 dB, it will BOOST by 29 dB — potentially blowing out the audio. ALWAYS check current audio levels first (use project_get_info) before normalizing.
Guidelines — choose your target based on what comes next:
Args: peak_level_db: Target peak level in dB (-60 to 0). Default: -3.0 remove_dc: Remove DC offset before normalizing. Default: True stereo_independent: Normalize L/R channels separately (fixes unbalanced recordings). Default: False
project_closeClose the current Audacity project.
project_edit_metadataOpen the metadata editor dialog to view/edit track metadata (title, artist, etc.). This opens a modal dialog in Audacity — the command waits until the user closes it.
project_export_audioExport the project audio to a file. Format is determined by file extension.
MANDATORY: ALWAYS tell the user where the file will be saved BEFORE exporting. Example: "I'll save your audio to C:\Users\Name\Music\file.mp3"
NEVER save directly to the user's home folder (e.g. ~/file.mp3 or C:\Users\Name\file.mp3). ALWAYS save to a subfolder. If the user doesn't specify a path, call get_default_export_folder to get their Music folder and save there. Acceptable locations:
Args: path: Absolute path for exported file. Extension determines format (wav, mp3, ogg, flac, aiff). num_channels: Number of channels (1=mono, 2=stereo). Default: 2
project_export_labelsExport all labels to a text file.
Args: path: Absolute path for the exported labels file
project_get_infoGet information about the current project.
Args: info_type: Type of info to retrieve. One of: Tracks, Clips, Envelopes, Labels, Boxes, Commands
project_import_audioImport an audio file into the current project. Creates a new track.
Args: path: Absolute path to the audio file (wav, mp3, ogg, flac, etc.)
project_import_midiImport a MIDI file into the current project.
Args: path: Absolute path to the MIDI file (.mid, .midi)
project_newCreate a new empty Audacity project.
project_openOpen an existing Audacity project file (.aup3).
Args: path: Absolute path to the .aup3 project file
project_saveSave the current Audacity project. ONLY call this when the user explicitly asks to save. Do NOT auto-save after effects or pipelines — the user controls when to save.
project_save_asSave the current project to a new .aup3 file. ONLY call when user explicitly asks. Do NOT auto-save after effects or pipelines.
Args: path: Absolute path for the new .aup3 file
select_allSelect all audio in all tracks. Selects both tracks and time range.
select_clipSelect the clip under the cursor.
select_cursor_to_track_endSelect from the current cursor position to the end of the track.
select_noneDeselect all audio.
select_regionSelect a time region in the current track(s). Many effects operate on the selection.
Args: start: Start time in seconds end: End time in seconds
select_tracksSelect one or more tracks by index.
Args: track: Starting track index (0-based) count: Number of tracks to select
select_zero_crossingAdjust the current selection boundaries to the nearest zero crossings. Useful before cuts to avoid audible clicks at edit points.
track_add_labelAdd a new empty label track to the project.
track_add_monoAdd a new mono audio track to the project.
track_add_stereoAdd a new stereo audio track to the project.
track_align_end_to_endAlign selected tracks end-to-end (sequentially). Select the tracks first.
track_get_infoGet information about all tracks in the project (names, types, rates, etc.).
track_mix_and_renderMix and render selected tracks into a single track. Select tracks first.
track_mix_and_render_to_newMix and render selected tracks into a new track, keeping the originals. Select tracks first.
track_muteMute or unmute a track.
Args: track: Track index (0-based) mute: True to mute, False to unmute
track_mute_allMute all tracks in the project.
track_removeRemove the currently selected track(s). Select tracks first with track_select.
track_resampleResample the selected track to a new sample rate.
Args: rate: Target sample rate in Hz (e.g. 44100, 48000, 96000). Must be > 0.
track_selectSelect a track by index. Many operations require selecting a track first.
Args: track: Track index (0-based)
track_set_propertiesSet properties of a track by index.
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_stereo_to_monoConvert the selected stereo track to mono. Select the track first.
track_unmute_allUnmute all tracks in the project.
transcribe_audio[EXPERIMENTAL] Transcribe the entire project audio using faster-whisper (local, offline). Requires separate setup — see installation guide. If this fails, tell the user transcription is experimental and point them to the Transcription Setup docs.
Runs in BACKGROUND — returns a job_id immediately. Use check_transcription_status to monitor progress. Poll every 10-15 seconds.
Do NOT call transcription_set_model first — this handles model loading automatically.
After transcription completes, TELL the user where the transcript was saved or offer to save it. Always tell the user the file location so they can find it.
Language auto-detection can occasionally misidentify the language (background music, noise, a short/ambiguous clip) and transcribe genuinely-English audio in the wrong script entirely. If you already know the audio's language from context, pass language explicitly (e.g. "en") instead of relying on auto-detect, or set task="translate" to force English output regardless of the spoken language. If a result comes back in an unexpected language/script, just retry with THIS SAME tool and the corrected language/task.
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_selection[EXPERIMENTAL] Transcribe only the currently selected audio region. Requires separate setup — see installation guide.
Runs in BACKGROUND — returns a job_id immediately. Use check_transcription_status to monitor progress.
Select a region first, then call this tool.
Language auto-detection can occasionally misidentify the language on a short or ambiguous clip. If you already know the audio's language, pass language explicitly (e.g. "en"), or set task="translate" to force English output.
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_file[EXPERIMENTAL] Transcribe audio and export to a subtitle or text file. Requires separate setup — see installation guide.
ALWAYS tell the user where the file will be saved BEFORE starting. If user doesn't specify a path, call get_default_export_folder to get a real path. NEVER guess paths like /home/user/... — always use absolute Windows paths like C:\Users\Name\Documents\transcript.srt
Runs in BACKGROUND — returns a job_id immediately. Use check_transcription_status to monitor progress.
Language auto-detection can occasionally misidentify the language (background music, noise, a short/ambiguous clip) and transcribe genuinely-English audio in the wrong script entirely. If you already know the audio's language from context, pass language explicitly (e.g. "en"), or set task="translate" to force English output regardless of the spoken language. Retry with THIS SAME tool and the corrected language/task — use a new path since an existing file at the same path is rejected below.
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)
transcribe_to_labels[EXPERIMENTAL] Transcribe audio and add Audacity labels at each segment timestamp. Requires separate setup — see installation guide.
Runs in BACKGROUND — returns a job_id immediately. Use check_transcription_status to monitor progress.
Language auto-detection can occasionally misidentify the language (background music, noise, a short/ambiguous clip) and transcribe genuinely-English audio in the wrong script entirely. If you already know the audio's language from context (the user said so, or the labels came back in an unexpected script), don't guess — pass language explicitly (e.g. "en"), or set task="translate" to force English output regardless of the spoken language. Retry with THIS SAME tool and the corrected language/task; there's no need to switch to a different transcription tool to fix a bad language guess.
If labels from a previous attempt need clearing first: track_select 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)
transcription_set_model[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. Requires separate setup — see installation guide.
Runs in BACKGROUND — returns a job_id immediately. Use check_transcription_status to monitor progress.
Model sizes:
Args: model_size: Model to load - "tiny", "base", "small", "medium", "large-v3"
transport_get_play_positionGet the current playback position in seconds.
transport_pauseToggle pause during playback or recording.
transport_playStart playback from the current cursor position.
transport_play_regionPlay a specific time region.
Args: start: Start time in seconds end: End time in seconds
transport_recordStart recording on a new track.
transport_set_cursorSet the playback cursor position.
Args: time: Position in seconds
transport_stopStop playback or recording.
truncate_silenceTruncate or compress silence in the selected audio. Great for removing dead air.
Args: threshold_db: Volume below this is considered silence (dB). Default: -40 min_duration: Minimum silence duration to act on (seconds). Default: 0.5 truncate_to: Truncate silence to this duration (seconds). Default: 0.3 compress_percent: Compress silence by this percentage (only for Compress action). Default: 50 action: "Truncate" or "Compress". Default: "Truncate"
BEFORE YOU INSTALL
144 tools when we connected.
All 3 documented clients run the server on your machine.
CONTEXT COST
Rated by the size of the 144 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
pip install audacity-mcp-server{
"mcpServers": {
"audacity": {
"command": "audacity-mcp"
}
}
}{
"mcpServers": {
"audacity": {
"command": "audacity-mcp",
"type": "stdio"
}
}
}