roon-mcp 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +61 -11
  3. package/dist/PlaybackService.d.ts +16 -0
  4. package/dist/PlaybackService.js +59 -2
  5. package/dist/PlaybackService.js.map +1 -1
  6. package/dist/PlaybackService.test.js +63 -0
  7. package/dist/PlaybackService.test.js.map +1 -1
  8. package/dist/RoonClient.d.ts +21 -0
  9. package/dist/RoonClient.js +35 -0
  10. package/dist/RoonClient.js.map +1 -1
  11. package/dist/RoonMcpServer.d.ts +3 -1
  12. package/dist/RoonMcpServer.js +215 -39
  13. package/dist/RoonMcpServer.js.map +1 -1
  14. package/dist/SearchService.d.ts +12 -0
  15. package/dist/SearchService.js +63 -1
  16. package/dist/SearchService.js.map +1 -1
  17. package/dist/SearchService.test.js +79 -4
  18. package/dist/SearchService.test.js.map +1 -1
  19. package/dist/TransportService.d.ts +73 -0
  20. package/dist/TransportService.js +248 -0
  21. package/dist/TransportService.js.map +1 -0
  22. package/dist/TransportService.test.d.ts +1 -0
  23. package/dist/TransportService.test.js +331 -0
  24. package/dist/TransportService.test.js.map +1 -0
  25. package/dist/ZoneService.d.ts +1 -0
  26. package/dist/ZoneService.js +9 -0
  27. package/dist/ZoneService.js.map +1 -1
  28. package/dist/ZoneService.test.js +1 -0
  29. package/dist/ZoneService.test.js.map +1 -1
  30. package/dist/ZoneSubscription.d.ts +67 -0
  31. package/dist/ZoneSubscription.js +187 -0
  32. package/dist/ZoneSubscription.js.map +1 -0
  33. package/dist/ZoneSubscription.test.d.ts +1 -0
  34. package/dist/ZoneSubscription.test.js +185 -0
  35. package/dist/ZoneSubscription.test.js.map +1 -0
  36. package/dist/index.js +3 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/types.d.ts +39 -1
  39. package/dist/types.js.map +1 -1
  40. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,41 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The version history source of truth is git tags in the format `vMAJOR.MINOR.PATCH`.
6
6
 
7
+ ## [0.2.1]
8
+
9
+ ### Fixed
10
+
11
+ - `nowPlaying` returned by `play_now` / `enqueue_and_play` no longer reports
12
+ the track that was playing *before* the action (issue #1). The server now
13
+ subscribes to Roon's zone-state stream at startup and waits for the next
14
+ `Changed` event after a playback action before reading the snapshot, so
15
+ the response reflects the new track. Falls back to the cached snapshot
16
+ after a 2 s timeout so a slow Core never delays an MCP call.
17
+
18
+ ### Changed
19
+
20
+ - README: added a natural-language example prompt to illustrate conversational
21
+ Roon control via an AI agent.
22
+
23
+ ## [0.2.0] - 2026-06-21
24
+
25
+ ### Added
26
+
27
+ - `now_playing`, `control_playback`, `set_volume`, and `mute` tools to expose
28
+ Roon's transport controls and current-track state. Previously the server
29
+ could only start playback, not steer it.
30
+ - `search_music({ type: "artist", includeStreaming: true })` now appends a
31
+ streaming track mix by the requested artist (via a track search filtered
32
+ to that artist's subtitle), so requests like "queue multiple *Artist*
33
+ songs" work even when the artist is missing from the local library or
34
+ has zero library albums. The streaming path mirrors the existing
35
+ genre `includeStreaming` flow: library candidates first, then
36
+ ready-to-play streaming tracks appended with `sourceGroup: "Streaming"`.
37
+ - `search_music({ type: "artist" })` now reports an artist with no library
38
+ content (e.g. `subtitle: "0 Albums"`) via the result's `message` field,
39
+ so the agent can opt in to the streaming fallback up front instead of
40
+ discovering the dead end at `get_tracks_for` time.
41
+
7
42
  ## [0.1.0] - 2026-06-21
8
43
 
9
44
  ### Added
package/README.md CHANGED
@@ -5,6 +5,14 @@ player, so an AI agent can find music and start playback. Built on the official
5
5
  Roon Extension API (`node-roon-api` + `node-roon-api-transport` /
6
6
  `node-roon-api-browse`).
7
7
 
8
+ ---
9
+
10
+ > **"Play a female vocal trance mix on Roon (Zone: This Computer) — 2000s Dutch trance vibes, the kind of set you'd hear at Amnesia in its prime. Start with something like 4 Strings' Take Me Away."**
11
+ >
12
+ > *Claude searches across your library and streaming, hand-picks the tracks, and queues them — all from a single natural-language prompt.*
13
+
14
+ ---
15
+
8
16
  ## Requirements
9
17
 
10
18
  - Node.js 20+
@@ -60,12 +68,16 @@ npm install -g roon-mcp
60
68
  | Tool | Purpose |
61
69
  | --- | --- |
62
70
  | `list_zones()` | List playable zones/outputs (id, name, state, output ids). |
63
- | `search_music({ query, type?, limit?, includeStreaming? })` | Resolve a text query into ranked browse candidates (opaque, session-scoped item keys). `type` (`artist`/`album`/`track`/`genre`/`playlist`/`radio`) restricts the category; for non-genre types an empty typed search broadens to all categories. See [Genre search](#genre-search) for `type:"genre"` and `includeStreaming`. |
71
+ | `search_music({ query, type?, limit?, includeStreaming? })` | Resolve a text query into ranked browse candidates (opaque, session-scoped item keys). `type` (`artist`/`album`/`track`/`genre`/`playlist`/`radio`) restricts the category; for non-genre types an empty typed search broadens to all categories. See [Streaming search](#streaming-search-genre-and-artist) for `type:"genre"`/`type:"artist"` and `includeStreaming`. |
64
72
  | `get_tracks_for({ itemKey, limit? })` | Expand an artist/album/genre/playlist candidate into concrete playable tracks. |
65
73
  | `play_now({ zoneId?, itemKey, shuffle? })` | Immediately play one search candidate; `zoneId` optional (defaults as above). |
66
74
  | `enqueue_and_play({ zoneId?, itemKeys, shuffle? })` | Build an ad-hoc queue from curated item keys and start it (**replaces** the zone's queue); reports queued/skipped. |
75
+ | `now_playing({ zoneId? })` | Snapshot of the zone's current track — state, title, artist, album, seek position. `title`/`artist`/`album` are undefined when nothing is playing. |
76
+ | `control_playback({ zoneId?, action })` | Run a transport verb: `pause` / `resume` / `next` / `previous` / `stop`. |
77
+ | `set_volume({ zoneId?, level })` | Set the zone's volume to `level` percent (0–100). Rescales to each output's native range; incremental outputs are reported as skipped. |
78
+ | `mute({ zoneId?, muted })` | Mute (`muted: true`) or unmute (`muted: false`) every output in the zone. |
67
79
 
68
- ### Genre search
80
+ ### Streaming search (genre and artist)
69
81
 
70
82
  Genres don't appear in Roon's flat search hierarchy, so `search_music({ type: "genre" })`
71
83
  is handled specially: the server walks Roon's dedicated **Genres** tree (cached per
@@ -75,15 +87,53 @@ never silently broadens to artists/albums. These candidates are **library-scoped
75
87
  (genres present in your collection, including TIDAL albums you've added). Expand one
76
88
  with `get_tracks_for` to get a cross-album mix of that genre.
77
89
 
78
- Pass **`includeStreaming: true`** (only meaningful for `type:"genre"`) to also pull a
79
- track mix from streaming services for discovery beyond your library. The server takes
80
- the genre-relevant **albums** the flat search surfaces and samples tracks across them.
81
- The result lists library genre nodes first, then ready-to-play streaming tracks (each a
82
- `track` candidate, source group `Streaming`) appended after. Default is `false`
83
- (library only).
84
-
85
- > Cost: with `includeStreaming` on, each sampled album re-navigates the flat search, so
86
- > an opt-in streaming genre search does a handful of extra browse round-trips.
90
+ Artist search is library-scoped too: `search_music({ type: "artist" })` returns artists
91
+ present in your collection. When the top-ranked artist has no library content e.g. a
92
+ node with `subtitle: "0 Albums"` because all albums were removed, or an artist not in
93
+ your library at all but available on TIDAL the result's `message` field carries a
94
+ hint so the agent can opt in to the streaming path (see below) without having to
95
+ discover the dead end at `get_tracks_for` time.
96
+
97
+ Pass **`includeStreaming: true`** (meaningful for both `type:"genre"` and
98
+ `type:"artist"`) to also pull a track mix from streaming services for discovery beyond
99
+ your library:
100
+
101
+ - For `type:"genre"`, the server takes the genre-relevant **albums** the flat search
102
+ surfaces and samples tracks across them. Library genre nodes come first, then
103
+ ready-to-play streaming tracks (each a `track` candidate, source group `Streaming`)
104
+ appended after.
105
+ - For `type:"artist"`, the server runs a track search and filters to entries by that
106
+ artist (matching the track's subtitle, which Roon uses for the artist on track rows).
107
+ Library artist candidates come first, then streaming tracks by the same artist
108
+ appended after. This is the path that unblocks "play/queue multiple *Artist* songs"
109
+ for an artist with no library content: the streaming tracks are queue-playable
110
+ directly via `enqueue_and_play`. Results are best-effort — a small fraction may be
111
+ features or compilations; the agent's per-artist cap / dedupe handles that.
112
+
113
+ Default is `false` (library only).
114
+
115
+ > Cost: with `includeStreaming` on, each sampled album/track re-navigates the flat
116
+ > search, so an opt-in streaming search does a handful of extra browse round-trips.
117
+
118
+ ### Now playing & transport
119
+
120
+ `now_playing({ zoneId? })` returns a structured snapshot (state, title, artist,
121
+ album, seek position) so the agent can confirm what's on and where before
122
+ running a transport verb. The server subscribes to Roon's zone-state stream
123
+ once per paired Core and waits for the next `Changed` event after `play_now`
124
+ /`enqueue_and_play`/`control_playback` — so `nowPlaying` in the response
125
+ reflects the new track rather than the one that was playing before the
126
+ action. The wait times out fast on a slow Core (2 s) and falls back to the
127
+ cached snapshot, so a hung subscription can never delay an MCP call.
128
+ `control_playback` takes one verb at a time
129
+ (`pause`, `resume`, `next`, `previous`, `stop`) — there is no compound
130
+ "pause and skip." For "louder" / "softer" without a number, `set_volume` is
131
+ absolute, so the agent should ask for a target percent or apply a default
132
+ delta; volume isn't reported in `now_playing`. Volume and mute fan out to
133
+ every output in the resolved zone and rescale per output, so a single
134
+ `set_volume({ level: 50 })` works correctly across a grouped zone with mixed
135
+ dB / numeric devices; incremental outputs (IR blasters and the like) are
136
+ reported as `skipped` in the result.
87
137
 
88
138
  ## Assumptions
89
139
 
@@ -40,4 +40,20 @@ export declare class PlaybackService {
40
40
  private findAction;
41
41
  /** Best-effort shuffle via Transport; returns false if unsupported/failed. */
42
42
  private trySetShuffle;
43
+ /**
44
+ * Snapshot a zone's `(state, title, artist, album)` fingerprint before a
45
+ * playback action runs, so we can wait for the post-action change. Reads
46
+ * via the active subscription (or `get_zones` cold-start fallback). Returns
47
+ * `undefined` when no subscription is active and the zone isn't yet known
48
+ * — the caller falls back to the legacy immediate read.
49
+ */
50
+ private captureFingerprint;
51
+ /** One-shot `get_zones` RPC for the cold-start case (no subscription yet). */
52
+ private coldStartGetZones;
53
+ /**
54
+ * Read the `now_playing` line for a zone after a playback action, waiting
55
+ * for the subscription to push a snapshot that reflects the change.
56
+ * Returns `undefined` when the zone isn't reported (e.g. Core unpaired).
57
+ */
58
+ private readNowPlayingLine;
43
59
  }
@@ -1,6 +1,7 @@
1
1
  import { silentLogger } from "./logger.js";
2
2
  import { hierarchyForLocator } from "./locator.js";
3
3
  import { SearchNavigator, requireLocator } from "./SearchNavigator.js";
4
+ import { fingerprintFor, } from "./ZoneSubscription.js";
4
5
  import { RoonMcpError, } from "./types.js";
5
6
  // Item keys handed to playback are locators; we drive the playback drill in the
6
7
  // hierarchy that produced them (flat "search" for most items, "genres" for a
@@ -100,6 +101,11 @@ export class PlaybackService {
100
101
  const usedShuffleAction = normalize(action.title).includes("shuffle");
101
102
  // 3. Invoke the action against the target zone. Starting new content must
102
103
  // go through a Browse action carrying zone_or_output_id (not Transport).
104
+ // Capture the pre-action fingerprint so we can wait for Roon to push the
105
+ // post-action snapshot. Reading `now_playing` immediately after the
106
+ // browse action would still return the pre-action track (issue #1).
107
+ const sub = this.roon.getActiveSubscription();
108
+ const before = await this.captureFingerprint(sub, zoneId);
103
109
  const result = await this.browse.browse({
104
110
  hierarchy,
105
111
  item_key: action.item_key,
@@ -118,7 +124,7 @@ export class PlaybackService {
118
124
  " Shuffle was requested but could not be applied (no shuffle action and Transport setting unavailable).";
119
125
  }
120
126
  }
121
- const nowPlaying = await this.zones.nowPlayingFor(zoneId).catch(() => undefined);
127
+ const nowPlaying = await this.readNowPlayingLine(sub, zoneId, before);
122
128
  return {
123
129
  ok: true,
124
130
  zoneId,
@@ -151,6 +157,11 @@ export class PlaybackService {
151
157
  const skipped = [];
152
158
  let queued = 0;
153
159
  let index = 0;
160
+ // Capture the pre-action fingerprint so we can wait for Roon to push
161
+ // the post-action snapshot. Reading `now_playing` immediately after
162
+ // the browse action would still return the pre-action track (issue #1).
163
+ const sub = this.roon.getActiveSubscription();
164
+ const before = await this.captureFingerprint(sub, targetId);
154
165
  // 1. Start the queue with the first item that can Play Now. If the first
155
166
  // can't play, fall through to the next as the queue starter.
156
167
  let started = false;
@@ -193,7 +204,7 @@ export class PlaybackService {
193
204
  shuffleNote = ` Shuffle ${input.shuffle ? "on" : "off"} could not be applied (Transport setting unavailable).`;
194
205
  }
195
206
  }
196
- const nowPlaying = await this.zones.nowPlayingFor(targetId).catch(() => undefined);
207
+ const nowPlaying = await this.readNowPlayingLine(sub, targetId, before);
197
208
  const message = `Queued ${queued} of ${requested} item(s)` +
198
209
  (skipped.length > 0 ? `, skipped ${skipped.length}.` : ".") +
199
210
  (shuffleNote ?? "");
@@ -287,5 +298,51 @@ export class PlaybackService {
287
298
  });
288
299
  }), (applied) => ({ applied }));
289
300
  }
301
+ /**
302
+ * Snapshot a zone's `(state, title, artist, album)` fingerprint before a
303
+ * playback action runs, so we can wait for the post-action change. Reads
304
+ * via the active subscription (or `get_zones` cold-start fallback). Returns
305
+ * `undefined` when no subscription is active and the zone isn't yet known
306
+ * — the caller falls back to the legacy immediate read.
307
+ */
308
+ async captureFingerprint(sub, zoneId) {
309
+ if (!sub)
310
+ return undefined;
311
+ const body = await sub.getSnapshot(() => this.coldStartGetZones());
312
+ return fingerprintFor(body, zoneId);
313
+ }
314
+ /** One-shot `get_zones` RPC for the cold-start case (no subscription yet). */
315
+ coldStartGetZones() {
316
+ const transport = this.roon.getTransport();
317
+ return new Promise((resolve, reject) => {
318
+ transport.get_zones((err, result) => {
319
+ if (err) {
320
+ reject(new RoonMcpError("BROWSE_FAILED", `get_zones failed: ${err}`));
321
+ return;
322
+ }
323
+ resolve(result);
324
+ });
325
+ });
326
+ }
327
+ /**
328
+ * Read the `now_playing` line for a zone after a playback action, waiting
329
+ * for the subscription to push a snapshot that reflects the change.
330
+ * Returns `undefined` when the zone isn't reported (e.g. Core unpaired).
331
+ */
332
+ async readNowPlayingLine(sub, zoneId, before) {
333
+ try {
334
+ if (!sub || !before) {
335
+ return await this.zones.nowPlayingFor(zoneId);
336
+ }
337
+ const after = await sub.waitForZoneChange(zoneId, before);
338
+ const z = (after.zones ?? []).find((x) => x.zone_id === zoneId ||
339
+ (x.outputs ?? []).some((o) => o.output_id === zoneId));
340
+ const np = z?.now_playing;
341
+ return np?.two_line?.line1 ?? np?.one_line?.line1 ?? np?.three_line?.line1;
342
+ }
343
+ catch {
344
+ return undefined;
345
+ }
346
+ }
290
347
  }
291
348
  //# sourceMappingURL=PlaybackService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaybackService.js","sourceRoot":"","sources":["../src/PlaybackService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlaybackService.js","sourceRoot":"","sources":["../src/PlaybackService.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { PlaybackService } from "./PlaybackService.js";
6
6
  import { TrackExpansionService } from "./TrackExpansionService.js";
7
7
  import { RoonMcpError } from "./types.js";
8
8
  import { ZoneService } from "./ZoneService.js";
9
+ import { ZoneSubscription } from "./ZoneSubscription.js";
9
10
  /** Locator for a single-group/single-item search keyed by `query`. */
10
11
  const loc = (query) => encodeLocator({ q: query, g: 0, i: 0 });
11
12
  // Synthetic keys for the canned search tree the navigator walks:
@@ -117,6 +118,7 @@ function build(items, actionKeys, opts = {}) {
117
118
  waitForCore: async () => undefined,
118
119
  getBrowse: () => browse,
119
120
  getTransport: () => transport,
121
+ getActiveSubscription: () => undefined,
120
122
  };
121
123
  const mgr = new BrowseSessionManager(stub);
122
124
  const zones = new ZoneService(stub);
@@ -278,4 +280,65 @@ test("enqueue rejects an unknown zone id with ZONE_NOT_FOUND", async () => {
278
280
  const { svc } = build({ t1: [action("Play Now", "p1")] }, ["p1"]);
279
281
  await assert.rejects(svc.enqueueAndPlay({ zoneId: "nope", itemKeys: [loc("t1")] }), (e) => e instanceof RoonMcpError && e.code === "ZONE_NOT_FOUND");
280
282
  });
283
+ /**
284
+ * Subscription-backed playback stub. The pre-loaded snapshot reports the
285
+ * previous track; the test fires a `Changed` event after the action so the
286
+ * service reads the new track (not the pre-action one) — issue #1.
287
+ */
288
+ function buildWithSubscription() {
289
+ const browse = new FakeBrowse({ album: [action("Play Now", "act:play")] }, new Set(["act:play"]));
290
+ const transport = new FakeTransport([ZONE]);
291
+ let cb;
292
+ const transportWithSub = {
293
+ ...transport,
294
+ subscribe_zones: (callback) => {
295
+ cb = callback;
296
+ },
297
+ };
298
+ const sub = new ZoneSubscription(transportWithSub, "core-1");
299
+ sub.start();
300
+ // Pre-load the cache so the pre-fingerprint read comes from the
301
+ // subscription, not a cold-start RPC.
302
+ cb?.("Subscribed", { zones: [ZONE] });
303
+ const stub = {
304
+ waitForCore: async () => undefined,
305
+ getBrowse: () => browse,
306
+ getTransport: () => transport,
307
+ getActiveSubscription: () => sub,
308
+ };
309
+ const mgr = new BrowseSessionManager(stub);
310
+ const zones = new ZoneService(stub);
311
+ const tracks = new TrackExpansionService(mgr);
312
+ const svc = new PlaybackService(mgr, zones, stub, tracks);
313
+ return { svc, push: (r, b) => cb?.(r, b) };
314
+ }
315
+ test("play_now returns the new track in nowPlaying (issue #1)", async () => {
316
+ // Reproduces the bug: the previous test pre-loaded "Some Track" into
317
+ // ZONE. The subscription will push a Changed event with "Brand New Track"
318
+ // before the service reads the post-action snapshot. With the wait-for-
319
+ // change fix, nowPlaying should reflect the new track.
320
+ const { svc, push } = buildWithSubscription();
321
+ const newZone = {
322
+ ...ZONE,
323
+ state: "playing",
324
+ now_playing: { two_line: { line1: "Brand New Track", line2: "Brand New Artist" } },
325
+ };
326
+ const out = await Promise.all([
327
+ svc.playNow({ zoneId: "z1", itemKey: loc("album") }),
328
+ new Promise((r) => setTimeout(() => {
329
+ push("Changed", { zones_changed: [newZone] });
330
+ r();
331
+ }, 5)),
332
+ ]).then(([res]) => res);
333
+ assert.equal(out.nowPlaying, "Brand New Track");
334
+ });
335
+ test("play_now still reports the previous track when no Changed event arrives", async () => {
336
+ // On a slow Core where the subscription never pushes the new state,
337
+ // the service should time out and return whatever is in the cache —
338
+ // matching the legacy "may be stale" behavior. This pins the timeout
339
+ // fallback so a misbehaving subscription can't hang the call.
340
+ const { svc } = buildWithSubscription();
341
+ const out = await svc.playNow({ zoneId: "z1", itemKey: loc("album") });
342
+ assert.equal(out.nowPlaying, "Some Track");
343
+ });
281
344
  //# sourceMappingURL=PlaybackService.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaybackService.test.js","sourceRoot":"","sources":["../src/PlaybackService.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlaybackService.test.js","sourceRoot":"","sources":["../src/PlaybackService.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { type RoonCore } from "node-roon-api";
2
2
  import { type RoonApiBrowse as RoonBrowseService } from "node-roon-api-browse";
3
3
  import { type RoonApiTransport as RoonTransportService } from "node-roon-api-transport";
4
+ import { ZoneSubscription, ZoneSubscriptionRegistry } from "./ZoneSubscription.js";
4
5
  export interface RoonClientOptions {
5
6
  extensionId?: string;
6
7
  displayName?: string;
@@ -19,6 +20,13 @@ export declare class RoonClient {
19
20
  private readonly roon;
20
21
  private readonly status;
21
22
  private readonly log;
23
+ /**
24
+ * Tracks `subscribe_zones` callbacks per paired Core. Read services pull
25
+ * zone state from this registry's cache (when fresh) and wait on it after
26
+ * a playback action so `now_playing` reflects the new track rather than
27
+ * the pre-action one. See issue #1.
28
+ */
29
+ private readonly zones;
22
30
  private core;
23
31
  private readonly coreWaiters;
24
32
  constructor(options?: RoonClientOptions);
@@ -32,6 +40,19 @@ export declare class RoonClient {
32
40
  getTransport(): RoonTransportService;
33
41
  /** Browse service of the currently paired Core. Throws if unpaired. */
34
42
  getBrowse(): RoonBrowseService;
43
+ /**
44
+ * The `subscribe_zones` registry, keyed by `core_id`. Read services use
45
+ * this to read the cached zone snapshot and to wait for the next change
46
+ * after a playback action. Returns `undefined` when no Core is paired.
47
+ */
48
+ zoneSubscriptions(): ZoneSubscriptionRegistry;
49
+ /**
50
+ * The zone subscription for the currently paired Core, or `undefined` when
51
+ * no Core is paired or the `Subscribed` event has not yet landed. The
52
+ * subscription is the right place to read the latest zone snapshot and to
53
+ * wait for the next change after a playback action — see issue #1.
54
+ */
55
+ getActiveSubscription(): ZoneSubscription | undefined;
35
56
  private onCorePaired;
36
57
  private onCoreUnpaired;
37
58
  }
@@ -3,6 +3,7 @@ import RoonApiBrowse from "node-roon-api-browse";
3
3
  import RoonApiStatus from "node-roon-api-status";
4
4
  import RoonApiTransport from "node-roon-api-transport";
5
5
  import { RoonMcpError } from "./types.js";
6
+ import { ZoneSubscriptionRegistry } from "./ZoneSubscription.js";
6
7
  const DEFAULTS = {
7
8
  extensionId: "com.christophhalang.roon-mcp",
8
9
  displayName: "Roon MCP",
@@ -19,6 +20,13 @@ export class RoonClient {
19
20
  roon;
20
21
  status;
21
22
  log;
23
+ /**
24
+ * Tracks `subscribe_zones` callbacks per paired Core. Read services pull
25
+ * zone state from this registry's cache (when fresh) and wait on it after
26
+ * a playback action so `now_playing` reflects the new track rather than
27
+ * the pre-action one. See issue #1.
28
+ */
29
+ zones = new ZoneSubscriptionRegistry();
22
30
  core;
23
31
  coreWaiters = [];
24
32
  constructor(options = {}) {
@@ -48,6 +56,8 @@ export class RoonClient {
48
56
  }
49
57
  stop() {
50
58
  // node-roon-api has no clean teardown; drop references and reject waiters.
59
+ if (this.core)
60
+ this.zones.stopFor(this.core.core_id);
51
61
  this.core = undefined;
52
62
  this.coreWaiters.length = 0;
53
63
  }
@@ -87,16 +97,41 @@ export class RoonClient {
87
97
  }
88
98
  return this.core.services.RoonApiBrowse;
89
99
  }
100
+ /**
101
+ * The `subscribe_zones` registry, keyed by `core_id`. Read services use
102
+ * this to read the cached zone snapshot and to wait for the next change
103
+ * after a playback action. Returns `undefined` when no Core is paired.
104
+ */
105
+ zoneSubscriptions() {
106
+ return this.zones;
107
+ }
108
+ /**
109
+ * The zone subscription for the currently paired Core, or `undefined` when
110
+ * no Core is paired or the `Subscribed` event has not yet landed. The
111
+ * subscription is the right place to read the latest zone snapshot and to
112
+ * wait for the next change after a playback action — see issue #1.
113
+ */
114
+ getActiveSubscription() {
115
+ if (!this.core)
116
+ return undefined;
117
+ return this.zones.forCore(this.core.core_id);
118
+ }
90
119
  onCorePaired(core) {
91
120
  this.core = core;
92
121
  this.log(`paired with Core "${core.display_name}" (${core.core_id})`);
93
122
  this.status.set_status(`Paired with ${core.display_name}`, false);
123
+ // Start a `subscribe_zones` subscription for this Core so the cached
124
+ // snapshot is current before any service reads it. Re-pairs (same core
125
+ // reappears) drop the prior subscription via the registry.
126
+ const transport = core.services.RoonApiTransport;
127
+ this.zones.startFor(core.core_id, transport);
94
128
  const waiters = this.coreWaiters.splice(0, this.coreWaiters.length);
95
129
  for (const waiter of waiters)
96
130
  waiter(core);
97
131
  }
98
132
  onCoreUnpaired(core) {
99
133
  this.log(`unpaired from Core "${core.display_name}" (${core.core_id})`);
134
+ this.zones.stopFor(core.core_id);
100
135
  if (this.core?.core_id === core.core_id)
101
136
  this.core = undefined;
102
137
  this.status.set_status("Waiting for Roon Core…", false);
@@ -1 +1 @@
1
- {"version":3,"file":"RoonClient.js","sourceRoot":"","sources":["../src/RoonClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RoonClient.js","sourceRoot":"","sources":["../src/RoonClient.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { PlaybackService } from "./PlaybackService.js";
2
2
  import { RoonClient } from "./RoonClient.js";
3
3
  import { SearchService } from "./SearchService.js";
4
4
  import { TrackExpansionService } from "./TrackExpansionService.js";
5
+ import { TransportService } from "./TransportService.js";
5
6
  import { ZoneService } from "./ZoneService.js";
6
7
  /**
7
8
  * Owns MCP startup and tool registration, and maps tool calls to services.
@@ -13,8 +14,9 @@ export declare class RoonMcpServer {
13
14
  private readonly search;
14
15
  private readonly tracks;
15
16
  private readonly playback;
17
+ private readonly transport;
16
18
  private readonly server;
17
- constructor(roon: RoonClient, zones: ZoneService, search: SearchService, tracks: TrackExpansionService, playback: PlaybackService);
19
+ constructor(roon: RoonClient, zones: ZoneService, search: SearchService, tracks: TrackExpansionService, playback: PlaybackService, transport: TransportService);
18
20
  registerTools(): void;
19
21
  start(): Promise<void>;
20
22
  stop(): Promise<void>;