Spotify MCP Node Server

Controla la reproducción de Spotify y gestiona listas de reproducción usando asistentes de IA e IDEs.

Documentación

MCP Logo

Spotify MCP Node Server

Un servidor Node de Model Context Protocol (MCP) que permite a asistentes de IA como Claude Desktop, o IDE como Cursor y Windsurf controlar la reproducción de Spotify y gestionar listas de reproducción. Ideal para el descubrimiento de música y la curación creativa de listas. Prueba a pedirle a Claude algunas pistas menos conocidas de un género o similares a un artista. Puedes empezar pidiendo crear una nueva lista de reproducción o actualizar una existente.

Para un inicio rápido más sencillo, a partir de mayo de 2025, Claude Desktop es la forma recomendada de usar este software. Instala Claude Desktop para tu plataforma y sigue la guía de integración a continuación.

Para cumplir con los Términos de Desarrollador de Spotify, debes tener una cuenta de Spotify Premium para usar este servidor. Además, si usas asistentes de IA habilitados para MCP (como Claude) con este servidor, debes optar por no compartir datos para el entrenamiento de modelos.

Contenido

Interacciones de ejemplo

  • "Reproduce bootlegs menos conocidos de The Beatles"
  • "Crea una lista de fusión de The Beatles y Metallica"
  • "¿Cuáles son las características de audio de la pista 'Bohemian Rhapsody' de Queen?"
  • "Crea mi lista de maratón y añade pistas de mis listas de entrenamiento"

Herramientas

Operaciones de lectura
  1. searchSpotify

    • Descripción: Buscar pistas, álbumes, artistas o listas de reproducción en Spotify
    • Parámetros:
      • query (string): El término de búsqueda
      • type (string): Tipo de elemento a buscar (track, album, artist, playlist)
      • limit (number, opcional): Número máximo de resultados a devolver (10-50)
    • Devuelve: Lista de elementos coincidentes con sus IDs, nombres y detalles adicionales
    • Ejemplo: searchSpotify("bohemian rhapsody", "track", 20)
  2. getNowPlaying

    • Descripción: Obtener información sobre la pista que se está reproduciendo actualmente en Spotify
    • Parámetros: Ninguno
    • Devuelve: Objeto que contiene nombre de la pista, artista, álbum, progreso de reproducción, duración y estado de reproducción
    • Ejemplo: getNowPlaying()
  3. getUserPlaylists

    • Descripción: Obtener una lista de las listas de reproducción del usuario actual en Spotify
    • Parámetros:
      • limit (number, opcional): Número máximo de listas de reproducción a devolver (predeterminado: 20)
      • offset (number, opcional): Índice de la primera lista de reproducción a devolver (predeterminado: 0)
    • Devuelve: Matriz de listas de reproducción con sus IDs, nombres, recuentos de pistas y estado público
    • Ejemplo: getUserPlaylists(10, 0)
  4. getPlaylistTracks

    • Descripción: Obtener una lista de pistas en una lista de reproducción específica de Spotify
    • Parámetros:
      • playlistId (string): El ID de Spotify de la lista de reproducción
      • limit (number, opcional): Número máximo de pistas a devolver (predeterminado: 100)
      • offset (number, opcional): Índice de la primera pista a devolver (predeterminado: 0)
    • Devuelve: Matriz de pistas con sus IDs, nombres, artistas, álbum, duración y fecha de adición
    • Ejemplo: getPlaylistTracks("37i9dQZEVXcJZyENOWUFo7")
  5. getRecentlyPlayed

    • Descripción: Recupera una lista de pistas reproducidas recientemente de Spotify.
    • Parámetros:
      • limit (number, opcional): Un número que especifica el número máximo de pistas a devolver.
    • Devuelve: Si se encuentran pistas, devuelve una lista formateada de pistas reproducidas recientemente; de lo contrario, un mensaje que indica: "No tienes pistas reproducidas recientemente en Spotify".
    • Ejemplo: getRecentlyPlayed({ limit: 10 })
  6. getRecentlyPlayed

    • Descripción: Recupera una lista de pistas reproducidas recientemente de Spotify.
    • Parámetros:
      • limit (number, opcional): Un número que especifica el número máximo de pistas a devolver.
    • Devuelve: Si se encuentran pistas, devuelve una lista formateada de pistas reproducidas recientemente; de lo contrario, un mensaje que indica: "No tienes pistas reproducidas recientemente en Spotify".
    • Ejemplo: getRecentlyPlayed({ limit: 10 })
  7. getFollowedArtists

    • Descripción: Recupera una lista de artistas que el usuario sigue en Spotify.
    • Parámetros:
      • after (string, opcional): El último ID de artista de la solicitud anterior. Cursor para la paginación.
      • limit (number, opcional): Número máximo de artistas a devolver (1-50).
    • Devuelve: Si se encuentran artistas, devuelve una lista formateada de artistas seguidos; de lo contrario, un mensaje que indica: "No sigues a ningún artista en Spotify".
    • Ejemplo: getFollowedArtists({ limit: 10 })
  8. getUserTopItems

    • Descripción: Recupera una lista de los artistas o pistas principales del usuario.
    • Parámetros:
      • type (string): El tipo de elementos para obtener los principales. Debe ser "artists" o "tracks".
      • time_range (string): El rango de tiempo para los elementos principales. Debe ser "short_term", "medium_term" o "long_term".
      • limit (number, opcional): Número máximo de elementos a devolver (1-50).
      • offset (number, opcional): Índice del primer elemento a devolver. El valor predeterminado es 0.
    • Devuelve: Si se encuentran elementos, devuelve una lista formateada de elementos principales; de lo contrario, un mensaje que indica: "No tienes elementos principales en Spotify".
    • Ejemplo: getUserTopItems({ type: "artists", time_range: "short_term", limit: 10 })
Operaciones de reproducción / creación
  1. playMusic

    • Descripción: Iniciar la reproducción de una pista, álbum, artista o lista de reproducción en Spotify
    • Parámetros:
      • uri (string, opcional): URI de Spotify del elemento a reproducir (anula tipo e id)
      • type (string, opcional): Tipo de elemento a reproducir (track, album, artist, playlist)
      • id (string, opcional): ID de Spotify del elemento a reproducir
      • deviceId (string, opcional): ID del dispositivo en el que reproducir
    • Devuelve: Estado de éxito
    • Ejemplo: playMusic({ uri: "spotify:track:6rqhFgbbKwnb9MLmUQDhG6" })
    • Alternativa: playMusic({ type: "track", id: "6rqhFgbbKwnb9MLmUQDhG6" })
  2. pausePlayback

    • Descripción: Pausar la pista que se está reproduciendo actualmente en Spotify
    • Parámetros:
      • deviceId (string, opcional): ID del dispositivo a pausar
    • Devuelve: Estado de éxito
    • Ejemplo: pausePlayback()
  3. skipToNext

    • Descripción: Saltar a la siguiente pista en la cola de reproducción actual
    • Parámetros:
      • deviceId (string, opcional): ID del dispositivo
    • Devuelve: Estado de éxito
    • Ejemplo: skipToNext()
  4. skipToPrevious

    • Descripción: Saltar a la pista anterior en la cola de reproducción actual
    • Parámetros:
      • deviceId (string, opcional): ID del dispositivo
    • Devuelve: Estado de éxito
    • Ejemplo: skipToPrevious()
  5. createPlaylist

    • Descripción: Crear una nueva lista de reproducción en Spotify
    • Parámetros:
      • name (string): Nombre de la nueva lista de reproducción
      • description (string, opcional): Descripción de la lista de reproducción
      • public (boolean, opcional): Si la lista de reproducción debe ser pública (predeterminado: false)
    • Devuelve: Objeto con el ID y la URL de la nueva lista de reproducción
    • Ejemplo: createPlaylist({ name: "Workout Mix", description: "Songs to get pumped up", public: false })
  6. addTracksToPlaylist

    • Descripción: Añadir pistas a una lista de reproducción existente de Spotify
    • Parámetros:
      • playlistId (string): ID de la lista de reproducción
      • trackUris (array): Matriz de URIs o IDs de pistas a añadir
      • position (number, opcional): Posición para insertar pistas
    • Devuelve: Estado de éxito e ID de instantánea
    • Ejemplo: addTracksToPlaylist({ playlistId: "3cEYpjA9oz9GiPac4AsH4n", trackUris: ["spotify:track:4iV5W9uYEdYUVa79Axb7Rh"] })
  7. addToQueue

    • Descripción: Añade una pista, álbum, artista o lista de reproducción a la cola de reproducción actual
      • Parámetros:
      • uri (string, opcional): URI de Spotify del elemento a añadir a la cola (anula tipo e id)
      • type (string, opcional): Tipo de elemento a poner en cola (track, album, artist, playlist)
      • id (string, opcional): ID de Spotify del elemento a poner en cola
      • deviceId (string, opcional): ID del dispositivo en el que poner en cola
    • Devuelve: Estado de éxito
    • Ejemplo: addToQueue({ uri: "spotify:track:6rqhFgbbKwnb9MLmUQDhG6" })
    • Alternativa: addToQueue({ type: "track", id: "6rqhFgbbKwnb9MLmUQDhG6" })

Configuración

Requisitos previos

Instalación del servidor MCP

git clone https://github.com/igorgarbuz/spotify-mcp.git
cd spotify-mcp
npm install
npm run build

Instalación de Node.js

  1. Ve a la página de descarga de Node.js
  2. Descarga e instala una versión reciente de Node.js para tu plataforma

Creación de una aplicación de desarrollador de Spotify

  1. Ve al Panel de desarrolladores de Spotify
  2. Inicia sesión con tu cuenta de Spotify
  3. Haz clic en el botón "Create an App"
  4. Completa el nombre y la descripción de la aplicación
  5. Acepta los Términos de Servicio y haz clic en "Create"
  6. En el panel de tu nueva aplicación, verás tu Client ID
  7. Haz clic en "Edit Settings" y añade una URI de redirección (p. ej., http://127.0.0.1:8888/callback)
  8. Guarda tus cambios

Configuración de la API de Spotify

Crea un archivo spotify-config.json en la raíz del proyecto:

# Copy the example config file
cp spotify-config.example.json spotify-config.json

Luego edita el archivo añadiendo solo tu client id. Los accessToken, refreshToken y accessTokenExpiresAt se gestionarán automáticamente. El redirectUri debe ser el mismo que añadiste en el Panel de desarrolladores de Spotify. 127.0.0.1 es la opción más sencilla para el servidor MCP local.

{
  "clientId": "you-must-add-your-client-id-here",
  "redirectUri": "http://127.0.0.1:8888/callback",
  "accessToken": "your-access-token-filled-automatically",
  "refreshToken": "your-refresh-token-filled-automatically",
  "accessTokenExpiresAt": 0
}

Proceso de autenticación

La API de Spotify utiliza OAuth 2.0 con la extensión PKCE para una autenticación segura. NO necesitas un secreto de cliente para esta aplicación.

  1. Ejecuta el script de autenticación en el directorio del repositorio clonado:
npm run auth
  1. El script abrirá tu navegador en la página de autorización de Spotify.

  2. Inicia sesión en Spotify y autoriza tu aplicación.

  3. Después de la autorización, Spotify te redirigirá a tu URI de redirección especificada. La aplicación gestionará automáticamente el intercambio de código y guardará tus tokens.

  4. El script de autenticación intercambiará automáticamente este código por los tokens de acceso y actualización.

  5. Estos tokens se guardarán en tu archivo spotify-config.json.

{
  "clientId": "your-client-id",
  "redirectUri": "http://127.0.0.1:8888/callback",
  "accessToken": "your-access-token-filled-automatically",
  "refreshToken": "your-refresh-token-filled-automatically",
  "accessTokenExpiresAt": 0
}
  1. El servidor actualizará automáticamente el token de acceso cuando sea necesario, por lo que no necesitas volver a autenticarte.

Integración con asistentes de IA

Claude Desktop

La forma más sencilla de usar el servidor MCP de Spotify es con Claude Desktop. Inicia la instalación de Claude Desktop y luego localiza el archivo de configuración de Claude, ve a Claude Settings, haz clic en Developer y luego en Edit Config. Añade lo siguiente a la configuración con una ruta absoluta al servidor:

{
  "mcpServers": {
    "spotify": {
      "command": "node",
      "args": ["absolute/path/to/spotify-mcp/build/index.js"]
    }
  }
}

Cursor

Para Cursor, ve a la pestaña MCP en Cursor Settings (command + shift + J). Añade un servidor con este comando:

node absolute/path/to/spotify-mcp/build/index.js

VsCode (vía Cline)

Para configurar tu MCP correctamente con Cline, asegúrate de tener la siguiente configuración de archivo establecida cline_mcp_settings.json:

{
  "mcpServers": {
    "spotify": {
      "command": "node",
      "args": ["/absolute/path/to/spotify-mcp/build/index.js"],
      "autoApprove": ["getListeningHistory", "getNowPlaying"]
    }
  }
}

Puedes añadir herramientas adicionales a la matriz de aprobación automática para ejecutar las herramientas sin intervención.

Windsurf

En Settings luego Windsurf Settings escribe MCP en la barra de búsqueda. En la sección MCP de los resultados, haz clic en add server y luego en add custom server. Añade la siguiente configuración:

{
  "mcpServers": {
    "spotify": {
      "command": "node",
      "args": ["absolute/path/to/spotify-mcp/build/index.js"],
    }
  }
}

Puedes añadir herramientas adicionales a la matriz de aprobación automática para ejecutar las herramientas sin intervención.

Créditos

Este proyecto fue inspirado por spotify-mcp-server de Marcel Marais. Modificaciones principales:

  1. El proceso de autenticación fue refactorizado para usar la extensión PKCE de la API de Spotify, eliminando la necesidad de almacenar el secreto del cliente localmente y de reautenticación repetida.
  2. Se añadieron nuevas herramientas para entender los gustos del usuario.