🎵 音乐问答
用于Apple Music的模型上下文协议(MCP)服务器,具有远程播放控制、实时播放可视化工具和交互式音乐问答游戏。搜索目录、创建播放列表、管理库、通过AirPlay在Mac上控制Music.app,以及举办智力竞赛之夜——所有这些都可以在iPhone或web UI上通过Claude完成。
居住地址: https://music.quiz-mash.com
Demo: Playing Jeff Beck from iPhone via Claude
Demo: AirPlay to Apple TV from iPhone
Demo: The Police playing on Apple TV via AirPlay
特性
34 MCP工具
目录工具(8--无需身份验证)
| 工具 | 说明 |
|---|---|
search_catalog | 在Apple Music目录中搜索歌曲、艺术家、专辑 |
get_artist_songs | 获取艺术家的所有歌曲(完整唱片目录) |
get_artist_albums | 获取艺术家的所有相册 |
get_charts | 热门歌曲/专辑/播放列表,可按流派选择 |
get_genres | 列出所有可用的流派(用于图表过滤) |
get_catalog_playlist | 获取包含曲目的精选/编辑播放列表 |
get_song_details | 按ID列出歌曲的完整详细信息(艺术品、预览URL、发布日期) |
get_album_details | 包含所有曲目和编辑注释的完整专辑详细信息 |
库和个人工具(12-需要Apple Music身份验证)
| 工具 | 说明 |
|---|---|
create_playlist | 使用库中的曲目创建播放列表 |
add_tracks_to_playlist | 将曲目添加到现有播放列表 |
list_playlists | 列出您的Apple Music播放列表 |
get_playlist_tracks | 获取库播放列表中的所有曲目 |
add_to_library | 将歌曲/专辑/播放列表添加到曲库 |
search_library | 搜索您的个人音乐库 |
recently_played | 您最近的收听历史记录(专辑/播放列表) |
recently_played_tracks | 最近播放的曲目,包含完整细节(最多50首) |
heavy_rotation | 您最常播放的内容 |
recommendations | 个性化音乐推荐 |
replay | Apple Music Replay-您今年的热门歌曲/艺术家/专辑 |
auth_status | 检查身份验证状态和家庭控制器连接 |
测验工具(2)
| 工具 | 说明 |
|---|---|
music_quiz | 生成一个包含问题、歌曲ID、答案和提示的音乐测验 |
create_visual_quiz | 创建一个带有可共享URL的视觉测验,用于电视/显示器显示 |
测验类型: 猜艺术家,猜歌曲,猜专辑,猜年份,介绍测验,混合
来源: 您最近玩过的、重旋转、库、图表或特定艺术家的目录
过滤器: 按十年(例如“1980”代表80年代)、流派或艺术家
播放和AirPlay工具(需要12-家庭控制器)
| 工具 | 说明 |
|---|---|
now_playing | Mac上当前正在播放什么 |
play | 开始播放,可选择按名称播放特定曲目 |
pause | 暂停播放 |
next_track | 跳到下一首曲目 |
previous_track | 返回上一轨道 |
set_volume | 设置或获取Music.app音量(0–100) |
search_and_play | 搜索库并玩第一场比赛 |
play_playlist_on_mac | 按名称播放播放列表 |
shuffle | 启用/禁用随机播放 |
airplay_devices | 列出AirPlay设备(苹果电视、HomePod等) |
set_airplay | 启用/禁用AirPlay设备 |
set_airplay_volume | 为特定AirPlay设备设置音量 |
Web前端
| 第页 | 描述 |
|---|---|
/ | 正在播放——带有现场专辑封面、曲目信息、进度条的脉动球体 |
/login | GitHub OAuth登录(仅限于授权帐户) |
/quiz | 测验大厅——选择类型、来源、计时器、添加玩家 |
/quiz/[id] | 智力竞赛——提问、倒计时、评分、揭晓、获胜者 |
前端使用Next.js 16(App Router)、Tailwind CSS v4构建,并通过WebSocket连接到后端,用于实时播放更新。
传输与认证
| 传输 | 端点 | 身份验证 | 客户端 |
|---|---|---|---|
| 流式HTTP | /mcp | OAuth 2.1(PKCE+DCR) | claude.ai(网络+iOS) |
| SSE(传统) | /sse | API密钥 | Claude桌面,Claude代码 |
OAuth 2.1使用JWT令牌(90天到期),这些令牌在服务器重启后仍然有效。动态客户端注册允许claude.ai自行注册。
建筑
关键设计: 家庭控制器连接 *出站* 通过WebSocket(“呼叫总部”模式)连接到MCP服务器。无隧道、无端口转发、无DNS——可在任何防火墙/NAT后工作。与 代码启动器.
自定义服务器: Express(MCP、OAuth、API)和Next.js(前端)通过 server.jsWebSocket升级被路由到适当的处理程序(/home-ws 对于Mac代理, /ws/now-playing 对于浏览器)。
令牌持久性: Apple Music用户令牌保存在Fly.io的持久卷中 /data/music-user-token.json,幸存的部署。
快速开始
1.苹果开发者设置
你需要一个 Apple开发者帐户 (99美元/年)。
- 首选 证书、标识符和配置文件
- 在...之下 标识符,单击 + → 选择 媒体ID
- 注册新的媒体ID(例如。,
media.music.dk.broberg) - 启用 音乐套件, ShazamKit,以及 苹果音乐订阅源
- 在...之下 钥匙,单击 + → 创建新密钥
- 启用 音乐套件 并选择您的媒体ID
- 下载
.p8私钥文件 - 注意你的 密钥ID 和 团队编号
2.地方发展
git clone https://github.com/cbroberg/music-quiz.git
cd music-quiz
npm install
cp env.example .env编辑 .env 凭你的证件。对于私钥,转换 .p8 将文件保存为单行:
awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' AuthKey_XXXXXX.p8构建并运行:
npm run build
npm start访问 http://localhost:3000/auth 授权您的Apple Music帐户。
3.部署到Fly.io
fly apps create music-quiz
fly volumes create data --size 1 --region arn
fly certs add your-domain.example.com
# Set secrets
fly secrets set APPLE_TEAM_ID=xxx APPLE_KEY_ID=xxx
fly secrets set APPLE_PRIVATE_KEY="$(awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' AuthKey_XXXXXX.p8)"
fly secrets set JWT_SECRET=$(openssl rand -hex 32)
fly secrets set HOME_API_KEY=$(openssl rand -hex 32)
fly secrets set SESSION_SECRET=$(openssl rand -hex 32)
fly secrets set GITHUB_CLIENT_ID=xxx GITHUB_CLIENT_SECRET=xxx
fly deploy4.连接claude.ai
- 首选 设置 → 集成 → 添加集成
- 输入URL:
https://your-domain.example.com/mcp - Claude.ai自动处理OAuth 2.1流
- 可在网络、iPhone和Android上使用
5.连接到克劳德桌面/克劳德代码
添加到MCP配置中:
{
"mcpServers": {
"apple-music": {
"url": "https://your-domain.example.com/sse"
}
}
}6.授权Apple Music
访问 https://your-domain.example.com/auth?key= 并使用您的Apple Music帐户登录。令牌被持久化到磁盘,并在部署后继续存在。
7.主控制器(可选——用于播放)
家庭控制器在Mac上运行,让Claude远程控制Music.app。它连接 *出站* 通过WebSocket——无隧道,无端口转发,适用于任何网络(家庭、办公室、热点)。
快速测试
cd music-quiz
HOME_API_KEY= ./home/start.sh使用launchd自动启动(推荐)
一次性构建代理:
cd apple-music-mcp && npx tsc -p home/tsconfig.json创建 ~/Library/LaunchAgents/dk.broberg.apple-music-home.plist:
Label
dk.broberg.apple-music-home
ProgramArguments
/path/to/node
/path/to/music-quiz/home/dist/server.js
EnvironmentVariables
HOME_API_KEY
your-home-api-key
MCP_WS_URL
wss://your-domain.example.com/home-ws
RunAtLoad
KeepAlive
StandardOutPath
/tmp/apple-music-home.log
StandardErrorPath
/tmp/apple-music-home.log
提示: 使用查找节点路径 readlink -f "$(which node)" --特别是如果你使用fnm/nvm。加载它:
launchctl load ~/Library/LaunchAgents/dk.broberg.apple-music-home.plist代理现在在登录时启动,如果崩溃,会自动重新启动。检查状态 launchctl list | grep broberg 和日志 tail -f /tmp/apple-music-home.log.
8.音乐测验
从web UI
- 登录地址:
/login使用GitHub - 首选
/quiz创建测验 - 选择测验类型、音乐来源、问题数量、计时器持续时间
- 添加玩家名称并单击 开始测验
- 在电视/显示器上打开测验URL以进行视觉显示
- 每个问题在Mac上自动播放音乐
- 当玩家猜对时,点击他们的名字以获得积分
来自克劳德(MCP)
“创建一个视觉音乐测验,其中包含我最近播放的5个问题。添加玩家Christian和Mikkel。30秒计时器。”
Claude返回一个在电视上打开的URL。通过Claude从手机或web UI控制测验。
用法示例
来自克劳德(iPhone或台式机):
“我的Mac上现在正在播放什么?”
“扮演一些杰夫·贝克”
“将音量设置为40”
“显示我的AirPlay设备并在Stue Apple TV上播放”
“根据Apple Music Replay,我最喜欢的歌曲是什么?”
“用我最近播放的曲目创建一个名为‘Sunday Jazz’的播放列表”
“目前丹麦排名前十的歌曲是什么?”
“搜索Mew并向我展示他们的完整唱片集”
“下一首曲目”/“暂停”/“随机播放”
“开始音乐测验!5个问题,介绍测验,基于我最近玩过的游戏”
“80年代摇滚小测验——10个问题,在Stue Apple TV上播放”
“从警察的完整目录中做一个关于警察的测验”
许可证
麻省理工学院 - Christian Broberg / WebHouse ApS
