rewind-mcp-server 0.1.1 → 0.3.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.
Files changed (53) hide show
  1. package/README.md +84 -11
  2. package/dist/__tests__/helpers.test.d.ts +1 -0
  3. package/dist/__tests__/helpers.test.js +131 -0
  4. package/dist/__tests__/helpers.test.js.map +1 -0
  5. package/dist/__tests__/image-block.live.d.ts +1 -0
  6. package/dist/__tests__/image-block.live.js +41 -0
  7. package/dist/__tests__/image-block.live.js.map +1 -0
  8. package/dist/__tests__/server.test.js +710 -16
  9. package/dist/__tests__/server.test.js.map +1 -1
  10. package/dist/__tests__/stdio-e2e.live.d.ts +1 -0
  11. package/dist/__tests__/stdio-e2e.live.js +60 -0
  12. package/dist/__tests__/stdio-e2e.live.js.map +1 -0
  13. package/dist/__tests__/ui-resource.live.d.ts +1 -0
  14. package/dist/__tests__/ui-resource.live.js +71 -0
  15. package/dist/__tests__/ui-resource.live.js.map +1 -0
  16. package/dist/client.d.ts +9 -0
  17. package/dist/client.js +15 -0
  18. package/dist/client.js.map +1 -1
  19. package/dist/index.js +0 -0
  20. package/dist/prompts.js +101 -0
  21. package/dist/prompts.js.map +1 -1
  22. package/dist/resources/ui.d.ts +33 -0
  23. package/dist/resources/ui.js +14 -0
  24. package/dist/resources/ui.js.map +1 -0
  25. package/dist/resources.js +128 -0
  26. package/dist/resources.js.map +1 -1
  27. package/dist/server.js +55 -1
  28. package/dist/server.js.map +1 -1
  29. package/dist/tools/collecting.js +78 -37
  30. package/dist/tools/collecting.js.map +1 -1
  31. package/dist/tools/cross-domain.js +74 -17
  32. package/dist/tools/cross-domain.js.map +1 -1
  33. package/dist/tools/debug.d.ts +6 -0
  34. package/dist/tools/debug.js +26 -0
  35. package/dist/tools/debug.js.map +1 -0
  36. package/dist/tools/helpers.d.ts +81 -5
  37. package/dist/tools/helpers.js +138 -4
  38. package/dist/tools/helpers.js.map +1 -1
  39. package/dist/tools/listening.js +223 -52
  40. package/dist/tools/listening.js.map +1 -1
  41. package/dist/tools/reading.js +74 -22
  42. package/dist/tools/reading.js.map +1 -1
  43. package/dist/tools/running.js +87 -43
  44. package/dist/tools/running.js.map +1 -1
  45. package/dist/tools/watching.js +199 -32
  46. package/dist/tools/watching.js.map +1 -1
  47. package/dist/ui-bundles.d.ts +3 -0
  48. package/dist/ui-bundles.js +8 -0
  49. package/dist/ui-bundles.js.map +1 -0
  50. package/dist/worker.d.ts +2 -1
  51. package/dist/worker.js +55 -30
  52. package/dist/worker.js.map +1 -1
  53. package/package.json +13 -2
@@ -1,40 +1,92 @@
1
1
  import { z } from 'zod';
2
- import { withErrorHandling, formatDate, timeAgo, fmt, READ_ONLY_ANNOTATIONS, dateFilterParams, } from './helpers.js';
2
+ import { withRichResponse, text, resourceLink, imageBlock, formatDate, timeAgo, fmt, READ_ONLY_ANNOTATIONS, dateFilterParams, includeImagesParam, LIST_IMAGE_PX, } from './helpers.js';
3
+ const TOP_N = 5;
4
+ const PERIOD_ENUM = [
5
+ '7day',
6
+ '1month',
7
+ '3month',
8
+ '6month',
9
+ '12month',
10
+ 'overall',
11
+ ];
3
12
  export function registerListeningTools(server, client) {
4
- // get_now_playing
5
- server.tool('get_now_playing', 'Get the track currently playing on Last.fm. Returns the song, artist, and album if something is playing.', {}, READ_ONLY_ANNOTATIONS, async () => withErrorHandling(async () => {
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 () => {
6
15
  const data = await client.get('/listening/now-playing');
7
16
  if (!data.is_playing || !data.track) {
8
- return 'Nothing playing right now.';
17
+ return {
18
+ content: [text('Nothing playing right now.')],
19
+ structuredContent: data,
20
+ };
9
21
  }
10
- const artist = data.artist?.name ?? 'Unknown Artist';
11
- const album = data.album?.name ? ` (from ${data.album.name})` : '';
12
- return `Now playing: "${data.track.name}" by ${artist}${album}`;
22
+ const t = data.track;
23
+ const albumPart = t.album.name ? ` (from ${t.album.name})` : '';
24
+ const summary = `Now playing: "${t.name}" by ${t.artist.name}${albumPart}`;
25
+ const cover = include_images
26
+ ? await imageBlock(client, t.album.image)
27
+ : null;
28
+ const links = [
29
+ resourceLink(t.apple_music_url, 'Apple Music -- track', {
30
+ mimeType: 'text/html',
31
+ }),
32
+ resourceLink(t.artist.apple_music_url, 'Apple Music -- artist', {
33
+ mimeType: 'text/html',
34
+ }),
35
+ resourceLink(t.url, 'Last.fm -- track', { mimeType: 'text/html' }),
36
+ ].filter((b) => b !== null);
37
+ const content = [
38
+ text(summary),
39
+ ...(cover ? [cover] : []),
40
+ ...links,
41
+ ];
42
+ return { content, structuredContent: data };
13
43
  }));
14
- // get_recent_listens
15
- server.tool('get_recent_listens', 'Get recently scrobbled tracks from Last.fm. Returns a list of recent plays with artist, album, and time. Supports date filtering.', {
44
+ // 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.', {
16
46
  limit: z
17
47
  .number()
18
48
  .min(1)
19
49
  .max(50)
20
50
  .default(10)
21
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.'),
22
57
  ...dateFilterParams,
23
- }, READ_ONLY_ANNOTATIONS, async ({ limit, date, from, to }) => withErrorHandling(async () => {
24
- const data = await client.get('/listening/recent', { limit, date, from, to });
25
- if (!data.data.length)
26
- return 'No recent listens found.';
58
+ ...includeImagesParam,
59
+ }, READ_ONLY_ANNOTATIONS, async ({ limit, page, date, from, to, include_images }) => withRichResponse(async () => {
60
+ const { data } = await client.get('/listening/recent', { limit, page, date, from, to });
61
+ if (!data.length) {
62
+ return {
63
+ content: [text('No recent listens found.')],
64
+ structuredContent: { items: [] },
65
+ };
66
+ }
27
67
  const lines = ['Recent listens:'];
28
- for (const [i, s] of data.data.entries()) {
68
+ for (const [i, s] of data.entries()) {
29
69
  const album = s.album?.name ? ` -- ${s.album.name}` : '';
30
70
  lines.push(`${i + 1}. "${s.track.name}" by ${s.artist.name}${album} (${timeAgo(s.scrobbled_at)})`);
31
71
  }
32
- return lines.join('\n');
72
+ const topN = data.slice(0, TOP_N);
73
+ const images = include_images
74
+ ? await Promise.all(topN.map((s) => imageBlock(client, s.album.image, LIST_IMAGE_PX)))
75
+ : [];
76
+ const links = topN
77
+ .map((s) => resourceLink(s.track.apple_music_url, `Apple Music -- ${s.track.name}`, { mimeType: 'text/html' }))
78
+ .filter((b) => b !== null);
79
+ const content = [
80
+ text(lines.join('\n')),
81
+ ...images.filter((b) => b !== null),
82
+ ...links,
83
+ ];
84
+ return { content, structuredContent: { items: data } };
33
85
  }));
34
- // get_listening_stats
35
- 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 for period-specific stats.', { ...dateFilterParams }, READ_ONLY_ANNOTATIONS, async ({ date, from, to }) => withErrorHandling(async () => {
86
+ // 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 () => {
36
88
  const data = await client.get('/listening/stats', { date, from, to });
37
- return [
89
+ const summary = [
38
90
  'Listening Stats:',
39
91
  `- Total scrobbles: ${fmt(data.total_scrobbles)}`,
40
92
  `- Unique artists: ${fmt(data.unique_artists)}`,
@@ -43,11 +95,12 @@ export function registerListeningTools(server, client) {
43
95
  `- Average per day: ${data.scrobbles_per_day.toFixed(1)}`,
44
96
  `- Years tracking: ${data.years_tracking}`,
45
97
  ].join('\n');
98
+ return { content: [text(summary)], structuredContent: data };
46
99
  }));
47
- // get_top_artists
48
- server.tool('get_top_artists', 'Get top listened-to artists from Last.fm for a given time period. Returns ranked list with play counts.', {
100
+ // get_top_artists ────────────────────────────────────────────────
101
+ server.tool('get_top_artists', 'Get top listened-to artists from Last.fm for a given time period, with top-N artist images and Apple Music links.', {
49
102
  period: z
50
- .enum(['7day', '1month', '3month', '6month', '12month', 'overall'])
103
+ .enum(PERIOD_ENUM)
51
104
  .default('1month')
52
105
  .describe('Time period for rankings'),
53
106
  limit: z
@@ -57,20 +110,39 @@ export function registerListeningTools(server, client) {
57
110
  .default(10)
58
111
  .describe('Number of artists to return'),
59
112
  page: z.number().min(1).default(1).describe('Page number for pagination'),
60
- }, READ_ONLY_ANNOTATIONS, async ({ period, limit, page }) => withErrorHandling(async () => {
113
+ ...includeImagesParam,
114
+ }, READ_ONLY_ANNOTATIONS, async ({ period, limit, page, include_images }) => withRichResponse(async () => {
61
115
  const data = await client.get('/listening/top/artists', { period, limit, page });
62
- if (!data.data.length)
63
- return `No top artists for period: ${period}`;
116
+ if (!data.data.length) {
117
+ return {
118
+ content: [text(`No top artists for period: ${period}`)],
119
+ structuredContent: data,
120
+ };
121
+ }
64
122
  const lines = [`Top Artists (${period}):`];
65
123
  for (const a of data.data) {
66
- lines.push(`${a.rank}. ${a.name} -- ${fmt(a.playcount)} plays`);
124
+ lines.push(`${a.rank}. [ID: ${a.id}] ${a.name} -- ${fmt(a.playcount)} plays`);
67
125
  }
68
- return lines.join('\n');
126
+ const topN = data.data.slice(0, TOP_N);
127
+ const images = include_images
128
+ ? await Promise.all(topN.map((a) => imageBlock(client, a.image, LIST_IMAGE_PX)))
129
+ : [];
130
+ const links = topN
131
+ .map((a) => resourceLink(a.apple_music_url, `Apple Music -- ${a.name}`, {
132
+ mimeType: 'text/html',
133
+ }))
134
+ .filter((b) => b !== null);
135
+ const content = [
136
+ text(lines.join('\n')),
137
+ ...images.filter((b) => b !== null),
138
+ ...links,
139
+ ];
140
+ return { content, structuredContent: data };
69
141
  }));
70
- // get_top_albums
71
- server.tool('get_top_albums', 'Get top listened-to albums from Last.fm for a given time period. Returns ranked list with play counts.', {
142
+ // get_top_albums ─────────────────────────────────────────────────
143
+ server.tool('get_top_albums', 'Get top listened-to albums from Last.fm for a given time period, with top-N covers and Apple Music links.', {
72
144
  period: z
73
- .enum(['7day', '1month', '3month', '6month', '12month', 'overall'])
145
+ .enum(PERIOD_ENUM)
74
146
  .default('1month')
75
147
  .describe('Time period for rankings'),
76
148
  limit: z
@@ -80,20 +152,39 @@ export function registerListeningTools(server, client) {
80
152
  .default(10)
81
153
  .describe('Number of albums to return'),
82
154
  page: z.number().min(1).default(1).describe('Page number for pagination'),
83
- }, READ_ONLY_ANNOTATIONS, async ({ period, limit, page }) => withErrorHandling(async () => {
155
+ ...includeImagesParam,
156
+ }, READ_ONLY_ANNOTATIONS, async ({ period, limit, page, include_images }) => withRichResponse(async () => {
84
157
  const data = await client.get('/listening/top/albums', { period, limit, page });
85
- if (!data.data.length)
86
- return `No top albums for period: ${period}`;
158
+ if (!data.data.length) {
159
+ return {
160
+ content: [text(`No top albums for period: ${period}`)],
161
+ structuredContent: data,
162
+ };
163
+ }
87
164
  const lines = [`Top Albums (${period}):`];
88
165
  for (const a of data.data) {
89
- lines.push(`${a.rank}. ${a.name} by ${a.detail} -- ${fmt(a.playcount)} plays`);
166
+ lines.push(`${a.rank}. [ID: ${a.id}] ${a.name} by ${a.detail} -- ${fmt(a.playcount)} plays`);
90
167
  }
91
- return lines.join('\n');
168
+ const topN = data.data.slice(0, TOP_N);
169
+ const images = include_images
170
+ ? await Promise.all(topN.map((a) => imageBlock(client, a.image, LIST_IMAGE_PX)))
171
+ : [];
172
+ const links = topN
173
+ .map((a) => resourceLink(a.apple_music_url, `Apple Music -- ${a.name}`, {
174
+ mimeType: 'text/html',
175
+ }))
176
+ .filter((b) => b !== null);
177
+ const content = [
178
+ text(lines.join('\n')),
179
+ ...images.filter((b) => b !== null),
180
+ ...links,
181
+ ];
182
+ return { content, structuredContent: data };
92
183
  }));
93
- // get_top_tracks
94
- server.tool('get_top_tracks', 'Get top listened-to tracks from Last.fm for a given time period. Returns ranked list with play counts.', {
184
+ // get_top_tracks ─────────────────────────────────────────────────
185
+ server.tool('get_top_tracks', 'Get top listened-to tracks from Last.fm for a given time period, with top-N Apple Music links.', {
95
186
  period: z
96
- .enum(['7day', '1month', '3month', '6month', '12month', 'overall'])
187
+ .enum(PERIOD_ENUM)
97
188
  .default('1month')
98
189
  .describe('Time period for rankings'),
99
190
  limit: z
@@ -103,20 +194,31 @@ export function registerListeningTools(server, client) {
103
194
  .default(10)
104
195
  .describe('Number of tracks to return'),
105
196
  page: z.number().min(1).default(1).describe('Page number for pagination'),
106
- }, READ_ONLY_ANNOTATIONS, async ({ period, limit, page }) => withErrorHandling(async () => {
197
+ }, READ_ONLY_ANNOTATIONS, async ({ period, limit, page }) => withRichResponse(async () => {
107
198
  const data = await client.get('/listening/top/tracks', { period, limit, page });
108
- if (!data.data.length)
109
- return `No top tracks for period: ${period}`;
199
+ if (!data.data.length) {
200
+ return {
201
+ content: [text(`No top tracks for period: ${period}`)],
202
+ structuredContent: data,
203
+ };
204
+ }
110
205
  const lines = [`Top Tracks (${period}):`];
111
206
  for (const t of data.data) {
112
- lines.push(`${t.rank}. "${t.name}" by ${t.detail} -- ${fmt(t.playcount)} plays`);
207
+ lines.push(`${t.rank}. [ID: ${t.id}] "${t.name}" by ${t.detail} -- ${fmt(t.playcount)} plays`);
113
208
  }
114
- return lines.join('\n');
209
+ const topN = data.data.slice(0, TOP_N);
210
+ const links = topN
211
+ .map((t) => resourceLink(t.apple_music_url, `Apple Music -- ${t.name}`, {
212
+ mimeType: 'text/html',
213
+ }))
214
+ .filter((b) => b !== null);
215
+ const content = [text(lines.join('\n')), ...links];
216
+ return { content, structuredContent: data };
115
217
  }));
116
- // get_listening_streaks
117
- 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 () => withErrorHandling(async () => {
218
+ // get_listening_streaks ──────────────────────────────────────────
219
+ 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 () => {
118
220
  const data = await client.get('/listening/streaks');
119
- return [
221
+ const summary = [
120
222
  'Listening Streaks:',
121
223
  '',
122
224
  `Current streak: ${data.current.days} days (${fmt(data.current.total_scrobbles)} scrobbles)`,
@@ -131,12 +233,13 @@ export function registerListeningTools(server, client) {
131
233
  ]
132
234
  .filter(Boolean)
133
235
  .join('\n');
236
+ return { content: [text(summary)], structuredContent: data };
134
237
  }));
135
- // get_artist_details
136
- server.tool('get_artist_details', 'Get detailed information about a specific artist by ID, including play count, top albums, and top tracks.', { id: z.number().describe('Artist ID') }, READ_ONLY_ANNOTATIONS, async ({ id }) => withErrorHandling(async () => {
238
+ // get_artist_details ─────────────────────────────────────────────
239
+ server.tool('get_artist_details', 'Get detailed information about a specific artist by ID: play count, top albums, top tracks, artist image, and Apple Music link.', { id: z.number().describe('Artist ID'), ...includeImagesParam }, READ_ONLY_ANNOTATIONS, async ({ id, include_images }) => withRichResponse(async () => {
137
240
  const data = await client.get(`/listening/artists/${id}`);
138
241
  const lines = [
139
- `${data.name}`,
242
+ data.name,
140
243
  `Total plays: ${fmt(data.playcount)}`,
141
244
  data.genre ? `Genre: ${data.genre}` : null,
142
245
  '',
@@ -154,10 +257,26 @@ export function registerListeningTools(server, client) {
154
257
  lines.push(` - "${t.name}" (${fmt(t.scrobble_count)} plays)`);
155
258
  }
156
259
  }
157
- return lines.join('\n');
260
+ const artistImage = include_images
261
+ ? await imageBlock(client, data.image)
262
+ : null;
263
+ const links = [
264
+ resourceLink(data.apple_music_url, 'Apple Music -- artist', {
265
+ mimeType: 'text/html',
266
+ }),
267
+ resourceLink(data.url, 'Last.fm -- artist', {
268
+ mimeType: 'text/html',
269
+ }),
270
+ ].filter((b) => b !== null);
271
+ const content = [
272
+ text(lines.join('\n')),
273
+ ...(artistImage ? [artistImage] : []),
274
+ ...links,
275
+ ];
276
+ return { content, structuredContent: data };
158
277
  }));
159
- // get_album_details
160
- server.tool('get_album_details', 'Get detailed information about a specific album by ID, including artist, play count, and track listing.', { id: z.number().describe('Album ID') }, READ_ONLY_ANNOTATIONS, async ({ id }) => withErrorHandling(async () => {
278
+ // get_album_details ──────────────────────────────────────────────
279
+ 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 () => {
161
280
  const data = await client.get(`/listening/albums/${id}`);
162
281
  const lines = [
163
282
  `${data.name} by ${data.artist.name}`,
@@ -170,7 +289,59 @@ export function registerListeningTools(server, client) {
170
289
  lines.push(` ${i + 1}. "${t.name}" (${fmt(t.scrobble_count)} plays)`);
171
290
  }
172
291
  }
173
- return lines.join('\n');
292
+ const cover = include_images
293
+ ? await imageBlock(client, data.image)
294
+ : null;
295
+ const links = [
296
+ resourceLink(data.apple_music_url, 'Apple Music -- album', {
297
+ mimeType: 'text/html',
298
+ }),
299
+ resourceLink(data.url, 'Last.fm -- album', { mimeType: 'text/html' }),
300
+ ].filter((b) => b !== null);
301
+ const content = [
302
+ text(lines.join('\n')),
303
+ ...(cover ? [cover] : []),
304
+ ...links,
305
+ ];
306
+ return { content, structuredContent: data };
307
+ }));
308
+ // get_listening_genres ───────────────────────────────────────────
309
+ 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.', {
310
+ group_by: z
311
+ .enum(['week', 'month', 'year'])
312
+ .default('month')
313
+ .describe('Grouping period (default: month)'),
314
+ limit: z
315
+ .number()
316
+ .min(1)
317
+ .max(50)
318
+ .default(10)
319
+ .describe('Max genres to return -- rest grouped as "Other" (default 10)'),
320
+ ...dateFilterParams,
321
+ }, READ_ONLY_ANNOTATIONS, async ({ group_by, limit, date, from, to }) => withRichResponse(async () => {
322
+ const { data } = await client.get('/listening/genres', { group_by, limit, date, from, to });
323
+ if (!data.length) {
324
+ return {
325
+ content: [text('No genre data available.')],
326
+ structuredContent: {
327
+ items: [],
328
+ group_by,
329
+ },
330
+ };
331
+ }
332
+ const lines = [`Genre breakdown by ${group_by}:`];
333
+ for (const row of data) {
334
+ const top = Object.entries(row.genres)
335
+ .sort(([, a], [, b]) => b - a)
336
+ .slice(0, 3)
337
+ .map(([name, count]) => `${name}=${count}`)
338
+ .join(', ');
339
+ lines.push(` ${row.period}: total ${fmt(row.total)}; top: ${top}`);
340
+ }
341
+ return {
342
+ content: [text(lines.join('\n'))],
343
+ structuredContent: { items: data, group_by },
344
+ };
174
345
  }));
175
346
  }
176
347
  //# sourceMappingURL=listening.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listening.js","sourceRoot":"","sources":["../../src/tools/listening.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listening.js","sourceRoot":"","sources":["../../src/tools/listening.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,30 @@
1
1
  import { z } from 'zod';
2
- import { withErrorHandling, formatDate, timeAgo, fmt, READ_ONLY_ANNOTATIONS, dateFilterParams, } from './helpers.js';
2
+ import { withRichResponse, text, resourceLink, imageBlock, formatDate, timeAgo, fmt, READ_ONLY_ANNOTATIONS, dateFilterParams, includeImagesParam, LIST_IMAGE_PX, } from './helpers.js';
3
+ const TOP_N = 5;
3
4
  export function registerReadingTools(server, client) {
4
- // get_recent_reads
5
- server.tool('get_recent_reads', 'Get recently saved articles from Instapaper. Returns article titles, authors, domains, reading time, and status.', {
5
+ // get_recent_reads ───────────────────────────────────────────────
6
+ server.tool('get_recent_reads', 'Get recently saved articles from Instapaper. Returns title, author, domain, read time, status, top-N site images where available, and article URLs as resource links.', {
6
7
  limit: z
7
8
  .number()
8
9
  .min(1)
9
10
  .max(50)
10
11
  .default(10)
11
- .describe('Number of recent articles to return'),
12
+ .describe('Number of recent articles to return (max 50)'),
13
+ page: z
14
+ .number()
15
+ .min(1)
16
+ .default(1)
17
+ .describe('Page number for pagination. Combine with limit to page through longer windows.'),
12
18
  ...dateFilterParams,
13
- }, READ_ONLY_ANNOTATIONS, async ({ limit, date, from, to }) => withErrorHandling(async () => {
14
- const { data } = await client.get('/reading/recent', { limit, date, from, to });
15
- if (!data.length)
16
- return 'No recent articles found.';
19
+ ...includeImagesParam,
20
+ }, READ_ONLY_ANNOTATIONS, async ({ limit, page, date, from, to, include_images }) => withRichResponse(async () => {
21
+ const { data } = await client.get('/reading/recent', { limit, page, date, from, to });
22
+ if (!data.length) {
23
+ return {
24
+ content: [text('No recent articles found.')],
25
+ structuredContent: { items: [] },
26
+ };
27
+ }
17
28
  const lines = ['Recent reads:'];
18
29
  for (const [i, a] of data.entries()) {
19
30
  const author = a.author ? ` by ${a.author}` : '';
@@ -26,12 +37,26 @@ export function registerReadingTools(server, client) {
26
37
  : a.status === 'archived'
27
38
  ? ' [finished]'
28
39
  : '';
29
- lines.push(`${i + 1}. ${a.title}${author}${domain}${readTime}${status} (${timeAgo(a.saved_at)})`);
40
+ lines.push(`${i + 1}. [ID: ${a.id}] ${a.title}${author}${domain}${readTime}${status} (${timeAgo(a.saved_at)})`);
30
41
  }
31
- return lines.join('\n');
42
+ const topN = data.slice(0, TOP_N);
43
+ const images = include_images
44
+ ? await Promise.all(topN.map((a) => imageBlock(client, a.image, LIST_IMAGE_PX)))
45
+ : [];
46
+ const links = topN
47
+ .map((a) => resourceLink(a.url, `Article -- ${a.title}`, {
48
+ mimeType: 'text/html',
49
+ }))
50
+ .filter((b) => b !== null);
51
+ const content = [
52
+ text(lines.join('\n')),
53
+ ...images.filter((b) => b !== null),
54
+ ...links,
55
+ ];
56
+ return { content, structuredContent: { items: data } };
32
57
  }));
33
- // get_reading_highlights
34
- server.tool('get_reading_highlights', 'Get saved highlights from Instapaper articles. Returns the highlighted text, optional notes, and the source article.', {
58
+ // get_reading_highlights ─────────────────────────────────────────
59
+ server.tool('get_reading_highlights', 'Get saved highlights from Instapaper articles. Returns the highlighted text, notes, source article, and article URLs as resource links.', {
35
60
  limit: z
36
61
  .number()
37
62
  .min(1)
@@ -39,10 +64,14 @@ export function registerReadingTools(server, client) {
39
64
  .default(10)
40
65
  .describe('Number of highlights to return'),
41
66
  page: z.number().min(1).default(1).describe('Page number'),
42
- }, READ_ONLY_ANNOTATIONS, async ({ limit, page }) => withErrorHandling(async () => {
67
+ }, READ_ONLY_ANNOTATIONS, async ({ limit, page }) => withRichResponse(async () => {
43
68
  const data = await client.get('/reading/highlights', { limit, page });
44
- if (!data.data.length)
45
- return 'No highlights found.';
69
+ if (!data.data.length) {
70
+ return {
71
+ content: [text('No highlights found.')],
72
+ structuredContent: { items: [], pagination: data.pagination },
73
+ };
74
+ }
46
75
  const lines = [`Highlights (${fmt(data.pagination.total)} total):`];
47
76
  for (const h of data.data) {
48
77
  const source = h.article.author
@@ -54,10 +83,27 @@ export function registerReadingTools(server, client) {
54
83
  lines.push(` Note: ${h.note}`);
55
84
  lines.push(` -- ${source} (${formatDate(h.created_at)})`);
56
85
  }
57
- return lines.join('\n');
86
+ // Deduplicate article URLs before emitting as resource_links
87
+ const seen = new Set();
88
+ const links = data.data
89
+ .map((h) => {
90
+ const url = h.article.url ?? null;
91
+ if (!url || seen.has(url))
92
+ return null;
93
+ seen.add(url);
94
+ return resourceLink(url, `Article -- ${h.article.title}`, {
95
+ mimeType: 'text/html',
96
+ });
97
+ })
98
+ .filter((b) => b !== null);
99
+ const content = [text(lines.join('\n')), ...links];
100
+ return {
101
+ content,
102
+ structuredContent: { items: data.data, pagination: data.pagination },
103
+ };
58
104
  }));
59
- // get_random_highlight
60
- server.tool('get_random_highlight', 'Get a single random highlight from saved Instapaper articles. Great for daily inspiration or reflection.', {}, READ_ONLY_ANNOTATIONS, async () => withErrorHandling(async () => {
105
+ // get_random_highlight ───────────────────────────────────────────
106
+ server.tool('get_random_highlight', 'Get a single random highlight from saved Instapaper articles. Great for daily inspiration or reflection.', {}, READ_ONLY_ANNOTATIONS, async () => withRichResponse(async () => {
61
107
  const data = await client.get('/reading/highlights/random');
62
108
  const source = data.article.author
63
109
  ? `${data.article.title} by ${data.article.author}`
@@ -66,12 +112,17 @@ export function registerReadingTools(server, client) {
66
112
  if (data.note)
67
113
  lines.push(`Note: ${data.note}`);
68
114
  lines.push(`-- ${source}`);
69
- return lines.join('\n');
115
+ const link = resourceLink(data.article.url ?? null, `Article -- ${data.article.title}`, { mimeType: 'text/html' });
116
+ const content = [
117
+ text(lines.join('\n')),
118
+ ...(link ? [link] : []),
119
+ ];
120
+ return { content, structuredContent: data };
70
121
  }));
71
- // get_reading_stats
72
- server.tool('get_reading_stats', 'Get overall reading statistics from Instapaper including total articles, finished count, currently reading, highlights, and word count.', {}, READ_ONLY_ANNOTATIONS, async () => withErrorHandling(async () => {
122
+ // get_reading_stats ──────────────────────────────────────────────
123
+ server.tool('get_reading_stats', 'Get overall reading statistics from Instapaper including total articles, finished count, currently reading, highlights, and word count.', {}, READ_ONLY_ANNOTATIONS, async () => withRichResponse(async () => {
73
124
  const data = await client.get('/reading/stats');
74
- return [
125
+ const summary = [
75
126
  'Reading Stats:',
76
127
  `- Total articles: ${fmt(data.total_articles)}`,
77
128
  `- Finished: ${fmt(data.finished_count)}`,
@@ -80,6 +131,7 @@ export function registerReadingTools(server, client) {
80
131
  `- Total words read: ${fmt(data.total_word_count)}`,
81
132
  `- Average read time: ${Math.round(data.avg_estimated_read_min)} min`,
82
133
  ].join('\n');
134
+ return { content: [text(summary)], structuredContent: data };
83
135
  }));
84
136
  }
85
137
  //# sourceMappingURL=reading.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reading.js","sourceRoot":"","sources":["../../src/tools/reading.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reading.js","sourceRoot":"","sources":["../../src/tools/reading.ts"],"names":[],"mappings":"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"}