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:
- Python Implementation - Full-featured MCP server with 15 tools
- 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
# Clone or download this project
cd poke
# Run the setup script
python setup.py
2. Manual Setup
Install Dependencies:
pip install -r requirements.txt
Spotify API Setup:
- Go to Spotify Developer Dashboard
- Create a new app
- Note your Client ID and Client Secret
- Set Redirect URI to
http://localhost:8888/callback
Configuration:
# Copy the example environment file cp .env.example .env # Edit .env with your Spotify credentials nano .env # or use your preferred editor
Test the Connection:
python test_connection.py
Run the Server:
python main.py
MCP Tools Available (Python)
๐ต Playback Control
spotify_play
- Start playback of a track or playlistspotify_pause
- Pause current playbackspotify_resume
- Resume paused playbackspotify_skip_next
- Skip to next trackspotify_skip_previous
- Skip to previous trackspotify_set_volume
- Set playback volume (0-100%)
๐ Search & Discovery
spotify_search
- Search for tracks, albums, artists, playlistsspotify_get_user_top_tracks
- Get user's top tracksspotify_get_recently_played
- Get recently played tracks
๐ Playlist Management
spotify_get_user_playlists
- Get user's playlistsspotify_create_playlist
- Create a new playlistspotify_add_to_playlist
- Add tracks to a playlist
๐ฑ Device & Status
spotify_get_current_track
- Get currently playing track infospotify_get_devices
- Get available Spotify devicesspotify_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 IDSPOTIFY_CLIENT_SECRET
- Your Spotify app client secretSPOTIFY_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
{
"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
:
# 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:
- Choose your implementation (Python for local/self-hosted, Vercel for cloud)
- Install and configure the MCP server following the setup instructions above
- Configure Poke by Interaction to connect to this MCP server
- 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
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
- Verify your Spotify API credentials in
No Devices Found:
- Make sure Spotify is open on at least one device
- Check that the device is active and connected to the internet
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:
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:
- Add the tool definition in
mcp_server.py
handle_list_tools()
- Implement the handler in
mcp_server.py
handle_call_tool()
- Add the corresponding method in
spotify_client.py
- Update this README with the new tool documentation
Deployment (Vercel)
- Fork this repository
- Connect to Vercel
- Set environment variables
- 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 implementationspython-implementation
- Python-only implementationvercel
- Vercel-only implementation (original)