Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "kud"
},
"metadata": {
"version": "2.3.0"
"version": "2.4.0"
},
"plugins": [
{
Expand Down Expand Up @@ -78,6 +78,13 @@
"description": "Turn a revu code review into action β€” discuss, apply, or live-watch the line annotations you captured in the revu TUI.",
"source": "./plugins/revu",
"category": "development"
},
{
"name": "qobuz",
"version": "1.0.0",
"description": "Explore your Qobuz music from Claude β€” search albums, artists, and tracks, browse your favourites and playlists, see what's playing, and get personalised listening recommendations.",
"source": "./plugins/qobuz",
"category": "entertainment"
}
]
}
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.3.0
2.4.0
3 changes: 2 additions & 1 deletion docs/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"trakt",
"raindrop-io",
"google-keep",
"gandi"
"gandi",
"qobuz"
]
}
39 changes: 39 additions & 0 deletions docs/qobuz.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
title: 🎡 qobuz
description: Explore your Qobuz music from Claude β€” search albums, artists, and tracks, browse your favourites and playlists, see what's playing, and get personalised listening recommendations.
---

The **qobuz** plugin wraps the
[`@kud/mcp-qobuz`](https://www.npmjs.com/package/@kud/mcp-qobuz) MCP server.
Explore your Qobuz music from Claude: search albums, artists, and tracks, browse
your favourites and playlists, see what's playing, and get personalised
listening recommendations.

## 🧰 What it bundles

| Skill | Trigger | What it does |
| ------------------ | --------------------------------- | --------------------------------------------------------------------------------------------- |
| `/qobuz-recommend` | `/qobuz-recommend <vibe or seed>` | Recommend music to play, grounded in your favourites and resolved against the Qobuz catalogue |

## πŸ“¦ Install

```
/plugin install qobuz@kud --scope user
```

## πŸ”§ Configuration

The server reads your Qobuz session from the macOS Keychain β€” the same entry
`@kud/qobuz-cli` writes. Log in once:

```
npx @kud/qobuz-cli@latest login
```

For headless or non-macOS hosts, pass `QOBUZ_TOKEN` and `QOBUZ_APP_ID` via the
server's `env` block instead. The `now-playing` tool is macOS-only.

## πŸ”— Links

- npm: [`@kud/mcp-qobuz`](https://www.npmjs.com/package/@kud/mcp-qobuz)
- GitHub: [kud/mcp-qobuz](https://github.com/kud/mcp-qobuz)
21 changes: 21 additions & 0 deletions plugins/qobuz/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "qobuz",
"description": "Explore your Qobuz music from Claude β€” search albums, artists, and tracks, browse your favourites and playlists, see what's playing, and get personalised listening recommendations.",
"version": "1.0.0",
"author": {
"name": "kud",
"url": "https://github.com/kud"
},
"homepage": "https://github.com/kud/mcp-qobuz",
"license": "MIT",
"setup": {
"instructions": "Log in to Qobuz once so the server can read your session from the macOS Keychain: npx @kud/qobuz-cli@latest login",
"command": "npx @kud/qobuz-cli@latest login"
},
"mcpServers": {
"mcp-qobuz": {
"command": "npx",
"args": ["-y", "@kud/mcp-qobuz@latest"]
}
}
}
51 changes: 51 additions & 0 deletions plugins/qobuz/skills/qobuz-recommend/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
name: qobuz-recommend
description: "Recommend music to listen to on Qobuz from a free-text mood, a seed artist/album/track, or what's playing now. Uses your Qobuz favourites and playlists as taste context, then resolves each pick against the Qobuz catalogue. Triggers on: 'what should I listen to', 'recommend an album', 'find me something like X', 'music for <vibe>', '/qobuz-recommend <vibe or seed>'."
---

Recommend music the user can actually play on Qobuz. This is a discovery skill: read their taste, reason over it, then confirm every pick exists in the catalogue before presenting it.

## Step 1 β€” Establish the seed

Work out what anchors the recommendation, in this order:

- **Explicit seed** β€” an artist, album, track, or genre the user named.
- **A stated vibe** β€” a mood, activity, or era ("something for deep focus", "rainy Sunday jazz", "90s shoegaze").
- **What's on now** β€” if they say "more like this" or give no anchor at all, call `now-playing` and use the current track as the seed. On non-macOS hosts this returns an error β€” fall back to the taste signal in Step 2.

## Step 2 β€” Gather taste context (parallel)

Fetch in parallel to ground the picks in what they already love:

- `list-favourites` with type `artists` β€” the strongest signal.
- `list-favourites` with type `albums` β€” recurring labels, eras, production styles.
- `list-playlists` β€” themed listening they've curated (fetch a relevant one with `get-playlist` only if its title matches the request).

Keep this lightweight β€” you're sampling taste, not auditing the whole library.

## Step 3 β€” Reason, then resolve

1. Combine the seed, the taste context, and your own music knowledge to draft **5–8 candidate picks** (artists or albums). Favour **discovery** β€” lean away from artists already in their favourites unless they explicitly asked for deep cuts or more of a known favourite.
2. For each candidate, call `search` on Qobuz to confirm it exists and capture the real album/artist ID. **Drop anything the search doesn't return** β€” never recommend something not in the catalogue.
3. Note availability quality where it matters (e.g. Hi-Res) if the search surfaces it.

## Step 4 β€” Present

Rank by fit and keep it scannable β€” 5 picks unless they ask for more:

```
### For <seed / vibe>

1. **<Artist β€” Album>** Β· <year> Β· <genre>
<one line: why it fits, tied to their taste or the seed>
2. …
```

End with a single offer, not a menu: ask whether to **open** the top pick in the Qobuz app (`open` via the CLI is out of scope here β€” link the album instead) or **build a playlist** from the set.

## Step 5 β€” Optional playlist (guarded)

Only if the user says yes:

- `create-playlist` with `confirm: true`, then `add-to-playlist` with the resolved track/album IDs and `confirm: true`.
- Never write without an explicit go-ahead β€” these tools are guarded for a reason.