mixcloud-mcp-server
An MCP server for the Mixcloud API. Any MCP client can drive it: search and browse shows, follow/favourite/repost, and upload or edit your own shows — including scheduled publishing.
Talk to it in plain language: "find me a 90-minute Chicago house set from last year" or
"upload set.mp3 as an unlisted show, chapters at 0:00 and 10:00".
Install
uv tool install git+https://github.com/djornii/mixcloud-mcp-server
# or, from a clone:
uv tool install .
Requires Python 3.10+. The only runtime dependencies are mcp, httpx and python-dotenv.
Check the installation:
mixcloud-mcp-server --print-config # resolved paths and which credentials exist, no secrets
mixcloud-mcp-server --version
Client setup
The server speaks stdio, so every client config is just "run this command".
Claude Desktop — claude_desktop_config.json:
{ "mcpServers": { "mixcloud": { "command": "mixcloud-mcp-server", "env": { "MIXCLOUD_ENV_FILE": "/home/you/.config/mixcloud-mcp-server/.env" } } } }
Claude Code
claude mcp add mixcloud -- mixcloud-mcp-server
OpenCode — opencode.json (V2 puts local servers under mcp.servers):
{ "$schema": "https://opencode.ai/config.json", "mcp": { "servers": { "mixcloud": { "type": "local", "command": ["mixcloud-mcp-server"] } } } }
Or from the CLI, which writes the same entry:
opencode mcp add mixcloud -- mixcloud-mcp-server
Any other client: run mixcloud-mcp-server and pass MIXCLOUD_ENV_FILE in its environment.
Running it by hand is normal and silent — it is waiting for JSON-RPC on stdin.
Configuration
Copy .env.example to the path mixcloud-mcp-server --print-config reports and fill it in.
| Variable | Default | Purpose |
|---|---|---|
MIXCLOUD_ENV_FILE |
$XDG_CONFIG_HOME/mixcloud-mcp-server/.env (~~/.config/…) |
Token store: loaded at startup, written by exchange_code |
MIXCLOUD_UPLOAD_DIR |
$XDG_DATA_HOME/mixcloud-mcp-server/uploads (~~/.local/share/…) |
The only directory uploads may read files from |
MIXCLOUD_CLIENT_ID |
— | OAuth app id, needed once for authorisation |
MIXCLOUD_CLIENT_SECRET |
— | OAuth secret, needed once for authorisation |
MIXCLOUD_TOKEN |
— | Access token; written for you by exchange_code |
Create the OAuth app at https://www.mixcloud.com/settings/applications/. The redirect URI only matters if you use one; the default flow shows the code on screen.
Authorising
Ask the agent, or call the tools directly:
auth_url()— returns a link to open in a browser- open it, allow access, copy the code
exchange_code(code)— stores the token in the env file (mode0600) and never returns it
check_token() verifies the token; clear_token() forgets it locally. Mixcloud exposes no
revoke endpoint, so revoking access has to be done on mixcloud.com itself.
Tools
Read (no token): search, get_object, get_show, get_user, get_tag, list_connection,
user_shows, browse, genre_shows, embed_html, oembed
Account (token): me, follow_user, favorite_show, repost_show, listen_later,
upload_show, edit_show
OAuth: auth_url, exchange_code, check_token, clear_token
Objects are addressed by Mixcloud key: shows /username/show-name/, users /username/,
tags /genres/funk/, cities /genres/city:athens/. Full URLs are accepted everywhere a key is.
Notes that surprise people:
upload_showuploads unlisted (private link) unless you passunlisted=False.edit_showreplacestags,sectionsandhostswholesale — re-send the existing ones when adding a single chapter.publish_date,disable_comments,hide_statsandhostsrequire a Pro account.- Uploads accept
.mp3up to 4 GB and pictures up to 10 MB, and the files must live insideMIXCLOUD_UPLOAD_DIR(relative paths resolve there).
Safety
- Uploads are sandboxed to
MIXCLOUD_UPLOAD_DIRwith an extension and size allowlist, so a prompt-injected path cannot exfiltrate arbitrary files from the machine. - The access token is sent as a query parameter, so it is never logged and never included in
error messages. Tools return a masked preview (
...abcd) only. - The client secret is read from the environment and never returned to the model.
- Redirects are not followed for authenticated calls, so a token cannot be replayed to another host.
Works with both mcp 1.x and 2.x.
Development
See AGENTS.md for the commands and the invariants this codebase holds to.
uv sync
uv run pytest
uv run ruff check .
License
MIT
Metadata
Release files for mixcloud-mcp-server 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 | |
|---|---|---|---|
| mixcloud_mcp_server-0.1.0.tar.gz | 95.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mixcloud_mcp_server-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 114.3 kB
Release files / mixcloud_mcp_server-0.1.0.tar.gz
| Download URL | mixcloud_mcp_server-0.1.0.tar.gz |
|---|---|
| Size | 95.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
380bdd77fffd42966fe5ff5e5281a7c539eb332b3b3f7e352ec61206a857b2df
|
|
BLAKE2b-256 checksum How to use checksums |
4e437d70fe273b222748f608f42dd58c929644c4a7065ff47f10ad9e7ac0d68a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / mixcloud_mcp_server-0.1.0-py3-none-any.whl
| Download URL | mixcloud_mcp_server-0.1.0-py3-none-any.whl |
|---|---|
| Size | 19.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
40baede3034b1997c97c5b8831e891fcd609a1b3a8e25e964723b8488d54dac5
|
|
BLAKE2b-256 checksum How to use checksums |
ecd5c9ac6488b3d551bf9245b38624da767d0c21079e385415a5312378bfd164
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|