Skip to main content
Glama

Gizmos Audacity MCP

Local MCP tools for editing, processing and measuring audio in Audacity.

Node 24.21+ MIT

45 typed tools · Audacity 3.7.x · Node 24.21+ · stdio

Import audio, edit tracks and clips, apply effects, write labels, export mixes, and measure peak/RMS or optional LUFS/true peak. Audacity does the processing. Windows supports hidden windows and native dialog recovery. macOS/Linux support the scripting FIFOs; their native window lifecycle is not qualified.

Requirements

  • English Audacity 3.7.x with mod-script-pipe enabled: 3.7.8 is the reference build (bundled catalogue, parameter limits, source audit) and 3.7.9 is verified; other patch levels are refused until verified. On Windows, install and pin it: winget install --id Audacity.Audacity -e --version 3.7.8, then winget pin add --id Audacity.Audacity -e --version 3.7.8.

  • Audacity 4 is not supported: 4.0 removed the scripting interface (mod-script-pipe). Support would be reconsidered only if Audacity ships a scripting host with full control.

  • Node.js 24.21 or newer, running as the same user as Audacity.

  • Optional ffmpeg/ffprobe for LUFS, LRA, true peak, other file formats and metadata. Native PCM/float WAV measurement needs neither.

Related MCP server: Audacity MCP Server

Quick start

The npm package is @gizmos-quest/audacity-mcp. For a source checkout, run npm ci, then npm run build; use node dist/main.js as the server command.

  1. Install Audacity 3.7.8. Enable mod-script-pipe in Preferences → Modules, choose English in Preferences → Interface, and turn off Preferences → Application → Check for updates (update notices are modal and block scripting until closed). Restart Audacity.

  2. Check setup:

    npx -y @gizmos-quest/audacity-mcp doctor

    With Audacity stopped, doctor --fix can enable the scripting module. It saves a config backup first. Setup and configuration.

  3. Add the local server to your client using a snippet below, then restart the client if it requires that. Keep one server in control of the shared pipe.

Clients

Claude Code

claude mcp add --scope user --transport stdio audacity -- npx -y @gizmos-quest/audacity-mcp

Claude Desktop / Cursor — add this to the client's MCP configuration:

{
  "mcpServers": {
    "audacity": {
      "command": "npx",
      "args": ["-y", "@gizmos-quest/audacity-mcp"]
    }
  }
}

VS Code — .vscode/mcp.json:

{
  "servers": {
    "audacity": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@gizmos-quest/audacity-mcp"]
    }
  }
}

Codex — ~/.codex/config.toml:

[mcp_servers.audacity]
command = "npx"
args = ["-y", "@gizmos-quest/audacity-mcp"]
startup_timeout_sec = 90
tool_timeout_sec = 900

Effects can take ten minutes; allow a longer client tool timeout. See client setup for official references and Windows command resolution. Troubleshooting covers missing pipes and localized plugin IDs.

First prompt

Check Audacity's status and launch it if stopped. Import my voice recording as Voice. Measure it, then show a dry-run voice cleanup plan without normalization or noise reduction. Ask before applying it and save a project backup first.

A pipeline preview takes a named or zero-based track reference:

{"track":"Voice","preset":"voice","dryRun":true,"loudness":"none"}

Try the reproducible voice-over example: generated audio, reviewed cleanup, a ducked bed, chapters/subtitles and measured delivery. Its opt-in runner drives the built server over stdio against live Audacity.

Tools

Group

Tools

Session and discovery

launch, fresh, quit, window, dialogs, recover, status, project_info, info, describe

Edit and mix

select, import, export, project, track_set, track_edit, clip_move, clip_set, edit, fade, envelope_set

Process

generate, effect, noise_profile, pipeline, auto_duck, command, menu, macros, batch

Labels

labels_set, labels, labels_file, label_regions_export

Measure and control

measure, measure_file, compare_files, loudness_target, silence, contrast, probe_file, targets, transport, history, preferences

Every name starts with audacity_. Tool reference includes arguments and units; the capability matrix lists limits.

Safety

  • Save a new .aup3 backup before destructive processing. Scripted effects do not create individual undo entries. Existing project save paths are refused.

  • Strict inputs and a reviewed catalogue block known modal commands. Hidden Audacity still runs its UI and audio engine; it has no native headless mode.

  • A timeout can leave an edit completed or still running. Inspect dialogs, use explicit recovery, then inspect the project before deciding what to do.

  • Noise reduction requires fresh process state and an explicit room-tone capture; normalization, limiting and timing changes stay explicit.

  • mod-script-pipe trusts local processes running as your user. Use one controller. The server never downloads runtimes/models or kills Audacity.

Native safety limits · Effect requirements · Testing · Architecture · Contributing · Security

MIT licensed. Research and source attribution are in NOTICE.md. Audacity is a trademark of Muse Group; this project is unaffiliated.

Available Tools

45 tools
audacity_auto_duckAuto DuckA
Destructive

Destructively duck bed samples under speech using native AutoDuck; save a project backup first. The unselected voice must be the immediately following track below the selected bed; import the bed first, then voice. dryRun lists exact parameters/range. Use audacity_envelope_set for editable ducking or an existing track order.

Inputs: bed (required), voice (required), end, start, +8 more. Returns: bed, scope, voice, dryRun, +2 more

audacity_batchBatchA
Destructive

Clean/master audio files in Audacity using isolated temporary tracks and the reviewed pipeline. Preflights all paths/steps, dryRun lists jobs, and original tracks stay intact. Pause shortening requires an empty project because sync-lock may shift other tracks. Stops at the first failure; completed outputs are retained. Optional before/after reports measure the rendered result. Current solo tracks are refused because they could silence temporary-track exports.

Inputs: jobs (required), dryRun, measure, channels. Returns: jobs, notes, dryRun, results, +2 more

audacity_clip_moveClip MoveA
Destructive

Move the clip that covers time at on a track so it starts at start seconds.

Inputs: at (required), start (required), track (required).

audacity_clip_setClip SetA
Destructive

Rename/color a clip or apply a relative gain in dB destructively to its samples. For name/color, at must lie strictly inside exactly one clip, avoiding shared boundaries. Use audacity_track_set gainDb for a reversible track slider, audacity_clip_move for timing.

Inputs: at (required), track (required), name, color, +1 more. Returns: end, name, color, start, +2 more

audacity_commandCommandA
Destructive

Run a catalogue scripting command or effect on the current selection (Amplify, Compressor, Limiter, LoudnessNormalization, Normalize, High-passFilter, FilterCurve, AutoDuck, FadeIn, …). Parameters follow Audacity's own list; see audacity_describe. Native Set* setters use selected tracks: call audacity_select first. NoiseReduction requires a captured profile.

Inputs: command (required), params.

audacity_compare_filesCompare FilesA
Read-onlyIdempotent

Compare before/after audio files with the same measurement settings. Returns both reports and numeric changes only for metrics established on both sides; missing LUFS or true peak never becomes a zero change.

Inputs: after (required), before (required), backend, targets, +2 more. Returns: after, delta, before, targetCheck

audacity_contrastContrastB

Measure the RMS level difference between foreground speech and background room tone without opening Audacity Contrast. Each range is exported with current track controls and selection restored. This is a numeric contrast check, not full accessibility certification.

Inputs: background (required), foreground (required), minimumDb. Returns: reason, status, minimumDb, differenceDb, +2 more

audacity_describeDescribeA
Read-onlyIdempotent

Parameters of one scripting command or effect from the bundled English Audacity 3.7.8 catalogue.

Inputs: command (required). Returns: id, tip, url, name, +1 more

audacity_dialogsDialogsA

On Windows, list Audacity's open windows and dialogs; close=true closes the dialogs (WM_CLOSE, like the window's X; Cancel for questions). Use it when a call times out: a modal dialog blocks the pipe.

Inputs: close. Returns: windows

audacity_editEditA
Destructive

Split, split-new, trim, duplicate, delete, cut/copy, silence or join/disjoin audio on explicit tracks and time range. split accepts a cursor; delete closes the gap while split_delete retains timing. Paste is not offered: it depends on the system clipboard.

Inputs: track (required), action (required), end, start, +1 more. Returns: end, reply, start, track, +1 more

audacity_effectEffectA
Destructive

Select a track/range and apply an effect using the bundled English Audacity 3.7.8 catalogue parameters. Default time scope is the track extent, avoiding silent gap clips. NoiseReduction requires a captured profile on this same track and params={}; it uses saved UI settings. Scripted effects add no undo entry: save a project backup first.

Inputs: effect (required), end, start, track, +2 more.

audacity_envelope_setEnvelope SetA
Destructive

Write a volume envelope on a track: points of time (s) and linear gain (1 = unchanged, 0.5 = -6 dB, 0.25 = -12 dB). Visible as the volume curve in Audacity. replace=true clears the old points first.

Inputs: track (required), points (required), replace. Returns: points

audacity_exportExportA
Destructive

Export the rendered mix or an explicit time range to WAV/FLAC/MP3/OGG by file extension, honoring gain, pan, mute, solo and envelopes. Selects time and tracks explicitly, including after label editing; channels is 1 or 2.

Inputs: file (required), end, start, channels. Returns: file

audacity_fadeFadeA
Destructive

Apply sample FadeIn or FadeOut on one track and time range. Omitting time applies to the track extent; use envelope_set for editable automation.

Inputs: track (required), direction (required), end, start. Returns: end, start, track, direction

audacity_freshFreshA
Destructive

Get an empty project in a single window. A running session is backed up when it has tracks (backupTo required), then restarted, even when empty. Restart is Windows-only; on other platforms save and quit Audacity first. Never use the New menu: a second project window has crashed Audacity 3.7 under scripting.

Inputs: visible, backupTo. Returns: started, visible, processes, backedUpTo

audacity_generateGenerateB
Destructive

Generate tone/noise/silence/chirp/rhythm in a new mono/stereo track, or replace a range of an existing track. Uses a time selection for duration and validates kind-specific parameters before adding tracks.

Inputs: kind (required), name, start, swing, +13 more. Returns: end, kind, name, start, +1 more

audacity_historyHistoryA
Destructive

Undo or redo existing native menu/import history entries. Individual scripted effects and pipelines add no undo entry; save a project backup before destructive processing. Stops before a step the native history does not have, or at Audacity’s own first error, and does not claim checkpoint rollback.

Inputs: action (required), steps. Returns: action, completed

audacity_importImportA

Import an audio (or video, for its sound) file as a new track, name it and place it at start seconds.

Inputs: file (required), name, start. Returns: name, track

audacity_infoInfoB
Read-onlyIdempotent

Read native state: Tracks, Clips, Envelopes (points as t/y), Labels, Boxes, Selection, Preferences, Commands (full catalogue with parameters) or Menus.

Inputs: type (required).

audacity_label_regions_exportLabel Regions ExportA

Export every positive-duration region in one label track as numbered audio files, using the current mix and explicit time/track selections. Point labels are skipped. Existing outputs are refused and all destinations are checked before export.

Inputs: directory (required), format, channels, trackName. Returns: count, files

audacity_labelsLabelsA
Destructive

List/find labels by text, edit one flat zero-based label index, delete one label, or create regular markers. Delete safely reconstructs only its label track at the bottom of the project, preserving every other label including overlaps; returned indices reflect the new order.

Inputs: action (required), end, text, index, +4 more.

audacity_labels_fileLabels FileA
Destructive

Import Audacity TSV or JSON labels into a named track; export labels as TSV/JSON, SRT/VTT subtitles, timestamp chapters, CUE, Podlove or ffmetadata. Point-label subtitle ends come from the next marker or project end. Existing output files are refused.

Inputs: file (required), action (required), format, trackName. Returns: file, count, format, imported, +1 more

audacity_labels_setLabels SetA
Destructive

Add point or region labels to a named label track, creating it if needed and retaining existing labels. Use them for chapters, picture events or script lines. Disable the label naming dialog in Preferences > Tracks > Track Behaviors before adding labels.

Inputs: labels (required), trackName. Returns: labels

audacity_launchLaunchA

Start or attach to Audacity with a visible or hidden Windows project window. Waits for a real script-pipe response.

Inputs: visible. Returns: started, visible, processes

audacity_loudness_targetLoudness TargetA
Destructive

Measure then apply static gain to approach targetLufs while preserving measured true-peak headroom and respecting maxBoostDb. Requires ffmpeg and a non-silent audio track; default scope is its own extent. dryRun returns the measured input and Amplify plan without applying gain. Reports before/after and whether the target was achievable; it never compresses or guesses absent LUFS/true peak.

Inputs: track (required), end, start, dryRun, +4 more. Returns: plan, after, notes, steps, +5 more

audacity_macrosMacrosA
Destructive

List or apply saved local Audacity macros without opening the Macro Manager. Every step is parsed and checked first; dryRun lists steps. Modal/lifecycle commands and implicit effect presets are refused. Export macros need explicit outputTo.

Inputs: action (required), name, dryRun, outputTo. Returns: name, steps, dryRun, macros, +2 more

audacity_measureMeasureA

Measure tracks, a time range, or currentSelection using a temporary export; restores selection and preserves track controls. Reports peak/RMS/DC/crest, advisory defects and silence. Optional ffmpeg adds integrated LUFS/LRA/true peak. Reads rendered gain/mute/solo/envelopes, so use file measurement for unprocessed source levels. With targets, returns {measurement,targetCheck}; otherwise returns the measurement directly.

Inputs: end, start, track, backend, +5 more. Returns: rms, file, peak, notes, +24 more

audacity_measure_fileMeasure FileA
Read-onlyIdempotent

Measure an exported/source audio file without touching Audacity. Native PCM/float WAV peak/RMS/DC/crest and advisory defects need no dependencies; ffmpeg on PATH adds EBU R128 LUFS/LRA/true peak and decodes other containers. Unavailable targets report unknown. With targets, returns {measurement,targetCheck}; otherwise returns the measurement directly.

Inputs: file (required), backend, targets, dualMono, +1 more. Returns: rms, file, peak, notes, +24 more

audacity_menuMenuA
Destructive

Run a menu command that needs no dialog (Play, Stop, Undo, Redo, SelectAll, SelectNone, NewMonoTrack, NewStereoTrack, NewLabelTrack, AddLabel, ZoomSel, FitInWindow, CursProjectStart, …). Use audacity_transport for guarded recording.

Inputs: command (required).

audacity_noise_profileNoise ProfileA
Destructive

Capture room tone in a fresh Audacity process, then apply NoiseReduction with params={}. Audacity 3.7.8 uses saved UI settings, ignores effect parameters and cannot reset its profile through scripting. Repeating this exact interval reuses its profile; a different interval requires audacity_fresh with backupTo.

Inputs: end (required), start (required), track (required).

audacity_pipelinePipelineB
Destructive

Preview or run a reviewed cleanup/mastering chain on one track: voice, podcast, interview, audiobook, vocal, live, music, lo-fi or cleanup. dryRun lists exact ordered commands without changing selection. Noise reduction requires supplied room tone; normalization and limiting are explicit. Default range is the track extent, recalculated after edits.

Inputs: track (required), end, lufs, ratio, +19 more. Returns: notes, steps, dryRun, preset, +1 more

audacity_preferencesPreferencesA
Destructive

Get a preference or list available preferences. Set is restricted to default project sample rate and recording channel count; never changes modules, UI language, devices or pipe settings. Original value and readback are returned.

Inputs: action (required), name, value.

audacity_probe_fileProbe FileA
Read-onlyIdempotent

Inspect an audio/video file before importing or exporting: container, duration, audio codecs, sample rate, channels and stream metadata. Requires optional ffprobe (installed with ffmpeg); reads the file without changing Audacity.

Inputs: file (required), timeoutMs. Returns: file, format, streams

audacity_projectProjectA
Destructive

Open an existing .aup3 into an empty project or save to a new .aup3 path. Existing save destinations are refused to prevent a blocking modal. Use audacity_fresh with backupTo before opening when tracks are present.

Inputs: file (required), action (required).

audacity_project_infoProject InfoA

Read project tracks, clips, selection, length, active project paths and actual render sample rate. Rate is measured by a tiny temporary WAV export with selection restored; an empty project returns rate=null and its default preference separately.

Inputs: no named parameters. Returns: rate, clips, tracks, selection, +4 more

audacity_quitQuitA
Destructive

On Windows, quit Audacity without a save prompt. Without saveTo the project is discarded (saved to a temporary file that is then deleted).

Inputs: saveTo. Returns: savedTo

audacity_recoverRecoverA
Destructive

Inspect process, pipe and crash-recovery entries; optionally close blocking dialogs and reconnect after a timeout. Never kills Audacity or replays edits. discardRecovery clears stale config entries only while Audacity is stopped, saving the config first and retaining all project files.

Inputs: visible, reconnect, closeDialogs, discardRecovery. Returns: note, tracks, entries, running, +5 more

audacity_selectSelectA
Idempotent

Select a time range on one or more tracks (all tracks when track is omitted; the whole project when start/end are omitted).

Inputs: end, start, track, trackCount.

audacity_silenceSilenceA

Find quiet regions without deleting audio: every channel must stay below thresholdDb for minimumSeconds. Scan an optional file, or rendered tracks/currentSelection with selection restored. Times are absolute project seconds for Audacity ranges and file seconds for files. Returns capped regions plus the total count; current mute/gain/envelopes affect rendered silence.

Inputs: end, file, start, track, +5 more. Returns: file, count, notes, scope, +4 more

audacity_statusStatusB
Read-onlyIdempotent

Whether Audacity answers, and its tracks with name, kind, start/end, volume, pan, mute and solo.

Inputs: no named parameters. Returns: tracks, running

audacity_targetsTargetsA
Read-onlyIdempotent

List numeric house reference targets for podcast, video, broadcast, audiobook and premaster; use these with measurement targets. These references are not publishing certification. Recording noise floor requires isolated room tone.

Inputs: no named parameters. Returns: note, presets

audacity_track_editTrack EditA
Destructive

Add mono/stereo/label tracks, remove tracks, mix/render, or align selected tracks by start/end/selection. Track scope is explicit; add actions can name the new track. mix_new keeps the original tracks audible: mute them before exporting the new mix to avoid doubling. Find the new audio track in returned tracks; it can precede label tracks.

Inputs: action (required), end, name, start, +2 more. Returns: reply, track, action, tracks

audacity_track_setTrack SetB
DestructiveIdempotent

Set track properties: name, gain in dB (the track's volume slider; status reports it back as a linear factor), pan (-1..1), mute, solo.

Inputs: track (required), pan, mute, name, +2 more. Returns: end, pan, kind, mute, +7 more

audacity_transportTransportA
Destructive

Play a selected region, pause/resume, stop, or record using Audacity’s configured input. Appending requires an explicit audio track matching the configured recording channels (1 or 2). Record mode respects Audacity’s new-track preference, and recording always starts from a cursor point to avoid batch progress waits. status reports selection and a monotonic estimated position; manual transport changes are not tracked. record returns immediately unless duration is supplied.

Inputs: action (required), end, start, track, +2 more. Returns: state, selection, positionSource, positionSeconds

audacity_windowWindowA
Idempotent

Show or hide the Audacity window on Windows. A hidden Audacity keeps working through the pipe.

Inputs: show (required). Returns: windows

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 45 tools

    Disambiguation3/5

    Several clusters overlap: audacity_command, audacity_effect, audacity_pipeline, audacity_macros, and audacity_menu all execute processing or menu actions; audacity_measure, audacity_measure_file, audacity_compare_files, audacity_contrast, and audacity_loudness_target all measure audio; and the four label tools overlap. The descriptions are detailed and often say which tool to use when, but with 45 tools an agent can still misselect within these clusters.

    Naming Consistency4/5

    All tools use the audacity_ prefix and lowercase snake_case, which is highly predictable. There is minor variation between action-first names (audacity_export, audacity_select) and noun-first names (audacity_track_set, audacity_labels_set, audacity_clip_move), but no chaotic mixed casing or prefixing.

    Tool Count2/5

    The server exposes 45 tools, far above a well-scoped set, for a domain that is genuinely broad but also heavily fragmented into specialized measurement, label, diagnostic, lifecycle, and batch operations. Many individual tools are useful, but the total surface is heavy enough to make tool selection difficult.

    Completeness4/5

    Coverage is broad: project lifecycle, import/export, selection, track and clip editing, generating audio, effects, pipelines, labels, measurement, macros, transport, and batch processing are all represented. Minor gaps and deliberate limitations remain, such as no clipboard paste, restricted preference setting, and no undo entries for scripted effects, but most workflows have practical workarounds.

    Maintenance

    ActivityActive
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers