远程MCP服务器
一组可部署到Google Cloud Run的MCP(模型上下文协议)服务器,可供任何兼容MCP的客户端(Claude、ChatGPT等)使用。
当前服务器
Spotify MCP服务器
直播: https://spotify-mcp-421545226088.us-central1.run.app/mcp
Spotify的播放控制、搜索、队列管理、库访问和设备控制。
文档
📖 MCP服务器开发指南 -综合指南涵盖:
- 项目结构和配置
- FastMCP设置(无状态_http,json_response)
- 身份验证模式(OAuth、API密钥)
- API客户端模式
- 云运行部署
- 秘密管理
- 测试策略
- 常见陷阱和解决方案
Spotify MCP服务器
特性
- 播放控制:播放、暂停、跳过、音量、洗牌、重复
- 搜索:查找曲目、专辑、艺术家、播放列表
- 队列管理:查看并添加到队列
- 图书馆:查看最近播放的播放列表,如曲目
- 设备控制:列出设备,传输播放
快速开始
1.设置Spotify应用程序
- 首选https://developer.spotify.com/dashboard
- 创建新应用程序
- 注意你的 客户端ID 和 客户端密钥
- 添加重定向URI:
http://127.0.0.1:8888/callback(使用127.0.0.1,而不是本地主机)
2.获取刷新令牌
# Set credentials
export SPOTIFY_CLIENT_ID="your_client_id"
export SPOTIFY_CLIENT_SECRET="your_client_secret"
# Run OAuth flow
python scripts/get_spotify_token.py3.地方发展
# Create venv
python -m venv .venv
source .venv/bin/activate
# Install
uv pip install -e ".[dev]"
# Set env vars (or use .env file)
export SPOTIFY_CLIENT_ID="your_client_id"
export SPOTIFY_CLIENT_SECRET="your_client_secret"
export SPOTIFY_REFRESH_TOKEN="your_refresh_token"
# Run (stdio mode for local clients like Claude Desktop)
python -m spotify_mcp.server
# Run (HTTP mode for testing)
MCP_TRANSPORT=http PORT=8080 python -m spotify_mcp.server4.部署到云端运行
# First time: Create secrets in Google Secret Manager
echo -n "your_client_id" | gcloud secrets create SPOTIFY_CLIENT_ID --data-file=-
echo -n "your_client_secret" | gcloud secrets create SPOTIFY_CLIENT_SECRET --data-file=-
echo -n "your_refresh_token" | gcloud secrets create SPOTIFY_REFRESH_TOKEN --data-file=-
# Deploy
gcloud run deploy spotify-mcp \
--source . \
--region us-central1 \
--allow-unauthenticated \
--set-secrets="SPOTIFY_CLIENT_ID=SPOTIFY_CLIENT_ID:latest,SPOTIFY_CLIENT_SECRET=SPOTIFY_CLIENT_SECRET:latest,SPOTIFY_REFRESH_TOKEN=SPOTIFY_REFRESH_TOKEN:latest" \
--memory 512Mi \
--timeout 3005.测试部署
# Initialize connection
curl -X POST https://YOUR-SERVICE-URL/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "test", "version": "1.0"}}, "id": 1}'
# List tools
curl -X POST https://YOUR-SERVICE-URL/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 2}'
# Call a tool
curl -X POST https://YOUR-SERVICE-URL/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "spotify_get_playback", "arguments": {}}, "id": 3}'6.连接MCP客户端
对于基于HTTP的MCP客户端(如远程聊天机器人):
{
"mcpServers": {
"spotify": {
"transport": "streamable-http",
"url": "https://spotify-mcp-421545226088.us-central1.run.app/mcp"
}
}
}对于基于stdio的MCP客户端(如Claude Desktop):
{
"mcpServers": {
"spotify": {
"command": "python",
"args": ["-m", "spotify_mcp.server"],
"env": {
"SPOTIFY_CLIENT_ID": "your_client_id",
"SPOTIFY_CLIENT_SECRET": "your_client_secret",
"SPOTIFY_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}可用工具
| 工具 | 说明 |
|---|---|
spotify_get_playback | 获取当前播放状态 |
spotify_play | 按搜索查询或URI播放曲目 |
spotify_pause | 暂停播放 |
spotify_next | 跳到下一首曲目 |
spotify_previous | 跳至上一曲目 |
spotify_volume | 设置音量(0-100) |
spotify_shuffle | 切换洗牌模式 |
spotify_repeat | 设置重复模式 |
spotify_seek | 寻求在轨道上定位 |
spotify_queue | 查看播放队列 |
spotify_queue_add | 将曲目添加到队列 |
spotify_devices | 列出可用设备 |
spotify_transfer | 将播放转移到设备 |
spotify_search | 搜索曲目/专辑/艺术家 |
spotify_my_playlists | 获取用户的播放列表 |
spotify_get_playlist_tracks | 从播放列表中获取曲目 |
spotify_create_playlist | 创建新的播放列表 |
spotify_delete_playlist | 删除/取消关注播放列表 |
spotify_add_tracks_to_playlist | 将曲目添加到播放列表 |
spotify_play_context | 播放播放列表/专辑/艺术家 |
spotify_recently_played | 获取最近播放的曲目 |
spotify_get_saved_tracks | 获得点赞/保存曲目 |
spotify_play_liked_songs | 播放您喜欢的歌曲 |
spotify_like_track | 将曲目保存到库 |
建筑
运输方式
| 模式 | 用例 | 端点 |
|---|---|---|
stdio | 本地客户端(Claude Desktop) | 不适用(stdin/stdout) |
streamable-http | 远程客户端,云运行 | /mcp |
配置
服务器使用 FastMCP 使用以下云部署设置:
mcp = FastMCP(
"spotify",
stateless_http=True, # No session state (scalable)
json_response=True, # JSON responses (not SSE streams)
)项目结构
├── pyproject.toml
├── Dockerfile
├── .env.example
├── docs/
│ └── MCP_SERVER_GUIDE.md # Development & deployment guide
├── scripts/
│ └── get_spotify_token.py
└── src/spotify_mcp/
├── __init__.py
├── server.py # FastMCP tools
├── auth.py # OAuth token management
└── client.py # Spotify API wrapper许可证
麻省理工学院
