Skip to main content

MCP Server Guide

~5 minv0.3.0

Run 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.)
1

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-mcp
2

Get your API key

  1. Log in to StemSplit Settings
  2. Open the API Keys section
  3. Click Create New Key, name it "MCP Client", and copy the sk_live_… value
3

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_..." }
      }
    }
  }
}
4

Try it

Open a new chat in your MCP client and try one of these prompts:

Remove vocals from a local song
Separate the stems of /Users/me/Music/track.mp3 and give me the instrumental.
Build a karaoke track from YouTube
Make a karaoke version of https://youtube.com/watch?v=...
Full 6-stem split for sampling
Split ~/Music/funk.wav into all 6 stems at the best quality and tell me where they are.
Clean up a noisy recording
Remove the background noise from /Users/me/Recordings/podcast.mp3 and save the cleaned version.
Check balance
How many minutes do I have left on my StemSplit account?

Available tools

ToolWhat it does
separate_stemsUpload 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_youtubeSubmit a YouTube URL — StemSplit fetches the video server-side, separates it, and downloads vocals + instrumental to disk.
separate_soundcloudSubmit a public SoundCloud track URL — StemSplit fetches the track server-side, separates it, and downloads vocals + instrumental to disk (max 15 min).
clean_voiceRemove 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_jobsCheck status and history of stem jobs.
get_youtube_job / list_youtube_jobsSame as above, scoped to YouTube jobs.
get_soundcloud_job / list_soundcloud_jobsSame as above, scoped to SoundCloud jobs.
get_denoise_job / list_denoise_jobsCheck status and history of voice cleaner (denoise) jobs.
get_balanceCurrent credit balance in seconds and minutes.
download_stemsRe-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

FieldTypeDefaultNotes
sourcestring (required)Absolute local path (or ~/…) or direct https:// audio URL. Do not pass YouTube or SoundCloud URLs here.
outputTypeenumBOTHVOCALS · INSTRUMENTAL · BOTH · FOUR_STEMS · SIX_STEMS. SIX_STEMS requires quality=BEST.
qualityenumBESTFAST · BALANCED · BEST
outputFormatenumMP3MP3 · WAV · FLAC
waitbooleantrueIf true, poll until done and download stems to disk before returning.
outputDirstring~/Downloads/stemsplit/<jobId>/Override output directory for this job. Overrides STEMSPLIT_DEFAULT_OUTPUT_DIR.
timeoutSecondsinteger600Max wait time when wait=true. Increase for very long tracks.
pollIntervalSecondsinteger5Polling frequency when wait=true.
fileNamestringderivedDisplay 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

FormatExample
Standard track URLhttps://soundcloud.com/artist/track-name
Mobile URLhttps://m.soundcloud.com/artist/track-name
Short URLhttps://on.soundcloud.com/AbCdE
SoundCloud limits: Max 15 minutes. Public single tracks only — private tracks, playlists, and sets are not supported. Output is fixed to vocals + instrumental, MP3, BEST quality. When track duration is unknown at submission, 4 minutes (240 credits) is held and reconciled on completion.

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

FieldDefaultNotes
sourcerequiredAbsolute local path or direct https:// audio URL.
outputFormatMP3MP3 · WAV · FLAC
waittrueIf true, poll until done and download the cleaned file before returning.
outputDir~/Downloads/stemsplit/<jobId>/Override output directory for this job.
timeoutSeconds600Max 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 varRequiredDefaultDescription
STEMSPLIT_API_KEYYesAPI key — must start with sk_live_
STEMSPLIT_DEFAULT_OUTPUT_DIRNo~/Downloads/stemsplitBase directory where stems are saved. Each job gets a <jobId>/ sub-directory.
STEMSPLIT_API_BASE_URLNohttps://stemsplit.io/api/v1Override for self-hosted or staging environments.

Troubleshooting

SymptomFix
STEMSPLIT_API_KEY is requiredSet 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_stemsUse separate_youtube instead.
SoundCloud URL passed to separate_stemsUse separate_soundcloud instead.
[TRACK_NOT_FOUND] on SoundCloud jobTrack 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_STEMS only with quality=BEST (the model only ships this combination).
  • • Set STEMSPLIT_DEFAULT_OUTPUT_DIR in your env to send stems to a specific folder by default.
  • • Stem URLs expire after 1 hour — use download_stems to refresh them on old jobs.