SoundCloud MCP
MCP server for uploading and managing tracks on SoundCloud using the official API.
Use it from Cursor or Claude Desktop to upload MP3s, update metadata, and manage your catalog — pairs naturally with suno-mcp for generate → upload workflows.
Features
- Official SoundCloud API — OAuth 2.1 + PKCE, no browser scraping for uploads
- Upload tracks — MP3, WAV, FLAC with title, description, tags, artwork
- Manage library — list, get, update, delete tracks
- Token refresh — automatic OAuth token renewal
Requirements
- Python 3.10+
- SoundCloud Artist Pro account
- A registered SoundCloud API app (soundcloud.com/you/apps)
Register your SoundCloud app
| Field | What to enter |
|---|---|
| App name | SoundCloud MCP (or anything descriptive) |
| Description | Personal MCP server for uploading AI-generated music to my SoundCloud account |
| Website | https://github.com/David-J-Shibley/soundcloud-mcp (optional) |
| Redirect URI | http://127.0.0.1:8765/callback (must match exactly) |
The Website field is optional — it is not used for OAuth. The Redirect URI must match character-for-character.
Quick Start
Install from PyPI
pip install soundcloud-mcp
cp .env.example .env
# Edit .env with client_id and client_secret from soundcloud.com/you/apps
soundcloud-mcp-auth
Install from source
git clone https://github.com/David-J-Shibley/soundcloud-mcp.git
cd soundcloud-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
cp .env.example .env
Authenticate (one time)
soundcloud-mcp-auth
Tokens are saved to ~/.soundcloud-mcp/tokens.json.
If the browser page is blank/white, your redirect URI doesn't match — see Troubleshooting.
Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"soundcloud": {
"command": "/absolute/path/to/soundcloud-mcp/.venv/bin/python",
"args": ["-m", "soundcloud_mcp"],
"cwd": "/absolute/path/to/soundcloud-mcp",
"env": {
"DYLD_LIBRARY_PATH": "/opt/homebrew/opt/expat/lib"
}
}
}
}
Put credentials in .env in the project directory (recommended) — cwd lets the server load them automatically.
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"soundcloud": {
"command": "/absolute/path/to/soundcloud-mcp/.venv/bin/python",
"args": ["-m", "soundcloud_mcp"],
"cwd": "/absolute/path/to/soundcloud-mcp"
}
}
}
Tools
| Tool | Description |
|---|---|
soundcloud_get_me |
Your SoundCloud profile |
soundcloud_list_my_tracks |
List your uploaded tracks |
soundcloud_get_track |
Track details by ID |
soundcloud_upload_track |
Upload MP3/WAV/FLAC with metadata |
soundcloud_update_track |
Edit title, description, tags, artwork |
soundcloud_delete_track |
Remove a track |
Example workflow (Suno → SoundCloud)
- Generate a song with suno-mcp
- Download the MP3 with
suno_download_song - Upload with soundcloud-mcp:
Upload ~/Downloads/suno/my-song.mp3 to SoundCloud as "My New Track" with tags "electronic ai-generated"
Configuration
| Variable | Default | Description |
|---|---|---|
SOUNDCLOUD_CLIENT_ID |
— | From soundcloud.com/you/apps |
SOUNDCLOUD_CLIENT_SECRET |
— | From soundcloud.com/you/apps |
SOUNDCLOUD_REDIRECT_URI |
http://127.0.0.1:8765/callback |
Must match app settings |
SOUNDCLOUD_TOKEN_FILE |
~/.soundcloud-mcp/tokens.json |
OAuth token storage |
Troubleshooting
Blank/white OAuth page — Redirect URI mismatch. In soundcloud.com/you/apps, set exactly:
http://127.0.0.1:8765/callback
Use 127.0.0.1 not localhost, http:// not https://, no trailing slash.
Not authenticated — Run soundcloud-mcp-auth again.
Manual login — soundcloud-mcp-auth --no-browser prints the URL to paste into your browser.
Disclaimer
Unofficial project, not affiliated with SoundCloud. Use in accordance with SoundCloud's API Terms of Use.
Contributing
Issues and pull requests welcome on GitHub.
See PUBLISHING.md for PyPI release instructions.
License
MIT — see LICENSE.
Release files for soundcloud-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| soundcloud_mcp-0.1.0.tar.gz | 12.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| soundcloud_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.1 kB
Release files / soundcloud_mcp-0.1.0.tar.gz
| Download URL | soundcloud_mcp-0.1.0.tar.gz |
|---|---|
| Size | 12.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6ccdfa4c483eaaf3d42376591028e30308aae1a857b98894f6715987c0894a0f
|
|
BLAKE2b-256 checksum How to use checksums |
020263d4bc60744dd25c005d2050448606b5e10e1cd5b5a808f3984d720a890e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 18, 2026.
Transparency logRelease files / soundcloud_mcp-0.1.0-py3-none-any.whl
| Download URL | soundcloud_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
65c85a57173110512d1837869ec30d032cde02cd54b8e15f2181a3053b6297d7
|
|
BLAKE2b-256 checksum How to use checksums |
4fd634787f825253cbde4ac93145c18d6d45e9a5dc59e9703f64b8d8bac2d9a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 18, 2026.
Transparency log