Spotify媒体控制服务器

一个提供统一接口控制Spotify播放的媒体控制协议服务器,支持多设备跨应用控制、AI语音交互和RESTful API集成。

  • by Jopgood
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 jopgood/spotify-mcp-server

使用说明

Spotify MCP服务器

一种媒体控制协议(MCP)服务器,提供统一的接口,用于控制不同设备和应用程序之间的Spotify播放。

特性

  • 控制Spotify播放(播放、暂停、跳过、上一页)
  • 调节音量
  • 搜索并播放特定曲目、专辑或播放列表
  • 获取当前播放信息
  • RESTful API,可轻松与其他应用程序集成
  • AI助手集成,用自然语言控制Spotify
  • 语音控制界面,用于向Spotify发出指令

先决条件

  • Node.js(v16或更高版本)
  • npm(v8或更高版本)
  • Spotify高级帐户
  • Spotify开发者帐户和注册应用程序

设置

  1. 克隆此存储库:

    git clone https://github.com/Jopgood/spotify-mcp-server.git
    cd spotify-mcp-server
    
  2. 安装依赖项:

    npm install
    
  3. 创建一个 .env 根目录中的文件,内容如下:

    CLIENT_ID=your_spotify_client_id
    CLIENT_SECRET=your_spotify_client_secret
    REDIRECT_URI=http://localhost:8888/callback
    PORT=8888
    SESSION_SECRET=your_random_session_secret
    AI_WEBHOOK_API_KEY=your_secure_api_key_for_ai_assistant
    BRIDGE_PORT=3001
    VOICE_PORT=3002
    
  4. 在以下网址注册Spotify应用程序 Spotify开发者仪表板 并记下您的客户端ID和客户端密码。

用法

  1. 启动MCP服务器:

    npm start
    
  2. 打开浏览器并导航到 http://localhost:8888 通过Spotify进行身份验证。

  3. 一旦通过验证,您就可以使用API端点来控制Spotify。

API终点

  • GET /api/status -获取当前播放状态
  • POST /api/play -开始或恢复播放
  • POST /api/pause -暂停播放
  • POST /api/next -跳到下一首曲目
  • POST /api/previous -转到上一曲目
  • POST /api/volume -设置体积(主体: { "volume": 50 })
  • POST /api/seek -寻求定位(身体: { "position_ms": 30000 })
  • POST /api/playTrack -播放特定曲目(身体: { "uri": "spotify:track:xxxx" })

客户示例

使用curl

# Play
curl -X POST http://localhost:8888/api/play

# Pause
curl -X POST http://localhost:8888/api/pause

# Next track
curl -X POST http://localhost:8888/api/next

使用JavaScript(fetch)

// Play a specific track
fetch('http://localhost:8888/api/playTrack', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    uri: 'spotify:track:6rqhFgbbKwnb9MLmUQDhG6'
  })
})
.then(response => response.json())
.then(data => console.log(data));

命令行接口

包括一个命令行界面,用于从终端控制Spotify:

# Run the CLI
node client/spotify-cli.js

# Available commands
status          # Show current playback status
play            # Start/resume playback
pause           # Pause playback
next            # Skip to next track
prev            # Go to previous track
volume 50       # Set volume to 50%
search bohemian # Search for tracks with "bohemian" in the title
play-track spotify:track:xxxx # Play a specific track by URI

AI助手集成

此MCP服务器包含一个AI webhook,允许像Claude这样的AI助手通过自然语言命令控制您的Spotify。

设置集成

  1. 在您的 .env 文件:

    AI_WEBHOOK_API_KEY=your_secure_random_key
    
  2. 启动Claude Spotify桥接服务:

    node bridge/claude-spotify-bridge.js
    
  3. 默认情况下,网桥将在端口3001上运行。您可以通过添加来对此进行自定义 BRIDGE_PORT=xxxx 到你的 .env 文件。

运行Claude Spotify命令

使用提供的客户端脚本执行Claude的Spotify命令:

node client/claude-spotify-client.js "play bohemian rhapsody"

支持的自然语言命令

AI webhook支持以下命令:

  • “演奏女王的波西米亚狂想曲”
  • “播放播放列表寒意”
  • “暂停音乐”
  • “恢复播放”
  • “跳到下一首曲目”
  • “回到上一首歌”
  • “将音量设置为50%”
  • “调高音量”
  • “调低音量”
  • “现在在玩什么?”

语音控制

对于免提操作,您可以使用语音控制界面向Spotify发出命令。

设置语音控制

  1. 启动语音控制服务器:

    node speech/voice-server.js
    
  2. 打开浏览器并导航到 http://localhost:3002 以访问语音控制界面。

  3. 确保网桥服务正在运行:

    node bridge/claude-spotify-bridge.js
    
  4. 点击麦克风按钮,说出你的命令,以“克劳德”开头(例如,“克劳德,播放一些爵士音乐”)。

浏览器兼容性

语音控制界面使用Web Speech API,这不是所有浏览器都支持的。为了获得最佳效果,请使用:

  • 谷歌Chrome浏览器(推荐)
  • 微软边缘
  • 游猎

Firefox对Web Speech API的支持有限,可能无法正常工作。

自定义语音触发器

您可以通过以下方式将触发短语从“Claude”更改为您喜欢的任何短语:

  1. 转到语音控制界面中的设置部分
  2. 输入您偏好的触发短语
  3. 点击“保存设置”

您的偏好设置将保存在浏览器中,以备将来会话使用。

一次运行所有内容

要运行整个系统(MCP服务器、网桥和语音接口),您可以:

  1. 在单独的终端窗口中启动每个组件:

    # Terminal 1: Start MCP server
    npm start
    
    # Terminal 2: Start Claude bridge
    node bridge/claude-spotify-bridge.js
    
    # Terminal 3: Start voice interface
    node speech/voice-server.js
    
  2. 或者创建一个简单的启动脚本,一次运行所有内容:

    // Create a file called start-all.js in the root directory with:
    const { spawn } = require('child_process');
    
    const mcp = spawn('npm', ['start'], { stdio: 'inherit' });
    setTimeout(() => {
      const bridge = spawn('node', ['bridge/claude-spotify-bridge.js'], { stdio: 'inherit' });
      const voice = spawn('node', ['speech/voice-server.js'], { stdio: 'inherit' });
    }, 2000);
    
    // Usage: node start-all.js
    

故障排除

  • “端口已在使用中”错误:

    • 更改您的端口号 .env 文件: PORT, BRIDGE_PORT, VOICE_PORT
  • 身份验证问题:

    • 确保您已访问了以下网址的web界面 http://localhost:8888 并通过Spotify认证
    • 检查您的客户ID和密码是否正确 .env
  • 语音控制不工作:

    • 确保您使用的是兼容的浏览器(建议使用Chrome浏览器)
    • 检查您的麦克风是否正常工作并具有必要的权限
    • 验证语音界面设置中的网桥URL是否与您的网桥服务器地址匹配
  • “无活动设备”错误:

    • 在任何设备上开始播放Spotify中的内容,然后重试
    • Spotify需要活动设备来控制播放

发展

要在开发模式下运行并自动重新加载,请执行以下操作:

npm run dev

许可证

麻省理工学院