Spotify MCP Server

by Naunau75
Verified
# Architecture du Projet spotify-mcp Ce document présente l'architecture du projet spotify-mcp, un serveur MCP (Model Context Protocol) permettant à Claude d'interagir avec l'API Spotify. ## Vue d'ensemble spotify-mcp est un serveur MCP (Model Context Protocol) qui permet à Claude d'interagir avec Spotify. Il utilise la bibliothèque spotipy pour communiquer avec l'API Spotify et expose des fonctionnalités comme la lecture, la pause, la recherche de musique et la gestion de la file d'attente. ## Diagramme de composants ```mermaid graph TD Claude[Claude Assistant] <-->|MCP Protocol| Server[Server MCP] Server <-->|API Calls| SpotifyAPI[Spotify API Client] SpotifyAPI <-->|HTTP Requests| SpotifyWeb[Spotify Web API] subgraph "spotify-mcp" Server SpotifyAPI Utils[Utilities] end Server --> Utils SpotifyAPI --> Utils ``` ## Structure du projet ```mermaid graph LR Root[spotify-mcp/] --> Src[src/] Root --> Config[pyproject.toml] Root --> Readme[README.md] Root --> Env[.env] Src --> Package[spotify_mcp/] Package --> Init[__init__.py] Package --> ServerPy[server.py] Package --> SpotifyApiPy[spotify_api.py] Package --> UtilsPy[utils.py] ``` ## Flux de données ```mermaid sequenceDiagram participant Claude as Claude participant Server as Server MCP participant SpotifyAPI as Spotify API Client participant SpotifyWeb as Spotify Web API Claude->>Server: Appel d'outil (ex: playback, search, queue) Server->>SpotifyAPI: Demande correspondante SpotifyAPI->>SpotifyWeb: Requête HTTP API SpotifyWeb-->>SpotifyAPI: Réponse JSON SpotifyAPI-->>Server: Données formatées Server-->>Claude: Réponse formatée pour l'assistant ``` ## Classes principales ### Modèle de classe pour server.py ```mermaid classDiagram class Server { +list_prompts() +list_resources() +list_tools() +call_tool(name, arguments) } class ToolModel { +as_tool() } class Playback { +action: str +spotify_uri: Optional[str] +num_skips: Optional[int] } class Queue { +action: str +track_id: Optional[str] } class GetInfo { +item_uri: str } class Search { +query: str +qtype: Optional[str] +limit: Optional[int] } class TopItems { +item_type: str +time_range: Optional[str] +limit: Optional[int] } ToolModel <|-- Playback ToolModel <|-- Queue ToolModel <|-- GetInfo ToolModel <|-- Search ToolModel <|-- TopItems ``` ### Modèle de classe pour spotify_api.py ```mermaid classDiagram class Client { -sp: Spotify -auth_manager: SpotifyOAuth -cache_handler: CacheFileHandler -username: str -logger: Logger +get_username() +search(query, qtype, limit, device) +get_top_items(item_type, time_range, limit) +get_info(item_uri) +get_current_track() +start_playback(spotify_uri, device) +pause_playback(device) +add_to_queue(track_id, device) +get_queue(device) +skip_track(n) +previous_track() +seek_to_position(position_ms) +set_volume(volume_percent) } ``` ## Fonctionnalités principales 1. **Lecture et contrôle** - Démarrer, mettre en pause, passer à la chanson suivante - Obtenir des informations sur la piste en cours - Gérer la file d'attente Spotify 2. **Recherche et découverte** - Rechercher des pistes, albums, artistes, playlists - Obtenir des informations détaillées sur un élément Spotify - Obtenir les éléments préférés de l'utilisateur (artistes, pistes) ## Flux d'authentification ```mermaid sequenceDiagram participant User as Utilisateur participant Server as Server MCP participant SpotifyOAuth as SpotifyOAuth participant SpotifyWeb as Spotify Web API User->>Server: Lance le serveur MCP Server->>SpotifyOAuth: Initialise l'authentification SpotifyOAuth->>User: Ouvre le navigateur pour l'autorisation User->>SpotifyWeb: Autorise l'application SpotifyWeb->>SpotifyOAuth: Redirige avec le code d'autorisation SpotifyOAuth->>SpotifyWeb: Échange le code contre un token SpotifyWeb-->>SpotifyOAuth: Renvoie le token d'accès SpotifyOAuth-->>Server: Stocke le token dans le cache Server-->>User: Prêt à recevoir des commandes ``` ## Interface MCP Le projet implémente le protocole MCP (Model Context Protocol) qui permet à Claude d'interagir avec des outils externes. Les outils exposés incluent: 1. **playback** - Contrôle de la lecture 2. **queue** - Gestion de la file d'attente 3. **get_info** - Obtention d'informations sur un élément Spotify 4. **search** - Recherche d'éléments sur Spotify 5. **top_items** - Obtention des éléments préférés de l'utilisateur ## Dépendances Les principales dépendances du projet sont: - mcp==1.3.0 - Bibliothèque pour implémenter le protocole MCP - python-dotenv>=1.0.1 - Pour gérer les variables d'environnement - spotipy==2.24.0 - SDK Python pour l'API Spotify