Sound Server MCP server for AI agents
Sound Server is a Model Context Protocol server. Connect it once and your agent can search every sample source, build drum kits, check licences and pull sounds into your project while it works on your track, game or app.
MCP endpoint: https://sound.shep.bot/mcp (Streamable HTTP, no authentication). Register it under the name sounds.
Claude Code
claude mcp add --transport http sounds https://sound.shep.bot/mcp
Add --scope user to make it available in every project, or --scope project to share it with your team through .mcp.json. Check it with claude mcp list, or /mcp inside a session.
Cursor
Add this to .cursor/mcp.json in your project, or to ~/.cursor/mcp.json for every project (the home page has a one-click “Add to Cursor” button):
{
"mcpServers": {
"sounds": { "url": "https://sound.shep.bot/mcp" }
}
}
VS Code (GitHub Copilot)
Add to .vscode/mcp.json, then use Copilot Chat in Agent mode:
{
"servers": {
"sounds": { "type": "http", "url": "https://sound.shep.bot/mcp" }
}
}
Or from a terminal: code --add-mcp '{"name":"sounds","type":"http","url":"https://sound.shep.bot/mcp"}'
Claude desktop app and claude.ai
Open Settings → Connectors → Add custom connector, name it Sound Server and paste https://sound.shep.bot/mcp.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"sounds": { "serverUrl": "https://sound.shep.bot/mcp" }
}
}
OpenAI Codex CLI
Add to ~/.codex/config.toml:
[mcp_servers.sounds]
url = "https://sound.shep.bot/mcp"
Gemini CLI
gemini mcp add --transport http sounds https://sound.shep.bot/mcp
Any other client
Clients that only support stdio servers can bridge to the HTTP endpoint with mcp-remote:
{
"mcpServers": {
"sounds": { "command": "npx", "args": ["-y", "mcp-remote", "https://sound.shep.bot/mcp"] }
}
}
Tools your agent gets
| Tool | What it does |
|---|---|
search_samples |
Search every source. Arguments: query (music words work: “808 in F minor”, “vocal chop 140 bpm”), categories (e.g. drums.kick, bass.808, fx.riser), forms (one-shot, loop, phrase…), bpm or bpm_min/bpm_max, key, max_duration, commercial_only (default true), free_only, downloadable_only, strict, providers, limit, offset. |
get_sample |
Details for one id: licence, verdict and credit line, files, preview, and with analyze=true the measured duration, BPM, key, root note and loudness. Returns selection.downloadUrl for the best file. |
download_sample |
Local servers only: writes the file into ./samples/<category>/ and keeps ATTRIBUTION.md and credits.json up to date. |
build_kit |
Picks one sound per slot (default kick, snare, clap, closed hat, open hat, 808) for a style, bpm and key, with alternatives, a licence summary, a Strudel snippet and a General MIDI / SFZ map. Locally, download=true saves the kit. |
find_similar |
Sounds that sound like a Freesound sample (Freesound’s audio similarity). |
list_sources |
Every source with what it is best for, categories, pricing, licence and capabilities. |
The remote server never writes to its own disk, so agents with a shell download through the links it returns:
mkdir -p samples/drums
curl -L -o samples/drums/kick.zip "https://sound.shep.bot/v1/samples/freesound%3A2086/download?bundle=true"
unzip -o samples/drums/kick.zip -d samples/drums/
Licence rules the agent follows
Music licences have more traps than most, so the server tells every agent the same rules, and you can expect them to be followed:
- Searches are commercial-safe by default (
commercial_only=true). The agent turns that off only when you say the project is personal or non-commercial. - It reports the verdict of every sound it suggests, and never presents a
no(non-commercial) orcheck-terms(unclear) sound as cleared. - When a sound needs credit (
yes-with-credit), it gives you the exactattributionline, and local downloads collect them inATTRIBUTION.md. - Uploader-asserted licences (for example on the Internet Archive) are flagged as unverified.
Details: Sample licences explained.
Prompts that work well
Build me a dark trap kit at 140 BPM in F minor: kick, snare, hats, clap and an 808. Commercial-safe only. Show me the picks with their licences first.
Find a riser and an impact for a drop at 128 BPM. Only CC0 or royalty free. Download them into ./samples/fx.
I need a vocal chop in A minor for a house track. Give me five options with preview links and tell me which ones need a credit.
Tips for agents and the people prompting them:
- Write queries the way a producer talks: “punchy kick”, “dusty snare”, “open hat”, “rain ambience”.
- Filter by category when the word is ambiguous: “crash” is a cymbal, not a sound effect.
- Results with
downloadable: falsemust be fetched from theirurlon the source site;requiresAccount: truemeans the original needs a (usually free) account there.
Local mode: downloads straight to disk
For download_sample and kit downloads into your project, run the server locally over stdio:
claude mcp add sounds-local -- npx -y sound-server mcp
Or with Docker, mounting your samples folder:
claude mcp add sounds-local -- docker run -i --rm \
--user "$(id -u):$(id -g)" -v "$PWD/samples:/app/samples" \
ghcr.io/arielshad/sound-server node dist/cli.js mcp
Files land in ./samples/<category>/ (packs in ./samples/packs/<name>/). Add -e FREESOUND_API_KEY=... for Freesound search, and -e FREESOUND_OAUTH_TOKEN=... to fetch Freesound originals with your own account.
Agents without MCP
Any agent that can fetch URLs can use the REST API directly. Point it at /AGENTS.md; it has the whole workflow and the licence rules in a few lines. In Claude Code you can also install the ready-made skill:
mkdir -p ~/.claude/skills/sounds
curl -fsSL https://sound.shep.bot/skill/SKILL.md -o ~/.claude/skills/sounds/SKILL.md
AI agent? This page is also available as markdown.