项目简介
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进行安装,这会自动处理所有依赖项和配置。
- 克隆仓库:
git clone https://github.com/jojoprison/mcp-music-forge.git cd mcp-music-forge - 配置环境:
复制 '.env.example' 文件为 '.env'。通常默认配置即可,如需自定义,可以修改 '.env' 文件。
cp .env.example .env - 构建并启动服务:
运行以下命令构建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可以发现并调用该服务器提供的工具:
-
探测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", ...}'
-
创建下载任务 ('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"}'
-
获取任务状态和文件 ('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与计算