Deep Dive : Créer un Serveur MCP pour Piloter Spotify avec une IA (Claude)

Christophe Thibault

Dans cet article, je vous présente étape par étape comment j’ai pensé et construit ce use case MCP / Spotify, avec Claude Desktop et les différents outils connectés.

Bienvenue dans ce troisième épisode de notre série autour des MCP. 

Pour rappel, le Model Context Protocol (MCP) est un protocole standardisé conçu pour permettre aux modèles de langage (LLM - Large Language Models) d'interagir de manière structurée avec des outils et des systèmes externes. 

Dans le contexte de ce projet, le Spotify Model Context Protocol permet à l’assistant Claude Desktop d'interagir directement avec l’API Spotify. Cela permet de commander et d'interagir directement avec l’application et suivant les besoins de pouvoir créer des playlists, les remplir avec des titres, d’utiliser la puissance des LLMs pour de la recommandation basée sur ses souhaits ou sur son historique, etc Tout est possible suivant les besoins de l'utilisateur en codant soi-même des MCP. Dans le cas précis de cet article, Claude Desktop agit comme client, mais on aurait pu imaginer utiliser Cursor AI ou un autre client.

Claude Desktop a à sa disposition une série d’outils qu’il peut utiliser dans l’ordre qu’il souhaite suivant ce que l’utilisateur écrit dans le prompt. En prenant lui-même des décisions, le LLM se comporte réellement comme un agent.

Dans cet article, je vous présente étape par étape comment j’ai pensé et construit ce use-case, avec Claude Desktop et les différents outils connectés. 

Dans cet article, je vous présente étape par étape comment j’ai pensé et construit ce use case, avec Claude Desktop et les différents outils connectés. 

Claude, la pierre angulaire

Grâce aux serveurs MCP, Claude peut communiquer avec Spotify, et décider des actions à suivre : 

Architecture Technique

Vue d'ensemble

L'architecture du projet repose - en plus de Claude Desktop et Spotify - sur trois composants principaux :

  1. Un serveur MCP (Model Context Protocol)
  2. Un client API Spotify
  3. Des utilitaires de support

L'interaction entre ces composants suit un modèle en couches bien défini, où chaque requête traverse la chaîne suivante : Claude → Serveur MCP → Client Spotify API → API Web Spotify

Composants Clés

1. Serveur MCP (server.py)

Le serveur MCP agit comme point d'entrée principal et expose cinq outils fondamentaux :

  • playback : Contrôle de lecture (play, pause, skip)
  • queue : Gestion de la file d'attente
  • get_info : Récupération des métadonnées
  • search : Recherche dans le catalogue Spotify
  • top items : Accès aux éléments favoris de l'utilisateur
  • playlist creator : Créer une playlist et permet d'y ajouter des titres

2. Client Spotify (spotify_api.py)

Le client API encapsule toute la logique d'interaction avec Spotify via la bibliothèque spotipy. Il gère :

  • L'authentification OAuth
  • La mise en cache des tokens
  • Les appels API
  • La gestion des erreurs

Flux d'Authentification

Le processus d'authentification suit le protocole OAuth 2.0 :

  1. Initialisation du serveur MCP
  2. Ouverture du navigateur pour autorisation utilisateur
  3. Échange du code d'autorisation contre un token
  4. Mise en cache du token pour les futures requêtes

Fonctionnalités Techniques

Dans le cadre de cet article, voici la liste des différents outils qui ont été implémentés afin de contrôler et/ou d'interagir avec Spotify. Le LLM a maintenant accès à une liste d’outils qu’il faut voir comme une liste d’actions/requêtes qu’il pourra choisir dans l’ordre qu’il voudra afin de répondre au prompt et à ce que vous lui demanderez.

Ces outils sont accessibles via une interface en ligne ou une API, permettant une interaction fluide avec Spotify, que ce soit pour rechercher des titres, créer des playlists dynamiques en fonction des préférences de l’utilisateur ou encore générer des recommandations musicales basées sur des modèles avancés de machine learning.

1. Contrôle de Lecture

Dans la classe Playback, le LLM pourra choisir différentes actions comme start, get, stop, etc. pour commander l’application suivant le prompt. spotify_uri étant l’id d’un album ou d’un  titre.

Permet le contrôle granulaire de la lecture avec :

  • Démarrage/pause de la lecture
  • Navigation entre les pistes
  • Contrôle du volume
  • Positionnement dans la piste

2. Gestion de File d'Attente

Cet outil permet de mettre des titres dans la file d’attente de l’application.

Offre des capacités de :

  • Ajout de pistes à la file
  • Consultation de la file
  • Manipulation de l'ordre de lecture

3. Système de Recherche

Cet outil va permettre de rechercher des titres, albums, artistes ou playlists via le prompt. 

Implémente une recherche multi-critères pour :

  • Pistes
  • Albums
  • Artistes
  • Playlists

4. TopItems

Si nous voulons utiliser la puissance des LLM pour de la recommandation via notre historique d’écoute, il faut pouvoir récupérer l’historique des écoutes sur une certaine période voulue. Par exemple, nous cherchons à récupérer le top10 de nos écoutes sur les 6 derniers mois. Par la suite, le LLM pourra grâce à cela recommander différents artistes ou titres. 

Structure

Fonctionnalités

  • Type d'éléments : Permet de récupérer soit les artistes (artists) soit les morceaux (tracks) les plus écoutés
  • Périodes d'analyse :
    • long_term : Environ 1 an d'historique
    • medium_term : Environ 6 mois d'historique
    • short_term : Environ 4 semaines d'historique
  • Limitation : Possibilité de définir le nombre d'éléments à récupérer (max 50)

Implémentation

Dans le gestionnaire d'outils (handle_call_tool), TopItems est traité comme suit :

5. PlaylistCreator

Cet outil permet simplement de créer une playlist et de la remplir avec nos souhaits. L’outil va tout d’abord vérifier que le nom de la playlist n’existe pas déjà et si non, il va la créer et la peupler avec différents titres, par exemple à partir de recommandations basées sur notre historique.

Structure

Fonctionnalités

1. Création de Playlist (create)
  • Créer une nouvelle playlist avec les paramètres suivants :
    • Nom (obligatoire)
    • Description (optionnel)
    • Visibilité publique/privée
    • Option collaborative
  • Utilise l'API Spotify pour créer la playlist sous le compte de l'utilisateur actuel
2. Recherche et Ajout (search_and_add)
  • Permet d'ajouter des titres à une playlist existante
  • Fonctionnalités avancées :
    • Recherche de playlist par ID ou par nom
    • Recherche de titres avec critères spécifiques
    • Gestion des erreurs détaillée
    • Logging des opérations

Implémentation Notable

Création de Playlist
Recherche et Ajout de Titres

Gestion des Erreurs

  • Validation des entrées
  • Gestion des cas d'erreur Spotify
  • Logging détaillé des opérations
  • Messages d'erreur explicites pour l'utilisateur

Points Forts

  • Flexibilité : Support de multiples actions et paramètres
  • Robustesse : Gestion complète des erreurs et des cas limites
  • Traçabilité : Logging détaillé des opérations
  • Convivialité : Messages clairs et retours d'information détaillés

Aspects Techniques

Gestion des Erreurs

Le système implémente une gestion robuste des erreurs avec :

  • Retry sur les erreurs réseau
  • Gestion des expirations de token
  • Logging détaillé des erreurs

Performance

Optimisations notables :

  • Mise en cache des tokens d'authentification
  • Limitation des requêtes API
  • Gestion efficace des ressources

Extensibilité

L'architecture modulaire permet :

  • L'ajout facile de nouveaux outils
  • La modification des comportements existants
  • L'intégration de nouvelles fonctionnalités Spotify

Conclusion

Le Spotify MCP représente une solution technique élégante pour l'intégration entre les assistants IA et Spotify. Son architecture modulaire, sa gestion robuste des erreurs et ses fonctionnalités complètes en font un outil puissant pour le contrôle programmatique de Spotify. Bien sûr, on peut imaginer des MCP server connectés à d’autres services comme Calendar, Google Maps, WhatsApp et bien d’autres applications.

Stack Technique

  • Python 3.12
  • FastAPI
  • Spotipy 2.24.0
  • MCP 1.3.0

Christophe Thibault

Christophe est docteur/ingénieur de formation et Data Scientist. Il s'intéresse de plus en plus à l'intelligence artificielle générative (GenIA) et aux modèles de langage (LLM), en explorant aussi bien le prompt engineering que les aspects backend et infrastructure.