mcp-music-forge
Enqueues downloads of audio tracks from SoundCloud, respecting ToU by only allowing downloads if the track is marked as downloadable.
Enqueues downloads of audio from Spotify (mentioned as a future source alongside SoundCloud).
Enqueues downloads of audio from YouTube (mentioned as a future source alongside SoundCloud).
Click on "Install 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., "@mcp-music-forgeprobe https://soundcloud.com/artist/track"
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.
MCP Music Forge
English | Русский
A scalable MCP plugin/service for downloading and processing audio: SoundCloud (starting point), then YouTube/Yandex Music/Spotify; transcoding, tagging and cover art embedding, HTTP API, MCP tools, audio workers.
Quickstart
Variant A: Docker Compose (recommended)
cp .env.example .env
make upb # build and start the stackEndpoints:
Admin: http://localhost:8033/admin
MCP HTTP: http://localhost:8033/mcp
Management:
make logs # logs
make ps # container status
make up # just up
make down # stop and removeVariant B: Local (uv)
make install # create .venv, install deps, copy .env
source .venv/bin/activate
make lint # ruff + black + mypy
make test # mypy + pytest
# run API
uvicorn api.main:app --reload
# MCP (stdio)
python -m mcp_music_forge.mcp_appRelated MCP server: media-downloader
API Examples
# health check
curl -s http://localhost:8033/health | jq
# {"status": "ok"}
# enqueue download (SoundCloud URL with allowed download per ToU)
curl -s -X POST 'http://localhost:8033/download?url=https://soundcloud.com/artist/track' | jq
# {"job_id": "abc123", "status": "queued"}
# check job status
curl -s http://localhost:8033/jobs/<job_id> | jqMCP Tools
probe_url: provider detection and downloadability check.enqueue_download: create/duplicate a job, put it in the queue.get_job_status: status, artifacts, file links as MCP resources.Resources:
forge://jobs/<job_id>/{original|final}/<filename>(file bytes).
Project Overview
MCP Server (
mcp_music_forge/): job management, resource provider, and MCP tools.HTTP API (
api/):POST /download,GET /jobs/{id},/health, admin interface.Providers (
providers/): adapters for sources (starting with SoundCloud).Transcoder (
transcoder/): a wrapper aroundffmpeg.Storage (
storage/): local FS (can be replaced with S3, etc.).Queue (
core/services/queue.py): ARQ + Redis; a wrapper inworkers/.
Documentation
Legal Notes
SoundCloud provider respects ToU: we only download if the track is downloadable (
downloadable/download_url).Cookie file support is available, but use it strictly within the service's rules.
Available Tools
3 toolsenqueue_downloadC
Create or dedupe a job and enqueue it for processing.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| options | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| job_id | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the sole source for behavioral disclosure. It mentions creating or deduplicating a job, implying state mutation, but does not detail side effects like whether jobs start processing immediately, or whether deduplication guarantees idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, highly concise, conveys core purpose without fluff. Could benefit from structured bullet points listing parameters or behavior, but current length is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema but the description does not explain what it returns. For a complex tool with nested options, the description should clarify required parameters, default behaviors (like deduplication logic), and output format. Missing significant context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. The description does not mention the 'url' or 'options' parameters, leaving the agent to infer from names alone. The 'options' nested object with 6 properties is completely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool creates or deduplicates a job and enqueues it for processing. It distinguishes itself from sibling tools like get_job_status (read status) and probe_url (inspect URL). However, it lacks specificity on what 'dedupe' entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines provided. The description does not mention when to use this tool over alternatives, such as when to enqueue versus when to probe a URL or check job status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_statusC
Return job status and artifact list.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| error | No | |
| title | No | |
| artist | No | |
| duration | No | |
| artifacts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states it returns data without disclosing whether it is read-only, safe to call repeatedly, or any side effects. This is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence but is overly terse. It conveys the core action but lacks structure such as separate lines for status vs. artifact list, and could include more detail concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (1 required param, no enums) and presence of an output schema, the description is minimally adequate. However, it does not explain the relationship to other tools or the meaning of the status, which would help an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning for the single parameter job_id. It does not explain the format, origin, or constraints of the job ID, leaving the agent without guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns job status and artifact list, clearly indicating the verb and resources. However, it omits what kind of job or how status is represented, slightly reducing specificity. It is distinct from sibling tools enqueue_download and probe_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No mention of prerequisites or context, such as whether a job ID from enqueue_download is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
probe_urlA
Detect provider for URL and check whether track is downloadable per provider rules.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| provider | Yes | |
| can_download | Yes | |
| normalized_id | Yes | |
| title | Yes | |
| artist | Yes | |
| duration | Yes | |
| artwork_url | Yes | |
| reason_if_denied | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It describes core behavior but lacks details on side effects, idempotency, or network requests. Output schema exists but description doesn't mention read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, focused sentence with no redundancy. Front-loaded with key action (detect + check). Efficient for agent parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple inputs and output schema, description covers core use. Could mention typical workflow with sibling tools. But overall adequate for a lightweight validation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It clarifies the url's role but doesn't specify format or constraints. Adds meaning but could be more precise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool detects the provider for a URL and checks downloadability per provider rules. It distinguishes itself from sibling tools (enqueue_download and get_job_status) by focusing on pre-download validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage before downloading, but does not explicitly state when to use it vs alternatives or provide exclusions. Sibling names suggest context, but no direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.1.0- First observed
enqueue_download - First observed
get_job_status - First observed
probe_url
TDQS
Each tool serves a distinct purpose: probing a URL for downloadability, enqueuing a download job, and checking job status. There is no overlap or ambiguity.
All tools use a consistent verb_noun pattern in snake_case: enqueue_download, get_job_status, probe_url. This follows a predictable and clean naming convention.
With 3 tools covering the core workflow (probe, enqueue, status), the count is well-scoped for a music download service. Not too few or too many.
The toolset covers the primary operations for downloading music from URLs, but lacks advanced features like cancelling jobs or listing all jobs. Minor gap but still functional.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
An MCP server that provides tools to discover and retrieve podcast episodes transcripts.
MCP server for Producer/Riffusion AI music generation
MCP server for ScanMalware.com URL scanning, malware detection, and analysis.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for downloading videos and audio from YouTube and hundreds of other sites using yt-dlp.MIT
- AlicenseNot gradedqualityAmaintenanceA production-grade MCP server for downloading audio/videos from the internet, featuring dynamic tool selection, enterprise security, and an integrated graph agent.4MIT
- FlicenseAqualityDmaintenanceMCP server wrapping yt-dlp for downloading videos and audio from URLs, providing tools to check dependencies, retrieve video metadata, and perform downloads.4-
- AlicenseCqualityBmaintenanceAn MCP server that gives an assistant access to the SoundCloud API — search and discovery, your library, playlist management, social actions, and messaging.32MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jojoprison/mcp-music-forge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server