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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file soundcloud_mcp-0.1.0.tar.gz.
File metadata
- Download URL: soundcloud_mcp-0.1.0.tar.gz
- Upload date:
- Size: 12.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ccdfa4c483eaaf3d42376591028e30308aae1a857b98894f6715987c0894a0f
|
|
| MD5 |
7a61342fe543b422d30c88e8d286d424
|
|
| BLAKE2b-256 |
020263d4bc60744dd25c005d2050448606b5e10e1cd5b5a808f3984d720a890e
|
Provenance
The following attestation bundles were made for soundcloud_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on David-J-Shibley/soundcloud-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
soundcloud_mcp-0.1.0.tar.gz -
Subject digest:
6ccdfa4c483eaaf3d42376591028e30308aae1a857b98894f6715987c0894a0f - Sigstore transparency entry: 1863262824
- Sigstore integration time:
-
Permalink:
David-J-Shibley/soundcloud-mcp@9164d05271e89583eadcb73eadcc53380a69df11 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/David-J-Shibley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9164d05271e89583eadcb73eadcc53380a69df11 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file soundcloud_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: soundcloud_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65c85a57173110512d1837869ec30d032cde02cd54b8e15f2181a3053b6297d7
|
|
| MD5 |
213dc2f64087e77cde7f6a9bd2059399
|
|
| BLAKE2b-256 |
4fd634787f825253cbde4ac93145c18d6d45e9a5dc59e9703f64b8d8bac2d9a3
|
Provenance
The following attestation bundles were made for soundcloud_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on David-J-Shibley/soundcloud-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
soundcloud_mcp-0.1.0-py3-none-any.whl -
Subject digest:
65c85a57173110512d1837869ec30d032cde02cd54b8e15f2181a3053b6297d7 - Sigstore transparency entry: 1863262928
- Sigstore integration time:
-
Permalink:
David-J-Shibley/soundcloud-mcp@9164d05271e89583eadcb73eadcc53380a69df11 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/David-J-Shibley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9164d05271e89583eadcb73eadcc53380a69df11 -
Trigger Event:
workflow_dispatch
-
Statement type: