rewind-mcp-server 0.9.0 → 0.10.0

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.
@@ -25,24 +25,33 @@ function rewindUri(domain, entityType, entityId) {
25
25
  }
26
26
  export function registerCrossDomainTools(server, client) {
27
27
  // search ─────────────────────────────────────────────────────────
28
- server.tool('search', 'Search across all domains (listening, running, watching, collecting, reading). Three ranking modes: keyword (default) uses FTS5 full-text search across all domains; semantic uses Voyage AI embeddings for paraphrased / meaning-based recall (reading domain only); hybrid fuses both (reading domain only). Use semantic or hybrid when the user describes what an article was ABOUT rather than quoting its words. **Prefer `mode: hybrid` whenever the user mixes a topic with a recalled keyword or a publisher hint** ("the ESPN piece about Ichiro", "the WSJ article on EVs") — semantic alone does not see source domains and can drop the publisher signal entirely. When a result is the article the user is asking about, follow up with `get_article(id)` to render the rich inline article card — do not stop at the search-result text response.', {
29
- query: z.string().describe('Search query text'),
30
- domain: z
31
- .enum(['listening', 'running', 'watching', 'collecting', 'reading'])
32
- .optional()
33
- .describe('Optional: filter results to a single domain'),
34
- mode: z
35
- .enum(['keyword', 'semantic', 'hybrid'])
36
- .optional()
37
- .describe('Ranking mode. keyword = FTS (default). semantic = cosine-similarity over article embeddings (reading only). hybrid = FTS + semantic via reciprocal rank fusion (reading only).'),
38
- limit: z
39
- .number()
40
- .min(1)
41
- .max(50)
42
- .default(10)
43
- .describe('Number of results to return'),
44
- page: z.number().min(1).default(1).describe('Page number for pagination'),
45
- }, READ_ONLY_ANNOTATIONS, async ({ query, domain, mode, limit, page }) => withRichResponse(async () => {
28
+ server.registerTool('search', {
29
+ title: 'Search',
30
+ description: 'Search across all domains (listening, running, watching, collecting, reading). Three ranking modes: keyword (default) uses FTS5 full-text search across all domains; semantic uses Voyage AI embeddings for paraphrased / meaning-based recall (reading domain only); hybrid fuses both (reading domain only). Use semantic or hybrid when the user describes what an article was ABOUT rather than quoting its words. **Prefer `mode: hybrid` whenever the user mixes a topic with a recalled keyword or a publisher hint** ("the ESPN piece about Ichiro", "the WSJ article on EVs") — semantic alone does not see source domains and can drop the publisher signal entirely. When a result is the article the user is asking about, follow up with `get_article(id)` to render the rich inline article card — do not stop at the search-result text response.',
31
+ inputSchema: {
32
+ query: z.string().describe('Search query text'),
33
+ domain: z
34
+ .enum(['listening', 'running', 'watching', 'collecting', 'reading'])
35
+ .optional()
36
+ .describe('Optional: filter results to a single domain'),
37
+ mode: z
38
+ .enum(['keyword', 'semantic', 'hybrid'])
39
+ .optional()
40
+ .describe('Ranking mode. keyword = FTS (default). semantic = cosine-similarity over article embeddings (reading only). hybrid = FTS + semantic via reciprocal rank fusion (reading only).'),
41
+ limit: z
42
+ .number()
43
+ .min(1)
44
+ .max(50)
45
+ .default(10)
46
+ .describe('Number of results to return'),
47
+ page: z
48
+ .number()
49
+ .min(1)
50
+ .default(1)
51
+ .describe('Page number for pagination'),
52
+ },
53
+ annotations: READ_ONLY_ANNOTATIONS,
54
+ }, async ({ query, domain, mode, limit, page }) => withRichResponse(async () => {
46
55
  const params = {
47
56
  q: query,
48
57
  limit,
@@ -125,15 +134,22 @@ export function registerCrossDomainTools(server, client) {
125
134
  };
126
135
  }));
127
136
  // semantic_search ────────────────────────────────────────────────
128
- server.tool('semantic_search', 'Semantic search over the reading domain using Voyage AI embeddings. Use when the user describes the gist or topic of an article they remember rather than quoting exact words — e.g. "article about a former SNL writer" or "piece about tech layoffs". Returns articles ranked by cosine similarity with a score in [0,1]. Reading domain only. **Important: this tool does NOT see source domains** — embeddings only encode title + description + body. If the user mentions a publisher (ESPN, NYT, WSJ, Atlantic, etc.) or a recalled keyword, prefer `search(mode: "hybrid", ...)` so FTS picks up that signal. **If the top scores cluster within ~0.03 of each other, raise `limit` to 15+** — the right match may sit at position 6+ and approximate-nearest-neighbor noise can swap items at the boundary. When the top result is the article the user is asking about, follow up with `get_article(id)` to render the rich inline article card; if the top score is low (~0.4 and below) or you are unsure which match is right, list the top 2-3 candidates and ask the user to disambiguate before rendering.', {
129
- query: z.string().describe('Natural-language description of the article'),
130
- limit: z
131
- .number()
132
- .min(1)
133
- .max(25)
134
- .default(10)
135
- .describe('Number of matches to return'),
136
- }, READ_ONLY_ANNOTATIONS, async ({ query, limit }) => withRichResponse(async () => {
137
+ server.registerTool('semantic_search', {
138
+ title: 'Semantic search',
139
+ description: 'Semantic search over the reading domain using Voyage AI embeddings. Use when the user describes the gist or topic of an article they remember rather than quoting exact words — e.g. "article about a former SNL writer" or "piece about tech layoffs". Returns articles ranked by cosine similarity with a score in [0,1]. Reading domain only. **Important: this tool does NOT see source domains** — embeddings only encode title + description + body. If the user mentions a publisher (ESPN, NYT, WSJ, Atlantic, etc.) or a recalled keyword, prefer `search(mode: "hybrid", ...)` so FTS picks up that signal. **If the top scores cluster within ~0.03 of each other, raise `limit` to 15+** — the right match may sit at position 6+ and approximate-nearest-neighbor noise can swap items at the boundary. When the top result is the article the user is asking about, follow up with `get_article(id)` to render the rich inline article card; if the top score is low (~0.4 and below) or you are unsure which match is right, list the top 2-3 candidates and ask the user to disambiguate before rendering.',
140
+ inputSchema: {
141
+ query: z
142
+ .string()
143
+ .describe('Natural-language description of the article'),
144
+ limit: z
145
+ .number()
146
+ .min(1)
147
+ .max(25)
148
+ .default(10)
149
+ .describe('Number of matches to return'),
150
+ },
151
+ annotations: READ_ONLY_ANNOTATIONS,
152
+ }, async ({ query, limit }) => withRichResponse(async () => {
137
153
  const data = await client.get('/search', {
138
154
  q: query,
139
155
  domain: 'reading',
@@ -198,30 +214,35 @@ export function registerCrossDomainTools(server, client) {
198
214
  };
199
215
  }));
200
216
  // get_feed ───────────────────────────────────────────────────────
201
- server.tool('get_feed', 'Get the unified activity feed across all domains. Returns a chronological list of recent activities (listens, runs, watches, reads, collection adds). Supports date filtering.', {
202
- limit: z
203
- .number()
204
- .min(1)
205
- .max(50)
206
- .default(10)
207
- .describe('Number of feed items to return'),
208
- domain: z
209
- .enum(['listening', 'running', 'watching', 'collecting', 'reading'])
210
- .optional()
211
- .describe('Optional: filter feed to a single domain'),
212
- date: z
213
- .string()
214
- .optional()
215
- .describe('Optional: filter to a specific date (YYYY-MM-DD)'),
216
- from: z
217
- .string()
218
- .optional()
219
- .describe('Optional: start of date range (ISO 8601)'),
220
- to: z
221
- .string()
222
- .optional()
223
- .describe('Optional: end of date range (ISO 8601)'),
224
- }, READ_ONLY_ANNOTATIONS, async ({ limit, domain, date, from, to }) => withRichResponse(async () => {
217
+ server.registerTool('get_feed', {
218
+ title: 'Activity feed',
219
+ description: 'Get the unified activity feed across all domains. Returns a chronological list of recent activities (listens, runs, watches, reads, collection adds). Supports date filtering.',
220
+ inputSchema: {
221
+ limit: z
222
+ .number()
223
+ .min(1)
224
+ .max(50)
225
+ .default(10)
226
+ .describe('Number of feed items to return'),
227
+ domain: z
228
+ .enum(['listening', 'running', 'watching', 'collecting', 'reading'])
229
+ .optional()
230
+ .describe('Optional: filter feed to a single domain'),
231
+ date: z
232
+ .string()
233
+ .optional()
234
+ .describe('Optional: filter to a specific date (YYYY-MM-DD)'),
235
+ from: z
236
+ .string()
237
+ .optional()
238
+ .describe('Optional: start of date range (ISO 8601)'),
239
+ to: z
240
+ .string()
241
+ .optional()
242
+ .describe('Optional: end of date range (ISO 8601)'),
243
+ },
244
+ annotations: READ_ONLY_ANNOTATIONS,
245
+ }, async ({ limit, domain, date, from, to }) => withRichResponse(async () => {
225
246
  const params = {
226
247
  limit,
227
248
  date,
@@ -250,20 +271,25 @@ export function registerCrossDomainTools(server, client) {
250
271
  };
251
272
  }));
252
273
  // get_on_this_day ────────────────────────────────────────────────
253
- server.tool('get_on_this_day', "Get historical 'on this day' items -- what happened on a given date in previous years across all domains. Defaults to today. Great for nostalgia and reflection.", {
254
- month: z
255
- .number()
256
- .min(1)
257
- .max(12)
258
- .optional()
259
- .describe('Optional: month (1-12). Defaults to current month.'),
260
- day: z
261
- .number()
262
- .min(1)
263
- .max(31)
264
- .optional()
265
- .describe('Optional: day (1-31). Defaults to current day.'),
266
- }, READ_ONLY_ANNOTATIONS, async ({ month, day }) => withRichResponse(async () => {
274
+ server.registerTool('get_on_this_day', {
275
+ title: 'On this day',
276
+ description: "Get historical 'on this day' items -- what happened on a given date in previous years across all domains. Defaults to today. Great for nostalgia and reflection.",
277
+ inputSchema: {
278
+ month: z
279
+ .number()
280
+ .min(1)
281
+ .max(12)
282
+ .optional()
283
+ .describe('Optional: month (1-12). Defaults to current month.'),
284
+ day: z
285
+ .number()
286
+ .min(1)
287
+ .max(31)
288
+ .optional()
289
+ .describe('Optional: day (1-31). Defaults to current day.'),
290
+ },
291
+ annotations: READ_ONLY_ANNOTATIONS,
292
+ }, async ({ month, day }) => withRichResponse(async () => {
267
293
  const params = { month, day };
268
294
  const data = await client.get('/feed/on-this-day', params);
269
295
  if (!data.years.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"cross-domain.js","sourceRoot":"","sources":["../../src/tools/cross-domain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross-domain.js","sourceRoot":"","sources":["../../src/tools/cross-domain.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { READ_ONLY_ANNOTATIONS } from './helpers.js';
2
2
  export function registerDebugTools(server) {
3
3
  server.registerTool('ui_hello_debug', {
4
- title: 'UI Hello (debug)',
4
+ title: 'UI hello — debug',
5
5
  description: 'Show the Rewind MCP Apps diagnostic UI. Invoke this to verify the MCP Apps pipeline end-to-end against a known-working minimal React app.',
6
6
  inputSchema: {},
7
7
  annotations: READ_ONLY_ANNOTATIONS,
@@ -100,11 +100,15 @@ export declare const dateFilterParams: {
100
100
  export declare const includeImagesParam: {
101
101
  include_images: z.ZodDefault<z.ZodBoolean>;
102
102
  };
103
- /** Standard annotations for all Rewind tools (read-only, open-world). */
103
+ /**
104
+ * Standard annotations for all Rewind tools. Read-only and closed-world:
105
+ * every tool reads the user's own bounded archive via api.rewind.rest, never
106
+ * an unbounded external space at call time.
107
+ */
104
108
  export declare const READ_ONLY_ANNOTATIONS: {
105
109
  readOnlyHint: true;
106
110
  destructiveHint: false;
107
111
  idempotentHint: true;
108
- openWorldHint: true;
112
+ openWorldHint: false;
109
113
  };
110
114
  export type { RewindClient };
@@ -204,11 +204,15 @@ export const includeImagesParam = {
204
204
  .default(true)
205
205
  .describe('Include artwork/poster image content blocks in the response. Default true. Set false to keep responses small.'),
206
206
  };
207
- /** Standard annotations for all Rewind tools (read-only, open-world). */
207
+ /**
208
+ * Standard annotations for all Rewind tools. Read-only and closed-world:
209
+ * every tool reads the user's own bounded archive via api.rewind.rest, never
210
+ * an unbounded external space at call time.
211
+ */
208
212
  export const READ_ONLY_ANNOTATIONS = {
209
213
  readOnlyHint: true,
210
214
  destructiveHint: false,
211
215
  idempotentHint: true,
212
- openWorldHint: true,
216
+ openWorldHint: false,
213
217
  };
214
218
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,wEAAwE;AAExE,kCAAkC;AAClC,MAAM,UAAU,IAAI,CAAC,KAAa;IAChC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,GAA8B,EAC9B,IAAY,EACZ,IAAkD;IAElD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,KAAK,GAAsB,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACtE,IAAI,IAAI,EAAE,QAAQ;QAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACnD,IAAI,IAAI,EAAE,WAAW;QAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAiBD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAoB,EACpB,KAAsB,EACtB,QAAiB;IAEjB,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;IAC7C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,QAAQ;QAAE,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC/D,OAAO;YACL,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC;YAC1B,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,QAAgB;IACjD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,GAAG,CAAC;QACzD,MAAM,IAAI,GAAG,SAAS,QAAQ,WAAW,QAAQ,mCAAmC,CAAC;QACrF,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,GAAG,CAAC,CAAC,MAAM,kBAAkB,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,aAAa,EAAE,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,sEAAsE;AACtE,MAAM,UAAU,MAAM,CAAC,GAA8B;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,KAAiB;IACtC,MAAM,CAAC,GAAG,UAET,CAAC;IACF,IAAI,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;QACnC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,wEAAwE;AAExE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAyB;IAEzB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,EAAE,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACpC,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAgC;IAEhC,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACpC,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,wEAAwE;AAExE,6CAA6C;AAC7C,MAAM,UAAU,UAAU,CAAC,GAA8B;IACvD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC/C,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;AACL,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,OAAO,CAAC;IACpC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,GAAG,CAAC,CAA4B;IAC9C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAC9C,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,CAA4B;IACtD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0CAA0C,CAAC;IACvD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CAC7E,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CACP,+GAA+G,CAChH;CACJ,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,YAAY,EAAE,IAAa;IAC3B,eAAe,EAAE,KAAc;IAC/B,cAAc,EAAE,IAAa;IAC7B,aAAa,EAAE,IAAa;CAC7B,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,wEAAwE;AAExE,kCAAkC;AAClC,MAAM,UAAU,IAAI,CAAC,KAAa;IAChC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,GAA8B,EAC9B,IAAY,EACZ,IAAkD;IAElD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,KAAK,GAAsB,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACtE,IAAI,IAAI,EAAE,QAAQ;QAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACnD,IAAI,IAAI,EAAE,WAAW;QAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAiBD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAoB,EACpB,KAAsB,EACtB,QAAiB;IAEjB,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;IAC7C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,QAAQ;QAAE,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC/D,OAAO;YACL,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC;YAC1B,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,QAAgB;IACjD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,GAAG,CAAC;QACzD,MAAM,IAAI,GAAG,SAAS,QAAQ,WAAW,QAAQ,mCAAmC,CAAC;QACrF,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,GAAG,CAAC,CAAC,MAAM,kBAAkB,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,aAAa,EAAE,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,sEAAsE;AACtE,MAAM,UAAU,MAAM,CAAC,GAA8B;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,KAAiB;IACtC,MAAM,CAAC,GAAG,UAET,CAAC;IACF,IAAI,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;QACnC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,wEAAwE;AAExE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAyB;IAEzB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,EAAE,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACpC,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAgC;IAEhC,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACpC,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,wEAAwE;AAExE,6CAA6C;AAC7C,MAAM,UAAU,UAAU,CAAC,GAA8B;IACvD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC/C,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;AACL,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,OAAO,CAAC;IACpC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,GAAG,CAAC,CAA4B;IAC9C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAC9C,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,CAA4B;IACtD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0CAA0C,CAAC;IACvD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CAC7E,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CACP,+GAA+G,CAChH;CACJ,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,YAAY,EAAE,IAAa;IAC3B,eAAe,EAAE,KAAc;IAC/B,cAAc,EAAE,IAAa;IAC7B,aAAa,EAAE,KAAc;CAC9B,CAAC"}
@@ -11,7 +11,12 @@ const PERIOD_ENUM = [
11
11
  ];
12
12
  export function registerListeningTools(server, client) {
13
13
  // get_now_playing ────────────────────────────────────────────────
14
- server.tool('get_now_playing', 'Get the track currently playing (or most recently scrobbled) on Last.fm. Returns track + artist + album, album cover image, and Apple Music resource link.', { ...includeImagesParam }, READ_ONLY_ANNOTATIONS, async ({ include_images }) => withRichResponse(async () => {
14
+ server.registerTool('get_now_playing', {
15
+ title: 'Now playing',
16
+ description: 'Get the track currently playing (or most recently scrobbled) on Last.fm. Returns track + artist + album, album cover image, and Apple Music resource link.',
17
+ inputSchema: { ...includeImagesParam },
18
+ annotations: READ_ONLY_ANNOTATIONS,
19
+ }, async ({ include_images }) => withRichResponse(async () => {
15
20
  const data = await client.get('/listening/now-playing');
16
21
  if (!data.is_playing || !data.track) {
17
22
  return {
@@ -42,21 +47,26 @@ export function registerListeningTools(server, client) {
42
47
  return { content, structuredContent: data };
43
48
  }));
44
49
  // get_recent_listens ─────────────────────────────────────────────
45
- server.tool('get_recent_listens', 'Get recently scrobbled tracks from Last.fm, with top-N album covers and Apple Music resource links. Supports date filtering.', {
46
- limit: z
47
- .number()
48
- .min(1)
49
- .max(50)
50
- .default(10)
51
- .describe('Number of recent tracks to return (default 10, max 50)'),
52
- page: z
53
- .number()
54
- .min(1)
55
- .default(1)
56
- .describe('Page number for pagination. Combine with limit to page through longer windows.'),
57
- ...dateFilterParams,
58
- ...includeImagesParam,
59
- }, READ_ONLY_ANNOTATIONS, async ({ limit, page, date, from, to, include_images }) => withRichResponse(async () => {
50
+ server.registerTool('get_recent_listens', {
51
+ title: 'Recent listens',
52
+ description: 'Get recently scrobbled tracks from Last.fm, with top-N album covers and Apple Music resource links. Supports date filtering.',
53
+ inputSchema: {
54
+ limit: z
55
+ .number()
56
+ .min(1)
57
+ .max(50)
58
+ .default(10)
59
+ .describe('Number of recent tracks to return (default 10, max 50)'),
60
+ page: z
61
+ .number()
62
+ .min(1)
63
+ .default(1)
64
+ .describe('Page number for pagination. Combine with limit to page through longer windows.'),
65
+ ...dateFilterParams,
66
+ ...includeImagesParam,
67
+ },
68
+ annotations: READ_ONLY_ANNOTATIONS,
69
+ }, async ({ limit, page, date, from, to, include_images }) => withRichResponse(async () => {
60
70
  const { data } = await client.get('/listening/recent', { limit, page, date, from, to });
61
71
  if (!data.length) {
62
72
  return {
@@ -84,7 +94,12 @@ export function registerListeningTools(server, client) {
84
94
  return { content, structuredContent: { items: data } };
85
95
  }));
86
96
  // get_listening_stats ────────────────────────────────────────────
87
- server.tool('get_listening_stats', 'Get overall listening statistics from Last.fm including total scrobbles, unique artists, albums, tracks, and daily average. Supports date filtering.', { ...dateFilterParams }, READ_ONLY_ANNOTATIONS, async ({ date, from, to }) => withRichResponse(async () => {
97
+ server.registerTool('get_listening_stats', {
98
+ title: 'Listening stats',
99
+ description: 'Get overall listening statistics from Last.fm including total scrobbles, unique artists, albums, tracks, and daily average. Supports date filtering.',
100
+ inputSchema: { ...dateFilterParams },
101
+ annotations: READ_ONLY_ANNOTATIONS,
102
+ }, async ({ date, from, to }) => withRichResponse(async () => {
88
103
  const data = await client.get('/listening/stats', { date, from, to });
89
104
  const summary = [
90
105
  'Listening Stats:',
@@ -103,12 +118,12 @@ export function registerListeningTools(server, client) {
103
118
  // fall back to the text + image + resource_link response.
104
119
  server.registerTool('get_top_artists', {
105
120
  title: 'Top artists',
106
- description: 'Get top listened-to artists from Last.fm for a given time period, with top-N artist images and Apple Music links. In MCP Apps hosts, renders an interactive artist portrait grid inline.',
121
+ description: 'Get top listened-to artists for a time window, with top-N artist images and Apple Music links. Use `period` for vague-recent queries ("lately", "this week") — defaults to \'1month\' (rolling 28 days). Use `date`/`from`/`to` for calendar queries ("in February", "last month", "this year") — date filter overrides period when both are supplied. In MCP Apps hosts, renders an interactive artist portrait grid inline.',
107
122
  inputSchema: {
108
123
  period: z
109
124
  .enum(PERIOD_ENUM)
110
125
  .default('1month')
111
- .describe('Time period for rankings'),
126
+ .describe('Rolling time period for rankings. Use for "lately"/"this week" style queries. Ignored when date/from/to is supplied.'),
112
127
  limit: z
113
128
  .number()
114
129
  .min(1)
@@ -120,22 +135,26 @@ export function registerListeningTools(server, client) {
120
135
  .min(1)
121
136
  .default(1)
122
137
  .describe('Page number for pagination'),
138
+ ...dateFilterParams,
123
139
  ...includeImagesParam,
124
140
  include_sparklines: z
125
141
  .boolean()
126
142
  .default(true)
127
- .describe('When true (default), attach a `sparkline` (granularity + zero-filled play-count points) to each artist. Supported only for period in {1month, 3month, 6month, 12month}; omitted otherwise. Set false to keep responses small.'),
143
+ .describe('When true (default), attach a `sparkline` (granularity + zero-filled play-count points) to each artist. Supported for period in {7day, 1month, 3month, 6month, 12month}. Set false to keep responses small.'),
128
144
  },
129
145
  annotations: READ_ONLY_ANNOTATIONS,
130
146
  _meta: {
131
147
  ui: { resourceUri: 'ui://rewind/top-artists.html' },
132
148
  'ui/resourceUri': 'ui://rewind/top-artists.html',
133
149
  },
134
- }, async ({ period, limit, page, include_images, include_sparklines }) => withRichResponse(async () => {
150
+ }, async ({ period, limit, page, date, from, to, include_images, include_sparklines, }) => withRichResponse(async () => {
135
151
  const data = await client.get('/listening/top/artists', {
136
152
  period,
137
153
  limit,
138
154
  page,
155
+ date,
156
+ from,
157
+ to,
139
158
  ...(include_sparklines ? { include_sparklines: 'true' } : {}),
140
159
  });
141
160
  if (!data.data.length) {
@@ -237,12 +256,12 @@ export function registerListeningTools(server, client) {
237
256
  // card inline. Phase 4 winner: list-style with toggle to album-grouped.
238
257
  server.registerTool('get_top_tracks', {
239
258
  title: 'Top tracks',
240
- description: "Top listened-to tracks from Last.fm for a given time period, with top-N Apple Music links. Optional `artist_id` or `artist_name` filters to a single artist's catalog — useful for 'what X songs have I been listening to lately' queries. Use after get_artist_details if a longer ranked list is needed; otherwise the embedded top_tracks[] from get_artist_details (capped at 10) is sufficient. In MCP Apps hosts, renders an interactive top-tracks card with a List | By album toggle.",
259
+ description: 'Top listened-to tracks for a time window, with top-N Apple Music links. Optional `artist_id` or `artist_name` filters to a single artist\'s catalog — useful for \'what X songs have I been listening to lately\' queries. Use `period` for vague-recent queries ("lately", "this week") — defaults to \'1month\' (rolling 28 days). Use `date`/`from`/`to` for calendar queries ("in February", "last month", "this year") — date filter overrides period when both are supplied. In MCP Apps hosts, renders an interactive top-tracks card with a List | By album toggle.',
241
260
  inputSchema: {
242
261
  period: z
243
262
  .enum(PERIOD_ENUM)
244
263
  .default('1month')
245
- .describe('Time period for rankings'),
264
+ .describe('Rolling time period for rankings. Use for "lately"/"this week" style queries. Ignored when date/from/to is supplied.'),
246
265
  limit: z
247
266
  .number()
248
267
  .min(1)
@@ -259,23 +278,27 @@ export function registerListeningTools(server, client) {
259
278
  .int()
260
279
  .positive()
261
280
  .optional()
262
- .describe('Filter to a single artist. Stable id from get_artist_details or get_top_artists. Composes with period.'),
281
+ .describe('Filter to a single artist. Stable id from get_artist_details or get_top_artists. Composes with period and date filters.'),
263
282
  artist_name: z
264
283
  .string()
265
284
  .min(1)
266
285
  .optional()
267
286
  .describe('Substring match against artist names (case-insensitive). Resolves to the highest-playcount match. Use only if no artist_id is available; passing both is a 400.'),
287
+ ...dateFilterParams,
268
288
  },
269
289
  annotations: READ_ONLY_ANNOTATIONS,
270
290
  _meta: {
271
291
  ui: { resourceUri: 'ui://rewind/top-tracks.html' },
272
292
  'ui/resourceUri': 'ui://rewind/top-tracks.html',
273
293
  },
274
- }, async ({ period, limit, page, artist_id, artist_name }) => withRichResponse(async () => {
294
+ }, async ({ period, limit, page, artist_id, artist_name, date, from, to }) => withRichResponse(async () => {
275
295
  const data = await client.get('/listening/top/tracks', {
276
296
  period,
277
297
  limit,
278
298
  page,
299
+ date,
300
+ from,
301
+ to,
279
302
  ...(artist_id !== undefined ? { artist_id } : {}),
280
303
  ...(artist_name !== undefined ? { artist_name } : {}),
281
304
  });
@@ -308,7 +331,12 @@ export function registerListeningTools(server, client) {
308
331
  return { content, structuredContent: data };
309
332
  }));
310
333
  // get_listening_streaks ──────────────────────────────────────────
311
- server.tool('get_listening_streaks', 'Get listening streak data from Last.fm -- current consecutive days with scrobbles and the longest streak ever.', {}, READ_ONLY_ANNOTATIONS, async () => withRichResponse(async () => {
334
+ server.registerTool('get_listening_streaks', {
335
+ title: 'Listening streaks',
336
+ description: 'Get listening streak data from Last.fm -- current consecutive days with scrobbles and the longest streak ever.',
337
+ inputSchema: {},
338
+ annotations: READ_ONLY_ANNOTATIONS,
339
+ }, async () => withRichResponse(async () => {
312
340
  const data = await client.get('/listening/streaks');
313
341
  const summary = [
314
342
  'Listening Streaks:',
@@ -337,7 +365,7 @@ export function registerListeningTools(server, client) {
337
365
  // by the route handler on first call (~200ms additional latency once,
338
366
  // instant thereafter).
339
367
  server.registerTool('get_artist_details', {
340
- title: 'Artist — detail',
368
+ title: 'Artist',
341
369
  description: "Detailed listening profile for a single artist by ID: bio, total scrobbles, all-time rank, first/last played, top tracks, top albums, similar artists you've also listened to, and a yearly sparkline of plays. Use for natural-language queries like 'tell me about my X listening history'. In MCP Apps hosts, renders an interactive artist card inline.",
342
370
  inputSchema: {
343
371
  id: z.number().describe('Artist ID'),
@@ -454,7 +482,15 @@ export function registerListeningTools(server, client) {
454
482
  return { content, structuredContent };
455
483
  }));
456
484
  // get_album_details ──────────────────────────────────────────────
457
- server.tool('get_album_details', 'Get detailed information about a specific album by ID: artist, play count, track listing, cover art, and Apple Music link.', { id: z.number().describe('Album ID'), ...includeImagesParam }, READ_ONLY_ANNOTATIONS, async ({ id, include_images }) => withRichResponse(async () => {
485
+ server.registerTool('get_album_details', {
486
+ title: 'Album',
487
+ description: 'Get detailed information about a specific album by ID: artist, play count, track listing, cover art, and Apple Music link.',
488
+ inputSchema: {
489
+ id: z.number().describe('Album ID'),
490
+ ...includeImagesParam,
491
+ },
492
+ annotations: READ_ONLY_ANNOTATIONS,
493
+ }, async ({ id, include_images }) => withRichResponse(async () => {
458
494
  const data = await client.get(`/listening/albums/${id}`);
459
495
  const lines = [
460
496
  `${data.name} by ${data.artist.name}`,
@@ -484,19 +520,24 @@ export function registerListeningTools(server, client) {
484
520
  return { content, structuredContent: data };
485
521
  }));
486
522
  // get_listening_genres ───────────────────────────────────────────
487
- server.tool('get_listening_genres', 'Get genre breakdown over time from Last.fm listening history, grouped by week/month/year. Designed for stacked chart visualization.', {
488
- group_by: z
489
- .enum(['week', 'month', 'year'])
490
- .default('month')
491
- .describe('Grouping period (default: month)'),
492
- limit: z
493
- .number()
494
- .min(1)
495
- .max(50)
496
- .default(10)
497
- .describe('Max genres to return -- rest grouped as "Other" (default 10)'),
498
- ...dateFilterParams,
499
- }, READ_ONLY_ANNOTATIONS, async ({ group_by, limit, date, from, to }) => withRichResponse(async () => {
523
+ server.registerTool('get_listening_genres', {
524
+ title: 'Listening genres',
525
+ description: 'Get genre breakdown over time from Last.fm listening history, grouped by week/month/year. Designed for stacked chart visualization.',
526
+ inputSchema: {
527
+ group_by: z
528
+ .enum(['week', 'month', 'year'])
529
+ .default('month')
530
+ .describe('Grouping period (default: month)'),
531
+ limit: z
532
+ .number()
533
+ .min(1)
534
+ .max(50)
535
+ .default(10)
536
+ .describe('Max genres to return -- rest grouped as "Other" (default 10)'),
537
+ ...dateFilterParams,
538
+ },
539
+ annotations: READ_ONLY_ANNOTATIONS,
540
+ }, async ({ group_by, limit, date, from, to }) => withRichResponse(async () => {
500
541
  const { data } = await client.get('/listening/genres', { group_by, limit, date, from, to });
501
542
  if (!data.length) {
502
543
  return {