一个轻量级的 模型上下文协议(MCP) 服务器,使像 Cursor 和 Claude 这样的AI助手能够控制 Spotify 播放并管理播放列表。
<details> <summary>目录</summary> </details>searchSpotify
query (字符串):搜索词type (字符串):要搜索的项目类型(曲目、专辑、艺术家、播放列表)limit (数字,可选):返回结果的最大数量(10-50)searchSpotify("bohemian rhapsody", "track", 20)getNowPlaying
getNowPlaying()getMyPlaylists
limit (数字,可选):返回播放列表的最大数量(默认:20)offset (数字,可选):返回的第一个播放列表的索引(默认:0)getMyPlaylists(10, 0)getPlaylistTracks
playlistId (字符串):播放列表的 Spotify IDlimit (数字,可选):返回曲目的最大数量(默认:100)offset (数字,可选):返回的第一个曲目的索引(默认:0)getPlaylistTracks("37i9dQZEVXcJZyENOWUFo7")getRecentlyPlayed
limit (数字,可选):指定返回的最大曲目数量。getRecentlyPlayed({ limit: 1 0})getUsersSavedTracks
limit (数字,可选):返回曲目的最大数量(1-50,默认:50)offset (数字,可选):分页的偏移量(基于0的索引,默认:0)getUsersSavedTracks({ limit: 20, offset: 0 })playMusic
uri (字符串,可选):要播放项目的 Spotify URI(覆盖 type 和 id)type (字符串,可选):要播放的项目类型(曲目、专辑、艺术家、播放列表)id (字符串,可选):要播放项目的 Spotify IDdeviceId (字符串,可选):播放设备的IDplayMusic({ uri: "spotify:track:6rqhFgbbKwnb9MLmUQDhG6" })playMusic({ type: "track", id: "6rqhFgbbKwnb9MLmUQDhG6" })pausePlayback
deviceId (字符串,可选):暂停设备的IDpausePlayback()skipToNext
deviceId (字符串,可选):设备IDskipToNext()skipToPrevious
deviceId (字符串,可选):设备IDskipToPrevious()createPlaylist
name (字符串):新播放列表的名称description (字符串,可选):播放列表的描述public (布尔值,可选):播放列表是否公开(默认:false)createPlaylist({ name: "Workout Mix", description: "激励歌曲", public: false })addTracksToPlaylist
playlistId (字符串):播放列表的IDtrackUris (数组):要添加的曲目URI或ID数组position (数字,可选):插入曲目的位置addTracksToPlaylist({ playlistId: "3cEYpjA9oz9GiPac4AsH4n", trackUris: ["spotify:track:4iV5W9uYEdYUVa79Axb7Rh"] })addToQueue
uri (字符串,可选):要添加到队列的项目的 Spotify URI(覆盖 type 和 id)type (字符串,可选):要排队的项目类型(曲目、专辑、艺术家、播放列表)id (字符串,可选):要排队项目的 Spotify IDdeviceId (字符串,可选):排队设备的IDaddToQueue({ uri: "spotify:track:6rqhFgbbKwnb9MLmUQDhG6" })addToQueue({ type: "track", id: "6rqhFgbbKwnb9MLmUQDhG6" })getAlbums
albumIds (字符串或数组):单个专辑ID或专辑ID数组(最多20个)getAlbums("4aawyAB9vmqN3uQ7FjRGTy") 或 getAlbums(["4aawyAB9vmqN3uQ7FjRGTy", "1DFixLWuPkv3KT3TnV35m3"])getAlbumTracks
albumId (字符串):专辑的 Spotify IDlimit (数字,可选):返回曲目的最大数量(1-50)offset (数字,可选):分页的偏移量(基于0的索引)getAlbumTracks("4aawyAB9vmqN3uQ7FjRGTy", 10, 0)saveOrRemoveAlbumForUser
albumIds (数组):要保存或删除的 Spotify 专辑ID数组(最多20个)action (字符串):执行的操作:“save”或“remove”saveOrRemoveAlbumForUser(["4aawyAB9vmqN3uQ7FjRGTy"], "save")checkUsersSavedAlbums
albumIds (数组):要检查的 Spotify 专辑ID数组(最多20个)checkUsersSavedAlbums(["4aawyAB9vmqN3uQ7FjRGTy", "1DFixLWuPkv3KT3TnV35m3"])git clone https://github.com/marcelmarais/spotify-mcp-server.git
cd spotify-mcp-server
npm install
npm run build
http://127.0.0.1:8888/callback)在项目根目录下创建一个 spotify-config.json 文件(您可以复制并修改提供的示例):
# 复制示例配置文件
cp spotify-config.example.json spotify-config.json
然后使用您的凭据编辑该文件:
{
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"redirectUri": "http://127.0.0.1:8888/callback"
}
Spotify API 使用 OAuth 2.0 进行认证。按照以下步骤进行应用认证:
npm run auth
脚本将生成一个授权URL。在您的网络浏览器中打开此URL。
您将被提示登录 Spotify 并授权您的应用。
授权后,Spotify 将将您重定向到您指定的重定向URI,并在URL中带有代码参数。
认证脚本将自动交换此代码以换取访问和刷新令牌。
这些令牌将保存到您的 spotify-config.json 文件中,现在看起来像这样:
{
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"redirectUri": "http://localhost:8888/callback",
"accessToken": "BQAi9Pn...kKQ",
"refreshToken": "AQDQcj...7w",
"expiresAt": 1677889354671
}
要将您的 MCP 服务器与 Claude Desktop 结合使用,请将其添加到您的 Claude 配置中:
{
"mcpServers": {
"spotify": {
"command": "node",
"args": ["spotify-mcp-server/build/index.js"]
}
}
}
对于 Cursor,转到 Cursor 设置 中的 MCP 标签(命令 + shift + J)。添加一个服务器,使用此命令:
node path/to/spotify-mcp-server/build/index.js
要正确设置 Cline 的 MCP,请确保您有以下文件配置 cline_mcp_settings.json:
{
"mcpServers": {
"spotify": {
"command": "node",
"args": ["~/../spotify-mcp-server/build/index.js"],
"autoApprove": ["getListeningHistory", "getNowPlaying"]
}
}
}
您可以在自动批准数组中添加其他工具,以便无需干预即可运行这些工具。