navidrome-mcp 1.0.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 (195) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +397 -0
  3. package/dist/capabilities.d.ts +20 -0
  4. package/dist/capabilities.d.ts.map +1 -0
  5. package/dist/capabilities.js +25 -0
  6. package/dist/capabilities.js.map +1 -0
  7. package/dist/client/auth-manager.d.ts +27 -0
  8. package/dist/client/auth-manager.d.ts.map +1 -0
  9. package/dist/client/auth-manager.js +54 -0
  10. package/dist/client/auth-manager.js.map +1 -0
  11. package/dist/client/navidrome-client.d.ts +28 -0
  12. package/dist/client/navidrome-client.d.ts.map +1 -0
  13. package/dist/client/navidrome-client.js +84 -0
  14. package/dist/client/navidrome-client.js.map +1 -0
  15. package/dist/config.d.ts +41 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +132 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/constants/defaults.d.ts +29 -0
  20. package/dist/constants/defaults.d.ts.map +1 -0
  21. package/dist/constants/defaults.js +37 -0
  22. package/dist/constants/defaults.js.map +1 -0
  23. package/dist/constants/timeouts.d.ts +66 -0
  24. package/dist/constants/timeouts.d.ts.map +1 -0
  25. package/dist/constants/timeouts.js +66 -0
  26. package/dist/constants/timeouts.js.map +1 -0
  27. package/dist/index.d.ts +20 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +70 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/resources/index.d.ts +21 -0
  32. package/dist/resources/index.d.ts.map +1 -0
  33. package/dist/resources/index.js +83 -0
  34. package/dist/resources/index.js.map +1 -0
  35. package/dist/schemas/common.d.ts +68 -0
  36. package/dist/schemas/common.d.ts.map +1 -0
  37. package/dist/schemas/common.js +69 -0
  38. package/dist/schemas/common.js.map +1 -0
  39. package/dist/schemas/index.d.ts +21 -0
  40. package/dist/schemas/index.d.ts.map +1 -0
  41. package/dist/schemas/index.js +24 -0
  42. package/dist/schemas/index.js.map +1 -0
  43. package/dist/schemas/pagination.d.ts +153 -0
  44. package/dist/schemas/pagination.d.ts.map +1 -0
  45. package/dist/schemas/pagination.js +93 -0
  46. package/dist/schemas/pagination.js.map +1 -0
  47. package/dist/schemas/validation.d.ts +147 -0
  48. package/dist/schemas/validation.d.ts.map +1 -0
  49. package/dist/schemas/validation.js +143 -0
  50. package/dist/schemas/validation.js.map +1 -0
  51. package/dist/tools/handlers/lastfm-handlers.d.ts +5 -0
  52. package/dist/tools/handlers/lastfm-handlers.d.ts.map +1 -0
  53. package/dist/tools/handlers/lastfm-handlers.js +143 -0
  54. package/dist/tools/handlers/lastfm-handlers.js.map +1 -0
  55. package/dist/tools/handlers/lyrics-handlers.d.ts +5 -0
  56. package/dist/tools/handlers/lyrics-handlers.d.ts.map +1 -0
  57. package/dist/tools/handlers/lyrics-handlers.js +51 -0
  58. package/dist/tools/handlers/lyrics-handlers.js.map +1 -0
  59. package/dist/tools/handlers/playlist-handlers.d.ts +5 -0
  60. package/dist/tools/handlers/playlist-handlers.d.ts.map +1 -0
  61. package/dist/tools/handlers/playlist-handlers.js +316 -0
  62. package/dist/tools/handlers/playlist-handlers.js.map +1 -0
  63. package/dist/tools/handlers/queue-handlers.d.ts +5 -0
  64. package/dist/tools/handlers/queue-handlers.d.ts.map +1 -0
  65. package/dist/tools/handlers/queue-handlers.js +135 -0
  66. package/dist/tools/handlers/queue-handlers.js.map +1 -0
  67. package/dist/tools/handlers/radio-handlers.d.ts +5 -0
  68. package/dist/tools/handlers/radio-handlers.d.ts.map +1 -0
  69. package/dist/tools/handlers/radio-handlers.js +323 -0
  70. package/dist/tools/handlers/radio-handlers.js.map +1 -0
  71. package/dist/tools/handlers/registry.d.ts +26 -0
  72. package/dist/tools/handlers/registry.d.ts.map +1 -0
  73. package/dist/tools/handlers/registry.js +77 -0
  74. package/dist/tools/handlers/registry.js.map +1 -0
  75. package/dist/tools/handlers/search-handlers.d.ts +5 -0
  76. package/dist/tools/handlers/search-handlers.d.ts.map +1 -0
  77. package/dist/tools/handlers/search-handlers.js +125 -0
  78. package/dist/tools/handlers/search-handlers.js.map +1 -0
  79. package/dist/tools/handlers/tag-handlers.d.ts +5 -0
  80. package/dist/tools/handlers/tag-handlers.d.ts.map +1 -0
  81. package/dist/tools/handlers/tag-handlers.js +155 -0
  82. package/dist/tools/handlers/tag-handlers.js.map +1 -0
  83. package/dist/tools/handlers/user-preferences-handlers.d.ts +5 -0
  84. package/dist/tools/handlers/user-preferences-handlers.d.ts.map +1 -0
  85. package/dist/tools/handlers/user-preferences-handlers.js +155 -0
  86. package/dist/tools/handlers/user-preferences-handlers.js.map +1 -0
  87. package/dist/tools/index.d.ts +19 -0
  88. package/dist/tools/index.d.ts.map +1 -0
  89. package/dist/tools/index.js +20 -0
  90. package/dist/tools/index.js.map +1 -0
  91. package/dist/tools/lastfm-discovery.d.ts +107 -0
  92. package/dist/tools/lastfm-discovery.d.ts.map +1 -0
  93. package/dist/tools/lastfm-discovery.js +238 -0
  94. package/dist/tools/lastfm-discovery.js.map +1 -0
  95. package/dist/tools/library.d.ts +31 -0
  96. package/dist/tools/library.d.ts.map +1 -0
  97. package/dist/tools/library.js +272 -0
  98. package/dist/tools/library.js.map +1 -0
  99. package/dist/tools/listening-history.d.ts +51 -0
  100. package/dist/tools/listening-history.d.ts.map +1 -0
  101. package/dist/tools/listening-history.js +126 -0
  102. package/dist/tools/listening-history.js.map +1 -0
  103. package/dist/tools/lyrics.d.ts +35 -0
  104. package/dist/tools/lyrics.d.ts.map +1 -0
  105. package/dist/tools/lyrics.js +222 -0
  106. package/dist/tools/lyrics.js.map +1 -0
  107. package/dist/tools/media-library.d.ts +46 -0
  108. package/dist/tools/media-library.d.ts.map +1 -0
  109. package/dist/tools/media-library.js +179 -0
  110. package/dist/tools/media-library.js.map +1 -0
  111. package/dist/tools/playlist-management.d.ts +80 -0
  112. package/dist/tools/playlist-management.d.ts.map +1 -0
  113. package/dist/tools/playlist-management.js +384 -0
  114. package/dist/tools/playlist-management.js.map +1 -0
  115. package/dist/tools/queue-management.d.ts +48 -0
  116. package/dist/tools/queue-management.d.ts.map +1 -0
  117. package/dist/tools/queue-management.js +83 -0
  118. package/dist/tools/queue-management.js.map +1 -0
  119. package/dist/tools/radio-discovery.d.ts +95 -0
  120. package/dist/tools/radio-discovery.d.ts.map +1 -0
  121. package/dist/tools/radio-discovery.js +352 -0
  122. package/dist/tools/radio-discovery.js.map +1 -0
  123. package/dist/tools/radio-validation.d.ts +49 -0
  124. package/dist/tools/radio-validation.d.ts.map +1 -0
  125. package/dist/tools/radio-validation.js +463 -0
  126. package/dist/tools/radio-validation.js.map +1 -0
  127. package/dist/tools/radio.d.ts +38 -0
  128. package/dist/tools/radio.d.ts.map +1 -0
  129. package/dist/tools/radio.js +315 -0
  130. package/dist/tools/radio.js.map +1 -0
  131. package/dist/tools/search.d.ts +54 -0
  132. package/dist/tools/search.d.ts.map +1 -0
  133. package/dist/tools/search.js +165 -0
  134. package/dist/tools/search.js.map +1 -0
  135. package/dist/tools/tags.d.ts +63 -0
  136. package/dist/tools/tags.d.ts.map +1 -0
  137. package/dist/tools/tags.js +260 -0
  138. package/dist/tools/tags.js.map +1 -0
  139. package/dist/tools/test.d.ts +50 -0
  140. package/dist/tools/test.d.ts.map +1 -0
  141. package/dist/tools/test.js +121 -0
  142. package/dist/tools/test.js.map +1 -0
  143. package/dist/tools/user-preferences.d.ts +73 -0
  144. package/dist/tools/user-preferences.d.ts.map +1 -0
  145. package/dist/tools/user-preferences.js +231 -0
  146. package/dist/tools/user-preferences.js.map +1 -0
  147. package/dist/transformers/song-transformer.d.ts +122 -0
  148. package/dist/transformers/song-transformer.d.ts.map +1 -0
  149. package/dist/transformers/song-transformer.js +232 -0
  150. package/dist/transformers/song-transformer.js.map +1 -0
  151. package/dist/types/core.d.ts +147 -0
  152. package/dist/types/core.d.ts.map +1 -0
  153. package/dist/types/core.js +19 -0
  154. package/dist/types/core.js.map +1 -0
  155. package/dist/types/index.d.ts +23 -0
  156. package/dist/types/index.d.ts.map +1 -0
  157. package/dist/types/index.js +19 -0
  158. package/dist/types/index.js.map +1 -0
  159. package/dist/types/lyrics.d.ts +58 -0
  160. package/dist/types/lyrics.d.ts.map +1 -0
  161. package/dist/types/lyrics.js +19 -0
  162. package/dist/types/lyrics.js.map +1 -0
  163. package/dist/types/playlists.d.ts +150 -0
  164. package/dist/types/playlists.d.ts.map +1 -0
  165. package/dist/types/playlists.js +19 -0
  166. package/dist/types/playlists.js.map +1 -0
  167. package/dist/types/radio.d.ts +192 -0
  168. package/dist/types/radio.d.ts.map +1 -0
  169. package/dist/types/radio.js +19 -0
  170. package/dist/types/radio.js.map +1 -0
  171. package/dist/types/tags.d.ts +72 -0
  172. package/dist/types/tags.d.ts.map +1 -0
  173. package/dist/types/tags.js +19 -0
  174. package/dist/types/tags.js.map +1 -0
  175. package/dist/utils/cache.d.ts +32 -0
  176. package/dist/utils/cache.d.ts.map +1 -0
  177. package/dist/utils/cache.js +84 -0
  178. package/dist/utils/cache.js.map +1 -0
  179. package/dist/utils/error-formatter.d.ts +108 -0
  180. package/dist/utils/error-formatter.d.ts.map +1 -0
  181. package/dist/utils/error-formatter.js +161 -0
  182. package/dist/utils/error-formatter.js.map +1 -0
  183. package/dist/utils/logger.d.ts +33 -0
  184. package/dist/utils/logger.d.ts.map +1 -0
  185. package/dist/utils/logger.js +52 -0
  186. package/dist/utils/logger.js.map +1 -0
  187. package/dist/utils/message-manager.d.ts +74 -0
  188. package/dist/utils/message-manager.d.ts.map +1 -0
  189. package/dist/utils/message-manager.js +134 -0
  190. package/dist/utils/message-manager.js.map +1 -0
  191. package/dist/utils/version.d.ts +5 -0
  192. package/dist/utils/version.d.ts.map +1 -0
  193. package/dist/utils/version.js +19 -0
  194. package/dist/utils/version.js.map +1 -0
  195. package/package.json +78 -0
@@ -0,0 +1,316 @@
1
+ import { ErrorFormatter } from '../../utils/error-formatter.js';
2
+ // Import tool functions
3
+ import { listPlaylists, getPlaylist, createPlaylist, updatePlaylist, deletePlaylist, getPlaylistTracks, addTracksToPlaylist, removeTracksFromPlaylist, reorderPlaylistTrack, batchAddTracksToPlaylist, } from '../playlist-management.js';
4
+ // Tool definitions for playlist management category
5
+ const tools = [
6
+ {
7
+ name: 'list_playlists',
8
+ description: 'List all playlists accessible to the user with clean, LLM-friendly data',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ limit: {
13
+ type: 'number',
14
+ description: 'Maximum number of playlists to return (1-500)',
15
+ minimum: 1,
16
+ maximum: 500,
17
+ default: 100,
18
+ },
19
+ offset: {
20
+ type: 'number',
21
+ description: 'Number of playlists to skip for pagination',
22
+ minimum: 0,
23
+ default: 0,
24
+ },
25
+ sort: {
26
+ type: 'string',
27
+ description: 'Field to sort by',
28
+ default: 'name',
29
+ },
30
+ order: {
31
+ type: 'string',
32
+ description: 'Sort order',
33
+ enum: ['ASC', 'DESC'],
34
+ default: 'ASC',
35
+ },
36
+ },
37
+ },
38
+ },
39
+ {
40
+ name: 'get_playlist',
41
+ description: 'Get detailed information about a specific playlist by ID',
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: {
45
+ id: {
46
+ type: 'string',
47
+ description: 'The unique ID of the playlist',
48
+ },
49
+ },
50
+ required: ['id'],
51
+ },
52
+ },
53
+ {
54
+ name: 'create_playlist',
55
+ description: 'Create a new playlist with a name, optional description, and visibility setting',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ name: {
60
+ type: 'string',
61
+ description: 'The name of the playlist',
62
+ },
63
+ comment: {
64
+ type: 'string',
65
+ description: 'Optional description or comment for the playlist',
66
+ },
67
+ public: {
68
+ type: 'boolean',
69
+ description: 'Whether the playlist should be public',
70
+ default: false,
71
+ },
72
+ },
73
+ required: ['name'],
74
+ },
75
+ },
76
+ {
77
+ name: 'update_playlist',
78
+ description: 'Update a playlist\'s metadata (name, description, visibility)',
79
+ inputSchema: {
80
+ type: 'object',
81
+ properties: {
82
+ id: {
83
+ type: 'string',
84
+ description: 'The unique ID of the playlist to update',
85
+ },
86
+ name: {
87
+ type: 'string',
88
+ description: 'New name for the playlist',
89
+ },
90
+ comment: {
91
+ type: 'string',
92
+ description: 'New description or comment',
93
+ },
94
+ public: {
95
+ type: 'boolean',
96
+ description: 'New public visibility setting',
97
+ },
98
+ },
99
+ required: ['id'],
100
+ },
101
+ },
102
+ {
103
+ name: 'delete_playlist',
104
+ description: 'Delete a playlist (owner or admin only)',
105
+ inputSchema: {
106
+ type: 'object',
107
+ properties: {
108
+ id: {
109
+ type: 'string',
110
+ description: 'The unique ID of the playlist to delete',
111
+ },
112
+ },
113
+ required: ['id'],
114
+ },
115
+ },
116
+ {
117
+ name: 'get_playlist_tracks',
118
+ description: 'Get all tracks in a playlist (supports JSON or M3U export)',
119
+ inputSchema: {
120
+ type: 'object',
121
+ properties: {
122
+ playlistId: {
123
+ type: 'string',
124
+ description: 'The unique ID of the playlist',
125
+ },
126
+ limit: {
127
+ type: 'number',
128
+ description: 'Maximum number of tracks to return (1-500)',
129
+ minimum: 1,
130
+ maximum: 500,
131
+ default: 100,
132
+ },
133
+ offset: {
134
+ type: 'number',
135
+ description: 'Number of tracks to skip for pagination',
136
+ minimum: 0,
137
+ default: 0,
138
+ },
139
+ format: {
140
+ type: 'string',
141
+ description: 'Output format: json for structured data, m3u for playlist file',
142
+ enum: ['json', 'm3u'],
143
+ default: 'json',
144
+ },
145
+ },
146
+ required: ['playlistId'],
147
+ },
148
+ },
149
+ {
150
+ name: 'add_tracks_to_playlist',
151
+ description: 'Add tracks to a playlist (supports song IDs, album IDs, artist IDs, or specific discs)',
152
+ inputSchema: {
153
+ type: 'object',
154
+ properties: {
155
+ playlistId: {
156
+ type: 'string',
157
+ description: 'The unique ID of the playlist',
158
+ },
159
+ ids: {
160
+ type: 'array',
161
+ items: { type: 'string' },
162
+ description: 'Array of song IDs to add',
163
+ },
164
+ albumIds: {
165
+ type: 'array',
166
+ items: { type: 'string' },
167
+ description: 'Array of album IDs to add (all tracks from albums)',
168
+ },
169
+ artistIds: {
170
+ type: 'array',
171
+ items: { type: 'string' },
172
+ description: 'Array of artist IDs to add (all tracks from artists)',
173
+ },
174
+ discs: {
175
+ type: 'array',
176
+ items: {
177
+ type: 'object',
178
+ properties: {
179
+ albumId: { type: 'string' },
180
+ discNumber: { type: 'number' },
181
+ },
182
+ required: ['albumId', 'discNumber'],
183
+ },
184
+ description: 'Array of specific discs to add',
185
+ },
186
+ },
187
+ required: ['playlistId'],
188
+ },
189
+ },
190
+ {
191
+ name: 'remove_tracks_from_playlist',
192
+ description: 'Remove tracks from a playlist by track position IDs',
193
+ inputSchema: {
194
+ type: 'object',
195
+ properties: {
196
+ playlistId: {
197
+ type: 'string',
198
+ description: 'The unique ID of the playlist',
199
+ },
200
+ trackIds: {
201
+ type: 'array',
202
+ items: { type: 'string' },
203
+ description: 'Array of track position IDs to remove',
204
+ minItems: 1,
205
+ },
206
+ },
207
+ required: ['playlistId', 'trackIds'],
208
+ },
209
+ },
210
+ {
211
+ name: 'reorder_playlist_track',
212
+ description: 'Reorder a track within a playlist to a new position',
213
+ inputSchema: {
214
+ type: 'object',
215
+ properties: {
216
+ playlistId: {
217
+ type: 'string',
218
+ description: 'The unique ID of the playlist',
219
+ },
220
+ trackId: {
221
+ type: 'string',
222
+ description: 'The track position ID to move',
223
+ },
224
+ insert_before: {
225
+ type: 'number',
226
+ description: 'New position (0-based index) to insert the track before',
227
+ minimum: 0,
228
+ },
229
+ },
230
+ required: ['playlistId', 'trackId', 'insert_before'],
231
+ },
232
+ },
233
+ {
234
+ name: 'batch_add_tracks_to_playlist',
235
+ description: 'Batch add multiple sets of tracks to a playlist',
236
+ inputSchema: {
237
+ type: 'object',
238
+ properties: {
239
+ playlistId: {
240
+ type: 'string',
241
+ description: 'The unique ID of the playlist',
242
+ },
243
+ trackSets: {
244
+ type: 'array',
245
+ description: 'Array of track sets to add to the playlist',
246
+ items: {
247
+ type: 'object',
248
+ properties: {
249
+ ids: {
250
+ type: 'array',
251
+ items: { type: 'string' },
252
+ description: 'Array of song IDs to add',
253
+ },
254
+ albumIds: {
255
+ type: 'array',
256
+ items: { type: 'string' },
257
+ description: 'Array of album IDs to add (all tracks)',
258
+ },
259
+ artistIds: {
260
+ type: 'array',
261
+ items: { type: 'string' },
262
+ description: 'Array of artist IDs to add (all tracks)',
263
+ },
264
+ discs: {
265
+ type: 'array',
266
+ description: 'Array of specific discs to add',
267
+ items: {
268
+ type: 'object',
269
+ properties: {
270
+ albumId: { type: 'string' },
271
+ discNumber: { type: 'number' },
272
+ },
273
+ required: ['albumId', 'discNumber'],
274
+ },
275
+ },
276
+ },
277
+ },
278
+ },
279
+ },
280
+ required: ['playlistId', 'trackSets'],
281
+ },
282
+ },
283
+ ];
284
+ // Factory function for creating playlist tool category with dependencies
285
+ export function createPlaylistToolCategory(client, _config) {
286
+ return {
287
+ tools,
288
+ async handleToolCall(name, args) {
289
+ switch (name) {
290
+ case 'list_playlists':
291
+ return await listPlaylists(client, args);
292
+ case 'get_playlist':
293
+ return await getPlaylist(client, args);
294
+ case 'create_playlist':
295
+ return await createPlaylist(client, args);
296
+ case 'update_playlist':
297
+ return await updatePlaylist(client, args);
298
+ case 'delete_playlist':
299
+ return await deletePlaylist(client, args);
300
+ case 'get_playlist_tracks':
301
+ return await getPlaylistTracks(client, args);
302
+ case 'add_tracks_to_playlist':
303
+ return await addTracksToPlaylist(client, args);
304
+ case 'remove_tracks_from_playlist':
305
+ return await removeTracksFromPlaylist(client, args);
306
+ case 'reorder_playlist_track':
307
+ return await reorderPlaylistTrack(client, args);
308
+ case 'batch_add_tracks_to_playlist':
309
+ return await batchAddTracksToPlaylist(client, args);
310
+ default:
311
+ throw new Error(ErrorFormatter.toolUnknown(`playlist ${name}`));
312
+ }
313
+ }
314
+ };
315
+ }
316
+ //# sourceMappingURL=playlist-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playlist-handlers.js","sourceRoot":"","sources":["../../../src/tools/handlers/playlist-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { NavidromeClient } from '../../client/navidrome-client.js';
2
+ import type { Config } from '../../config.js';
3
+ import type { ToolCategory } from './registry.js';
4
+ export declare function createQueueToolCategory(client: NavidromeClient, _config: Config): ToolCategory;
5
+ //# sourceMappingURL=queue-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/queue-handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AA4HlD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAoB9F"}
@@ -0,0 +1,135 @@
1
+ import { ErrorFormatter } from '../../utils/error-formatter.js';
2
+ // Import tool functions
3
+ import { getQueue, setQueue, clearQueue, } from '../queue-management.js';
4
+ import { listRecentlyPlayed, listMostPlayed, } from '../listening-history.js';
5
+ // Tool definitions for queue management and listening history categories
6
+ const tools = [
7
+ {
8
+ name: 'get_queue',
9
+ description: 'Get the current playback queue',
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {},
13
+ },
14
+ },
15
+ {
16
+ name: 'set_queue',
17
+ description: 'Set the playback queue with specified songs',
18
+ inputSchema: {
19
+ type: 'object',
20
+ properties: {
21
+ songIds: {
22
+ type: 'array',
23
+ items: { type: 'string' },
24
+ description: 'Array of song IDs to add to queue',
25
+ },
26
+ current: {
27
+ type: 'number',
28
+ description: 'Index of current track (0-based)',
29
+ minimum: 0,
30
+ default: 0,
31
+ },
32
+ position: {
33
+ type: 'number',
34
+ description: 'Playback position in seconds',
35
+ minimum: 0,
36
+ default: 0,
37
+ },
38
+ },
39
+ required: ['songIds'],
40
+ },
41
+ },
42
+ {
43
+ name: 'clear_queue',
44
+ description: 'Clear the playback queue',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {},
48
+ },
49
+ },
50
+ {
51
+ name: 'list_recently_played',
52
+ description: 'List recently played tracks with time filtering',
53
+ inputSchema: {
54
+ type: 'object',
55
+ properties: {
56
+ limit: {
57
+ type: 'number',
58
+ description: 'Maximum number of tracks to return (1-500)',
59
+ minimum: 1,
60
+ maximum: 500,
61
+ default: 100,
62
+ },
63
+ offset: {
64
+ type: 'number',
65
+ description: 'Number of tracks to skip for pagination',
66
+ minimum: 0,
67
+ default: 0,
68
+ },
69
+ timeRange: {
70
+ type: 'string',
71
+ description: 'Time range for recently played tracks',
72
+ enum: ['today', 'week', 'month', 'all'],
73
+ default: 'all',
74
+ },
75
+ },
76
+ },
77
+ },
78
+ {
79
+ name: 'list_most_played',
80
+ description: 'List most played songs, albums, or artists',
81
+ inputSchema: {
82
+ type: 'object',
83
+ properties: {
84
+ type: {
85
+ type: 'string',
86
+ description: 'Type of items to list',
87
+ enum: ['songs', 'albums', 'artists'],
88
+ default: 'songs',
89
+ },
90
+ limit: {
91
+ type: 'number',
92
+ description: 'Maximum number of items to return (1-500)',
93
+ minimum: 1,
94
+ maximum: 500,
95
+ default: 100,
96
+ },
97
+ offset: {
98
+ type: 'number',
99
+ description: 'Number of items to skip for pagination',
100
+ minimum: 0,
101
+ default: 0,
102
+ },
103
+ minPlayCount: {
104
+ type: 'number',
105
+ description: 'Minimum play count to include',
106
+ minimum: 1,
107
+ default: 1,
108
+ },
109
+ },
110
+ },
111
+ },
112
+ ];
113
+ // Factory function for creating queue tool category with dependencies
114
+ export function createQueueToolCategory(client, _config) {
115
+ return {
116
+ tools,
117
+ async handleToolCall(name, args) {
118
+ switch (name) {
119
+ case 'get_queue':
120
+ return await getQueue(client, args);
121
+ case 'set_queue':
122
+ return await setQueue(client, args);
123
+ case 'clear_queue':
124
+ return await clearQueue(client, args);
125
+ case 'list_recently_played':
126
+ return await listRecentlyPlayed(client, args);
127
+ case 'list_most_played':
128
+ return await listMostPlayed(client, args);
129
+ default:
130
+ throw new Error(ErrorFormatter.toolUnknown(`queue ${name}`));
131
+ }
132
+ }
133
+ };
134
+ }
135
+ //# sourceMappingURL=queue-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-handlers.js","sourceRoot":"","sources":["../../../src/tools/handlers/queue-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { NavidromeClient } from '../../client/navidrome-client.js';
2
+ import type { Config } from '../../config.js';
3
+ import type { ToolCategory } from './registry.js';
4
+ export declare function createRadioToolCategory(client: NavidromeClient, config: Config): ToolCategory;
5
+ //# sourceMappingURL=radio-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/radio-handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAuTlD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAoC7F"}