rewind-mcp-server 0.9.0 → 0.11.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 (94) hide show
  1. package/dist/__tests__/helpers/build-client.d.ts +2 -0
  2. package/dist/__tests__/helpers/build-client.js +24 -0
  3. package/dist/__tests__/helpers/build-client.js.map +1 -0
  4. package/dist/__tests__/helpers.test.js +11 -0
  5. package/dist/__tests__/helpers.test.js.map +1 -1
  6. package/dist/__tests__/image-block.live.js +1 -1
  7. package/dist/__tests__/image-block.live.js.map +1 -1
  8. package/dist/__tests__/manifest-snapshot.test.js +1 -0
  9. package/dist/__tests__/manifest-snapshot.test.js.map +1 -1
  10. package/dist/__tests__/output-schema-attending.test.d.ts +1 -0
  11. package/dist/__tests__/output-schema-attending.test.js +353 -0
  12. package/dist/__tests__/output-schema-attending.test.js.map +1 -0
  13. package/dist/__tests__/output-schema-collecting.test.d.ts +1 -0
  14. package/dist/__tests__/output-schema-collecting.test.js +155 -0
  15. package/dist/__tests__/output-schema-collecting.test.js.map +1 -0
  16. package/dist/__tests__/output-schema-cross-domain.test.d.ts +1 -0
  17. package/dist/__tests__/output-schema-cross-domain.test.js +142 -0
  18. package/dist/__tests__/output-schema-cross-domain.test.js.map +1 -0
  19. package/dist/__tests__/output-schema-listening.test.d.ts +1 -0
  20. package/dist/__tests__/output-schema-listening.test.js +235 -0
  21. package/dist/__tests__/output-schema-listening.test.js.map +1 -0
  22. package/dist/__tests__/output-schema-reading.test.d.ts +1 -0
  23. package/dist/__tests__/output-schema-reading.test.js +181 -0
  24. package/dist/__tests__/output-schema-reading.test.js.map +1 -0
  25. package/dist/__tests__/output-schema-running.test.d.ts +1 -0
  26. package/dist/__tests__/output-schema-running.test.js +185 -0
  27. package/dist/__tests__/output-schema-running.test.js.map +1 -0
  28. package/dist/__tests__/output-schema-watching.test.d.ts +1 -0
  29. package/dist/__tests__/output-schema-watching.test.js +190 -0
  30. package/dist/__tests__/output-schema-watching.test.js.map +1 -0
  31. package/dist/__tests__/output-schema.live.d.ts +1 -0
  32. package/dist/__tests__/output-schema.live.js +180 -0
  33. package/dist/__tests__/output-schema.live.js.map +1 -0
  34. package/dist/__tests__/output-schema.test.d.ts +1 -0
  35. package/dist/__tests__/output-schema.test.js +38 -0
  36. package/dist/__tests__/output-schema.test.js.map +1 -0
  37. package/dist/__tests__/server.test.js +1 -1
  38. package/dist/prompts.js +60 -32
  39. package/dist/prompts.js.map +1 -1
  40. package/dist/resources.js +26 -13
  41. package/dist/resources.js.map +1 -1
  42. package/dist/server.js +16 -13
  43. package/dist/server.js.map +1 -1
  44. package/dist/tools/attending.js +124 -90
  45. package/dist/tools/attending.js.map +1 -1
  46. package/dist/tools/collecting.js +85 -49
  47. package/dist/tools/collecting.js.map +1 -1
  48. package/dist/tools/cross-domain.js +103 -66
  49. package/dist/tools/cross-domain.js.map +1 -1
  50. package/dist/tools/helpers.d.ts +6 -2
  51. package/dist/tools/helpers.js +20 -11
  52. package/dist/tools/helpers.js.map +1 -1
  53. package/dist/tools/listening.js +94 -42
  54. package/dist/tools/listening.js.map +1 -1
  55. package/dist/tools/reading.js +53 -26
  56. package/dist/tools/reading.js.map +1 -1
  57. package/dist/tools/running.js +71 -28
  58. package/dist/tools/running.js.map +1 -1
  59. package/dist/tools/schemas/attending.d.ts +8225 -0
  60. package/dist/tools/schemas/attending.js +404 -0
  61. package/dist/tools/schemas/attending.js.map +1 -0
  62. package/dist/tools/schemas/collecting.d.ts +1011 -0
  63. package/dist/tools/schemas/collecting.js +108 -0
  64. package/dist/tools/schemas/collecting.js.map +1 -0
  65. package/dist/tools/schemas/cross-domain.d.ts +1001 -0
  66. package/dist/tools/schemas/cross-domain.js +107 -0
  67. package/dist/tools/schemas/cross-domain.js.map +1 -0
  68. package/dist/tools/schemas/listening.d.ts +4298 -0
  69. package/dist/tools/schemas/listening.js +255 -0
  70. package/dist/tools/schemas/listening.js.map +1 -0
  71. package/dist/tools/schemas/reading.d.ts +1421 -0
  72. package/dist/tools/schemas/reading.js +151 -0
  73. package/dist/tools/schemas/reading.js.map +1 -0
  74. package/dist/tools/schemas/running.d.ts +680 -0
  75. package/dist/tools/schemas/running.js +154 -0
  76. package/dist/tools/schemas/running.js.map +1 -0
  77. package/dist/tools/schemas/shared.d.ts +98 -0
  78. package/dist/tools/schemas/shared.js +74 -0
  79. package/dist/tools/schemas/shared.js.map +1 -0
  80. package/dist/tools/schemas/system.d.ts +57 -0
  81. package/dist/tools/schemas/system.js +22 -0
  82. package/dist/tools/schemas/system.js.map +1 -0
  83. package/dist/tools/schemas/watching.d.ts +1821 -0
  84. package/dist/tools/schemas/watching.js +167 -0
  85. package/dist/tools/schemas/watching.js.map +1 -0
  86. package/dist/tools/watching.js +87 -46
  87. package/dist/tools/watching.js.map +1 -1
  88. package/dist/ui-bundles.d.ts +10 -11
  89. package/dist/ui-bundles.js +20 -22
  90. package/dist/ui-bundles.js.map +1 -1
  91. package/package.json +1 -1
  92. package/dist/tools/debug.d.ts +0 -6
  93. package/dist/tools/debug.js +0 -26
  94. package/dist/tools/debug.js.map +0 -1
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Live output-schema audit (issue #110).
3
+ *
4
+ * Drives every MCP tool against the REAL Rewind API and lets the SDK's
5
+ * validateToolOutput check the returned structuredContent against each
6
+ * tool's declared outputSchema. A schema that does not match real data
7
+ * makes callTool reject -- this surfaces every such mismatch at once.
8
+ *
9
+ * Unlike the per-domain conformance tests (hand-authored fixtures, which
10
+ * can be circular), this checks against ground truth.
11
+ *
12
+ * Run:
13
+ * REWIND_MCP_KEY=rw_... npx tsx src/__tests__/output-schema.live.ts
14
+ * (REWIND_API_URL overrides the default https://api.rewind.rest)
15
+ */
16
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
17
+ import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
18
+ import { createServer } from '../server.js';
19
+ import { RewindClient } from '../client.js';
20
+ const API_URL = process.env.REWIND_API_URL ?? 'https://api.rewind.rest';
21
+ const KEY = process.env.REWIND_MCP_KEY;
22
+ if (!KEY) {
23
+ console.error('REWIND_MCP_KEY not set -- skipping live audit.');
24
+ process.exit(0);
25
+ }
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ function resultText(res) {
28
+ const block = (res?.content ?? []).find(
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ (b) => b?.type === 'text');
31
+ return String(block?.text ?? '');
32
+ }
33
+ async function main() {
34
+ const rewind = new RewindClient(API_URL, KEY);
35
+ const server = createServer(rewind);
36
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
37
+ const client = new Client({ name: 'output-schema-live', version: '1.0.0' });
38
+ await server.connect(serverTransport);
39
+ await client.connect(clientTransport);
40
+ const results = [];
41
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+ const captured = {};
43
+ // Pace calls -- the API rate-limits on a 60s sliding window, and the
44
+ // audit makes ~50 calls. ~1.2s between keeps a run comfortably under.
45
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
46
+ async function audit(tool, args) {
47
+ await sleep(1200);
48
+ try {
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ const res = await client.callTool({ name: tool, arguments: args });
51
+ if (res.isError) {
52
+ // A failed outputSchema validation comes back as an isError result
53
+ // with "Output validation error" in the text -- that is a schema
54
+ // FAIL. Any other isError is a handler/API error (skip).
55
+ const txt = resultText(res);
56
+ if (txt.includes('Output validation error')) {
57
+ results.push({ tool, status: 'FAIL', note: txt });
58
+ }
59
+ else {
60
+ results.push({
61
+ tool,
62
+ status: 'skip',
63
+ note: `handler error: ${txt.slice(0, 160)}`,
64
+ });
65
+ }
66
+ return;
67
+ }
68
+ captured[tool] = res.structuredContent;
69
+ results.push({ tool, status: 'ok' });
70
+ }
71
+ catch (e) {
72
+ // A failed outputSchema validation rejects callTool -- caught here.
73
+ results.push({
74
+ tool,
75
+ status: 'FAIL',
76
+ note: e instanceof Error ? e.message : String(e),
77
+ });
78
+ }
79
+ }
80
+ // Phase 1 -- discovery: tools callable with no chained id.
81
+ const noImg = { include_images: false };
82
+ const discovery = [
83
+ ['get_health', {}],
84
+ ['get_now_playing', noImg],
85
+ ['get_recent_listens', noImg],
86
+ ['get_listening_stats', {}],
87
+ ['get_top_artists', noImg],
88
+ ['get_top_albums', noImg],
89
+ ['get_top_tracks', {}],
90
+ ['get_listening_streaks', {}],
91
+ ['get_listening_genres', {}],
92
+ ['get_running_stats', {}],
93
+ ['get_recent_runs', {}],
94
+ ['get_personal_records', {}],
95
+ ['get_running_streaks', {}],
96
+ ['get_running_years', {}],
97
+ ['get_watching_stats', {}],
98
+ ['browse_movies', noImg],
99
+ ['get_watching_genres', {}],
100
+ ['get_watching_decades', {}],
101
+ ['get_watching_directors', {}],
102
+ ['get_recent_watches', noImg],
103
+ ['get_reading_highlights', {}],
104
+ ['get_random_highlight', {}],
105
+ ['get_reading_stats', {}],
106
+ ['get_recent_reads', {}],
107
+ ['get_attended_events', {}],
108
+ ['get_attended_players', {}],
109
+ ['get_attending_stats', {}],
110
+ ['get_attending_year_in_review', { year: 2024 }],
111
+ ['get_vinyl_collection', {}],
112
+ ['get_collecting_stats', {}],
113
+ ['get_physical_media', {}],
114
+ ['get_physical_media_stats', {}],
115
+ ['search', { query: 'the' }],
116
+ ['semantic_search', { query: 'technology' }],
117
+ ['get_feed', {}],
118
+ ['get_on_this_day', {}],
119
+ ];
120
+ for (const [tool, args] of discovery)
121
+ await audit(tool, args);
122
+ // Phase 2 -- detail tools, ids chained from discovery results.
123
+ const idFrom = (tool, path) => {
124
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
125
+ let v = captured[tool];
126
+ for (const key of path.split('.')) {
127
+ if (v == null)
128
+ return undefined;
129
+ v = /^\d+$/.test(key) ? v[Number(key)] : v[key];
130
+ }
131
+ return v;
132
+ };
133
+ async function detail(tool, idArg, id, extra = {}) {
134
+ if (id == null) {
135
+ results.push({ tool, status: 'skip', note: 'no source id in archive' });
136
+ return;
137
+ }
138
+ await audit(tool, { [idArg]: id, ...extra });
139
+ }
140
+ await detail('get_artist_details', 'id', idFrom('get_top_artists', 'data.0.id'), noImg);
141
+ await detail('get_album_details', 'id', idFrom('get_top_albums', 'data.0.id'), noImg);
142
+ await detail('get_movie_details', 'id', idFrom('browse_movies', 'items.0.id'), noImg);
143
+ await detail('get_activity_details', 'id', idFrom('get_recent_runs', 'items.0.id'));
144
+ await detail('get_activity_splits', 'id', idFrom('get_recent_runs', 'items.0.id'));
145
+ await detail('get_article', 'id', idFrom('get_recent_reads', 'items.0.id'));
146
+ await detail('find_similar_articles', 'article_id', idFrom('get_recent_reads', 'items.0.id'));
147
+ await detail('get_attended_event', 'id', idFrom('get_attended_events', 'data.0.id'));
148
+ await detail('get_attended_player', 'id', idFrom('get_attended_players', 'data.0.id'), noImg);
149
+ await detail('get_attended_player_stats', 'id', idFrom('get_attended_players', 'data.0.id'));
150
+ const league = idFrom('get_attended_players', 'data.0.league');
151
+ if (league != null)
152
+ await audit('get_attended_season', { league, season: 2024 });
153
+ else
154
+ results.push({
155
+ tool: 'get_attended_season',
156
+ status: 'skip',
157
+ note: 'no league in archive',
158
+ });
159
+ // Report.
160
+ const fails = results.filter((r) => r.status === 'FAIL');
161
+ const skips = results.filter((r) => r.status === 'skip');
162
+ const oks = results.filter((r) => r.status === 'ok');
163
+ console.log('\n=== Live output-schema audit ===');
164
+ console.log(`API: ${API_URL}`);
165
+ console.log(`OK ${oks.length} / FAIL ${fails.length} / skip ${skips.length} (of ${results.length})\n`);
166
+ for (const r of skips)
167
+ console.log(` skip ${r.tool} -- ${r.note}`);
168
+ if (skips.length)
169
+ console.log('');
170
+ for (const r of fails)
171
+ console.log(` FAIL ${r.tool}\n ${r.note}\n`);
172
+ if (!fails.length)
173
+ console.log('All audited tools conform to their outputSchema.');
174
+ process.exit(fails.length ? 1 : 0);
175
+ }
176
+ main().catch((e) => {
177
+ console.error(e);
178
+ process.exit(1);
179
+ });
180
+ //# sourceMappingURL=output-schema.live.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-schema.live.js","sourceRoot":"","sources":["../../src/__tests__/output-schema.live.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Global output-schema guards (issue #105).
3
+ *
4
+ * Domain-agnostic invariants over EVERY registered tool. These catch a
5
+ * future tool added without an `outputSchema`, or one whose advertised
6
+ * JSON Schema regresses to `$ref` / `$defs` / `additionalProperties:false`
7
+ * -- regardless of which domain it lives in.
8
+ *
9
+ * The per-domain `output-schema-*.test.ts` files cover `structuredContent`
10
+ * conformance against fixtures; this file covers the advertised schema.
11
+ */
12
+ import { describe, it, expect } from 'vitest';
13
+ import { buildTestClient } from './helpers/build-client.js';
14
+ describe('output-schema — global guards', () => {
15
+ it('every registered tool declares an outputSchema', async () => {
16
+ const client = await buildTestClient();
17
+ const { tools } = await client.listTools();
18
+ const missing = tools.filter((t) => !t.outputSchema).map((t) => t.name);
19
+ expect(missing, `tools missing outputSchema: ${missing.join(', ') || '(none)'}`).toEqual([]);
20
+ });
21
+ it('no advertised outputSchema uses $ref/$defs or closed additionalProperties', async () => {
22
+ const client = await buildTestClient();
23
+ const { tools } = await client.listTools();
24
+ for (const t of tools) {
25
+ if (!t.outputSchema)
26
+ continue;
27
+ const json = JSON.stringify(t.outputSchema);
28
+ // $ref/$defs: older Claude Desktop builds failed to compile them --
29
+ // shared schema fragments must be factory functions so each use
30
+ // inlines. additionalProperties:false would reject any field the
31
+ // Rewind API adds later -- every object schema must be .passthrough().
32
+ expect(json, `${t.name}: $ref`).not.toContain('$ref');
33
+ expect(json, `${t.name}: $defs`).not.toContain('$defs');
34
+ expect(json, `${t.name}: additionalProperties:false`).not.toContain('"additionalProperties":false');
35
+ }
36
+ });
37
+ });
38
+ //# sourceMappingURL=output-schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-schema.test.js","sourceRoot":"","sources":["../../src/__tests__/output-schema.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;QACvC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,CACJ,OAAO,EACP,+BAA+B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAChE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;QACvC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,CAAC,YAAY;gBAAE,SAAS;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAC5C,oEAAoE;YACpE,gEAAgE;YAChE,iEAAiE;YACjE,uEAAuE;YACvE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,8BAA8B,CAAC,CAAC,GAAG,CAAC,SAAS,CACjE,8BAA8B,CAC/B,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -778,7 +778,7 @@ describe('MCP Server', () => {
778
778
  // an accompanying docs update. See manifest-snapshot.test.ts for
779
779
  // the structural snapshot and scripts/check-docs.mjs for the
780
780
  // MDX cross-check.
781
- expect(tools.length).toBe(48);
781
+ expect(tools.length).toBe(47);
782
782
  const names = tools.map((t) => t.name);
783
783
  expect(names).toContain('get_health');
784
784
  expect(names).toContain('get_now_playing');
package/dist/prompts.js CHANGED
@@ -1,7 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  export function registerPrompts(server) {
3
3
  // Weekly summary prompt
4
- server.prompt('weekly-summary', 'Generate a summary of activity across all domains for the past week', {}, () => ({
4
+ server.registerPrompt('weekly-summary', {
5
+ title: 'Weekly summary',
6
+ description: 'Generate a summary of activity across all domains for the past week',
7
+ argsSchema: {},
8
+ }, () => ({
5
9
  messages: [
6
10
  {
7
11
  role: 'user',
@@ -24,8 +28,12 @@ export function registerPrompts(server) {
24
28
  ],
25
29
  }));
26
30
  // Year in review prompt
27
- server.prompt('year-in-review', 'Generate a comprehensive year-in-review for a given year across all domains', {
28
- year: z.string().describe('The year to review (e.g. 2025)'),
31
+ server.registerPrompt('year-in-review', {
32
+ title: 'Year in review',
33
+ description: 'Generate a comprehensive year-in-review for a given year across all domains',
34
+ argsSchema: {
35
+ year: z.string().describe('The year to review (e.g. 2025)'),
36
+ },
29
37
  }, ({ year }) => ({
30
38
  messages: [
31
39
  {
@@ -56,11 +64,15 @@ export function registerPrompts(server) {
56
64
  ],
57
65
  }));
58
66
  // Letterboxd review draft
59
- server.prompt('letterboxd-review-draft', 'Draft a Letterboxd-style review for a recently watched film that I have rated but not yet reviewed.', {
60
- title: z
61
- .string()
62
- .optional()
63
- .describe('Optional film title to review. If omitted, picks the most recent unreviewed watch.'),
67
+ server.registerPrompt('letterboxd-review-draft', {
68
+ title: 'Letterboxd review draft',
69
+ description: 'Draft a Letterboxd-style review for a recently watched film that I have rated but not yet reviewed.',
70
+ argsSchema: {
71
+ title: z
72
+ .string()
73
+ .optional()
74
+ .describe('Optional film title to review. If omitted, picks the most recent unreviewed watch.'),
75
+ },
64
76
  }, ({ title }) => ({
65
77
  messages: [
66
78
  {
@@ -87,11 +99,15 @@ export function registerPrompts(server) {
87
99
  ],
88
100
  }));
89
101
  // Training report
90
- server.prompt('training-report', 'Analyze the past 7-14 days of running activity and produce a coach-style training report.', {
91
- days: z
92
- .string()
93
- .optional()
94
- .describe('Number of days to analyze (default 7).'),
102
+ server.registerPrompt('training-report', {
103
+ title: 'Training report',
104
+ description: 'Analyze the past 7-14 days of running activity and produce a coach-style training report.',
105
+ argsSchema: {
106
+ days: z
107
+ .string()
108
+ .optional()
109
+ .describe('Number of days to analyze (default 7).'),
110
+ },
95
111
  }, ({ days }) => ({
96
112
  messages: [
97
113
  {
@@ -123,11 +139,15 @@ export function registerPrompts(server) {
123
139
  ],
124
140
  }));
125
141
  // Film diet
126
- server.prompt('film-diet', 'Characterize the shape of my movie-watching taste: genre mix, decade distribution, top directors, rewatch rate, and where I lean vs drift.', {
127
- period: z
128
- .string()
129
- .optional()
130
- .describe("Optional period scope (e.g. '12month', '2025'). Default: lifetime."),
142
+ server.registerPrompt('film-diet', {
143
+ title: 'Film diet',
144
+ description: 'Characterize the shape of my movie-watching taste: genre mix, decade distribution, top directors, rewatch rate, and where I lean vs drift.',
145
+ argsSchema: {
146
+ period: z
147
+ .string()
148
+ .optional()
149
+ .describe("Optional period scope (e.g. '12month', '2025'). Default: lifetime."),
150
+ },
131
151
  }, ({ period }) => ({
132
152
  messages: [
133
153
  {
@@ -157,16 +177,20 @@ export function registerPrompts(server) {
157
177
  ],
158
178
  }));
159
179
  // Compare periods prompt
160
- server.prompt('compare-periods', 'Compare activity between two time periods for a specific domain', {
161
- domain: z
162
- .string()
163
- .describe('Domain to compare (listening, running, watching, collecting, reading)'),
164
- period1: z
165
- .string()
166
- .describe("First period description (e.g. 'January 2025', 'last month')"),
167
- period2: z
168
- .string()
169
- .describe("Second period description (e.g. 'January 2024', 'this month')"),
180
+ server.registerPrompt('compare-periods', {
181
+ title: 'Compare periods',
182
+ description: 'Compare activity between two time periods for a specific domain',
183
+ argsSchema: {
184
+ domain: z
185
+ .string()
186
+ .describe('Domain to compare (listening, running, watching, collecting, reading)'),
187
+ period1: z
188
+ .string()
189
+ .describe("First period description (e.g. 'January 2025', 'last month')"),
190
+ period2: z
191
+ .string()
192
+ .describe("Second period description (e.g. 'January 2024', 'this month')"),
193
+ },
170
194
  }, ({ domain, period1, period2 }) => ({
171
195
  messages: [
172
196
  {
@@ -191,10 +215,14 @@ export function registerPrompts(server) {
191
215
  ],
192
216
  }));
193
217
  // Find a half-remembered article
194
- server.prompt('find-article', 'Recover an article the user only half-remembers, using hybrid keyword + semantic search, then surface related pieces', {
195
- description: z
196
- .string()
197
- .describe('Whatever the user remembers about the article: topic, person mentioned, feeling, rough time period, etc.'),
218
+ server.registerPrompt('find-article', {
219
+ title: 'Find an article',
220
+ description: 'Recover an article the user only half-remembers, using hybrid keyword + semantic search, then surface related pieces',
221
+ argsSchema: {
222
+ description: z
223
+ .string()
224
+ .describe('Whatever the user remembers about the article: topic, person mentioned, feeling, rough time period, etc.'),
225
+ },
198
226
  }, ({ description }) => ({
199
227
  messages: [
200
228
  {
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
package/dist/resources.js CHANGED
@@ -2,7 +2,8 @@ import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { fmt } from './tools/helpers.js';
3
3
  export function registerResources(server, client) {
4
4
  // Sync status resource
5
- server.resource('sync-status', 'rewind://sync/status', {
5
+ server.registerResource('sync-status', 'rewind://sync/status', {
6
+ title: 'Sync status',
6
7
  description: 'Current sync health and last sync times for each data domain',
7
8
  }, async (uri) => {
8
9
  const data = await client.get('/health/sync');
@@ -23,9 +24,10 @@ export function registerResources(server, client) {
23
24
  };
24
25
  });
25
26
  // Listening year-in-review
26
- server.resource('listening-year', new ResourceTemplate('rewind://listening/year/{year}', {
27
+ server.registerResource('listening-year', new ResourceTemplate('rewind://listening/year/{year}', {
27
28
  list: undefined,
28
29
  }), {
30
+ title: 'Listening — year in review',
29
31
  description: 'Listening year-in-review statistics for a given year',
30
32
  }, async (uri, params) => {
31
33
  const year = params.year;
@@ -41,9 +43,10 @@ export function registerResources(server, client) {
41
43
  };
42
44
  });
43
45
  // Running year-in-review
44
- server.resource('running-year', new ResourceTemplate('rewind://running/year/{year}', {
46
+ server.registerResource('running-year', new ResourceTemplate('rewind://running/year/{year}', {
45
47
  list: undefined,
46
48
  }), {
49
+ title: 'Running — year in review',
47
50
  description: 'Running year-in-review statistics for a given year',
48
51
  }, async (uri, params) => {
49
52
  const year = params.year;
@@ -59,9 +62,10 @@ export function registerResources(server, client) {
59
62
  };
60
63
  });
61
64
  // Watching year-in-review
62
- server.resource('watching-year', new ResourceTemplate('rewind://watching/year/{year}', {
65
+ server.registerResource('watching-year', new ResourceTemplate('rewind://watching/year/{year}', {
63
66
  list: undefined,
64
67
  }), {
68
+ title: 'Watching — year in review',
65
69
  description: 'Watching year-in-review statistics for a given year',
66
70
  }, async (uri, params) => {
67
71
  const year = params.year;
@@ -77,7 +81,8 @@ export function registerResources(server, client) {
77
81
  };
78
82
  });
79
83
  // Movie entity
80
- server.resource('movie', new ResourceTemplate('rewind://movie/{id}', { list: undefined }), {
84
+ server.registerResource('movie', new ResourceTemplate('rewind://movie/{id}', { list: undefined }), {
85
+ title: 'Movie',
81
86
  description: 'Full detail for a single movie by internal Rewind id: metadata, watch history, ratings, and Letterboxd review URLs.',
82
87
  }, async (uri, params) => {
83
88
  const id = params.id;
@@ -93,7 +98,8 @@ export function registerResources(server, client) {
93
98
  };
94
99
  });
95
100
  // Show entity
96
- server.resource('show', new ResourceTemplate('rewind://show/{id}', { list: undefined }), {
101
+ server.registerResource('show', new ResourceTemplate('rewind://show/{id}', { list: undefined }), {
102
+ title: 'TV show',
97
103
  description: 'Full detail for a single TV show by internal Rewind id: metadata, seasons, and watched-episode counts.',
98
104
  }, async (uri, params) => {
99
105
  const id = params.id;
@@ -109,7 +115,8 @@ export function registerResources(server, client) {
109
115
  };
110
116
  });
111
117
  // Album entity
112
- server.resource('album', new ResourceTemplate('rewind://album/{id}', { list: undefined }), {
118
+ server.registerResource('album', new ResourceTemplate('rewind://album/{id}', { list: undefined }), {
119
+ title: 'Album',
113
120
  description: 'Full detail for a single album by internal Rewind id: artist, play count, track listing, cover art metadata, and Apple Music URL.',
114
121
  }, async (uri, params) => {
115
122
  const id = params.id;
@@ -125,7 +132,8 @@ export function registerResources(server, client) {
125
132
  };
126
133
  });
127
134
  // Artist entity
128
- server.resource('artist', new ResourceTemplate('rewind://artist/{id}', { list: undefined }), {
135
+ server.registerResource('artist', new ResourceTemplate('rewind://artist/{id}', { list: undefined }), {
136
+ title: 'Artist',
129
137
  description: 'Full detail for a single artist by internal Rewind id: play count, genre, top albums, top tracks, image metadata, and Apple Music URL.',
130
138
  }, async (uri, params) => {
131
139
  const id = params.id;
@@ -141,7 +149,8 @@ export function registerResources(server, client) {
141
149
  };
142
150
  });
143
151
  // Vinyl record entity
144
- server.resource('vinyl', new ResourceTemplate('rewind://vinyl/{id}', { list: undefined }), {
152
+ server.registerResource('vinyl', new ResourceTemplate('rewind://vinyl/{id}', { list: undefined }), {
153
+ title: 'Vinyl record',
145
154
  description: 'Full detail for a single vinyl record (or other Discogs collection item) by internal Rewind id: title, artists, formats, genres, cover art, Discogs URL, community stats.',
146
155
  }, async (uri, params) => {
147
156
  const id = params.id;
@@ -157,7 +166,8 @@ export function registerResources(server, client) {
157
166
  };
158
167
  });
159
168
  // Physical media entity
160
- server.resource('physical-media', new ResourceTemplate('rewind://physical-media/{id}', { list: undefined }), {
169
+ server.registerResource('physical-media', new ResourceTemplate('rewind://physical-media/{id}', { list: undefined }), {
170
+ title: 'Physical media',
161
171
  description: 'Full detail for a single physical media item (Blu-ray / 4K UHD / HD DVD) by internal Rewind id: title, year, format, resolution, HDR, audio, watch history.',
162
172
  }, async (uri, params) => {
163
173
  const id = params.id;
@@ -173,7 +183,8 @@ export function registerResources(server, client) {
173
183
  };
174
184
  });
175
185
  // Article entity
176
- server.resource('article', new ResourceTemplate('rewind://article/{id}', { list: undefined }), {
186
+ server.registerResource('article', new ResourceTemplate('rewind://article/{id}', { list: undefined }), {
187
+ title: 'Article',
177
188
  description: 'Full detail for a saved Instapaper article: title, author, domain, word count, read progress, tags, source URL, Instapaper URLs, embedded highlights, AND the full article body. The `content` field is the complete plain-text body (HTML-stripped, typically 5-30 KB); `excerpt` is the first ~3000 chars. Fetch this resource whenever the user asks about article specifics past the excerpt — do NOT fall back to web search or try to fetch the source URL (often paywalled). The `content` field has the full article text including for paywalled sources.',
178
189
  }, async (uri, params) => {
179
190
  const id = params.id;
@@ -189,7 +200,8 @@ export function registerResources(server, client) {
189
200
  };
190
201
  });
191
202
  // Activity entity
192
- server.resource('activity', new ResourceTemplate('rewind://activity/{id}', { list: undefined }), {
203
+ server.registerResource('activity', new ResourceTemplate('rewind://activity/{id}', { list: undefined }), {
204
+ title: 'Run',
193
205
  description: 'Full detail for a single running activity by internal Rewind id: distance, pace, elevation, HR, cadence, calories, location, and Strava URL.',
194
206
  }, async (uri, params) => {
195
207
  const id = params.id;
@@ -205,7 +217,8 @@ export function registerResources(server, client) {
205
217
  };
206
218
  });
207
219
  // Highlight entity
208
- server.resource('highlight', new ResourceTemplate('rewind://highlight/{id}', { list: undefined }), {
220
+ server.registerResource('highlight', new ResourceTemplate('rewind://highlight/{id}', { list: undefined }), {
221
+ title: 'Highlight',
209
222
  description: 'Full detail for a single Instapaper highlight by internal Rewind id: highlighted text, optional note, and nested parent-article context (title, author, domain, source URL).',
210
223
  }, async (uri, params) => {
211
224
  const id = params.id;
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}