Skip to content
Sound Server

Sound Server CLI

The sound-server command searches every source from a terminal, runs the MCP server over stdio for desktop agents (with downloads to your disk), and starts the HTTP server. It is the same code that runs https://sound.shep.bot.

npx sound-server search "dark 808 in F minor" --commercial

Commands

sound-server search <query> [--category drums.kick] [--form one-shot] [--bpm 140] [--key "F minor"]
                     [--commercial] [--free] [--providers freesound,wikimediacommons] [--limit N]
sound-server mcp     # MCP server over stdio, with download_sample writing to ./samples
sound-server serve   # HTTP API + website + MCP at /mcp on port 8787

Queries understand music words, so "vocal chop 140 bpm" filters by tempo and "808 in F minor" by key, exactly like the flags. --commercial keeps only sounds whose licence allows a commercial release (verdict yes or yes-with-credit).

search prints the filters it read from your query, then ranked results (score, licence verdict and sample id, then the title with its category, form, BPM, key and length, and the preview URL), followed by one status line per source:

Filters: {"key":{"tonic":"F","mode":"minor"}}

0.91  yes-with-credit freesound:123456
      Dark 808 F (bass.808 · one-shot · F minor · 2.1s)
      https://cdn.freesound.org/previews/123/123456_1234-hq.mp3

Sources:
  freesound          ok       12
  splice             link     0  https://splice.com/sounds/search?q=dark+808

Pass the sample id to the REST API (/v1/samples/{id}/download) or the MCP get_sample tool to fetch files.

Run it with Docker (no install)

docker run --rm ghcr.io/arielshad/sound-server node dist/cli.js search "punchy kick" --commercial

As a local MCP server that writes downloads into your project:

docker run -i --rm --user "$(id -u):$(id -g)" -v "$PWD/samples:/app/samples" \
  ghcr.io/arielshad/sound-server node dist/cli.js mcp

Run it from source

git clone https://github.com/arielshad/sound-server
cd sound-server && npm ci && npm run build:server
node dist/cli.js search "riser" --category fx.riser --commercial

Audio analysis (measured BPM, key, length and loudness) needs ffmpeg and ffprobe on your PATH, or set FFMPEG_PATH and FFPROBE_PATH.

Environment

Variable Purpose
FREESOUND_API_KEY Enables Freesound search and previews (free key).
FREESOUND_OAUTH_TOKEN Local use only: your own Freesound OAuth2 token, to download originals from your account.
OPENVERSE_CLIENT_ID, OPENVERSE_CLIENT_SECRET Optional Openverse app credentials for higher rate limits.
SOUND_SERVER_PROVIDERS Comma list to search only some sources.
SOUND_DOWNLOAD_DIR Where mcp downloads go (default ./samples).
NODE_USE_ENV_PROXY Set to 1 so the CLI honours HTTPS_PROXY.

See Self-hosting for every server setting.

AI agent? This page is also available as markdown.