urmusic-mcp
# urmusic-mcp
Un MCP personal sobre tu propio historial de Spotify. Corre 100% en tu
máquina — tu JSON nunca sale de tu disco, nunca se sube a ningún servidor.
## 1. Pide tu historial a Spotify
1. Ve a [privacy.spotify.com/es/account/privacy](https://www.spotify.com/es/account/privacy/)
2. Baja hasta "Descarga tus datos" y marca **"Historial de streaming extendido"**
(no el básico — ese solo trae el último año)
3. Confirma por email. Spotify tarda entre unos días y unas semanas en
mandarte un ZIP.
4. Descomprime el ZIP en una carpeta — dentro verás varios
`Streaming_History_Audio_*.json`.
## 2. Instala
Necesitas [uv](https://docs.astral.sh/uv/):
```bash
git clone https://github.com/ipaud/urmusic-mcp
cd urmusic-mcp
uv sync
```
## 3. Genera tu base de datos local
```bash
uv run ingest.py ./ruta/a/la/carpeta/descomprimida
```
Esto crea `listening.db` en el proyecto. Está en `.gitignore` — nunca la
subas a ningún sitio, es tu historial personal.
## 4. Conéctalo a Claude
Con Claude Code:
```bash
claude mcp add musica -- uv run --directory /ruta/absoluta/a/urmusic-mcp server.py
```
Con Claude Desktop, añade a tu config MCP:
```json
{
"mcpServers": {
"musica": {
"command": "uv",
"args": ["run", "--directory", "/ruta/absoluta/a/urmusic-mcp", "server.py"]
}
}
}
```
Reinicia y pregunta algo como:
- "¿Qué artistas escuché con atención y dejé tirados hace 5 años?"
- "Top 10 por convicción, no por reproducciones"
- "Recomiéndame música nueva basada en mis semillas de más convicción"
## Qué hace cada tool
| Tool | Qué hace |
|---|---|
| `listening_schema` | Esquema de la base de datos |
| `listening_query` | SQL de solo lectura sobre tu historial |
| `listening_find_dormant` | Artistas escuchados con atención y abandonados hace X años, con carátulas |
| `listening_expand_artist` | Candidatos nuevos vía MusicBrainz (miembros, colaboradores, sello), con carátulas |
| `listening_artist_profile` | Perfil completo de un artista: plays, convicción, rango temporal, carátula del álbum más escuchado |
| `listening_year_in_review` | Top artistas de un año por minutos escuchados, con carátulas |
| `listening_top_albums` | Top álbumes por reproducciones, con carátulas |
Las carátulas vienen de MusicBrainz + Cover Art Archive y van activadas por
defecto (`with_art=true`) en los tools que devuelven varios artistas/álbumes.
Cada una cuesta 2 llamadas a MusicBrainz a 1 req/seg, así que listas largas
tardan más — pon `with_art=false` si prefieres respuesta rápida sin imágenes.
## Privacidad
- Nada de esto llama a ningún servidor tuyo ni de terceros excepto
MusicBrainz y Cover Art Archive (solo nombres de artista/álbum, para
buscar relaciones y carátulas — nunca tu historial).
- `listening.db` vive solo en el disco de quien lo genera.
- Si compartes este repo, comparte el código — nunca tu `.db`.
## Licencia
[MIT](LICENSE)
TDQS
Scored across 7 tools
Each tool targets a clearly distinct purpose: raw SQL querying, dormant artist discovery, artist expansion via MusicBrainz, artist profile, yearly review, top albums, and schema introspection. Even listening_year_in_review vs listening_top_albums are explicitly disambiguated in their descriptions (grouping by artist vs album).
All tools follow a consistent listening_verb_noun pattern (query, find_dormant, expand_artist, artist_profile, year_in_review, top_albums, schema). The verb_noun structure is uniform and predictable throughout.
Seven tools is a well-scoped set for a listening-history MCP server. Each tool earns its place: data access, schema introspection, and several distinct analytical/exploratory queries.
The surface covers the main listening-history use cases well: raw querying, artist profiles, top albums, yearly review, dormant-artist leads, and artist expansion. A minor gap is the lack of a broader 'top artists all-time' tool independent of a specific year, though listening_query could cover it.