Audionaut

io.github.kvoltmerPublished by GitHub account kvoltmerv0.5.0Updated Nov 2, 2026

Edit Audionaut multitrack projects: cut, fade, analyse, export. Requires the Audionaut app.

Overview

AI-generated overview

Lets an assistant inspect and edit Audionaut multitrack audio projects: import, cut, fade, analyse, auto-edit, split stems and export.

What you can do
  • Inspect and create projects: read tempo, tracks, clips and files, or start a new empty project package
  • Import and render audio: add files as a new track, export offline to WAV, FLAC, AIFF, Ogg Vorbis or MP3
  • Analyse and auto-edit: run segment, beat and onset analysis, then split clips into musically aligned regions and assemble arrangements
  • Edit the timeline: split clips, create, rename, retrim, place and clean up regions, move or remove clips, tracks and channels
  • Shape sound per clip: gain, fades and curves, playback speed with repitch or time-stretch, track pan
  • Separate stems into drums, bass, other and vocals, and file feature requests or bug reports with the maintainer
When to use it
Useful when you want an assistant to do repetitive or bulk editing on Audionaut projects — slicing a track every N bars, building an arrangement from regions, applying fades and gain, or rendering exports — without clicking through the GUI. It is only relevant if you already use the Audionaut app.
Requirements
The Audionaut app (1.6.3 or later recommended) must be installed; the package does nothing on its own. Node.js 18 or later for the npm package, run locally over stdio. The AUDIONAUT_CLI variable can point at the app binary or audionaut-cli if it is not found automatically. On macOS the sandboxed app can only reach ~/Music, so projects and audio must live there. Stem separation needs the Demucs model downloaded once in the app.
Before you install
Tools write to projects: they edit clips, tracks, regions and channels, and create or overwrite project files and exports. When a project is open in the app, edits land in the user's undo history and saving stays with the user; otherwise the project file is written directly. Stem separation is CPU-only and can take minutes. request_feature and report_bug send text to the maintainer as GitHub issues, through a relay or the GitHub CLI unless disabled; a reporter name or e-mail is included only…

Installation

In SourceWeft

  1. Open Audionaut in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

audionaut-mcp

An MCP server that lets AI agents (Claude Code, Claude Desktop, and any other MCP client) edit Audionaut projects: cut, move, fade, analyse, auto-edit and export. It is a thin wrapper: every tool runs one Audionaut command with --json and relays the result — no engine logic lives here.

Requires the Audionaut app (Mac App Store / GitHub Releases). On its own this package does nothing.

Quick start

You need Audionaut — 1.6.3 or later is recommended; 1.6.2 works on macOS and Linux — and Node.js 18 or later.

Claude Code:

claude mcp add audionaut -- npx -y audionaut-mcp

Claude Desktop (claude_desktop_config.json):

json
{  "mcpServers": {    "audionaut": {      "command": "npx",      "args": ["-y", "audionaut-mcp"]    }  }}

On Windows, if Claude Desktop cannot start npx, use "command": "cmd", "args": ["/c", "npx", "-y", "audionaut-mcp"].

Then ask for something like "split the clip in ~/Music/Audionaut/Demo Project.audium every 16 bars". Keep the project open in Audionaut to watch the edits arrive; each one is a single undo step.

On macOS, keep projects in your Music folder. Audionaut is sandboxed there (App Store and website download alike) and can only reach ~/Music: projects, audio to import and export targets all have to be inside it, for example in ~/Music/Audionaut. The server refuses other paths up front with sandbox_denied and a hint. Windows and Linux have no such limit.

To see which Audionaut the server found and whether it answers:

npx -y audionaut-mcp --check

The server looks for, in order: AUDIONAUT_CLI; a developer build of audionaut-cli (see the end of this page); audionaut-cli on PATH; the installed app — /Applications or ~/Applications (or wherever Spotlight finds it) on macOS, Program Files\Audionaut on Windows, audionaut from the .deb or an Audionaut*.AppImage in ~/Applications or ~/.local/bin on Linux. Anywhere else, point AUDIONAUT_CLI at the binary, e.g. your AppImage.

separate_stems needs the Demucs model, which you download once in the app (Settings ▸ Separation). The model weights are licensed for research use.

A stem split takes minutes for a full song, and exporting or analysing a long project can too. When your client sends a progressToken with the call, separate_stems, export_audio and analyze report progress (Audionaut 1.6.5 and later). A call is only stopped after ten minutes without any sign of life, not ten minutes in total.

Projects that are open in Audionaut

The tools do not need the user to save first, and they will not write over a document the user has open. When Audionaut is holding the project, the CLI hands the command to the app: it acts on the document as the user currently sees it, unsaved changes included, and the result lands in their undo history as one step instead of touching Project.json. Saving stays theirs to do.

With no app holding the project, the tools read and write the project file as they always have. If an app is holding one but cannot be reached, the command fails (host_unavailable) rather than falling back to the file, which would be missing whatever is unsaved.

Autosave.json and Host.json inside a package belong to the app — never read or edit them.

Tools

ToolWrapsPurpose
get_project_infoinfoTempo, tracks, clips, files (or the raw persistence JSON)
create_projectcreateNew empty .audium package
import_audioimportAdd audio files (creates a new track)
export_audioexportOffline render to WAV, FLAC, AIFF, Ogg Vorbis or MP3
analyzeanalyzeSegment, beat and onset analysis, cached next to the project
auto_editauto-editSegment a clip using cached analysis
assembleassembleBuild an arrangement from regions
splitsplitSplit clips at a timeline position (bars/beats/seconds/clocks)
create_regioncreate-regionCreate a named region from a timeline range
set_regionset-regionRename and/or retrim a region (affects all its clips)
remove_clipremove-clipRemove clip(s) from the timeline
move_clipmove-clipMove one clip to a new position and/or another track
place_clipplace-clipPlace an existing region on the timeline
cleanup_regionscleanup-regionsDelete every region no clip uses
clip_gainclip-gainSet a clip's gain (linear or dB, all channels or one)
clip_fadesclip-fadesSet a clip's fade lengths, offsets and curves
clip_speedclip-speedSet a clip's speed and mode (varispeed or pitch-preserving stretch), or lock it to the project tempo
remove_trackremove-trackRemove a whole track (channels, clips and regions)
remove_channelremove-channelRemove one channel from a track
track_pantrack-panPan a track's channel strips, -1 left to 1 right (all strips or one)
request_feature—Send a feature request to the maintainer (see below)
report_bug—Send a bug report to the maintainer (see below)
separate_stemsseparateSplit a clip into Drums/Bass/Other/Vocals tracks (Demucs; needs the downloaded model)

A typical agent flow: create_project → import_audio → analyze → auto_edit/assemble → export_audio. CLI errors come back as tool errors carrying the CLI's own code: message (e.g. demucs_unavailable: ... in builds without stem separation), so agents can react.

Feature requests and bug reports from agents

Agents run into the edges of what the tools expose, and into their bugs, long before a person would file an issue, so two tools give them a direct channel. request_feature takes a title, a description and (ideally) what the agent was trying to do and which tool fell short. report_bug takes the same plus steps to reproduce, the expected behaviour and the project shape; its description tells agents to quote the exact tool call and error text and never to attach audio. The server's instructions point agents at the right one whenever a task needs something the tools cannot do or a tool misbehaves, and tell them to say so to the user. A reporter name or e-mail is included only when the user offers one. Both become GitHub issues - enhancement + agent-request for features, bug + agent-report for bugs; the reply carries the issue URL and the feature-request discussion.

Transports, tried in order:

  1. Relay — the default: a deployment of Tools/feature-request-relay, a Cloudflare Worker that files the issue with its own GitHub token. This is the path for end users, who have no GitHub credentials on the agent side. AUDIONAUT_FEATURE_REQUEST_URL points at another deployment; an empty value skips the relay.
  2. GitHub CLI — when the relay is skipped and gh is installed and logged in, the issue is filed with gh issue create under the user's own account (developer machines).
  3. Nothing — otherwise the reply says sent: false and carries a prefilled new-issue URL for the user to open themselves.

AUDIONAUT_DISABLE_FEATURE_REQUESTS=1 skips the first two for both tools (test harnesses, air-gapped setups); the smoke test points the relay URL at a local stand-in.

Environment variables

VariableEffect
AUDIONAUT_CLIBinary that runs the commands: an Audionaut app or audionaut-cli
AUDIONAUT_SKIP_PATH_CHECK1 skips the ~/Music pre-check for the sandboxed macOS app
AUDIONAUT_DISABLE_ANALYTICS1 never sends usage analytics, whatever the app's consent setting
AUDIONAUT_FEATURE_REQUEST_URLIssue relay for request_feature/report_bug; empty skips it
AUDIONAUT_DISABLE_FEATURE_REQUESTS1 never files issues; replies carry a prefilled link instead

The server sets two variables for every Audionaut it runs, which the open app uses to group an agent's edits into undo steps: AUDIONAUT_AGENT_SESSION (one id per server process) and AUDIONAUT_AGENT_TASK (the editing tool's task parameter). Edits with the same session and task share one undo step in the user's app, and edits that name no task share one step per session; a user edit, an undo or ten idle minutes start a new one.

Developing: building the CLI from source

From a clone of the repo, the server prefers a CMake build of the standalone audionaut-cli, which is not sandboxed:

  1. Build the CLI (from the repo root):

    cmake -B build -S Audionaut/Catch2Testscmake --build build -j8 --target AudionautCli
  2. Install the server's dependencies:

    cd Tools/audionaut-mcp && npm install
  3. Register the checkout instead of the npm package. Claude Code:

    claude mcp add audionaut -- node /path/to/Audionaut/Tools/audionaut-mcp/index.js

    Claude Desktop: the JSON above with "command": "node" and "args": ["/path/to/Audionaut/Tools/audionaut-mcp/index.js"].

npm test drives the server through a real MCP client against whichever binary it finds (AUDIONAUT_CLI picks one). With the sandboxed macOS app it works in a scratch folder under ~/Music; AUDIONAUT_TEST_DIR overrides the location.

Paths in tool arguments are best given absolute — relative paths resolve against the server process's working directory, which depends on the MCP client.

Source: Tools/audionaut-mcp/README.md at commit 4121818

Tools

23

get_project_info

Get project info

Summarizes an Audionaut project: tempo, tracks, clips with positions/durations and their audio files. Set raw=true for the full persistence JSON instead of the summary.

Parametersrawprojectrequired

create_project

Create project

Creates a new empty Audionaut project (.audium package) with one track. Fails if the path already exists.

Parametersprojectrequiredchannels

import_audio

Import audio

Imports one or more audio files into the project at the given position and saves it. Note: importing creates a new track holding the files.

Parameterstaskfilesrequiredprojectrequiredposition_seconds

export_audio

Export audio

Renders the project offline to an audio file (no audio device needed). The output's extension picks the format: .wav (8/16/24/32 bit), .flac (lossless and compressed, 16/24 bit, at most 8 channels per file), .aiff (8/16/24 bit), .ogg (Ogg Vorbis, lossy, at most 8 channels) or .mp3 (lossy, mono or stereo, at most 48 kHz). Lossy formats take bitrate_kbps instead of bit_depth. Pass region to bounce a single region instead - always dry, without any clip's gains or fades. Reports progress in 5% steps when the call carries a progressToken.

Parameterstrackoutputrequiredregionprojectrequiredchannelsbit_depthmulti_monosample_ratebitrate_kbpsstart_secondslength_seconds

analyze

Analyze audio

Runs audio analysis (segment boundaries, beats with BPM, onsets) on the project's audio files - or one standalone audio file - and caches the results next to the project for auto_edit/assemble to use. Reports progress as each file and type finishes when the call carries a progressToken.

Parameterstypestargetrequired

auto_edit

Auto-edit clip

Segments a clip on a track using cached analysis results (run analyze first). Splits the clip into musically-aligned regions.

Parameterscliptasktrackprojectrequiredmeasuressegmentscrossfadesduration_seconds

assemble

Assemble arrangement

Builds an arrangement of the given duration from the project's regions, sequentially or at random (requires regions - e.g. from auto_edit).

Parametersmodeseedtasktrackprojectrequiredcrossfadesduration_seconds

split

Split clips

Splits the clip under the given timeline position into two on every track that has one there (the GUI's Split command). Fails with nothing_to_split when no clip spans the position.

Parametersatrequiredtaskunitprojectrequired

create_region

Create region

Creates a named region from a timeline range on every track whose clip fully contains it (the GUI's Create Region command). The arrangement itself is unchanged. The name must not be taken by another region (error name_taken).

Parametersendrequirednamerequiredtaskunitstartrequiredprojectrequired

set_region

Edit region

Renames a region and/or retrims its source-relative range (clamped to the source audio). Clips have no length of their own, so a retrim affects every clip using the region.

Parametersendtaskunitstarttracklengthregionrequiredrenameprojectrequired

remove_clip

Remove clips

Removes the clip at a timeline position (one clip; ambiguity across tracks needs track), or every placement of a named region. delete_region also drops the region itself unless other clips use it.

Parametersattaskunittrackregionprojectrequireddelete_region

move_clip

Move clip

Moves one clip to a new timeline position and/or onto another track. Address it by position (at) or region name; the address must match exactly one clip. to_track takes a track id, or "new" to create a track for it; without to the clip keeps its position. Give at least one of to and to_track.

Parametersattotaskunittrackregionprojectrequiredto_track

place_clip

Place clip

Creates a new clip from an existing named region at a timeline position, on the track that owns the region (track only disambiguates same-named regions).

Parametersatrequiredtaskunittrackregionrequiredprojectrequired

cleanup_regions

Delete unused regions

Deletes every region that has no clip on the timeline (the GUI's Delete Unused Regions). The audio files stay in the package.

Parameterstaskprojectrequired

clip_gain

Set clip gain

Sets the addressed clip's gain - linear by default, dB with db=true - on every destination channel, or one channel. The address (at or region) must match exactly one clip.

Parametersatdbgainrequiredtaskunittrackregionchannelprojectrequired

clip_speed

Set clip speed

Sets a clip's playback speed (ratio 0.25-4, 2.0 = double speed, half as long). The mode picks how: repitch (default, varispeed - pitch and length change together) or stretch (pitch-preserving time-stretch). Mode can also be changed on its own. lockTempo ties the clip to the project tempo (speed = project tempo / clip tempo, following tempo changes); the clip tempo is detected by beat tracking or given with `tempo`, which implies the lock.

ParametersatmodetaskunitratiotempotracklengthregionprojectrequiredlockTemposemitones

separate_stems

Separate stems

Splits a clip into Drums/Bass/Other/Vocals tracks with the Demucs (htdemucs) source separator, aligned with the source clip. Slow: minutes for a full song, CPU only; reports progress in 5% steps when the call carries a progressToken. Needs the model weights, which the Audionaut app downloads once (Settings > Separation); fails with model_missing until then, and with demucs_unavailable in builds without Demucs.

Parameterscliptasktrackprojectrequiredthreadsmute_source

clip_fades

Set clip fades

Sets the addressed clip's fade ramps and curve exponents (0.1-4, 0.5 = equal power). All four fade values are in `unit` (default bars) and 0 clears one. Each ramp has two edges measured inward from the clip edge: the fade-in runs from fade_in_start to fade_in after the clip start, the fade-out from fade_out to fade_out_end before the clip end, so a ramp lasts fade_in - fade_in_start (or fade_out - fade_out_end). A negative offset puts that edge outside the clip, playing source audio beyond it - e.g. fade_out 0.25 with fade_out_end -0.25 (seconds) is a 0.5 s ramp centred on the clip end, the outgoing half of a crossfade. Values are clamped against each other within the clip. The address must match exactly one clip.

Parametersattaskunittrackregionfade_inprojectrequiredfade_outfade_out_endfade_in_curvefade_in_startfade_out_curve

remove_track

Remove track

Removes a whole track from the project, including its channels, clips and regions. Track ids are positions in the track list, so the ids of the tracks below shift up by one. The audio files stay in the package.

Parameterstasktrackrequiredprojectrequired

remove_channel

Remove channel

Removes one channel (0-based) from a track, like deleting a channel strip in the GUI. Channel mappings and per-channel clip gains shift down; the audio files stay in the package.

Parameterstasktrackrequiredchannelrequiredprojectrequired

track_pan

Pan a track

Sets the pan position of a track's channel strips, -1 (hard left) to 1 (hard right), 0 centred - the pan slider of the channel view. Every strip of the track by default, one with channel. A mono stem has one strip; a stereo import's two strips start at -1 and 1. Playback and export_audio both follow it; get_project_info shows the current pans per track.

Parameterspanrequiredtasktrackrequiredchannelprojectrequired

request_feature

Request a feature

Sends a feature request to the Audionaut maintainer as a GitHub issue. Use it when a task needs something the other tools cannot do: a missing verb or option, a limit that got in the way, or a workflow that took a clumsy workaround. Say what the user was trying to achieve and why the current tools fall short - that context is what makes the request actionable. Tell the user you are sending it; include their name or e-mail only if they offered it. If nothing could be sent, the reply carries a prefilled issue link to hand to the user.

Parameterstitlerequiredcontextreporterdescriptionrequired

report_bug

Report a bug

Reports a bug in Audionaut to the maintainer as a GitHub issue. Use it when a tool misbehaves: an error that should not happen, a wrong or inconsistent result, a crash, or a project left in a bad state. Quote the exact tool call and error text - the CLI's code and message - and say what you expected instead; that is what makes the report reproducible. Never include the audio itself, and keep file paths to what is needed. Tell the user you are sending it; include their name or e-mail only if they offered it. If nothing could be sent, the reply carries a prefilled issue link to hand to the user.

Parametersstepstitlerequiredcontextexpectedreporterdescriptionrequired

Version history

5
  1. v0.5.0LatestOct 26, 2026
  2. v0.4.1Oct 21, 2026
  3. v0.4.0Oct 14, 2026
  4. v0.3.0Oct 2, 2026
  5. v0.2.0Sep 29, 2026

Score

80% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.