这是对Stytch的MCP消费者待办事项列表示例的一个分支,经过调整以展示如何使用Cloudflare Workers将Spotify OAuth 2.0与模型上下文协议(MCP)集成。
原始的Stytch示例为实现MCP服务器的OAuth发现和动态客户端注册提供了一个很好的基础。我们分出这个项目是为了:
新增文件:
api/SpotifyMCP.ts - 针对Spotify Web API的MCP服务器实现api/SpotifyService.ts - 用于Spotify API交互的服务层api/lib/spotify-auth.ts - Spotify的OAuth流程实现修改文件:
api/index.ts - 更新以处理Spotify OAuth流程和MCP端点此实现提供了:
/.well-known/oauth-authorization-server该项目使用:
⚠️ 此服务器主要用于开发和测试MCP客户端的OAuth流程。
此实现优化了:
在部署到生产环境之前,你应该:
添加身份验证验证
/register端点中实现正确的客户端验证增强安全性
添加监控和日志记录
优化扩展性
处理边缘情况
得益于原始的Stytch实现,此项目已经包括:
✅ Cloudflare Workers部署
wrangler.jsonc✅ 基础设施基础
这意味着你已经有了一个坚实的基础设施基础——你只需要添加上述提到的安全性和监控层即可用于生产。
如果你计划在生产环境中使用此项目:
遵循PayPal的MCP服务器模式,此实现提供了:
/.well-known/oauth-authorization-server/register端点这允许MCP Inspector和其他MCP客户端自动发现并注册到我们的服务器,即使Spotify本身不支持动态客户端注册。
http://localhost:3000/callback)基于.dev.vars.template创建一个.dev.vars文件:
SPOTIFY_CLIENT_ID=your_spotify_client_id
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret
npm install
npm run dev
MCP服务器将在http://localhost:3000/sse可用。
vite.config.ts文件支持额外的开发环境变量:
VITE_PORT:自定义开发服务器端口(默认:3000)
VITE_PORT=8080 npm run dev
VITE_ALLOWED_HOSTS:指定开发服务器允许的主机(在使用隧道服务时有用)
VITE_ALLOWED_HOSTS="localhost,your-ngrok-domain.ngrok-free.app" npm run dev
Spotify Web API要求HTTPS用于OAuth回调,并且现代浏览器强制执行MCP客户端和服务器之间的安全连接,以防止混合内容问题。
✅ Cloudflare Workers解决方案
MCP服务器:部署到Cloudflare Workers——自动包含HTTPS
https://your-worker.workers.devMCP客户端:大多数生产MCP客户端已经通过HTTPS运行
Spotify应用程序:更新重定向URI以使用你的Workers域名(一次性设置)
# 部署以获取永久HTTPS URL
npm run deploy
# 更新Spotify应用程序重定向URI为:
# https://your-worker.workers.dev/callback
🔧 ngrok解决方案用于本地测试
在本地开发时,使用ngrok创建HTTPS隧道:
# 从https://ngrok.com/download下载或使用包管理器
brew install ngrok # macOS
# 或
snap install ngrok # Linux
# 使用允许的主机配置启动
VITE_ALLOWED_HOSTS="localhost,*.ngrok-free.app" npm run dev
对于本地开发,你可能需要为服务器和客户端创建隧道:
# 终端1:为MCP服务器创建隧道(端口3000)
ngrok http 3000
# 终端2:如果本地运行LibreChat,则为LibreChat创建隧道(端口3080)
ngrok http 3080
启动ngrok后,你会得到临时HTTPS URL:
https://abc123.ngrok-free.apphttps://def456.ngrok-free.app更新你的Spotify应用程序以适应此次开发会话:
https://abc123.ngrok-free.app/callbackhttps://abc123.ngrok-free.app/sse| 方面 | Cloudflare Workers(生产) | ngrok(开发) |
|---|---|---|
| HTTPS | ✅ 自动,永久 | ✅ 临时隧道 |
| URLs | ✅ 稳定,持久 | ❌ 重启后改变 |
| 设置 | ✅ 一次部署 | ❌ 每次会话设置 |
| 成本 | ✅ 提供免费层级 | ✅ 提供免费层级 |
| 性能 | ✅ 全球边缘网络 | ❌ 隧道开销 |
| 用途 | 生产,永久测试 | 本地开发 |
✅ Cloudflare Workers优势:
企业使用:
mcp.yourcompany.com/.well-known/oauth-authorization-server/register端点注册自身/authorize,然后重定向到Spotify/token处交换代码Spotify MCP服务器暴露以下工具:
searchTracks - 搜索曲目searchArtists - 搜索艺术家searchAlbums - 搜索专辑searchPlaylists - 搜索播放列表getCurrentUserProfile - 获取当前用户的资料getCurrentPlayback - 获取当前播放状态pausePlayback - 暂停播放resumePlayback - 恢复播放skipToNext - 跳转到下一曲skipToPrevious - 跳转到上一曲getUserPlaylists - 获取用户的播放列表getPlaylistTracks - 获取播放列表中的曲目createPlaylist - 创建新的播放列表addTracksToPlaylist - 向播放列表添加曲目getRecentlyPlayed - 获取最近播放的曲目getTopTracks - 获取用户的热门曲目getTopArtists - 获取用户的热门艺术家npx @modelcontextprotocol/inspector@latest
SSEhttp://localhost:3000/sse如果你希望跳过OAuth流程进行测试:
Authorization: Bearer YOUR_ACCESS_TOKENX-Spotify-Refresh-Token: YOUR_REFRESH_TOKEN🚀 自动HTTPS解决方案
部署到Cloudflare Workers自动解决了HTTPS需求:
# 1. 设置你的Spotify凭据
wrangler secret put SPOTIFY_CLIENT_ID
wrangler secret put SPOTIFY_CLIENT_SECRET
# 2. 部署(自动获得HTTPS)
npm run deploy
# 3. 更新Spotify应用程序重定向URI为你新的Workers URL
# 示例:https://your-worker.workers.dev/callback
你的MCP服务器将在https://your-worker.workers.dev/sse可用。
⚠️ 注意:这是一个开发示例。参见“重要:开发示例”部分以了解生产注意事项。
实际生产使用:
pausePlayback,resumePlayback等)需要活跃的Spotify设备user-read-private - 用户资料访问user-read-playback-state - 当前播放信息user-modify-playback-state - 播放控制playlist-read-private - 访问用户播放列表playlist-modify-public - 创建/修改播放列表market参数以获取区域适当的结果此项目基于Stytch MCP消费者待办事项列表示例,该示例展示了如何为MCP服务器实现OAuth发现。我们已经调整了他们的模式以适应Spotify的OAuth系统。