项目简介

MCP音乐锻造机是一个基于Model Context Protocol (MCP) 构建的后端服务,旨在为大型语言模型(LLM)客户端提供音频下载和处理功能。它能够从多种在线平台(目前支持SoundCloud和YouTube,未来计划支持Yandex Music和Spotify)下载音频,进行格式转码、元数据标记和封面艺术嵌入。该服务通过MCP工具和资源接口,以标准化的方式向LLM客户端提供功能和数据访问。此外,它还提供了一个独立的HTTP API 和管理界面,方便用户通过浏览器或curl命令进行操作。

主要功能点

  • 多平台音频下载: 支持从SoundCloud和YouTube等主流平台下载音频内容。
  • 音频转码: 将下载的音频文件转码为MP3、FLAC、AAC、Opus等指定格式和质量。
  • 元数据和封面艺术处理: 自动为下载的音频文件添加标题、艺术家等元数据,并嵌入封面艺术。
  • MCP工具集成: 通过'probe_url'(探测URL信息和下载能力)、'enqueue_download'(创建下载任务)、'get_job_status'(查询任务状态及获取文件链接)等MCP工具,允许LLM客户端直接调用这些功能。
  • MCP资源提供: 以标准化的URI ('forge://jobs/<job_id>/{original|final}/<filename>') 暴露原始和最终处理的音频文件,供LLM客户端访问下载。
  • HTTP API和管理界面: 除了MCP接口,还提供了易于使用的HTTP RESTful API和基于网页的管理面板,便于非LLM客户端集成和人工管理。
  • 可扩展性: 采用插件式架构,方便未来添加更多音频源提供商和处理功能。

安装步骤

建议使用Docker Compose进行安装,这会自动处理所有依赖项和配置。

  1. 克隆仓库:
    git clone https://github.com/jojoprison/mcp-music-forge.git
    cd mcp-music-forge
  2. 配置环境: 复制 '.env.example' 文件为 '.env'。通常默认配置即可,如需自定义,可以修改 '.env' 文件。
    cp .env.example .env
  3. 构建并启动服务: 运行以下命令构建Docker镜像并启动所有必要的服务(包括Web API、MCP服务器和工作队列)。
    make upb
    服务启动后,你可以通过以下地址访问:
    • Web API: 'http://localhost:8033'
    • 管理界面: 'http://localhost:8033/admin'
    • MCP HTTP/SSE接口: 'http://localhost:8033/mcp'

服务器配置(供MCP客户端使用)

要将MCP音乐锻造机连接到您的MCP客户端(例如Claude Desktop),您需要提供以下启动命令和参数。MCP客户端将使用这些信息来启动和通信MCP服务器进程。

{
  "server_name": "MCP Music Forge",
  "command": "python",
  "args": [
    "-m",
    "mcp_music_forge.mcp_app"
  ],
  "comment": "使用Python模块方式启动MCP音乐锻造机,通过stdio协议进行通信。",
  "server_description": "一个从在线平台下载、转码和管理音频文件的MCP服务,支持SoundCloud和YouTube,并提供丰富的功能给LLM。",
  "icon": "fas fa-music",
  "transport": "stdio"
}

参数注释:

  • 'server_name': 在MCP客户端中显示的服务器名称。
  • 'command': 用于启动MCP服务器的执行命令,这里是'python'。
  • 'args': 传递给命令的参数列表。'-m mcp_music_forge.mcp_app' 指示Python解释器运行 'mcp_music_forge.mcp_app' 模块。
  • 'comment': 关于此配置的简短说明。
  • 'server_description': MCP服务器的详细描述。
  • 'icon': 在MCP客户端中显示的图标(推荐使用Font Awesome图标名称)。
  • 'transport': 指示MCP客户端使用的通信协议。'stdio'表示标准输入输出流。

基本使用方法 (LLM客户端通过MCP调用)

一旦MCP客户端连接成功,LLM可以发现并调用该服务器提供的工具:

  1. 探测URL信息 ('probe_url'): 用于检查给定URL是否可下载及其元数据信息。

    LLM_CLIENT.call_tool("probe_url", url="https://soundcloud.com/artist/track-name")

    返回示例: '{"provider": "soundcloud", "can_download": true, "title": "Track Name", ...}'

  2. 创建下载任务 ('enqueue_download'): 提交一个音频下载任务。

    LLM_CLIENT.call_tool("enqueue_download", url="https://soundcloud.com/artist/track-name", options={"format": "mp3", "quality": "v0"})

    返回示例: '{"job_id": "abc123def456", "status": "queued"}'

  3. 获取任务状态和文件 ('get_job_status'): 查询指定下载任务的当前状态,并在任务成功后获取下载文件的资源URI。

    LLM_CLIENT.call_tool("get_job_status", job_id="abc123def456")

    返回示例 (当任务成功时):

    {
      "id": "abc123def456",
      "status": "succeeded",
      "title": "Track Name",
      "artifacts": [
        {
          "kind": "final",
          "filename": "Track Name.mp3",
          "mime": "audio/mpeg",
          "size": 5000000,
          "sha256": "...",
          "resource_uri": "forge://jobs/abc123def456/final/Track Name.mp3"
        }
      ]
    }

    LLM客户端可以通过 'resource_uri' 从MCP服务器读取音频文件内容。

信息

分类

AI与计算