Skip to main content
Glama

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

cp .env.example .env
make upb       # build and start the stack

Endpoints:

Management:

make logs      # logs
make ps        # container status
make up        # just up
make down      # stop and remove

Variant 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_app

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

MCP 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 around ffmpeg.

  • Storage (storage/): local FS (can be replaced with S3, etc.).

  • Queue (core/services/queue.py): ARQ + Redis; a wrapper in workers/.

Documentation

  • 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 tools
enqueue_downloadC

Create or dedupe a job and enqueue it for processing.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
optionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
job_idYes
statusYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
statusYes
errorNo
titleNo
artistNo
durationNo
artifactsNo

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
providerYes
can_downloadYes
normalized_idYes
titleYes
artistYes
durationYes
artwork_urlYes
reason_if_deniedYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 3 tool updatesv0.1.0
    • First observedenqueue_download
    • First observedget_job_status
    • First observedprobe_url

TDQS

B3.4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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