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.
- package/README.md +7 -13
- package/dist/client/navidrome-client.d.ts +5 -0
- package/dist/client/navidrome-client.d.ts.map +1 -1
- package/dist/client/navidrome-client.js +25 -0
- package/dist/client/navidrome-client.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -1
- package/dist/constants/defaults.d.ts +1 -1
- package/dist/constants/defaults.js +1 -1
- package/dist/constants/defaults.js.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/schemas/common.d.ts +205 -0
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +109 -0
- package/dist/schemas/common.js.map +1 -1
- package/dist/schemas/validation.d.ts +30 -15
- package/dist/schemas/validation.d.ts.map +1 -1
- package/dist/schemas/validation.js +11 -14
- package/dist/schemas/validation.js.map +1 -1
- package/dist/services/filter-cache-manager.d.ts +114 -0
- package/dist/services/filter-cache-manager.d.ts.map +1 -0
- package/dist/services/filter-cache-manager.js +321 -0
- package/dist/services/filter-cache-manager.js.map +1 -0
- package/dist/services/library-manager.d.ts +123 -0
- package/dist/services/library-manager.d.ts.map +1 -0
- package/dist/services/library-manager.js +216 -0
- package/dist/services/library-manager.js.map +1 -0
- package/dist/tools/handlers/playlist-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/playlist-handlers.js +7 -59
- package/dist/tools/handlers/playlist-handlers.js.map +1 -1
- package/dist/tools/handlers/radio-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/radio-handlers.js +32 -53
- package/dist/tools/handlers/radio-handlers.js.map +1 -1
- package/dist/tools/handlers/registry.d.ts +0 -9
- package/dist/tools/handlers/registry.d.ts.map +1 -1
- package/dist/tools/handlers/registry.js +1 -1
- package/dist/tools/handlers/registry.js.map +1 -1
- package/dist/tools/handlers/search-handlers.d.ts +1 -1
- package/dist/tools/handlers/search-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/search-handlers.js +275 -17
- package/dist/tools/handlers/search-handlers.js.map +1 -1
- package/dist/tools/handlers/tag-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/tag-handlers.js +21 -76
- package/dist/tools/handlers/tag-handlers.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lastfm-discovery.d.ts +13 -12
- package/dist/tools/lastfm-discovery.d.ts.map +1 -1
- package/dist/tools/library.d.ts +1 -10
- package/dist/tools/library.d.ts.map +1 -1
- package/dist/tools/library.js +143 -169
- package/dist/tools/library.js.map +1 -1
- package/dist/tools/listening-history.d.ts +5 -4
- package/dist/tools/listening-history.d.ts.map +1 -1
- package/dist/tools/listening-history.js +1 -1
- package/dist/tools/listening-history.js.map +1 -1
- package/dist/tools/lyrics.d.ts +0 -11
- package/dist/tools/lyrics.d.ts.map +1 -1
- package/dist/tools/lyrics.js +1 -1
- package/dist/tools/lyrics.js.map +1 -1
- package/dist/tools/media-library.d.ts +1 -20
- package/dist/tools/media-library.d.ts.map +1 -1
- package/dist/tools/media-library.js +2 -100
- package/dist/tools/media-library.js.map +1 -1
- package/dist/tools/playlist-management/index.d.ts +21 -0
- package/dist/tools/playlist-management/index.d.ts.map +1 -0
- package/dist/tools/playlist-management/index.js +24 -0
- package/dist/tools/playlist-management/index.js.map +1 -0
- package/dist/tools/playlist-management/playlist-crud.d.ts +49 -0
- package/dist/tools/playlist-management/playlist-crud.d.ts.map +1 -0
- package/dist/tools/playlist-management/playlist-crud.js +150 -0
- package/dist/tools/playlist-management/playlist-crud.js.map +1 -0
- package/dist/tools/playlist-management/playlist-export.d.ts +32 -0
- package/dist/tools/playlist-management/playlist-export.d.ts.map +1 -0
- package/dist/tools/playlist-management/playlist-export.js +100 -0
- package/dist/tools/playlist-management/playlist-export.js.map +1 -0
- package/dist/tools/playlist-management/track-management.d.ts +32 -0
- package/dist/tools/playlist-management/track-management.d.ts.map +1 -0
- package/dist/tools/playlist-management/track-management.js +121 -0
- package/dist/tools/playlist-management/track-management.js.map +1 -0
- package/dist/tools/playlist-management.d.ts +2 -63
- package/dist/tools/playlist-management.d.ts.map +1 -1
- package/dist/tools/playlist-management.js +3 -367
- package/dist/tools/playlist-management.js.map +1 -1
- package/dist/tools/queue-management.d.ts +5 -4
- package/dist/tools/queue-management.d.ts.map +1 -1
- package/dist/tools/radio-discovery.d.ts +0 -54
- package/dist/tools/radio-discovery.d.ts.map +1 -1
- package/dist/tools/radio-discovery.js +5 -5
- package/dist/tools/radio-discovery.js.map +1 -1
- package/dist/tools/radio-validation/index.d.ts +25 -0
- package/dist/tools/radio-validation/index.d.ts.map +1 -0
- package/dist/tools/radio-validation/index.js +24 -0
- package/dist/tools/radio-validation/index.js.map +1 -0
- package/dist/tools/radio-validation/network-validator.d.ts +39 -0
- package/dist/tools/radio-validation/network-validator.d.ts.map +1 -0
- package/dist/tools/radio-validation/network-validator.js +156 -0
- package/dist/tools/radio-validation/network-validator.js.map +1 -0
- package/dist/tools/radio-validation/recommendation-engine.d.ts +46 -0
- package/dist/tools/radio-validation/recommendation-engine.d.ts.map +1 -0
- package/dist/tools/radio-validation/recommendation-engine.js +58 -0
- package/dist/tools/radio-validation/recommendation-engine.js.map +1 -0
- package/dist/tools/radio-validation/stream-detector.d.ts +37 -0
- package/dist/tools/radio-validation/stream-detector.d.ts.map +1 -0
- package/dist/tools/radio-validation/stream-detector.js +111 -0
- package/dist/tools/radio-validation/stream-detector.js.map +1 -0
- package/dist/tools/radio-validation/validation-core.d.ts +24 -0
- package/dist/tools/radio-validation/validation-core.d.ts.map +1 -0
- package/dist/tools/radio-validation/validation-core.js +196 -0
- package/dist/tools/radio-validation/validation-core.js.map +1 -0
- package/dist/tools/radio-validation.d.ts +1 -31
- package/dist/tools/radio-validation.d.ts.map +1 -1
- package/dist/tools/radio-validation.js +2 -445
- package/dist/tools/radio-validation.js.map +1 -1
- package/dist/tools/radio.d.ts +5 -9
- package/dist/tools/radio.d.ts.map +1 -1
- package/dist/tools/radio.js +110 -115
- package/dist/tools/radio.js.map +1 -1
- package/dist/tools/search/filter-resolver.d.ts +77 -0
- package/dist/tools/search/filter-resolver.d.ts.map +1 -0
- package/dist/tools/search/filter-resolver.js +165 -0
- package/dist/tools/search/filter-resolver.js.map +1 -0
- package/dist/tools/search/index.d.ts +20 -0
- package/dist/tools/search/index.d.ts.map +1 -0
- package/dist/tools/search/index.js +23 -0
- package/dist/tools/search/index.js.map +1 -0
- package/dist/tools/search/parallel-searcher.d.ts +73 -0
- package/dist/tools/search/parallel-searcher.d.ts.map +1 -0
- package/dist/tools/search/parallel-searcher.js +145 -0
- package/dist/tools/search/parallel-searcher.js.map +1 -0
- package/dist/tools/search/result-aggregator.d.ts +81 -0
- package/dist/tools/search/result-aggregator.d.ts.map +1 -0
- package/dist/tools/search/result-aggregator.js +119 -0
- package/dist/tools/search/result-aggregator.js.map +1 -0
- package/dist/tools/search/search-orchestrator.d.ts +41 -0
- package/dist/tools/search/search-orchestrator.d.ts.map +1 -0
- package/dist/tools/search/search-orchestrator.js +81 -0
- package/dist/tools/search/search-orchestrator.js.map +1 -0
- package/dist/tools/search.d.ts +1 -36
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +3 -147
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/tags.d.ts +6 -32
- package/dist/tools/tags.d.ts.map +1 -1
- package/dist/tools/tags.js +58 -184
- package/dist/tools/tags.js.map +1 -1
- package/dist/tools/test.d.ts +2 -2
- package/dist/tools/test.d.ts.map +1 -1
- package/dist/tools/test.js +0 -8
- package/dist/tools/test.js.map +1 -1
- package/dist/tools/user-preferences.d.ts +7 -6
- package/dist/tools/user-preferences.d.ts.map +1 -1
- package/dist/tools/user-preferences.js +1 -1
- package/dist/tools/user-preferences.js.map +1 -1
- package/dist/transformers/album-transformer.d.ts +55 -0
- package/dist/transformers/album-transformer.d.ts.map +1 -0
- package/dist/transformers/album-transformer.js +75 -0
- package/dist/transformers/album-transformer.js.map +1 -0
- package/dist/transformers/artist-transformer.d.ts +46 -0
- package/dist/transformers/artist-transformer.d.ts.map +1 -0
- package/dist/transformers/artist-transformer.js +58 -0
- package/dist/transformers/artist-transformer.js.map +1 -0
- package/dist/transformers/index.d.ts +27 -0
- package/dist/transformers/index.d.ts.map +1 -0
- package/dist/transformers/index.js +30 -0
- package/dist/transformers/index.js.map +1 -0
- package/dist/transformers/playlist-transformer.d.ts +44 -0
- package/dist/transformers/playlist-transformer.d.ts.map +1 -0
- package/dist/transformers/playlist-transformer.js +49 -0
- package/dist/transformers/playlist-transformer.js.map +1 -0
- package/dist/transformers/shared-transformers.d.ts +51 -0
- package/dist/transformers/shared-transformers.d.ts.map +1 -0
- package/dist/transformers/shared-transformers.js +66 -0
- package/dist/transformers/shared-transformers.js.map +1 -0
- package/dist/transformers/song-transformer.d.ts +1 -65
- package/dist/transformers/song-transformer.d.ts.map +1 -1
- package/dist/transformers/song-transformer.js +1 -158
- package/dist/transformers/song-transformer.js.map +1 -1
- package/dist/types/core.d.ts +0 -34
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/library.d.ts +84 -0
- package/dist/types/library.d.ts.map +1 -0
- package/dist/types/library.js +19 -0
- package/dist/types/library.js.map +1 -0
- package/dist/types/tags.d.ts +0 -13
- package/dist/types/tags.d.ts.map +1 -1
- 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` |
|
|
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:
|
|
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
|
-
| `
|
|
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;
|
|
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":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;
|
|
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>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -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
|
|
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() !== ''),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,iEAAiE;AACjE,+DAA+D;AAC/D,IAAI,CAAC;IACH,8CAA8C;IAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE1C,UAAU,CAAC;QACT,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;QAC/B,gDAAgD;QAChD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,+DAA+D;IAC/D,6CAA6C;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,uEAAuE,EAAE,KAAK,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,mCAAmC,CAAC;IACjE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;IACtE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;IACtE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,8BAA8B;IAEjF,wBAAwB;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACxC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;KACnC,CAAC;IAEF,8CAA8C;IAC9C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC;IAEhF,uBAAuB;IACvB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC;CAC3D,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,wDAAwD;IACxD,8DAA8D;IAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC;QAC/H,4EAA4E;QAC5E,0CAA0C;QAC1C,IAAI,CAAC;YACH,4EAA4E;YAC5E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAE1C,kDAAkD;YAClD,wCAAwC;YACxC,UAAU,CAAC;gBACT,IAAI,EAAE,OAAO;gBACb,gDAAgD;gBAChD,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;YAClE,qDAAqD;YACrD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,SAAS,CAAC;IAChE,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,SAAS,CAAC;IACnF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,SAAS,CAAC;IACnE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,SAAS,CAAC;IAEtE,MAAM,SAAS,GAAG;QAChB,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC1C,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACpD,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACpD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM;QACtC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;QACzK,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK;QAE1L,qDAAqD;QACrD,QAAQ,EAAE;YACR,MAAM,EAAE,CAAC,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC3F,YAAY,EAAE,CAAC,qBAAqB,KAAK,IAAI,IAAI,qBAAqB,KAAK,SAAS,IAAI,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC5H,MAAM,EAAE,CAAC,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;SAClM;QAED,8CAA8C;QAC9C,YAAY;QACZ,qBAAqB;QACrB,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,oCAAoC;QAE3F,uBAAuB;QACvB,cAAc;QACd,eAAe;QACf,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,oBAAoB;KAC/D,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
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:
|
|
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:
|
|
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,
|
|
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":";AACA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE9B,8CAA8C;QAC9C,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;YAC7C,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC3I,kBAAkB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;YAC/J,kBAAkB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;SAChK,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;YACE,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,iBAAiB,EAAE;SAC7B,EACD;YACE,YAAY,EAAE,gBAAgB;SAC/B,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,8DAA8D;QAC9D,MAAM,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEhD,oEAAoE;QACpE,MAAM,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEpD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAElC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mDAAmD;QACnD,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,KAAK,CAAC,CAAC,yCAAyC;IACxD,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/schemas/common.d.ts
CHANGED
|
@@ -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"}
|
package/dist/schemas/common.js
CHANGED
|
@@ -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');
|