From 8a269721f809cba1d7c6a5a12ec1e204968152f3 Mon Sep 17 00:00:00 2001 From: Erwann Mest Date: Wed, 8 Jul 2026 16:12:42 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=B5=20feat(qobuz):=20add=20qobuz=20plu?= =?UTF-8?q?gin=20v1.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Registers the qobuz plugin in the marketplace and docs, ships the plugin manifest, and adds the qobuz-recommend skill backed by @kud/mcp-qobuz. - Bumps marketplace and VERSION to 2.4.0 - Adds plugins/qobuz/.claude-plugin/plugin.json with npx @kud/mcp-qobuz@latest MCP server config - Ships plugins/qobuz/skills/qobuz-recommend/SKILL.md โ€” discovery skill using now-playing, list-favourites, list-playlists, and search - Adds docs/qobuz.mdx with install, config, and links - Registers qobuz in docs/meta.json plugin list --- .claude-plugin/marketplace.json | 9 +++- VERSION | 2 +- docs/meta.json | 3 +- docs/qobuz.mdx | 39 ++++++++++++++ plugins/qobuz/.claude-plugin/plugin.json | 21 ++++++++ plugins/qobuz/skills/qobuz-recommend/SKILL.md | 51 +++++++++++++++++++ 6 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 docs/qobuz.mdx create mode 100644 plugins/qobuz/.claude-plugin/plugin.json create mode 100644 plugins/qobuz/skills/qobuz-recommend/SKILL.md diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 444ec26..61110c3 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,7 +6,7 @@ "name": "kud" }, "metadata": { - "version": "2.3.0" + "version": "2.4.0" }, "plugins": [ { @@ -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" } ] } diff --git a/VERSION b/VERSION index 276cbf9..197c4d5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.3.0 +2.4.0 diff --git a/docs/meta.json b/docs/meta.json index 65dd51d..25472f6 100644 --- a/docs/meta.json +++ b/docs/meta.json @@ -9,6 +9,7 @@ "trakt", "raindrop-io", "google-keep", - "gandi" + "gandi", + "qobuz" ] } diff --git a/docs/qobuz.mdx b/docs/qobuz.mdx new file mode 100644 index 0000000..84bb933 --- /dev/null +++ b/docs/qobuz.mdx @@ -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 ` | 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) diff --git a/plugins/qobuz/.claude-plugin/plugin.json b/plugins/qobuz/.claude-plugin/plugin.json new file mode 100644 index 0000000..65b05a3 --- /dev/null +++ b/plugins/qobuz/.claude-plugin/plugin.json @@ -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"] + } + } +} diff --git a/plugins/qobuz/skills/qobuz-recommend/SKILL.md b/plugins/qobuz/skills/qobuz-recommend/SKILL.md new file mode 100644 index 0000000..f0150be --- /dev/null +++ b/plugins/qobuz/skills/qobuz-recommend/SKILL.md @@ -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 ', '/qobuz-recommend '." +--- + +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 + +1. **** ยท ยท + +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.