README.mdā¢7.39 kB
# Spotify MCP Server
A comprehensive Model Context Protocol (MCP) server that provides seamless integration between applications and the Spotify API. This repository contains two implementations:
1. **Python Implementation** - Full-featured MCP server with 15 tools
2. **Vercel Implementation** - Lightweight JavaScript/Node.js server for cloud deployment
## š Python Implementation
A complete MCP server implementation that enables Poke by Interaction and other MCP-compatible applications to control Spotify playback, search for music, and manage playlists through natural language commands.
### Features
- **š Authentication**: OAuth2 flow for secure Spotify API access
- **šµ Playback Control**: Play, pause, skip, seek, volume control
- **š Search**: Find tracks, albums, artists, and playlists
- **š Playlist Management**: Create, modify, and manage playlists
- **š¤ User Data**: Access user's top tracks, recently played, and profile
- **š± Device Management**: Control playback on different devices
- **šÆ Smart Integration**: Natural language commands for music control
### Quick Start
#### 1. Automated Setup
```bash
# Clone or download this project
cd poke
# Run the setup script
python setup.py
```
#### 2. Manual Setup
1. **Install Dependencies**:
```bash
pip install -r requirements.txt
```
2. **Spotify API Setup**:
- Go to [Spotify Developer Dashboard](https://developer.spotify.com/dashboard)
- Create a new app
- Note your Client ID and Client Secret
- Set Redirect URI to `http://localhost:8888/callback`
3. **Configuration**:
```bash
# Copy the example environment file
cp .env.example .env
# Edit .env with your Spotify credentials
nano .env # or use your preferred editor
```
4. **Test the Connection**:
```bash
python test_connection.py
```
5. **Run the Server**:
```bash
python main.py
```
### MCP Tools Available (Python)
#### šµ Playback Control
- `spotify_play` - Start playback of a track or playlist
- `spotify_pause` - Pause current playback
- `spotify_resume` - Resume paused playback
- `spotify_skip_next` - Skip to next track
- `spotify_skip_previous` - Skip to previous track
- `spotify_set_volume` - Set playback volume (0-100%)
#### š Search & Discovery
- `spotify_search` - Search for tracks, albums, artists, playlists
- `spotify_get_user_top_tracks` - Get user's top tracks
- `spotify_get_recently_played` - Get recently played tracks
#### š Playlist Management
- `spotify_get_user_playlists` - Get user's playlists
- `spotify_create_playlist` - Create a new playlist
- `spotify_add_to_playlist` - Add tracks to a playlist
#### š± Device & Status
- `spotify_get_current_track` - Get currently playing track info
- `spotify_get_devices` - Get available Spotify devices
- `spotify_get_user_profile` - Get current user's profile
## āļø Vercel Implementation
A lightweight JavaScript/Node.js MCP server designed for cloud deployment on Vercel.
### Environment Variables
Set these in your Vercel project:
- `SPOTIFY_CLIENT_ID` - Your Spotify app client ID
- `SPOTIFY_CLIENT_SECRET` - Your Spotify app client secret
- `SPOTIFY_REFRESH_TOKEN` - (Optional) For user-specific operations
### Endpoints
- `/api/test` - Simple test endpoint
- `/api/index` - MCP JSON-RPC endpoint for Poke integration
### Usage in Poke
Server URL: `https://your-vercel-url.vercel.app/api/index`
## š Usage Examples
### With Poke by Interaction
Once integrated, you can use natural language commands like:
- "Play some jazz music"
- "Search for Taylor Swift songs"
- "Create a playlist called 'Workout Music'"
- "Skip to the next track"
- "Set volume to 50%"
- "Show me my top tracks from this month"
### Direct MCP Tool Calls
```json
{
"name": "spotify_search",
"arguments": {
"query": "jazz",
"search_type": "track",
"limit": 10
}
}
```
## āļø Configuration
### Python Implementation
The server uses environment variables for configuration. Key settings in `.env`:
```env
# Required: Spotify API credentials
SPOTIFY_CLIENT_ID=your_client_id_here
SPOTIFY_CLIENT_SECRET=your_client_secret_here
SPOTIFY_REDIRECT_URI=http://localhost:8888/callback
# Optional: Server configuration
MCP_SERVER_NAME=spotify-mcp-server
MCP_SERVER_VERSION=1.0.0
CACHE_TTL=3600
```
### Vercel Implementation
Set environment variables in your Vercel project dashboard.
## š Integration with Poke by Interaction
This MCP server is designed to work seamlessly with Poke by Interaction:
1. **Choose your implementation** (Python for local/self-hosted, Vercel for cloud)
2. **Install and configure** the MCP server following the setup instructions above
3. **Configure Poke by Interaction** to connect to this MCP server
4. **Use natural language** to control Spotify through Poke by Interaction
The server provides a comprehensive set of tools that enable Poke by Interaction to:
- Understand music-related queries
- Execute Spotify API operations
- Provide rich responses with track information
- Manage user's music library and playlists
## š ļø Troubleshooting
### Common Issues
1. **Authentication Errors**:
- Verify your Spotify API credentials in `.env` (Python) or Vercel environment variables
- Ensure redirect URI matches your Spotify app settings
- Check that your Spotify app has the required scopes
2. **No Devices Found**:
- Make sure Spotify is open on at least one device
- Check that the device is active and connected to the internet
3. **Permission Errors**:
- Ensure your Spotify app has all required scopes enabled
- Re-authenticate if you've changed scopes
### Debug Mode (Python)
Run with debug logging:
```bash
PYTHONPATH=. python -c "
import logging
logging.basicConfig(level=logging.DEBUG)
import main
"
```
## š Project Structure
### Python Implementation
```
poke/
āāā main.py # Main entry point
āāā mcp_server.py # MCP server implementation
āāā spotify_client.py # Spotify API client
āāā config.py # Configuration management
āāā test_connection.py # Test script
āāā setup.py # Setup script
āāā requirements.txt # Python dependencies
āāā .env.example # Environment variables template
āāā README.md # This file
```
### Vercel Implementation
```
api/
āāā index.js # Main MCP JSON-RPC endpoint
āāā test.js # Test endpoint
package.json # Node.js dependencies
vercel.json # Vercel configuration
```
## š§ Development
### Adding New Tools (Python)
To add new Spotify functionality:
1. Add the tool definition in `mcp_server.py` `handle_list_tools()`
2. Implement the handler in `mcp_server.py` `handle_call_tool()`
3. Add the corresponding method in `spotify_client.py`
4. Update this README with the new tool documentation
### Deployment (Vercel)
1. Fork this repository
2. Connect to Vercel
3. Set environment variables
4. Deploy
## š License
This project is open source and available under the MIT License.
## š¤ Contributing
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
## š Branches
- `main` - Contains both Python and Vercel implementations
- `python-implementation` - Python-only implementation
- `vercel` - Vercel-only implementation (original)