mixcloud-mcp-server
Provides tools for interacting with the Mixcloud API, enabling search and browsing of shows, users, tags, and genres; managing follows, favourites, reposts, and listen-later items; and uploading or editing shows, including scheduled publishing, chapters, and metadata.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mixcloud-mcp-serverfind me a 90-minute Chicago house set from last year"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
An MCP server for the Mixcloud API. Any MCP client can drive it: search and browse shows, follow/favorite/repost, and upload or edit your own shows — including scheduled publishing.
Installation
uv tool install mixcloud-mcp-serverCheck the installation:
mixcloud-mcp-server --print-config # resolved paths and which credentials exist, no secrets
mixcloud-mcp-server --versionRelated MCP server: SoundCloud MCP Server
Client setup
The server speaks stdio. The commands below use uvx, which runs the server straight from PyPI without a separate install.
Claude Code
claude mcp add mixcloud -- uvx mixcloud-mcp-serverCodex CLI
codex mcp add mixcloud -- uvx mixcloud-mcp-serverOpenCode
opencode mcp add mixcloud -- uvx mixcloud-mcp-serverOr manually in opencode.json:
{
"mcp": {
"servers": {
"mixcloud": {
"type": "local",
"command": ["uvx", "mixcloud-mcp-server"]
}
}
}
}Pi
Pi reads MCP servers through the pi-mcp-adapter package:
pi install npm:pi-mcp-adapter
pi mcp add mixcloud -- uvx mixcloud-mcp-serverUse -l to write the entry into the project configuration instead of the user-level one. Pass
the env file with --env MIXCLOUD_ENV_FILE=....
Hermes Agent
hermes mcp add mixcloud --command uvx --args mixcloud-mcp-serverIn .hermes/config.yaml recommended to set Hermes Agent's env file:
mcp_servers:
mixcloud:
command: uvx
args: ["mixcloud-mcp-server"]
env:
MIXCLOUD_ENV_FILE: "/home/you/.config/mixcloud-mcp-server/.env"Then check with hermes mcp list.
Any other client
Run uvx mixcloud-mcp-server and pass MIXCLOUD_ENV_FILE in its environment.
Configuration
Variable | Default | Purpose |
|
| Token store: loaded at startup, written by |
|
| The only directory uploads may read files from |
| — | OAuth app id, needed once for authorization |
| — | OAuth secret, needed once for authorization |
| — | Access token; written for you by |
Authorization
Go to https://www.mixcloud.com/developers/create/ and create an app. You will get the CLIENT ID and CLIENT SECRET, write them in your .env.
Ask the agent:
auth_url()— returns a link to open in a browserOpen it, allow access, copy the code
exchange_code(code)— stores the token in the env file and never returns it
check_token() verifies the token; clear_token() forgets it locally. Mixcloud exposes no
revoke endpoint.
Tools
Read (no token)
search- Search shows, users, or tags by query; supports result type and pagination.get_object- Fetch a show, user, tag, or city by Mixcloud key or URL; optionally include metadata or authenticated fields.get_show- Fetch a show's key details, including its description, play and favorite counts, and tags.get_user- Fetch a user profile by key or URL.get_tag- Fetch a genre, city, or a genre combined with a city.list_connection- List an object's followers, following, favorites, shows, or listens; supports pagination and date filters.user_shows- List a user's shows with pagination and optional date filters.browse- List site-wide popular, hot, or new shows.genre_shows- List shows for a genre using one of the lists available for that tag.embed_html- Generate the HTML player embed for a show, with optional size and color.oembed- Get oEmbed data for a Mixcloud show URL.
Account actions (token)
me- Fetch the authorized user's profile; optionally include metadata.follow_user- Follow a user, or unfollow them withundo=true.favorite_show- Favorite a show, or remove it from favorites withundo=true.repost_show- Repost a show, or remove the repost withundo=true.listen_later- Add a show to Listen Later, or remove it withundo=true.
Upload and edit (token)
upload_show- Upload an audio show with optional artwork and metadata; files must be inMIXCLOUD_UPLOAD_DIR, and visibility defaults to unlisted.edit_show- Edit an uploaded show’s metadata, artwork, or visibility; tags, sections, and hosts are replaced wholesale when supplied.
OAuth
auth_url- Generate the Mixcloud authorization URL; optionally specify a redirect URI.exchange_code- Exchange an OAuth code for an access token, then save the token locally without revealing it.check_token- Check whether the saved access token is valid and identify the authorized account.clear_token- Forget the access token locally; optionally remove it from the env file (does not revoke access on Mixcloud).
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.
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.
If you don't use some tools, it's recommended to turn them off in your agent.
Available Tools
22 toolsauth_urlA
Step 1 of OAuth: URL the user must open in a browser to allow access. Without redirect_uri, Mixcloud shows the code on screen; with it, the code arrives as ?code=... on that URL. Then call exchange_code(code).
Inputs: redirect_uri.
browseC
Site-wide lists: popular, hot or new shows.
Inputs: limit, offset, list_name. Returns: result
check_tokenA
Check that the current token works (calls /me/).
Inputs: no named parameters.
clear_tokenA
Forget the token in this server (and optionally delete it from the env file). This does not revoke it on Mixcloud: the API docs describe no revoke endpoint, the user revokes access on Mixcloud's side.
Inputs: remove_from_env_file.
edit_showA
Edit one of your shows (key '/me-user/my-upload/'). Omitted fields stay unchanged, EXCEPT tags, sections and hosts, which are replaced wholesale: re-send the existing ones when adding. hosts=[] removes all hosts. visibility: 'unlisted' (private link), 'publish' (make public, also for drafts) or 'unpublish' (move to drafts); only one per request.
Inputs: key (required), name, tags, hosts, +7 more.
embed_htmlC
Embed code (HTML) for a show's player widget. color: 6-digit hex, no '#'.
Inputs: key (required), color, width, height. Returns: result
exchange_codeA
Step 2 of OAuth: exchange the code for an access token. The token is kept in this server (and saved to the env file); it is not shown to you.
Inputs: code (required), redirect_uri.
favorite_showB
Favorite a show ('/spartacus/party-time/'); undo=True removes it from favorites.
Inputs: key (required), undo.
follow_userB
Follow a user ('/spartacus/'); undo=True unfollows.
Inputs: key (required), undo.
genre_showsB
Shows of a tag/genre. Looks the list up in the tag's own connections (metadata=1), so list_name must be one the tag offers; the error lists them.
Inputs: tag (required), limit, offset, list_name. Returns: result
get_objectB
Fetch any object by key or Mixcloud URL: show '/spartacus/party-time/', user '/spartacus/', tag '/genres/funk/', city '/genres/city:athens/'. metadata=True adds the list of available connections. authenticated=True sends the token so objects gain extra fields (e.g. 'following').
Inputs: key (required), metadata, authenticated.
get_showB
Get a show by key, e.g. '/spartacus/party-time/'.
Inputs: key (required).
get_tagC
Get a tag/genre ('funk'), a city ('athens'), or both ('funk' + 'athens').
Inputs: tag, city.
get_userB
Get a user profile by key, e.g. '/spartacus/'.
Inputs: key (required).
list_connectionB
List a connection of an object, e.g. key='/spartacus/' with connection 'followers' | 'following' | 'favorites' | 'cloudcasts' | 'listens'. Use key='/me/' with authenticated=True for the token owner's own lists. since/until: Unix timestamp or 'YYYY-MM-DD HH:MM:SS' (UTC), for dated lists.
Inputs: key (required), connection (required), limit, since, +3 more. Returns: result
listen_laterC
Add a show to Listen Later; undo=True removes it.
Inputs: key (required), undo.
meC
The authorized user's own profile (/me/).
Inputs: metadata.
oembedC
oEmbed data for a Mixcloud show URL (https://www.mixcloud.com/...).
Inputs: url (required).
repost_showB
Repost a show; undo=True removes the repost.
Inputs: key (required), undo.
searchC
Search Mixcloud. type: 'cloudcast' (shows), 'user' or 'tag'.
Inputs: query (required), type, limit, offset. Returns: result
upload_showA
Upload a show. Files must be inside the upload directory (relative paths resolve there). mp3 up to 4 GB, picture up to 10 MB, description up to 1000 chars, up to 5 tags. sections: [{'chapter': 'Intro', 'start_time': 0}, {'artist': 'A', 'song': 'S', 'start_time': 10}]. unlisted defaults to True (private link only) for safety; set unlisted=False to publish publicly. publish_date (UTC, 2030-11-21T14:05:00Z), disable_comments, hide_stats and hosts (max 2 usernames) are Pro-only.
Inputs: name (required), audio_path (required), tags, hosts, +7 more.
user_showsC
List a user's shows. key: '/spartacus/'.
Inputs: key (required), limit, since, until, +1 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
TDQS
Scored across 22 tools
There is meaningful overlap between generic tools and specific ones: get_object vs get_show/get_user/get_tag, list_connection vs user_shows/genre_shows/browse, and me vs get_user/check_token. The detailed descriptions help clarify intended use, but an agent could still reasonably hesitate between several read/list tools.
Most names use snake_case, but the conventions are mixed: verb_noun (get_show, list_connection, follow_user), noun_verb or noun_phrase (user_shows, genre_shows, embed_html), and bare nouns/actions (search, browse, me, oembed, auth_url). It remains readable, but the pattern is not predictable.
With 22 tools, the server is on the heavy side for the Mixcloud API surface. Several tools are generic duplicates of more specific ones, so the count feels slightly inflated rather than perfectly scoped.
The surface covers search, reads, social actions, upload/edit lifecycle, and OAuth reasonably well. Minor gaps exist, such as no explicit delete_show and no comment-related tools, but core workflows are supported.
Maintenance
Related MCP Connectors
Skills, agents and memory in the cloud, plus a gateway to your other MCP servers.
Staff live events: gigs, crew, setlists, call lists, ingest. Hosted MCP with OAuth.
Create, inspect, and manage Wubble music, speech, voice, and sound-effect requests through MCP.
Managed MCP gateway with OAuth, per-agent permissions, shared accounts and activity logs.
Related MCP Servers
- AlicenseAqualityDmaintenanceBridges the Mixcloud API to AI assistants via MCP, enabling search for mixes, artist lookup, uploads, and user profile access.71GPL 3.0
- AlicenseCqualityBmaintenanceAn MCP server that gives an assistant access to the SoundCloud API — search and discovery, your library, playlist management, social actions, and messaging.531MIT
- FlicenseNot gradedqualityCmaintenanceEnables searching Spotify and managing playlists from any MCP client using natural language.-

LabelGrid MCP Serverofficial
AlicenseAqualityBmaintenanceThe official MCP server for LabelGrid's music distribution platform, enabling natural language management of music catalogs, releases, files, analytics, royalties, webhooks, and distribution via a thin wrapper over the LabelGrid public API.844MIT