io.github.AudialAI/audial-mcp
Official# audial-mcp
[](https://allmcps.com/mcp/audial?verify=655ada1a-49b7-4930-9ec2-2e5ed7eaa6c6)
Powered by [Audial](https://audialmusic.ai?utm_source=github&utm_medium=readme&utm_campaign=mcp) — run Audial's hosted audio tools from any MCP
client: split stems, analyze audio, find a song's sections, tempo and bars and add audio
features, tags or timed lyrics to that analysis, master tracks, build sample packs, convert
audio to MIDI, generate music, turn a one-shot into an editable Audial Synth or Serum 2
preset, and sing lyrics in a reference voice. See the [API reference](https://audialmusic.ai/resources/api-reference?utm_source=github&utm_medium=readme&utm_campaign=mcp)
for details on what each tool calls.
mcp-name: io.github.AudialAI/audial-mcp
## Install
You need an Audial account (https://audialmusic.ai?utm_source=github&utm_medium=readme&utm_campaign=mcp) and
[`uv`](https://docs.astral.sh/uv/getting-started/installation/). There is no API key to copy:
the first time a tool runs, a sign-in page opens in your browser. Approve it and the tool
carries on.
**Claude Code**
```bash
claude mcp add audial -e AUDIAL_RESULTS_DIR=~/Audial -- uvx audial-mcp
```
**Claude Desktop, one click**
Download `audial-mcp-<version>.mcpb` from the [latest release](https://github.com/AudialAI/audial-mcp/releases/latest) and double-click it. Claude Desktop fetches what it needs, so there is nothing else to install or configure.
**Claude Desktop / Cursor / any client with a JSON config**
```json
{
"mcpServers": {
"audial": {
"command": "uvx",
"args": ["audial-mcp"],
"env": {
"AUDIAL_RESULTS_DIR": "~/Audial"
}
}
}
}
```
### Signing in
The sign-in is saved on your computer (`~/.audial/credentials.json`, readable only by you) and
shared with the `audial` command line and Python SDK, so `audial login` in a terminal signs
the MCP server in too. If you have not approved within two minutes the tool returns the
sign-in link instead; approve it and ask again. The `account`, `sign_in` and `sign_out` tools
show and change who is signed in, and each connected computer is listed, and can be
disconnected, under Apps & API Keys in your profile at audialmusic.ai.
On a server or in CI, where nobody can sign in, set `AUDIAL_API_KEY` to a key created on that
page. A key set this way takes priority over a saved sign-in.
## Tools
| Tool | What it does |
|---|---|
| `stem_split` | Split a track into vocals, drums, bass, other (optionally retime / rekey) |
| `analyze` | BPM, key and other characteristics |
| `segment` | Song sections, tempo and bars from the mix, in about half a minute; returns an `analysis_id` |
| `audio_features` | Energy, danceability, loudness, mode, key and tatum, for the song and each section |
| `tag_audio` | Genre, moods, instruments and artist tags for the mix and each part, plus a written description |
| `get_lyrics` | Lyrics as timed lines (word timings in the saved file) |
| `master` | Mastering, optionally matched to a reference |
| `generate_samples` | Sample pack from an analysis, or from a file in one call |
| `generate_midi` | Audio to MIDI |
| `generate_music` | Text to music, covers, remixes, lego and understand with the Audial music model |
| `sound2vital` | One isolated sound → editable Audial Synth (Vital) preset. Not for loops or melodies |
| `sound2serum` | One isolated sound → editable Xfer Serum 2 (.SerumPreset) preset. Not for loops or melodies |
| `text2vox` | Lyrics + reference voice → sung vocal and MIDI |
| `pipeline_status` | Look up a pipeline by id: its state, each step, and the outputs so far |
| `service_status` | Which tools have a worker awake right now, and what a cold start will cost |
| `list_results` | Browse previous results in your results folder |
## Analysis and add-ons
`segment` analyses the mix in about half a minute: no stems needed. It returns the sections
(with their phrases) and a tempo map, plus an `analysis_id`. Beats and bars aren't listed one by
one: `grid` describes them -- where each constant-tempo piece starts, its BPM, and its bar and
beat. Every beat time is `start + k × 60 / bpm`. Most tracks have one piece.
Pass the `analysis_id` to `audio_features`, `tag_audio`, `get_lyrics` or `generate_samples` to
add that result to the analysis, whenever you like. Nothing is uploaded again. Each of them also
takes a `file_path` instead, and then runs `segment` on it first.
- Audio features need nothing more, so they can run straight after the analysis.
- Tags, lyrics and the sample pack read the track's stems. Audial makes them automatically
after each analysis, so right after a new one these tools wait a few minutes for them.
- If a tool analysed a file and the next step failed or timed out, the error gives the new
`analysis_id`: call the tool again with it, rather than with the file.
An analysis counts as one run. Everything you add to it (features, tags, lyrics, a sample pack)
is included.
`generate_samples` on a file runs as an Audial *pipeline*: it prepares the track (analysis and
stems together), then builds the pack, as one job. Each step is reported as it starts and
finishes ("prepare completed in 41 s; sample-pack running"). The pipeline id comes back as the
result's `execution_id` -- pass it to `pipeline_status` to check on a job whose call timed out.
`segment` with `features` (kept for older integrations) is a pipeline as well.
## Per-note lyrics
`text2vox` lines lyrics up with a melody. `lyrics_mode="per_note"` is the mode that gives
exact control: the lyrics are pipe-delimited, one token per MIDI note, and a **hold** keeps
the previous syllable going through the next note.
| Token | Meaning |
|---|---|
| `grace` | Sung on this note |
| `-` | Hold: continue the previous syllable through this note (the documented form) |
| `+` | Hold as well |
| *empty* | Hold as well -- what a double pipe produces |
```
amazing|-|-|grace|-|how|sweet|the|sound
```
That sings "amazing" across notes 1-3 and "grace" across notes 4-5, and needs a MIDI file
with exactly nine notes. There is no rest token: a note that should be silent should not be
in the MIDI. The token count must equal the note count, and the first token must be a
syllable -- a lyric string that breaks either rule comes back as a tool error naming the
note it is about ("note 1 has no syllable; the first note needs one (position 1)"), before
anything is uploaded.
## Cold starts
Audial's workers scale to zero, so the first job after an idle period spends extra time
starting one and loading the model -- a few minutes on a GPU tool; every job after it is fast.
The analysis and each add-on (`audio_features`, `tag_audio`, `get_lyrics`) run on workers of
their own, so the first add-on after a quiet spell can start up for a minute or more even when
`segment` was quick. Audial reports that phase on the job it is already polling, and every
tool here relays it as a progress notification and a log line:
```
Warming up the machine — the first request takes a few minutes longer than usual
(about 3 min); every run after this is faster
Working on your job…
```
It is the same sentence the Audial website, CLI and plugins show. `service_status` answers
the same question before you start anything, so a long wait can be explained in advance.
## What leaves your machine
Audio and text you pass to a tool are uploaded to Audial's API (https://api.audialmusic.ai)
over HTTPS and processed on Audial's servers; results are downloaded into
`AUDIAL_RESULTS_DIR` (default `~/Audial`). Nothing else is sent.
A tool given an `analysis_id` uploads nothing: it works on the audio Audial already has for
that analysis. Audial makes and keeps the track's stems with each analysis, like your
other results. To fill in artist tags, `tag_audio` has Audial's servers look up the track's
title and artist in a public music database; that lookup gets the title and artist, never the
audio.
Two other files are *read* if they exist, because the Audial SDK looks for them:
`~/.audial/.audial_config.json` and a `.env` in the directory the server was started from.
Credentials from your MCP client's config always win: `audial-mcp` snapshots its environment
before the SDK loads either file, so neither can redirect your credentials or the API host.
Every tool except `list_results` calls the Audial API, which requires an active Audial subscription on the account; without one the tool returns the API's subscription message.
## Configuration
| Variable | Required | Default |
|---|---|---|
| `AUDIAL_API_KEY` | no | browser sign-in |
| `AUDIAL_USER_ID` | no; only with an older API key that does not start with `aud_` | |
| `AUDIAL_RESULTS_DIR` | no | `~/Audial` |
| `AUDIAL_JOB_TIMEOUT_S` | no | `900` |
| `AUDIAL_API_BASE_URL` | no | production API |
## License
MIT. Source: https://github.com/AudialAI/audial-mcp
TDQS
Scored across 19 tools
Most tools have sharply distinct jobs, and descriptions actively redirect between near-neighbors (e.g. 'for tempo and key alone, analyze is quicker' vs segment; sound2vital vs sound2serum differ only by target synth but are explicitly named). The main soft spot is analyze vs audio_features, which both report key/loudness/mode-like data, and audio_features/tag_audio/get_lyrics share the same analysis_id-or-file_path input shape, so an agent must read descriptions carefully to pick correctly.
Names are all lowercase snake_case, but the verb convention is mixed: verb_noun (get_lyrics, list_results, generate_samples, sign_in), bare noun/verb (segment, analyze, master, account), and a 'X2Y' pattern (sound2vital, sound2serum, text2vox). It stays readable, but there is no single predictable pattern an agent can rely on to infer an unlisted operation.
19 tools is on the heavy side, but the domain is genuinely broad (analysis, stems, mastering, MIDI, music generation, presets, vocals) and each processing tool maps to a distinct output artifact. The auth/status cluster (account, sign_in, sign_out, service_status, pipeline_status, list_results) adds some overhead but each serves an operational purpose.
Coverage of the audio lifecycle is strong: cheap analysis, segmentation, features, tags, lyrics, stems, sample packs, mastering, MIDI, generation, presets, vocal synthesis, plus auth, worker status, pipeline polling and local result listing. Gaps are minor but real: no cancel/delete of jobs or results, and no direct fetch of a single saved result by id beyond pipeline_status/list_results.