Spotify播放列表AI生成工具

基于Model Context Protocol的Spotify播放列表AI生成工具,支持通过自然语言指令创建和管理播放列表。

  • by Gregoire-W
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Gregoire-W/mcp-spotify

使用说明

🎵 Spotify MCP-模型上下文协议实现

只需一个提示即可创建整个Spotify播放列表,或使用AI按音乐类型拆分大型播放列表。

特性 • 演示 • 快速开始 • 建筑 • 文档


📖 关于项目

Spotify MCP 是一个实用的实现 模型上下文协议(MCP) 它展示了人工智能助手如何以标准化的方式与外部服务进行交互。该项目以Spotify为例,展示了MCP的功能。

什么是模型上下文协议?

模型上下文协议是一个开放标准,使人工智能模型能够安全地连接到外部数据源和工具。MCP为AI模型提供了一种与任何服务交互的通用方式,而不是具有硬编码集成的AI模型。

┌─────────────────┐
│   AI Model      │
│   (Gemini)      │
└────────┬────────┘
         │
         │ MCP Protocol
         │
┌────────▼────────┐
│   MCP Server    │◄──── Standardized Interface
│   (Spotify)     │
└────────┬────────┘
         │
         │ REST API
         │
┌────────▼────────┐
│  Spotify API    │
└─────────────────┘

为什么这个项目很重要:

  • 🎓 教育的:通过构建实用的东西来学习MCP
  • 🔌 可重复使用的:服务器架构可以适用于其他API
  • 🚀 生产准备就绪:基于Docker的TypeScript和Python部署
  • 💡 真实世界用例:解决Spotify播放列表管理的实际挑战

✨ 特性

🎼 创建播放列表

  • 自然语言播放列表:从单个提示生成整个播放列表
    • “创建包含20首高能量歌曲的锻炼播放列表”
    • “为我制作一个用于学习的冷爵士播放列表”

🎯 智能轨迹搜索

  • 使用会话语言搜索Spotify的目录
  • 获取曲目详细信息,包括URI、艺术家和专辑信息

📝 播放列表管理

  • 创建公共或私人播放列表
  • 在批量操作中添加多个轨道
  • 完全控制播放列表元数据

🎨 基于类型的组织

  • 即将推出:按音乐类型拆分大型播放列表
  • 智能组织您的图书馆

🎬 演示

在几秒钟内创建播放列表

在一个提示中用自然语言创建的完整播放列表


🚀 快速开始

先决条件

在开始之前,请确保您已经:

  1. Docker&Docker编写 已安装(获取Docker)
  2. Spotify开发者帐户 - 创建应用教程
  3. Google Gemini API密钥 - 获取免费密钥
  4. 活跃的Spotify帐户 用于测试

Spotify设置

  1. 首选 Spotify开发者仪表板
  2. 点击 “创建应用程序”
  3. 填写应用程序详细信息:
    • 应用程序名称:MCP Spotify(或任何名称)
    • 应用描述:模型上下文协议实现
    • 重定向URI: http://localhost:8080
  4. 保存并复制您的 客户端ID 和 客户端密钥

安装

# 1. Clone the repository
git clone https://github.com/Gregoire-W/mcp-spotify.git
cd mcp-spotify

# 2. Configure MCP Server environment
cd mcp-server
echo "SPOTIFY_CLIENT_ID=your_client_id_here" > .env
echo "SPOTIFY_CLIENT_SECRET=your_client_secret_here" >> .env
cd ..

# 3. Configure MCP Client environment
cd mcp-client
echo "GOOGLE_GENAI_API_KEY=your_gemini_api_key_here" > .env
echo "SPOTIFY_CLIENT_ID=your_client_id_here" >> .env
cd ..

# 4. Launch with Docker Compose
docker compose up --build

# 5. Open your browser
# Navigate to: http://localhost:8080

首次运行

  1. 打开 http://localhost:8080 在浏览器中
  2. Streamlit界面将加载
  3. 点击 “连接到Spotify” 侧边栏中的验证按钮
  4. 连接后,开始聊天!尝试: “创建一个名为“Road Trip”的播放列表,其中包含15首欢快的歌曲”

🏗️ 建筑

技术栈

组件 技术 目的
MCP服务器 TypeScript+Express 实现MCP协议和Spotify集成
MCP客户端 Python 处理MCP客户端通信
AI模型 Google Gemini 2.5 Flash 自然语言处理和工具调用
用户界面 Streamlit 简单有效的聊天界面
部署 Docker Compose 容器化多服务架构

系统架构

┌──────────────────────────────────────────────────────────┐
│                      User Interface                       │
│                   Streamlit (Port 8080)                   │
└───────────────────────────┬──────────────────────────────┘
                            │
                    ┌───────▼────────┐
                    │  MCP Client    │
                    │   (Python)     │
                    │                │
                    │  • Session     │
                    │  • Gemini API  │
                    └───────┬────────┘
                            │ MCP Protocol
                            │ (HTTP)
                    ┌───────▼────────┐
                    │  MCP Server    │
                    │  (TypeScript)  │
                    │                │
                    │  Tools:        │
                    │  • createPlaylist
                    │  • searchTracks
                    │  • addTrack    │
                    └───────┬────────┘
                            │ OAuth 2.0
                            │ REST API
                    ┌───────▼────────┐
                    │  Spotify API   │
                    └────────────────┘

MCP工具实施

服务器通过MCP协议公开了三个主要工具:

1. createPlaylist

Input: {
  playlistName: string
  playlistDescription: string
  isPublic: boolean
}
Output: {
  success: boolean
  playlistId: string
  message: string
}

2. searchTracks

Input: {
  query: string
}
Output: {
  tracks: [{
    uri: string
    name: string
    artists: string[]
    album: string
  }]
  success: boolean
}

3. addTrackToPlaylist

Input: {
  playlistId: string
  uris: string[]
}
Output: {
  success: boolean
  message: string
}

🔧 配置

环境变量

MCP服务器(mcp-server/.env)

SPOTIFY_CLIENT_ID=your_spotify_client_id
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret

MCP客户端(mcp-client/.env)

GOOGLE_GENAI_API_KEY=your_gemini_api_key
SPOTIFY_CLIENT_ID=your_spotify_client_id

升级AI能力

该项目使用 双子座2.5闪光灯 默认情况下为(免费层)。为了获得更好的性能:

  1. 升级到 双子座2.5 Pro 在 mcp-client/client.py:
response = self.client.models.generate_content(
    model="gemini-2.5-pro",  # Changed from gemini-2.5-flash
    contents=self.messages,
    config=config,
)
  1. 其他兼容型号:
    • gemini-2.5-pro:质量最好,速度较慢
    • gemini-2.5-flash:平衡(默认)
    • gemini-2.0-flash-exp:最快,实验性

📚 文档

项目结构

mcp-spotify/
├── mcp-server/              # TypeScript MCP Server
│   ├── src/
│   │   ├── index.ts         # Server entry point & tool registration
│   │   ├── clients/
│   │   │   └── spotifyApiClient.ts  # Spotify API wrapper
│   │   └── types/
│   │       └── track.ts     # TypeScript type definitions
│   ├── Dockerfile.prod
│   ├── package.json
│   └── tsconfig.json
│
├── mcp-client/              # Python MCP Client
│   ├── client.py            # MCP client implementation
│   ├── streamlit_app.py     # UI interface
│   ├── requirements.txt
│   └── Dockerfile.prod
│
└── docker-compose.yml       # Multi-container orchestration

发展

本地运行(无Docker)

服务器:

cd mcp-server
npm install
npm run build
node build/index.js

客户:

cd mcp-client
pip install -r requirements.txt
streamlit run streamlit_app.py --server.port 8080

测试MCP服务器

使用MCP检查器测试您的服务器:

npx @modelcontextprotocol/inspector http://localhost:3000/mcp

🤝 贡献

贡献是开源社区令人惊叹的地方!你所做的任何贡献都是 非常感谢.

  1. 分叉项目
  2. 创建功能分支(git checkout -b feature/AmazingFeature)
  3. 提交您的更改(git commit -m 'Add some AmazingFeature')
  4. 推到分支机构(git push origin feature/AmazingFeature)
  5. 打开拉取请求

🐛 故障排除

常见问题

端口已在使用中

# Change ports in docker-compose.yml
ports:
  - "8081:8080"  # Use 8081 instead of 8080

Spotify身份验证失败

  • 在中验证您的客户端ID和客户端密码 .env
  • 确保重定向URI设置为 http://localhost:8080 在Spotify仪表板中
  • 检查您在首次运行时是否已授权该应用程序

Docker构建失败

# Clean Docker cache and rebuild
docker compose down
docker system prune -a
docker compose up --build

📝 许可证

根据MIT许可证分发。看 LICENSE 了解更多信息。


🙏 致谢


📧 联系

格雷瓜尔·W- @格雷瓜尔-W

项目链接: https://github.com/Gregoire-W/mcp-spotify


⭐ 如果你觉得这个repo有用,请将其标记为星号!

由...制作❤️ 还有很多☕