Skip to main content
Glama

Mixcloud MCP Server


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-server

Check the installation:

mixcloud-mcp-server --print-config   # resolved paths and which credentials exist, no secrets
mixcloud-mcp-server --version

Related 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-server

Codex CLI

codex mcp add mixcloud -- uvx mixcloud-mcp-server

OpenCode

opencode mcp add mixcloud -- uvx mixcloud-mcp-server

Or 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-server

Use -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-server

In .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

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 authorization

MIXCLOUD_CLIENT_SECRET

—

OAuth secret, needed once for authorization

MIXCLOUD_TOKEN

—

Access token; written for you by exchange_code

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:

  1. auth_url() — returns a link to open in a browser

  2. Open it, allow access, copy the code

  3. 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 with undo=true.

  • favorite_show - Favorite a show, or remove it from favorites with undo=true.

  • repost_show - Repost a show, or remove the repost with undo=true.

  • listen_later - Add a show to Listen Later, or remove it with undo=true.

Upload and edit (token)

  • upload_show - Upload an audio show with optional artwork and metadata; files must be in MIXCLOUD_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_DIR with 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 tools
auth_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.

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

    B3/5.0

    Scored across 22 tools

    Disambiguation3/5

    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.

    Naming Consistency3/5

    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.

    Tool Count3/5

    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.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers