欢迎来到Spotify MCP Server!
该项目允许AI助手和其他客户端通过标准化协议使用模型-上下文-协议(MCP)架构来控制Spotify播放。
模型-上下文-协议(MCP) 是一个框架,它允许AI模型和助手通过标准化接口与外部工具和服务进行交互。
本项目公开了Spotify功能作为MCP工具,使其可以被任何兼容MCP的客户端访问——包括AI助手、机器人等。
克隆此仓库:
git clone https://github.com/KaanCL/Spotify-MCP-Server.git
cd Spotify-MCP-Server
设置虚拟环境:
uv venv
安装依赖项:
uv sync
如果需要单独安装Spotipy:
pip install spotipy
注意: FastMCP和其他依赖项通过
uv sync进行管理。
.env文件,并添加您的凭证:
CLIENT_ID=your-spotify-client-id
CLIENT_SECRET=your-spotify-client-secret
REDIRECT_URI=http://localhost:8888/callback
当您第一次运行MCP服务器时:
运行MCP服务器:
uv run mcp install main.py
服务器将初始化并注册以下MCP工具:
| 工具名称 | 描述 | 参数 |
|---|---|---|
search | 在Spotify上查找歌曲 | query: str |
start_playback | 播放特定歌曲 | track_name: str |
pause_playback | 暂停当前正在播放的歌曲 | 无 |
resume_playback | 恢复暂停的播放 | 无 |
next_track | 跳到下一曲 | 无 |
previous_track | 返回至上一曲 | 无 |
get_user_playlists | 查看您的Spotify播放列表 | 无 |
set_player_volume | 调整音量 | volume: int (0-100) |
current_playback | 获取当前播放的信息 | 无 |
get_current_user | 获取用户资料信息 | 无 |
每个MCP工具都是用@mcp.tool()装饰的Python函数,并作为API端点公开。
所有工具都返回Python字典(或字典列表),便于JSON序列化和集成。
search(query: str) → dict
根据查询字符串在Spotify上搜索曲目。返回最多5个匹配的曲目,每个曲目包含名称、艺术家、专辑、URI和Spotify URL。
start_playback(track_name: str) → dict
开始播放给定曲目名称。搜索曲目并在用户的活动设备上开始播放。
pause_playback() → dict
暂停活动设备上的当前播放。
resume_playback() → dict
如果已暂停,则恢复播放。
next_track() → dict
跳到当前播放列表或队列中的下一曲。
previous_track() → dict
返回至上一曲。
get_user_playlists() → dict
获取用户的播放列表,包括名称、URL、ID和曲目数量。
set_player_volume(volume: int) → dict
设置Spotify播放器的音量(0-100)。
current_playback() → dict
获取当前播放曲目的信息,包括播放状态、曲目名称、艺术家、专辑、进度和持续时间。
get_current_user() → dict
获取当前Spotify用户的资料信息(显示名称、电子邮件、用户ID)。
任何兼容MCP的客户端都可以与此服务器交互,包括AI助手和程序化客户端:
from mcp.client import MCPClient
# 连接到MCP服务器
client = MCPClient("http://localhost:8080")
# 搜索一首歌
results = client.call("search", {"query": "Money Trees"})
print(results)
# 播放一首歌
client.call("start_playback", {"track_name": "Money Trees"})
# 暂停播放
client.call("pause_playback")
# 获取当前播放信息
playback_info = client.call("current_playback")
print(playback_info)
所有API响应均以JSON对象形式返回。
如果发生错误,响应将包含一个带有描述性消息的 "error" 键。
示例:
{ "error": "未找到曲目:未找到与您的查询匹配的曲目。" }
或
{ "error": "未找到活动设备:请在设备上打开Spotify并重试。" }
提示: 在使用数据之前,请始终检查响应中的
"error"键。
format_error)和枚举(SpotifyError)对错误进行标准化,以便于清晰和维护。graph TD
A[MCP 客户端] -- HTTP --> B[FastMCP 服务器]
B -- Python 调用 --> C[spotify.py]
C -- REST API --> D[Spotify Web API]
MCP服务器通过标准化协议公开这些工具,使AI模型和其他客户端能够发现并调用这些工具,而无需了解底层Spotify API实现细节。
spotify.py中定义新函数并使用@mcp.tool()注册,即可添加新的MCP工具。要添加新的Spotify功能:
spotify.py中实现一个新的函数,带有适当的错误处理和文档字符串。main.py中使用@mcp.tool()装饰器注册该函数。开发者注释:
所有MCP工具设计为返回Python字典,便于与Web API或前端客户端集成。
要扩展功能,只需按照上述模式添加新的@mcp.tool()函数。
对于调试或日志记录,可以在每个工具内打印或记录响应。
所有工具提供类型提示和详细的文档字符串,以增强代码清晰度、可维护性和可发现性(尤其是在IDE中)。
确保spotify模块实现了所需的API交互。
对于身份验证和授权,确保Spotify API凭证在您的环境中正确配置。
.env文件中.env文件通过.gitignore排除在git之外.env凭证和Spotify开发者仪表板设置。"error" 键以获取详细信息。"error"。main.py中扩展MCP工具以添加新的Spotify功能。