navidrome-mcp 1.0.4 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/README.md +7 -13
  2. package/dist/client/navidrome-client.d.ts +5 -0
  3. package/dist/client/navidrome-client.d.ts.map +1 -1
  4. package/dist/client/navidrome-client.js +25 -0
  5. package/dist/client/navidrome-client.js.map +1 -1
  6. package/dist/config.d.ts +1 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +23 -0
  9. package/dist/config.js.map +1 -1
  10. package/dist/constants/defaults.d.ts +1 -1
  11. package/dist/constants/defaults.js +1 -1
  12. package/dist/constants/defaults.js.map +1 -1
  13. package/dist/index.js +6 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/schemas/common.d.ts +205 -0
  16. package/dist/schemas/common.d.ts.map +1 -1
  17. package/dist/schemas/common.js +109 -0
  18. package/dist/schemas/common.js.map +1 -1
  19. package/dist/schemas/validation.d.ts +30 -15
  20. package/dist/schemas/validation.d.ts.map +1 -1
  21. package/dist/schemas/validation.js +11 -14
  22. package/dist/schemas/validation.js.map +1 -1
  23. package/dist/services/filter-cache-manager.d.ts +114 -0
  24. package/dist/services/filter-cache-manager.d.ts.map +1 -0
  25. package/dist/services/filter-cache-manager.js +321 -0
  26. package/dist/services/filter-cache-manager.js.map +1 -0
  27. package/dist/services/library-manager.d.ts +123 -0
  28. package/dist/services/library-manager.d.ts.map +1 -0
  29. package/dist/services/library-manager.js +216 -0
  30. package/dist/services/library-manager.js.map +1 -0
  31. package/dist/tools/handlers/playlist-handlers.d.ts.map +1 -1
  32. package/dist/tools/handlers/playlist-handlers.js +7 -59
  33. package/dist/tools/handlers/playlist-handlers.js.map +1 -1
  34. package/dist/tools/handlers/radio-handlers.d.ts.map +1 -1
  35. package/dist/tools/handlers/radio-handlers.js +32 -53
  36. package/dist/tools/handlers/radio-handlers.js.map +1 -1
  37. package/dist/tools/handlers/registry.d.ts +0 -9
  38. package/dist/tools/handlers/registry.d.ts.map +1 -1
  39. package/dist/tools/handlers/registry.js +1 -1
  40. package/dist/tools/handlers/registry.js.map +1 -1
  41. package/dist/tools/handlers/search-handlers.d.ts +1 -1
  42. package/dist/tools/handlers/search-handlers.d.ts.map +1 -1
  43. package/dist/tools/handlers/search-handlers.js +275 -17
  44. package/dist/tools/handlers/search-handlers.js.map +1 -1
  45. package/dist/tools/handlers/tag-handlers.d.ts.map +1 -1
  46. package/dist/tools/handlers/tag-handlers.js +21 -76
  47. package/dist/tools/handlers/tag-handlers.js.map +1 -1
  48. package/dist/tools/index.d.ts +1 -1
  49. package/dist/tools/index.d.ts.map +1 -1
  50. package/dist/tools/index.js +1 -1
  51. package/dist/tools/index.js.map +1 -1
  52. package/dist/tools/lastfm-discovery.d.ts +13 -12
  53. package/dist/tools/lastfm-discovery.d.ts.map +1 -1
  54. package/dist/tools/library.d.ts +1 -10
  55. package/dist/tools/library.d.ts.map +1 -1
  56. package/dist/tools/library.js +143 -169
  57. package/dist/tools/library.js.map +1 -1
  58. package/dist/tools/listening-history.d.ts +5 -4
  59. package/dist/tools/listening-history.d.ts.map +1 -1
  60. package/dist/tools/listening-history.js +1 -1
  61. package/dist/tools/listening-history.js.map +1 -1
  62. package/dist/tools/lyrics.d.ts +0 -11
  63. package/dist/tools/lyrics.d.ts.map +1 -1
  64. package/dist/tools/lyrics.js +1 -1
  65. package/dist/tools/lyrics.js.map +1 -1
  66. package/dist/tools/media-library.d.ts +1 -20
  67. package/dist/tools/media-library.d.ts.map +1 -1
  68. package/dist/tools/media-library.js +2 -100
  69. package/dist/tools/media-library.js.map +1 -1
  70. package/dist/tools/playlist-management/index.d.ts +21 -0
  71. package/dist/tools/playlist-management/index.d.ts.map +1 -0
  72. package/dist/tools/playlist-management/index.js +24 -0
  73. package/dist/tools/playlist-management/index.js.map +1 -0
  74. package/dist/tools/playlist-management/playlist-crud.d.ts +49 -0
  75. package/dist/tools/playlist-management/playlist-crud.d.ts.map +1 -0
  76. package/dist/tools/playlist-management/playlist-crud.js +150 -0
  77. package/dist/tools/playlist-management/playlist-crud.js.map +1 -0
  78. package/dist/tools/playlist-management/playlist-export.d.ts +32 -0
  79. package/dist/tools/playlist-management/playlist-export.d.ts.map +1 -0
  80. package/dist/tools/playlist-management/playlist-export.js +100 -0
  81. package/dist/tools/playlist-management/playlist-export.js.map +1 -0
  82. package/dist/tools/playlist-management/track-management.d.ts +32 -0
  83. package/dist/tools/playlist-management/track-management.d.ts.map +1 -0
  84. package/dist/tools/playlist-management/track-management.js +121 -0
  85. package/dist/tools/playlist-management/track-management.js.map +1 -0
  86. package/dist/tools/playlist-management.d.ts +2 -63
  87. package/dist/tools/playlist-management.d.ts.map +1 -1
  88. package/dist/tools/playlist-management.js +3 -367
  89. package/dist/tools/playlist-management.js.map +1 -1
  90. package/dist/tools/queue-management.d.ts +5 -4
  91. package/dist/tools/queue-management.d.ts.map +1 -1
  92. package/dist/tools/radio-discovery.d.ts +0 -54
  93. package/dist/tools/radio-discovery.d.ts.map +1 -1
  94. package/dist/tools/radio-discovery.js +5 -5
  95. package/dist/tools/radio-discovery.js.map +1 -1
  96. package/dist/tools/radio-validation/index.d.ts +25 -0
  97. package/dist/tools/radio-validation/index.d.ts.map +1 -0
  98. package/dist/tools/radio-validation/index.js +24 -0
  99. package/dist/tools/radio-validation/index.js.map +1 -0
  100. package/dist/tools/radio-validation/network-validator.d.ts +39 -0
  101. package/dist/tools/radio-validation/network-validator.d.ts.map +1 -0
  102. package/dist/tools/radio-validation/network-validator.js +156 -0
  103. package/dist/tools/radio-validation/network-validator.js.map +1 -0
  104. package/dist/tools/radio-validation/recommendation-engine.d.ts +46 -0
  105. package/dist/tools/radio-validation/recommendation-engine.d.ts.map +1 -0
  106. package/dist/tools/radio-validation/recommendation-engine.js +58 -0
  107. package/dist/tools/radio-validation/recommendation-engine.js.map +1 -0
  108. package/dist/tools/radio-validation/stream-detector.d.ts +37 -0
  109. package/dist/tools/radio-validation/stream-detector.d.ts.map +1 -0
  110. package/dist/tools/radio-validation/stream-detector.js +111 -0
  111. package/dist/tools/radio-validation/stream-detector.js.map +1 -0
  112. package/dist/tools/radio-validation/validation-core.d.ts +24 -0
  113. package/dist/tools/radio-validation/validation-core.d.ts.map +1 -0
  114. package/dist/tools/radio-validation/validation-core.js +196 -0
  115. package/dist/tools/radio-validation/validation-core.js.map +1 -0
  116. package/dist/tools/radio-validation.d.ts +1 -31
  117. package/dist/tools/radio-validation.d.ts.map +1 -1
  118. package/dist/tools/radio-validation.js +2 -445
  119. package/dist/tools/radio-validation.js.map +1 -1
  120. package/dist/tools/radio.d.ts +5 -9
  121. package/dist/tools/radio.d.ts.map +1 -1
  122. package/dist/tools/radio.js +110 -115
  123. package/dist/tools/radio.js.map +1 -1
  124. package/dist/tools/search/filter-resolver.d.ts +77 -0
  125. package/dist/tools/search/filter-resolver.d.ts.map +1 -0
  126. package/dist/tools/search/filter-resolver.js +165 -0
  127. package/dist/tools/search/filter-resolver.js.map +1 -0
  128. package/dist/tools/search/index.d.ts +20 -0
  129. package/dist/tools/search/index.d.ts.map +1 -0
  130. package/dist/tools/search/index.js +23 -0
  131. package/dist/tools/search/index.js.map +1 -0
  132. package/dist/tools/search/parallel-searcher.d.ts +73 -0
  133. package/dist/tools/search/parallel-searcher.d.ts.map +1 -0
  134. package/dist/tools/search/parallel-searcher.js +145 -0
  135. package/dist/tools/search/parallel-searcher.js.map +1 -0
  136. package/dist/tools/search/result-aggregator.d.ts +81 -0
  137. package/dist/tools/search/result-aggregator.d.ts.map +1 -0
  138. package/dist/tools/search/result-aggregator.js +119 -0
  139. package/dist/tools/search/result-aggregator.js.map +1 -0
  140. package/dist/tools/search/search-orchestrator.d.ts +41 -0
  141. package/dist/tools/search/search-orchestrator.d.ts.map +1 -0
  142. package/dist/tools/search/search-orchestrator.js +81 -0
  143. package/dist/tools/search/search-orchestrator.js.map +1 -0
  144. package/dist/tools/search.d.ts +1 -36
  145. package/dist/tools/search.d.ts.map +1 -1
  146. package/dist/tools/search.js +3 -147
  147. package/dist/tools/search.js.map +1 -1
  148. package/dist/tools/tags.d.ts +6 -32
  149. package/dist/tools/tags.d.ts.map +1 -1
  150. package/dist/tools/tags.js +58 -184
  151. package/dist/tools/tags.js.map +1 -1
  152. package/dist/tools/test.d.ts +2 -2
  153. package/dist/tools/test.d.ts.map +1 -1
  154. package/dist/tools/test.js +0 -8
  155. package/dist/tools/test.js.map +1 -1
  156. package/dist/tools/user-preferences.d.ts +7 -6
  157. package/dist/tools/user-preferences.d.ts.map +1 -1
  158. package/dist/tools/user-preferences.js +1 -1
  159. package/dist/tools/user-preferences.js.map +1 -1
  160. package/dist/transformers/album-transformer.d.ts +55 -0
  161. package/dist/transformers/album-transformer.d.ts.map +1 -0
  162. package/dist/transformers/album-transformer.js +75 -0
  163. package/dist/transformers/album-transformer.js.map +1 -0
  164. package/dist/transformers/artist-transformer.d.ts +46 -0
  165. package/dist/transformers/artist-transformer.d.ts.map +1 -0
  166. package/dist/transformers/artist-transformer.js +58 -0
  167. package/dist/transformers/artist-transformer.js.map +1 -0
  168. package/dist/transformers/index.d.ts +27 -0
  169. package/dist/transformers/index.d.ts.map +1 -0
  170. package/dist/transformers/index.js +30 -0
  171. package/dist/transformers/index.js.map +1 -0
  172. package/dist/transformers/playlist-transformer.d.ts +44 -0
  173. package/dist/transformers/playlist-transformer.d.ts.map +1 -0
  174. package/dist/transformers/playlist-transformer.js +49 -0
  175. package/dist/transformers/playlist-transformer.js.map +1 -0
  176. package/dist/transformers/shared-transformers.d.ts +51 -0
  177. package/dist/transformers/shared-transformers.d.ts.map +1 -0
  178. package/dist/transformers/shared-transformers.js +66 -0
  179. package/dist/transformers/shared-transformers.js.map +1 -0
  180. package/dist/transformers/song-transformer.d.ts +1 -65
  181. package/dist/transformers/song-transformer.d.ts.map +1 -1
  182. package/dist/transformers/song-transformer.js +1 -158
  183. package/dist/transformers/song-transformer.js.map +1 -1
  184. package/dist/types/core.d.ts +0 -34
  185. package/dist/types/core.d.ts.map +1 -1
  186. package/dist/types/index.d.ts +3 -2
  187. package/dist/types/index.d.ts.map +1 -1
  188. package/dist/types/library.d.ts +84 -0
  189. package/dist/types/library.d.ts.map +1 -0
  190. package/dist/types/library.js +19 -0
  191. package/dist/types/library.js.map +1 -0
  192. package/dist/types/tags.d.ts +0 -13
  193. package/dist/types/tags.d.ts.map +1 -1
  194. package/package.json +5 -1
package/README.md CHANGED
@@ -271,14 +271,12 @@ Add the Navidrome MCP server:
271
271
 
272
272
  | Tool | Description |
273
273
  |------|-------------|
274
- | `list_songs` | Browse songs with filtering and sorting |
275
- | `list_albums` | Browse albums with metadata |
276
- | `list_artists` | Browse artists with statistics |
277
- | `list_genres` | View all music genres in library |
278
274
  | `get_song` | Detailed song information |
279
275
  | `get_album` | Detailed album information |
280
276
  | `get_artist` | Detailed artist information |
281
277
  | `get_song_playlists` | Get all playlists that contain a specific song |
278
+ | `get_user_details` | Get user information and available libraries |
279
+ | `set_active_libraries` | Set which libraries are active for filtering content |
282
280
 
283
281
  ### 🔍 Search & Discovery
284
282
 
@@ -304,8 +302,7 @@ Add the Navidrome MCP server:
304
302
  | `update_playlist` | Update playlist metadata |
305
303
  | `delete_playlist` | Remove playlist |
306
304
  | `get_playlist_tracks` | Get playlist contents |
307
- | `add_tracks_to_playlist` | Add songs/albums/artists |
308
- | `batch_add_tracks_to_playlist` | Batch add multiple sets of tracks |
305
+ | `add_tracks_to_playlist` | Add multiple types of content (songs/albums/artists) in a single operation |
309
306
  | `remove_tracks_from_playlist` | Remove specific tracks |
310
307
  | `reorder_playlist_track` | Rearrange track order |
311
308
 
@@ -336,9 +333,8 @@ Add the Navidrome MCP server:
336
333
  | `validate_radio_stream` | Test stream URL validity |
337
334
  | `list_radio_stations` | View all stations |
338
335
  | `get_radio_station` | Get detailed information about a specific radio station by ID |
339
- | `create_radio_station` | Add new station (with optional validation*) |
336
+ | `create_radio_station` | Create radio stations using JSON array format (single or multiple stations, with optional validation*) |
340
337
  | `delete_radio_station` | Delete an internet radio station by ID |
341
- | `batch_create_radio_stations` | Batch add multiple stations (with optional validation*) |
342
338
  | `play_radio_station` | Start radio playback |
343
339
  | `get_current_radio_info` | Get information about currently playing radio station and stream metadata |
344
340
  | `discover_radio_stations` | Find internet radio stations globally |
@@ -347,7 +343,7 @@ Add the Navidrome MCP server:
347
343
  | `click_station` | Register play click for popularity metrics |
348
344
  | `vote_station` | Vote for a radio station |
349
345
 
350
- *Note: Both `create_radio_station` and `batch_create_radio_stations` support an optional `validateBeforeAdd` parameter that will test stream URLs before adding them to Navidrome.
346
+ *Note: `create_radio_station` supports an optional `validateBeforeAdd` parameter that will test stream URLs before adding them to Navidrome.
351
347
 
352
348
  ### 🎤 Lyrics & Timestamps
353
349
 
@@ -359,11 +355,9 @@ Add the Navidrome MCP server:
359
355
 
360
356
  | Tool | Description |
361
357
  |------|-------------|
362
- | `list_tags` | Browse all metadata tags |
363
- | `get_tag` | Get detailed information about a specific tag by ID |
364
358
  | `search_by_tags` | Search by specific tags |
365
- | `get_tag_distribution` | Analyze tag usage |
366
- | `list_unique_tags` | List all unique tag names with statistics (how many unique values, total usage) |
359
+ | `get_tag_distribution` | Analyze tag usage patterns and distribution |
360
+ | `get_filter_options` | Get available filter values for search operations |
367
361
 
368
362
  ## Troubleshooting
369
363
 
@@ -23,6 +23,11 @@ export declare class NavidromeClient {
23
23
  constructor(config: Config);
24
24
  initialize(): Promise<void>;
25
25
  request<T>(endpoint: string, options?: RequestInit): Promise<T>;
26
+ /**
27
+ * Make a request with automatic library filtering applied.
28
+ * This method automatically adds library_id parameters for active libraries.
29
+ */
30
+ requestWithLibraryFilter<T>(endpoint: string, options?: RequestInit): Promise<T>;
26
31
  subsonicRequest(endpoint: string, params?: Record<string, string>): Promise<unknown>;
27
32
  }
28
33
  //# sourceMappingURL=navidrome-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navidrome-client.d.ts","sourceRoot":"","sources":["../../src/client/navidrome-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAK3C,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM;IAMpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAkCnE,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAyB/F"}
1
+ {"version":3,"file":"navidrome-client.d.ts","sourceRoot":"","sources":["../../src/client/navidrome-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM;IAMpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAkCzE;;;OAGG;IACG,wBAAwB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAyBpF,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAyB/F"}
@@ -18,6 +18,7 @@
18
18
  import { AuthManager } from './auth-manager.js';
19
19
  import { logger } from '../utils/logger.js';
20
20
  import { ErrorFormatter } from '../utils/error-formatter.js';
21
+ import { libraryManager } from '../services/library-manager.js';
21
22
  export class NavidromeClient {
22
23
  authManager;
23
24
  baseUrl;
@@ -60,6 +61,30 @@ export class NavidromeClient {
60
61
  return response.text();
61
62
  }
62
63
  }
64
+ /**
65
+ * Make a request with automatic library filtering applied.
66
+ * This method automatically adds library_id parameters for active libraries.
67
+ */
68
+ async requestWithLibraryFilter(endpoint, options = {}) {
69
+ // Parse the endpoint to extract path and existing query parameters
70
+ const url = new URL(endpoint, 'http://localhost'); // Base doesn't matter, we just need to parse
71
+ const path = url.pathname;
72
+ const existingParams = url.searchParams;
73
+ // Add library filtering if LibraryManager is initialized and has active libraries
74
+ if (libraryManager.isInitialized()) {
75
+ const libraryParams = libraryManager.getLibraryQueryParams();
76
+ // Add library_id parameters (duplicate parameters as discovered from frontend)
77
+ for (const [key, value] of libraryParams.entries()) {
78
+ existingParams.append(key, value);
79
+ }
80
+ }
81
+ // Reconstruct the endpoint with library filters
82
+ const filteredEndpoint = existingParams.toString()
83
+ ? `${path}?${existingParams.toString()}`
84
+ : path;
85
+ logger.debug(`Request with library filter: ${filteredEndpoint}`);
86
+ return this.request(filteredEndpoint, options);
87
+ }
63
88
  async subsonicRequest(endpoint, params = {}) {
64
89
  // Build Subsonic REST API parameters
65
90
  const queryParams = new URLSearchParams({
@@ -1 +1 @@
1
- {"version":3,"file":"navidrome-client.js","sourceRoot":"","sources":["../../src/client/navidrome-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navidrome-client.js","sourceRoot":"","sources":["../../src/client/navidrome-client.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -23,6 +23,7 @@ declare const ConfigSchema: z.ZodObject<{
23
23
  debug: z.ZodDefault<z.ZodBoolean>;
24
24
  cacheTtl: z.ZodDefault<z.ZodNumber>;
25
25
  tokenExpiry: z.ZodDefault<z.ZodNumber>;
26
+ defaultLibraryIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
26
27
  features: z.ZodObject<{
27
28
  lastfm: z.ZodDefault<z.ZodBoolean>;
28
29
  radioBrowser: z.ZodDefault<z.ZodBoolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4BxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;iBAwBhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAsElD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4BxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;iBA2BhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CA6FlD"}
package/dist/config.js CHANGED
@@ -48,6 +48,8 @@ const ConfigSchema = z.object({
48
48
  debug: z.boolean().default(false),
49
49
  cacheTtl: z.number().positive().default(300),
50
50
  tokenExpiry: z.number().positive().default(86400), // Default 24 hours in seconds
51
+ // Library Configuration
52
+ defaultLibraryIds: z.array(z.number()).optional(),
51
53
  // Feature Configuration
52
54
  features: z.object({
53
55
  lastfm: z.boolean().default(false),
@@ -96,6 +98,25 @@ export async function loadConfig() {
96
98
  const radioBrowserUserAgent = process.env['RADIO_BROWSER_USER_AGENT'] ?? undefined;
97
99
  const lyricsProvider = process.env['LYRICS_PROVIDER'] ?? undefined;
98
100
  const lrclibUserAgent = process.env['LRCLIB_USER_AGENT'] ?? undefined;
101
+ // Parse default library IDs from environment
102
+ let defaultLibraryIds;
103
+ const defaultLibrariesEnv = process.env['NAVIDROME_DEFAULT_LIBRARIES'];
104
+ if (defaultLibrariesEnv !== null && defaultLibrariesEnv !== undefined && defaultLibrariesEnv.trim() !== '') {
105
+ try {
106
+ defaultLibraryIds = defaultLibrariesEnv
107
+ .split(',')
108
+ .map(id => parseInt(id.trim(), 10))
109
+ .filter(id => !isNaN(id));
110
+ if (defaultLibraryIds.length === 0) {
111
+ logger.warn('NAVIDROME_DEFAULT_LIBRARIES contains no valid library IDs');
112
+ defaultLibraryIds = undefined;
113
+ }
114
+ }
115
+ catch (error) {
116
+ logger.warn('Failed to parse NAVIDROME_DEFAULT_LIBRARIES:', error);
117
+ defaultLibraryIds = undefined;
118
+ }
119
+ }
99
120
  const rawConfig = {
100
121
  navidromeUrl: process.env['NAVIDROME_URL'],
101
122
  navidromeUsername: process.env['NAVIDROME_USERNAME'],
@@ -103,6 +124,8 @@ export async function loadConfig() {
103
124
  debug: process.env['DEBUG'] === 'true',
104
125
  cacheTtl: (process.env['CACHE_TTL'] !== null && process.env['CACHE_TTL'] !== undefined && process.env['CACHE_TTL'] !== '') ? parseInt(process.env['CACHE_TTL'], 10) : 300,
105
126
  tokenExpiry: (process.env['TOKEN_EXPIRY'] !== null && process.env['TOKEN_EXPIRY'] !== undefined && process.env['TOKEN_EXPIRY'] !== '') ? parseInt(process.env['TOKEN_EXPIRY'], 10) : 86400,
127
+ // Library Configuration
128
+ defaultLibraryIds,
106
129
  // Feature detection based on available configuration
107
130
  features: {
108
131
  lastfm: (lastFmApiKey !== null && lastFmApiKey !== undefined && lastFmApiKey.trim() !== ''),
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export declare const DEFAULT_VALUES: {
9
9
  readonly ALBUMS_LIMIT: 100;
10
10
  readonly PLAYLISTS_LIMIT: 100;
11
11
  readonly SEARCH_LIMIT: 100;
12
- readonly SEARCH_ALL_LIMIT: 100;
12
+ readonly SEARCH_ALL_LIMIT: 15;
13
13
  readonly PLAYLIST_TRACKS_LIMIT: 100;
14
14
  readonly STARRED_ITEMS_LIMIT: 100;
15
15
  readonly TOP_RATED_LIMIT: 100;
@@ -11,7 +11,7 @@ export const DEFAULT_VALUES = {
11
11
  PLAYLISTS_LIMIT: 100,
12
12
  // Search endpoints - increased from 20 to 100 for better search coverage
13
13
  SEARCH_LIMIT: 100,
14
- SEARCH_ALL_LIMIT: 100, // for artistCount, albumCount, songCount in search_all
14
+ SEARCH_ALL_LIMIT: 15, // for artistCount, albumCount, songCount in search_all - optimized for LLM context
15
15
  // Playlist endpoints
16
16
  PLAYLIST_TRACKS_LIMIT: 100,
17
17
  // Ratings and favorites
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,0EAA0E;IAC1E,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,eAAe,EAAE,GAAG;IAEpB,yEAAyE;IACzE,YAAY,EAAE,GAAG;IACjB,gBAAgB,EAAE,GAAG,EAAE,uDAAuD;IAE9E,qBAAqB;IACrB,qBAAqB,EAAE,GAAG;IAE1B,wBAAwB;IACxB,mBAAmB,EAAE,GAAG;IACxB,eAAe,EAAE,GAAG;IAEpB,oBAAoB;IACpB,qBAAqB,EAAE,GAAG;IAC1B,iBAAiB,EAAE,GAAG;IAEtB,4BAA4B;IAC5B,qBAAqB,EAAE,GAAG;IAC1B,oBAAoB,EAAE,GAAG;IACzB,0BAA0B,EAAE,GAAG;IAC/B,oBAAoB,EAAE,GAAG;IAEzB,iBAAiB;IACjB,UAAU,EAAE,GAAG;IACf,gBAAgB,EAAE,GAAG;IACrB,sBAAsB,EAAE,EAAE,EAAE,gCAAgC;IAC5D,6BAA6B,EAAE,EAAE,EAAE,qBAAqB;IACxD,iBAAiB,EAAE,GAAG;IAEtB,kBAAkB;IAClB,qBAAqB,EAAE,EAAE,EAAE,6CAA6C;CAChE,CAAC"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,0EAA0E;IAC1E,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,eAAe,EAAE,GAAG;IAEpB,yEAAyE;IACzE,YAAY,EAAE,GAAG;IACjB,gBAAgB,EAAE,EAAE,EAAE,mFAAmF;IAEzG,qBAAqB;IACrB,qBAAqB,EAAE,GAAG;IAE1B,wBAAwB;IACxB,mBAAmB,EAAE,GAAG;IACxB,eAAe,EAAE,GAAG;IAEpB,oBAAoB;IACpB,qBAAqB,EAAE,GAAG;IAC1B,iBAAiB,EAAE,GAAG;IAEtB,4BAA4B;IAC5B,qBAAqB,EAAE,GAAG;IAC1B,oBAAoB,EAAE,GAAG;IACzB,0BAA0B,EAAE,GAAG;IAC/B,oBAAoB,EAAE,GAAG;IAEzB,iBAAiB;IACjB,UAAU,EAAE,GAAG;IACf,gBAAgB,EAAE,GAAG;IACrB,sBAAsB,EAAE,EAAE,EAAE,gCAAgC;IAC5D,6BAA6B,EAAE,EAAE,EAAE,qBAAqB;IACxD,iBAAiB,EAAE,GAAG;IAEtB,kBAAkB;IAClB,qBAAqB,EAAE,EAAE,EAAE,6CAA6C;CAChE,CAAC"}
package/dist/index.js CHANGED
@@ -22,6 +22,8 @@ import { loadConfig } from './config.js';
22
22
  import { registerTools } from './tools/index.js';
23
23
  import { registerResources } from './resources/index.js';
24
24
  import { NavidromeClient } from './client/navidrome-client.js';
25
+ import { libraryManager } from './services/library-manager.js';
26
+ import { filterCacheManager } from './services/filter-cache-manager.js';
25
27
  import { logger } from './utils/logger.js';
26
28
  import { getPackageVersion } from './utils/version.js';
27
29
  import { MCP_CAPABILITIES } from './capabilities.js';
@@ -46,6 +48,10 @@ async function main() {
46
48
  });
47
49
  const client = new NavidromeClient(config);
48
50
  await client.initialize();
51
+ // Initialize library manager with user data and configuration
52
+ await libraryManager.initialize(client, config);
53
+ // Initialize filter cache manager for enhanced search functionality
54
+ await filterCacheManager.initialize(client, config);
49
55
  registerTools(server, client, config);
50
56
  registerResources(server, client);
51
57
  const transport = new StdioServerTransport();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -44,12 +44,217 @@ export declare const OrderSchema: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
44
44
  export declare const SortSchema: z.ZodDefault<z.ZodOptional<z.ZodString>>;
45
45
  export declare const OptionalBooleanSchema: z.ZodOptional<z.ZodBoolean>;
46
46
  export declare const RequiredBooleanSchema: z.ZodBoolean;
47
+ export declare const EnhancedSearchSchema: z.ZodObject<{
48
+ query: z.ZodString;
49
+ genre: z.ZodOptional<z.ZodString>;
50
+ mediaType: z.ZodOptional<z.ZodString>;
51
+ country: z.ZodOptional<z.ZodString>;
52
+ releaseType: z.ZodOptional<z.ZodString>;
53
+ recordLabel: z.ZodOptional<z.ZodString>;
54
+ mood: z.ZodOptional<z.ZodString>;
55
+ sort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
56
+ name: "name";
57
+ title: "title";
58
+ artist: "artist";
59
+ album: "album";
60
+ year: "year";
61
+ duration: "duration";
62
+ playCount: "playCount";
63
+ rating: "rating";
64
+ recently_added: "recently_added";
65
+ starred_at: "starred_at";
66
+ random: "random";
67
+ }>>>;
68
+ order: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
69
+ ASC: "ASC";
70
+ DESC: "DESC";
71
+ }>>>;
72
+ randomSeed: z.ZodOptional<z.ZodNumber>;
73
+ yearFrom: z.ZodOptional<z.ZodNumber>;
74
+ yearTo: z.ZodOptional<z.ZodNumber>;
75
+ starred: z.ZodOptional<z.ZodBoolean>;
76
+ }, z.core.$strip>;
47
77
  export declare const RatingSchema: z.ZodNumber;
48
78
  export declare const createTimeoutSchema: (min: number, max: number, defaultValue: number) => z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
49
79
  export declare const UrlSchema: z.ZodString;
50
80
  export declare const StringArraySchema: z.ZodArray<z.ZodString>;
51
81
  export declare const OptionalStringArraySchema: z.ZodOptional<z.ZodArray<z.ZodString>>;
52
82
  export declare const NonEmptyStringArraySchema: z.ZodArray<z.ZodString>;
83
+ export declare const SearchSongsSchema: z.ZodObject<{
84
+ genre: z.ZodOptional<z.ZodString>;
85
+ mediaType: z.ZodOptional<z.ZodString>;
86
+ country: z.ZodOptional<z.ZodString>;
87
+ releaseType: z.ZodOptional<z.ZodString>;
88
+ recordLabel: z.ZodOptional<z.ZodString>;
89
+ mood: z.ZodOptional<z.ZodString>;
90
+ order: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
91
+ ASC: "ASC";
92
+ DESC: "DESC";
93
+ }>>>;
94
+ randomSeed: z.ZodOptional<z.ZodNumber>;
95
+ yearFrom: z.ZodOptional<z.ZodNumber>;
96
+ yearTo: z.ZodOptional<z.ZodNumber>;
97
+ starred: z.ZodOptional<z.ZodBoolean>;
98
+ query: z.ZodDefault<z.ZodOptional<z.ZodString>>;
99
+ limit: z.ZodNumber | z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
100
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
101
+ sort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
102
+ title: "title";
103
+ artist: "artist";
104
+ album: "album";
105
+ year: "year";
106
+ duration: "duration";
107
+ playCount: "playCount";
108
+ rating: "rating";
109
+ recently_added: "recently_added";
110
+ starred_at: "starred_at";
111
+ random: "random";
112
+ }>>>;
113
+ }, z.core.$strip>;
114
+ export declare const SearchAlbumsSchema: z.ZodObject<{
115
+ genre: z.ZodOptional<z.ZodString>;
116
+ mediaType: z.ZodOptional<z.ZodString>;
117
+ country: z.ZodOptional<z.ZodString>;
118
+ releaseType: z.ZodOptional<z.ZodString>;
119
+ recordLabel: z.ZodOptional<z.ZodString>;
120
+ mood: z.ZodOptional<z.ZodString>;
121
+ order: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
122
+ ASC: "ASC";
123
+ DESC: "DESC";
124
+ }>>>;
125
+ randomSeed: z.ZodOptional<z.ZodNumber>;
126
+ yearFrom: z.ZodOptional<z.ZodNumber>;
127
+ yearTo: z.ZodOptional<z.ZodNumber>;
128
+ starred: z.ZodOptional<z.ZodBoolean>;
129
+ query: z.ZodDefault<z.ZodOptional<z.ZodString>>;
130
+ limit: z.ZodNumber | z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
131
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
132
+ sort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
133
+ name: "name";
134
+ artist: "artist";
135
+ year: "year";
136
+ duration: "duration";
137
+ playCount: "playCount";
138
+ rating: "rating";
139
+ songCount: "songCount";
140
+ recently_added: "recently_added";
141
+ starred_at: "starred_at";
142
+ random: "random";
143
+ }>>>;
144
+ }, z.core.$strip>;
145
+ export declare const SearchArtistsSchema: z.ZodObject<{
146
+ genre: z.ZodOptional<z.ZodString>;
147
+ mediaType: z.ZodOptional<z.ZodString>;
148
+ country: z.ZodOptional<z.ZodString>;
149
+ releaseType: z.ZodOptional<z.ZodString>;
150
+ recordLabel: z.ZodOptional<z.ZodString>;
151
+ mood: z.ZodOptional<z.ZodString>;
152
+ order: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
153
+ ASC: "ASC";
154
+ DESC: "DESC";
155
+ }>>>;
156
+ randomSeed: z.ZodOptional<z.ZodNumber>;
157
+ yearFrom: z.ZodOptional<z.ZodNumber>;
158
+ yearTo: z.ZodOptional<z.ZodNumber>;
159
+ starred: z.ZodOptional<z.ZodBoolean>;
160
+ query: z.ZodDefault<z.ZodOptional<z.ZodString>>;
161
+ limit: z.ZodNumber | z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
162
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
163
+ sort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
164
+ name: "name";
165
+ playCount: "playCount";
166
+ rating: "rating";
167
+ songCount: "songCount";
168
+ albumCount: "albumCount";
169
+ random: "random";
170
+ }>>>;
171
+ }, z.core.$strip>;
172
+ export declare const ListSongsSchema: z.ZodObject<{
173
+ limit: z.ZodNumber | z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
174
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
175
+ sort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
176
+ title: "title";
177
+ artist: "artist";
178
+ album: "album";
179
+ year: "year";
180
+ duration: "duration";
181
+ playCount: "playCount";
182
+ rating: "rating";
183
+ recently_added: "recently_added";
184
+ starred_at: "starred_at";
185
+ random: "random";
186
+ }>>>;
187
+ order: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
188
+ ASC: "ASC";
189
+ DESC: "DESC";
190
+ }>>>;
191
+ randomSeed: z.ZodOptional<z.ZodNumber>;
192
+ genre: z.ZodOptional<z.ZodString>;
193
+ mediaType: z.ZodOptional<z.ZodString>;
194
+ country: z.ZodOptional<z.ZodString>;
195
+ releaseType: z.ZodOptional<z.ZodString>;
196
+ recordLabel: z.ZodOptional<z.ZodString>;
197
+ mood: z.ZodOptional<z.ZodString>;
198
+ yearFrom: z.ZodOptional<z.ZodNumber>;
199
+ yearTo: z.ZodOptional<z.ZodNumber>;
200
+ starred: z.ZodOptional<z.ZodBoolean>;
201
+ }, z.core.$strip>;
202
+ export declare const ListAlbumsSchema: z.ZodObject<{
203
+ limit: z.ZodNumber | z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
204
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
205
+ sort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
206
+ name: "name";
207
+ artist: "artist";
208
+ year: "year";
209
+ duration: "duration";
210
+ playCount: "playCount";
211
+ rating: "rating";
212
+ songCount: "songCount";
213
+ recently_added: "recently_added";
214
+ starred_at: "starred_at";
215
+ random: "random";
216
+ }>>>;
217
+ order: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
218
+ ASC: "ASC";
219
+ DESC: "DESC";
220
+ }>>>;
221
+ randomSeed: z.ZodOptional<z.ZodNumber>;
222
+ genre: z.ZodOptional<z.ZodString>;
223
+ mediaType: z.ZodOptional<z.ZodString>;
224
+ country: z.ZodOptional<z.ZodString>;
225
+ releaseType: z.ZodOptional<z.ZodString>;
226
+ recordLabel: z.ZodOptional<z.ZodString>;
227
+ mood: z.ZodOptional<z.ZodString>;
228
+ yearFrom: z.ZodOptional<z.ZodNumber>;
229
+ yearTo: z.ZodOptional<z.ZodNumber>;
230
+ starred: z.ZodOptional<z.ZodBoolean>;
231
+ }, z.core.$strip>;
232
+ export declare const ListArtistsSchema: z.ZodObject<{
233
+ limit: z.ZodNumber | z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
234
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
235
+ sort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
236
+ name: "name";
237
+ playCount: "playCount";
238
+ rating: "rating";
239
+ songCount: "songCount";
240
+ albumCount: "albumCount";
241
+ random: "random";
242
+ }>>>;
243
+ order: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
244
+ ASC: "ASC";
245
+ DESC: "DESC";
246
+ }>>>;
247
+ randomSeed: z.ZodOptional<z.ZodNumber>;
248
+ genre: z.ZodOptional<z.ZodString>;
249
+ mediaType: z.ZodOptional<z.ZodString>;
250
+ country: z.ZodOptional<z.ZodString>;
251
+ releaseType: z.ZodOptional<z.ZodString>;
252
+ recordLabel: z.ZodOptional<z.ZodString>;
253
+ mood: z.ZodOptional<z.ZodString>;
254
+ yearFrom: z.ZodOptional<z.ZodNumber>;
255
+ yearTo: z.ZodOptional<z.ZodNumber>;
256
+ starred: z.ZodOptional<z.ZodBoolean>;
257
+ }, z.core.$strip>;
53
258
  export declare const PlaylistIdSchema: z.ZodObject<{
54
259
  id: z.ZodString;
55
260
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,QAAQ;;iBAEnB,CAAC;AAIH,eAAO,MAAM,cAAc,GAAI,cAAc,MAAM;;iBAEjD,CAAC;AAGH,eAAO,MAAM,iBAAiB;;iBAE5B,CAAC;AAGH,eAAO,MAAM,cAAc;;;;EAAsC,CAAC;AAClE,eAAO,MAAM,kBAAkB;;;;EAAyC,CAAC;AAIzE,eAAO,MAAM,iBAAiB,GAAI,YAAO,EAAE,YAAS,EAAE,eAAe,MAAM,2DAK1E,CAAC;AAGF,eAAO,MAAM,YAAY,0CAA0C,CAAC;AAGpE,eAAO,MAAM,WAAW;;;IAAoD,CAAC;AAG7E,eAAO,MAAM,UAAU,0CAAwC,CAAC;AAGhE,eAAO,MAAM,qBAAqB,6BAAyB,CAAC;AAC5D,eAAO,MAAM,qBAAqB,cAAc,CAAC;AAGjD,eAAO,MAAM,YAAY,aAA2B,CAAC;AAIrD,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,cAAc,MAAM,6CACnB,CAAC;AAGhE,eAAO,MAAM,SAAS,aAA4C,CAAC;AAGnE,eAAO,MAAM,iBAAiB,yBAAsB,CAAC;AACrD,eAAO,MAAM,yBAAyB,wCAAiC,CAAC;AACxE,eAAO,MAAM,yBAAyB,yBAA8D,CAAC;AAGrG,eAAO,MAAM,gBAAgB;;iBAA6B,CAAC;AAC3D,eAAO,MAAM,YAAY;;iBAAyB,CAAC;AACnD,eAAO,MAAM,cAAc;;iBAA2B,CAAC;AACvD,eAAO,MAAM,aAAa;;iBAA0B,CAAC;AACrD,eAAO,MAAM,WAAW;;iBAAwB,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,QAAQ;;iBAEnB,CAAC;AAIH,eAAO,MAAM,cAAc,GAAI,cAAc,MAAM;;iBAEjD,CAAC;AAGH,eAAO,MAAM,iBAAiB;;iBAE5B,CAAC;AAGH,eAAO,MAAM,cAAc;;;;EAAsC,CAAC;AAClE,eAAO,MAAM,kBAAkB;;;;EAAyC,CAAC;AAIzE,eAAO,MAAM,iBAAiB,GAAI,YAAO,EAAE,YAAS,EAAE,eAAe,MAAM,2DAK1E,CAAC;AAGF,eAAO,MAAM,YAAY,0CAA0C,CAAC;AAGpE,eAAO,MAAM,WAAW;;;IAAoD,CAAC;AAG7E,eAAO,MAAM,UAAU,0CAAwC,CAAC;AAGhE,eAAO,MAAM,qBAAqB,6BAAyB,CAAC;AAC5D,eAAO,MAAM,qBAAqB,cAAc,CAAC;AAGjD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuB/B,CAAC;AAGH,eAAO,MAAM,YAAY,aAA2B,CAAC;AAIrD,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,cAAc,MAAM,6CACnB,CAAC;AAGhE,eAAO,MAAM,SAAS,aAA4C,CAAC;AAGnE,eAAO,MAAM,iBAAiB,yBAAsB,CAAC;AACrD,eAAO,MAAM,yBAAyB,wCAAiC,CAAC;AACxE,eAAO,MAAM,yBAAyB,yBAA8D,CAAC;AAGrG,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO9B,CAAC;AAGH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoB1B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoB3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;iBAmB5B,CAAC;AAGH,eAAO,MAAM,gBAAgB;;iBAA6B,CAAC;AAC3D,eAAO,MAAM,YAAY;;iBAAyB,CAAC;AACnD,eAAO,MAAM,cAAc;;iBAA2B,CAAC;AACvD,eAAO,MAAM,aAAa;;iBAA0B,CAAC;AACrD,eAAO,MAAM,WAAW;;iBAAwB,CAAC"}
@@ -49,6 +49,28 @@ export const SortSchema = z.string().optional().default('name');
49
49
  // Boolean flag schema
50
50
  export const OptionalBooleanSchema = z.boolean().optional();
51
51
  export const RequiredBooleanSchema = z.boolean();
52
+ // Enhanced search schema with filtering and sorting options
53
+ export const EnhancedSearchSchema = SearchQuerySchema.extend({
54
+ // Text-based filters (resolved to IDs internally)
55
+ genre: z.string().optional(),
56
+ mediaType: z.string().optional(),
57
+ country: z.string().optional(),
58
+ releaseType: z.string().optional(),
59
+ recordLabel: z.string().optional(),
60
+ mood: z.string().optional(),
61
+ // Advanced sorting options
62
+ sort: z.enum([
63
+ 'name', 'title', 'artist', 'album', 'year', 'duration',
64
+ 'playCount', 'rating', 'recently_added', 'starred_at', 'random'
65
+ ]).optional().default('name'),
66
+ order: OrderSchema,
67
+ randomSeed: z.number().optional(),
68
+ // Year filtering
69
+ yearFrom: z.number().min(1900).max(new Date().getFullYear()).optional(),
70
+ yearTo: z.number().min(1900).max(new Date().getFullYear()).optional(),
71
+ // Boolean filters
72
+ starred: OptionalBooleanSchema,
73
+ });
52
74
  // Rating validation
53
75
  export const RatingSchema = z.number().min(0).max(5);
54
76
  // Duration validation for timeouts
@@ -60,6 +82,93 @@ export const UrlSchema = z.string().url('URL must be a valid URL');
60
82
  export const StringArraySchema = z.array(z.string());
61
83
  export const OptionalStringArraySchema = z.array(z.string()).optional();
62
84
  export const NonEmptyStringArraySchema = z.array(z.string()).min(1, 'At least one item is required');
85
+ // Individual search tool schemas (query optional for listing functionality)
86
+ export const SearchSongsSchema = EnhancedSearchSchema.extend({
87
+ query: z.string().optional().default(''), // Override required query to be optional
88
+ limit: createLimitSchema(1, 500, 100), // Increased max limit for browsing
89
+ offset: OffsetSchema, // Add offset support for pagination
90
+ sort: z.enum([
91
+ 'title', 'artist', 'album', 'year', 'duration',
92
+ 'playCount', 'rating', 'recently_added', 'starred_at', 'random'
93
+ ]).optional().default('title'),
94
+ });
95
+ export const SearchAlbumsSchema = EnhancedSearchSchema.extend({
96
+ query: z.string().optional().default(''), // Override required query to be optional
97
+ limit: createLimitSchema(1, 500, 100), // Increased max limit for browsing
98
+ offset: OffsetSchema, // Add offset support for pagination
99
+ sort: z.enum([
100
+ 'name', 'artist', 'year', 'songCount', 'duration',
101
+ 'playCount', 'rating', 'recently_added', 'starred_at', 'random'
102
+ ]).optional().default('name'),
103
+ });
104
+ export const SearchArtistsSchema = EnhancedSearchSchema.extend({
105
+ query: z.string().optional().default(''), // Override required query to be optional
106
+ limit: createLimitSchema(1, 500, 100), // Increased max limit for browsing
107
+ offset: OffsetSchema, // Add offset support for pagination
108
+ sort: z.enum([
109
+ 'name', 'albumCount', 'songCount', 'playCount', 'rating', 'random'
110
+ ]).optional().default('name'),
111
+ });
112
+ // List tool schemas (no query required, pagination-focused)
113
+ export const ListSongsSchema = z.object({
114
+ limit: createLimitSchema(1, 500, 100),
115
+ offset: OffsetSchema,
116
+ sort: z.enum([
117
+ 'title', 'artist', 'album', 'year', 'duration',
118
+ 'playCount', 'rating', 'recently_added', 'starred_at', 'random'
119
+ ]).optional().default('title'),
120
+ order: OrderSchema,
121
+ randomSeed: z.number().optional(),
122
+ // Same filtering options as search tools
123
+ genre: z.string().optional(),
124
+ mediaType: z.string().optional(),
125
+ country: z.string().optional(),
126
+ releaseType: z.string().optional(),
127
+ recordLabel: z.string().optional(),
128
+ mood: z.string().optional(),
129
+ yearFrom: z.number().min(1900).max(new Date().getFullYear()).optional(),
130
+ yearTo: z.number().min(1900).max(new Date().getFullYear()).optional(),
131
+ starred: OptionalBooleanSchema,
132
+ });
133
+ export const ListAlbumsSchema = z.object({
134
+ limit: createLimitSchema(1, 500, 100),
135
+ offset: OffsetSchema,
136
+ sort: z.enum([
137
+ 'name', 'artist', 'year', 'songCount', 'duration',
138
+ 'playCount', 'rating', 'recently_added', 'starred_at', 'random'
139
+ ]).optional().default('name'),
140
+ order: OrderSchema,
141
+ randomSeed: z.number().optional(),
142
+ // Same filtering options as search tools
143
+ genre: z.string().optional(),
144
+ mediaType: z.string().optional(),
145
+ country: z.string().optional(),
146
+ releaseType: z.string().optional(),
147
+ recordLabel: z.string().optional(),
148
+ mood: z.string().optional(),
149
+ yearFrom: z.number().min(1900).max(new Date().getFullYear()).optional(),
150
+ yearTo: z.number().min(1900).max(new Date().getFullYear()).optional(),
151
+ starred: OptionalBooleanSchema,
152
+ });
153
+ export const ListArtistsSchema = z.object({
154
+ limit: createLimitSchema(1, 500, 100),
155
+ offset: OffsetSchema,
156
+ sort: z.enum([
157
+ 'name', 'albumCount', 'songCount', 'playCount', 'rating', 'random'
158
+ ]).optional().default('name'),
159
+ order: OrderSchema,
160
+ randomSeed: z.number().optional(),
161
+ // Same filtering options as search tools
162
+ genre: z.string().optional(),
163
+ mediaType: z.string().optional(),
164
+ country: z.string().optional(),
165
+ releaseType: z.string().optional(),
166
+ recordLabel: z.string().optional(),
167
+ mood: z.string().optional(),
168
+ yearFrom: z.number().min(1900).max(new Date().getFullYear()).optional(),
169
+ yearTo: z.number().min(1900).max(new Date().getFullYear()).optional(),
170
+ starred: OptionalBooleanSchema,
171
+ });
63
172
  // Common validation schemas for different resource types
64
173
  export const PlaylistIdSchema = createIdSchema('Playlist');
65
174
  export const SongIdSchema = createIdSchema('Song');