MCP Server Guide
~5 minv0.3.0Run StemSplit from inside Claude, Cursor, Cline, Windsurf, Zed, and any MCP client
What is the StemSplit MCP server?
stemsplit-mcp is the official Model Context Protocol server for StemSplit. Install it once with npm, point your AI assistant at it, and you can run vocal removal, karaoke generation, instrumental extraction, 4-stem / 6-stem separation, and voice cleaning (background noise removal) directly from chat — on local audio files or YouTube URLs.
Prerequisites
- Node.js 20 or newer (
node --version) - StemSplit account with an API key (generate one)
- An MCP-compatible client (Claude Desktop, Cursor, Cline, Windsurf, Zed, etc.)
Install the MCP server
You don't actually need to install anything — the easiest path is to let your MCP client run it via npx. If you prefer a global install:
npm install -g stemsplit-mcpGet your API key
- Log in to StemSplit Settings
- Open the API Keys section
- Click Create New Key, name it "MCP Client", and copy the
sk_live_…value
Configure your MCP client
Pick the client you use. The config is the same shape everywhere — point at npx -y stemsplit-mcp and set STEMSPLIT_API_KEY in the env.
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, or %APPDATA%\Claude\claude_desktop_config.json on Windows:
{
"mcpServers": {
"stemsplit": {
"command": "npx",
"args": ["-y", "stemsplit-mcp"],
"env": {
"STEMSPLIT_API_KEY": "sk_live_..."
}
}
}
}Restart Claude Desktop and the server will appear in the MCP indicator at the bottom of the chat window.
Cursor
Add to ~/.cursor/mcp.json (or use Settings → MCP):
{
"mcpServers": {
"stemsplit": {
"command": "npx",
"args": ["-y", "stemsplit-mcp"],
"env": {
"STEMSPLIT_API_KEY": "sk_live_..."
}
}
}
}Cline (VS Code)
Open Cline's settings, find MCP Servers, click Edit MCP Settings, and add the same JSON block as above. Cline reloads automatically.
Windsurf
In Settings → Cascade → MCP Servers, add the samemcpServers block. Windsurf will start the server when you open the AI panel.
Zed
Add to your Zed settings.json:
{
"assistant": {
"mcp_servers": {
"stemsplit": {
"command": "npx",
"args": ["-y", "stemsplit-mcp"],
"env": { "STEMSPLIT_API_KEY": "sk_live_..." }
}
}
}
}Try it
Open a new chat in your MCP client and try one of these prompts:
Separate the stems of /Users/me/Music/track.mp3 and give me the instrumental.Make a karaoke version of https://youtube.com/watch?v=...Split ~/Music/funk.wav into all 6 stems at the best quality and tell me where they are.Remove the background noise from /Users/me/Recordings/podcast.mp3 and save the cleaned version.How many minutes do I have left on my StemSplit account?Available tools
| Tool | What it does |
|---|---|
separate_stems | Upload a local audio file or pass a direct audio URL through StemSplit. Picks vocals, instrumental, both, 4-stem, or 6-stem output. Polls until done and downloads stems to disk. |
separate_youtube | Submit a YouTube URL — StemSplit fetches the video server-side, separates it, and downloads vocals + instrumental to disk. |
separate_soundcloud | Submit a public SoundCloud track URL — StemSplit fetches the track server-side, separates it, and downloads vocals + instrumental to disk (max 15 min). |
clean_voice | Remove background noise, hum, hiss, echo, and ambient sound from a voice recording or audio file using DeepFilterNet. Polls until done and downloads the cleaned audio to disk. |
get_job / list_jobs | Check status and history of stem jobs. |
get_youtube_job / list_youtube_jobs | Same as above, scoped to YouTube jobs. |
get_soundcloud_job / list_soundcloud_jobs | Same as above, scoped to SoundCloud jobs. |
get_denoise_job / list_denoise_jobs | Check status and history of voice cleaner (denoise) jobs. |
get_balance | Current credit balance in seconds and minutes. |
download_stems | Re-download outputs from any completed job with fresh presigned URLs (handy if you closed the original chat). |
The server also ships 5 resources (live balance, recent jobs, job detail, YouTube job detail, SoundCloud job detail) and 6 prompts (karaoke, isolate_dialogue, sampler_pack, youtube_instrumental, soundcloud_instrumental, clean_voice). See the README for the full reference.
separate_stems parameters
| Field | Type | Default | Notes |
|---|---|---|---|
source | string (required) | — | Absolute local path (or ~/…) or direct https:// audio URL. Do not pass YouTube or SoundCloud URLs here. |
outputType | enum | BOTH | VOCALS · INSTRUMENTAL · BOTH · FOUR_STEMS · SIX_STEMS. SIX_STEMS requires quality=BEST. |
quality | enum | BEST | FAST · BALANCED · BEST |
outputFormat | enum | MP3 | MP3 · WAV · FLAC |
wait | boolean | true | If true, poll until done and download stems to disk before returning. |
outputDir | string | ~/Downloads/stemsplit/<jobId>/ | Override output directory for this job. Overrides STEMSPLIT_DEFAULT_OUTPUT_DIR. |
timeoutSeconds | integer | 600 | Max wait time when wait=true. Increase for very long tracks. |
pollIntervalSeconds | integer | 5 | Polling frequency when wait=true. |
fileName | string | derived | Display name shown in the StemSplit job list. |
separate_youtube takes the same optional fields but uses youtubeUrl instead of source, and output is fixed to vocals + instrumental at BEST quality. separate_soundcloud takes soundcloudUrl instead, with the same output constraints (max 15 min).
SoundCloud support
Use separate_soundcloud (or the /soundcloud_instrumental slash command) to extract vocals and an instrumental from any public SoundCloud track — no download needed.
{
"soundcloudUrl": "https://soundcloud.com/artist/track-name"
}Accepted URL formats
| Format | Example |
|---|---|
| Standard track URL | https://soundcloud.com/artist/track-name |
| Mobile URL | https://m.soundcloud.com/artist/track-name |
| Short URL | https://on.soundcloud.com/AbCdE |
Voice Cleaner
Use clean_voice to remove background noise, hum, hiss, echo, and ambient sound from any audio file. Powered by DeepFilterNet — works great on podcasts, voice-overs, dialogue recordings, and isolated vocals.
{
"source": "/Users/me/Recordings/podcast-ep12.mp3",
"outputFormat": "WAV"
}clean_voice parameters
| Field | Default | Notes |
|---|---|---|
source | required | Absolute local path or direct https:// audio URL. |
outputFormat | MP3 | MP3 · WAV · FLAC |
wait | true | If true, poll until done and download the cleaned file before returning. |
outputDir | ~/Downloads/stemsplit/<jobId>/ | Override output directory for this job. |
timeoutSeconds | 600 | Max wait time when wait=true. |
When wait=false, the tool returns a job_id immediately — use get_denoise_job to poll status and retrieve the download URL.
Configuration
All configuration is done via environment variables in your MCP client config.
| Env var | Required | Default | Description |
|---|---|---|---|
STEMSPLIT_API_KEY | Yes | — | API key — must start with sk_live_ |
STEMSPLIT_DEFAULT_OUTPUT_DIR | No | ~/Downloads/stemsplit | Base directory where stems are saved. Each job gets a <jobId>/ sub-directory. |
STEMSPLIT_API_BASE_URL | No | https://stemsplit.io/api/v1 | Override for self-hosted or staging environments. |
Troubleshooting
| Symptom | Fix |
|---|---|
STEMSPLIT_API_KEY is required | Set the env var in your MCP client config — see Step 3. |
[INVALID_API_KEY_FORMAT] | Key must start with sk_live_. Generate a fresh one at Settings → API Keys. |
[INSUFFICIENT_CREDITS] | The error includes a purchaseUrl. Top up at stemsplit.io/app/billing. |
[RATE_LIMIT_EXCEEDED] | Default limit is 60 req/min. The error includes retryAfterSeconds — wait and retry. |
[FILE_TOO_LARGE] / [AUDIO_TOO_LONG] | Trim or compress the file. Limits are 100 MB and 60 minutes. |
[POLL_TIMEOUT] | Increase timeoutSeconds on the tool call, or pass wait=false and poll get_job separately. |
YouTube URL passed to separate_stems | Use separate_youtube instead. |
SoundCloud URL passed to separate_stems | Use separate_soundcloud instead. |
[TRACK_NOT_FOUND] on SoundCloud job | Track is private, a playlist/set, or unavailable. Only public single tracks are supported. |
Common use cases
🎤 Karaoke from any song
Drop a YouTube URL or local MP3 into your AI assistant; get back the instrumental in seconds.
🥁 Stem extraction for production
Ask for "the drum stem from this track" and have it saved to your DAW's import folder.
🎙️ Transcription prep
Isolate vocals first, then feed them to your transcription tool for cleaner output.
🎛️ Sample pack building
Six-stem split a session, drop the result into a sampler, and start chopping.
🎙️ Voice / podcast cleanup
Drop a noisy recording into clean_voice and get back a clean, noise-free version in seconds — no DAW required.
Pro tips
- • Always pass absolute paths to
separate_stems— relative paths resolve against the MCP server's cwd, not your editor's. - • Use
SIX_STEMSonly withquality=BEST(the model only ships this combination). - • Set
STEMSPLIT_DEFAULT_OUTPUT_DIRin your env to send stems to a specific folder by default. - • Stem URLs expire after 1 hour — use
download_stemsto refresh them on old jobs.