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,143 @@
1
+ /**
2
+ * Navidrome MCP Server - Validation Schema Definitions
3
+ * Copyright (C) 2025
4
+ *
5
+ * This program is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU Affero General Public License as published
7
+ * by the Free Software Foundation, either version 3 of the License, or
8
+ * (at your option) any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ import { z } from 'zod';
19
+ import { DEFAULT_VALUES } from '../constants/defaults.js';
20
+ import { SearchQuerySchema, ItemTypeSchema, RatingSchema, UrlSchema, StringArraySchema, OptionalStringArraySchema, NonEmptyStringArraySchema, OptionalBooleanSchema, createLimitSchema, createTimeoutSchema, } from './common.js';
21
+ // User preferences validation
22
+ export const StarItemSchema = z.object({
23
+ id: z.string().min(1),
24
+ type: ItemTypeSchema,
25
+ });
26
+ export const SetRatingSchema = z.object({
27
+ id: z.string().min(1),
28
+ type: ItemTypeSchema,
29
+ rating: RatingSchema,
30
+ });
31
+ // Playlist management validation
32
+ export const CreatePlaylistSchema = z.object({
33
+ name: z.string().min(1, 'Playlist name is required'),
34
+ comment: z.string().optional(),
35
+ public: OptionalBooleanSchema.default(false),
36
+ });
37
+ export const UpdatePlaylistSchema = z.object({
38
+ id: z.string().min(1, 'Playlist ID is required'),
39
+ name: z.string().min(1).optional(),
40
+ comment: z.string().optional(),
41
+ public: OptionalBooleanSchema,
42
+ });
43
+ export const AddTracksToPlaylistSchema = z.object({
44
+ playlistId: z.string().min(1, 'Playlist ID is required'),
45
+ ids: OptionalStringArraySchema,
46
+ albumIds: OptionalStringArraySchema,
47
+ artistIds: OptionalStringArraySchema,
48
+ discs: z.array(z.object({
49
+ albumId: z.string(),
50
+ discNumber: z.number(),
51
+ })).optional(),
52
+ });
53
+ export const RemoveTracksFromPlaylistSchema = z.object({
54
+ playlistId: z.string().min(1, 'Playlist ID is required'),
55
+ trackIds: NonEmptyStringArraySchema,
56
+ });
57
+ export const ReorderPlaylistTrackSchema = z.object({
58
+ playlistId: z.string().min(1, 'Playlist ID is required'),
59
+ trackId: z.string().min(1, 'Track ID is required'),
60
+ insert_before: z.number().min(0, 'Insert position must be non-negative'),
61
+ });
62
+ // Queue management validation
63
+ export const SetQueueSchema = z.object({
64
+ songIds: StringArraySchema,
65
+ current: z.number().min(0).optional().default(0),
66
+ position: z.number().min(0).optional().default(0),
67
+ });
68
+ // Search validation schemas
69
+ export const SearchAllSchema = SearchQuerySchema.extend({
70
+ artistCount: z.number().min(0).max(100).optional().default(DEFAULT_VALUES.SEARCH_ALL_LIMIT),
71
+ albumCount: z.number().min(0).max(100).optional().default(DEFAULT_VALUES.SEARCH_ALL_LIMIT),
72
+ songCount: z.number().min(0).max(100).optional().default(DEFAULT_VALUES.SEARCH_ALL_LIMIT),
73
+ });
74
+ export const SearchSongsSchema = SearchQuerySchema.extend({
75
+ limit: createLimitSchema(1, 100, DEFAULT_VALUES.SEARCH_LIMIT),
76
+ });
77
+ export const SearchAlbumsSchema = SearchQuerySchema.extend({
78
+ limit: createLimitSchema(1, 100, DEFAULT_VALUES.SEARCH_LIMIT),
79
+ });
80
+ export const SearchArtistsSchema = SearchQuerySchema.extend({
81
+ limit: createLimitSchema(1, 100, DEFAULT_VALUES.SEARCH_LIMIT),
82
+ });
83
+ // Tag validation schemas
84
+ export const SearchByTagsSchema = z.object({
85
+ tagName: z.string().min(1),
86
+ tagValue: z.string().optional(),
87
+ limit: createLimitSchema(1, 100, DEFAULT_VALUES.TAG_SEARCH_LIMIT),
88
+ });
89
+ export const TagDistributionSchema = z.object({
90
+ tagNames: z.array(z.string()).optional(),
91
+ limit: createLimitSchema(1, 50, DEFAULT_VALUES.TAG_DISTRIBUTION_LIMIT),
92
+ distributionLimit: createLimitSchema(1, 100, DEFAULT_VALUES.TAG_DISTRIBUTION_VALUES_LIMIT),
93
+ });
94
+ export const UniqueTagsSchema = z.object({
95
+ limit: createLimitSchema(1, 100, DEFAULT_VALUES.UNIQUE_TAGS_LIMIT),
96
+ minUsage: z.number().min(1).optional().default(1),
97
+ });
98
+ // Radio validation schemas
99
+ export const ValidateRadioStreamSchema = z.object({
100
+ url: UrlSchema,
101
+ timeout: createTimeoutSchema(1000, 30000, 8000),
102
+ followRedirects: OptionalBooleanSchema.default(true),
103
+ });
104
+ // Last.fm validation schemas
105
+ export const SimilarArtistsSchema = z.object({
106
+ artist: z.string(),
107
+ limit: createLimitSchema(1, 100, DEFAULT_VALUES.SIMILAR_ARTISTS_LIMIT),
108
+ });
109
+ export const SimilarTracksSchema = z.object({
110
+ artist: z.string(),
111
+ track: z.string(),
112
+ limit: createLimitSchema(1, 100, DEFAULT_VALUES.SIMILAR_TRACKS_LIMIT),
113
+ });
114
+ export const ArtistInfoSchema = z.object({
115
+ artist: z.string(),
116
+ lang: z.string().optional().default('en'),
117
+ });
118
+ export const TopTracksByArtistSchema = z.object({
119
+ artist: z.string(),
120
+ limit: createLimitSchema(1, 50, DEFAULT_VALUES.TOP_TRACKS_BY_ARTIST_LIMIT),
121
+ });
122
+ export const TrendingMusicSchema = z.object({
123
+ type: z.enum(['artists', 'tracks', 'tags']),
124
+ limit: createLimitSchema(1, 100, DEFAULT_VALUES.TRENDING_MUSIC_LIMIT),
125
+ page: z.number().min(1).optional().default(1),
126
+ });
127
+ // Lyrics validation schema
128
+ export const GetLyricsSchema = z.object({
129
+ title: z.string(),
130
+ artist: z.string(),
131
+ album: z.string().optional(),
132
+ durationMs: z.number().min(0).optional(),
133
+ id: z.string().optional(),
134
+ });
135
+ // Test connection schema
136
+ export const TestConnectionSchema = z.object({
137
+ includeServerInfo: OptionalBooleanSchema.default(false),
138
+ });
139
+ // Song playlists schema
140
+ export const GetSongPlaylistsSchema = z.object({
141
+ songId: z.string().min(1, 'Song ID is required'),
142
+ });
143
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/schemas/validation.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 createLastFmToolCategory(_client: NavidromeClient, config: Config): ToolCategory;
5
+ //# sourceMappingURL=lastfm-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lastfm-handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/lastfm-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;AAmIlD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAoB/F"}
@@ -0,0 +1,143 @@
1
+ import { ErrorFormatter } from '../../utils/error-formatter.js';
2
+ // Import tool functions
3
+ import { getSimilarArtists, getSimilarTracks, getArtistInfo, getTopTracksByArtist, getTrendingMusic, } from '../lastfm-discovery.js';
4
+ // Tool definitions for LastFM discovery category
5
+ const tools = [
6
+ {
7
+ name: 'get_similar_artists',
8
+ description: 'Get similar artists using Last.fm API',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ artist: {
13
+ type: 'string',
14
+ description: 'Name of the artist to find similar artists for',
15
+ },
16
+ limit: {
17
+ type: 'number',
18
+ description: 'Maximum number of similar artists to return (1-100)',
19
+ minimum: 1,
20
+ maximum: 100,
21
+ default: 100,
22
+ },
23
+ },
24
+ required: ['artist'],
25
+ },
26
+ },
27
+ {
28
+ name: 'get_similar_tracks',
29
+ description: 'Get similar tracks using Last.fm API',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ artist: {
34
+ type: 'string',
35
+ description: 'Name of the track artist',
36
+ },
37
+ track: {
38
+ type: 'string',
39
+ description: 'Name of the track',
40
+ },
41
+ limit: {
42
+ type: 'number',
43
+ description: 'Maximum number of similar tracks to return (1-100)',
44
+ minimum: 1,
45
+ maximum: 100,
46
+ default: 100,
47
+ },
48
+ },
49
+ required: ['artist', 'track'],
50
+ },
51
+ },
52
+ {
53
+ name: 'get_artist_info',
54
+ description: 'Get detailed artist information from Last.fm',
55
+ inputSchema: {
56
+ type: 'object',
57
+ properties: {
58
+ artist: {
59
+ type: 'string',
60
+ description: 'Name of the artist to get information for',
61
+ },
62
+ lang: {
63
+ type: 'string',
64
+ description: 'Language for the biography (ISO 639 code)',
65
+ default: 'en',
66
+ },
67
+ },
68
+ required: ['artist'],
69
+ },
70
+ },
71
+ {
72
+ name: 'get_top_tracks_by_artist',
73
+ description: 'Get top tracks for an artist from Last.fm',
74
+ inputSchema: {
75
+ type: 'object',
76
+ properties: {
77
+ artist: {
78
+ type: 'string',
79
+ description: 'Name of the artist',
80
+ },
81
+ limit: {
82
+ type: 'number',
83
+ description: 'Maximum number of top tracks to return (1-50)',
84
+ minimum: 1,
85
+ maximum: 50,
86
+ default: 10,
87
+ },
88
+ },
89
+ required: ['artist'],
90
+ },
91
+ },
92
+ {
93
+ name: 'get_trending_music',
94
+ description: 'Get trending music charts from Last.fm',
95
+ inputSchema: {
96
+ type: 'object',
97
+ properties: {
98
+ type: {
99
+ type: 'string',
100
+ description: 'Type of chart to get',
101
+ enum: ['artists', 'tracks', 'tags'],
102
+ },
103
+ limit: {
104
+ type: 'number',
105
+ description: 'Maximum number of items to return (1-100)',
106
+ minimum: 1,
107
+ maximum: 100,
108
+ default: 100,
109
+ },
110
+ page: {
111
+ type: 'number',
112
+ description: 'Page number for pagination',
113
+ minimum: 1,
114
+ default: 1,
115
+ },
116
+ },
117
+ required: ['type'],
118
+ },
119
+ },
120
+ ];
121
+ // Factory function for creating LastFM tool category with dependencies
122
+ export function createLastFmToolCategory(_client, config) {
123
+ return {
124
+ tools,
125
+ async handleToolCall(name, args) {
126
+ switch (name) {
127
+ case 'get_similar_artists':
128
+ return await getSimilarArtists(config, args);
129
+ case 'get_similar_tracks':
130
+ return await getSimilarTracks(config, args);
131
+ case 'get_artist_info':
132
+ return await getArtistInfo(config, args);
133
+ case 'get_top_tracks_by_artist':
134
+ return await getTopTracksByArtist(config, args);
135
+ case 'get_trending_music':
136
+ return await getTrendingMusic(config, args);
137
+ default:
138
+ throw new Error(ErrorFormatter.toolUnknown(`Last.fm ${name}`));
139
+ }
140
+ }
141
+ };
142
+ }
143
+ //# sourceMappingURL=lastfm-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lastfm-handlers.js","sourceRoot":"","sources":["../../../src/tools/handlers/lastfm-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 createLyricsToolCategory(_client: NavidromeClient, config: Config): ToolCategory;
5
+ //# sourceMappingURL=lyrics-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lyrics-handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/lyrics-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;AAyClD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAY/F"}
@@ -0,0 +1,51 @@
1
+ // Import tool functions
2
+ import { getLyrics } from '../lyrics.js';
3
+ // Tool definitions for lyrics category
4
+ const tools = [
5
+ {
6
+ name: 'get_lyrics',
7
+ description: 'Get lyrics for a song (both synced and unsynced). Returns timed lyrics for karaoke-style display when available.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ title: {
12
+ type: 'string',
13
+ description: 'Song title',
14
+ },
15
+ artist: {
16
+ type: 'string',
17
+ description: 'Artist name',
18
+ },
19
+ album: {
20
+ type: 'string',
21
+ description: 'Album name (improves match accuracy)',
22
+ },
23
+ durationMs: {
24
+ type: 'number',
25
+ description: 'Song duration in milliseconds (improves match accuracy)',
26
+ minimum: 0,
27
+ },
28
+ id: {
29
+ type: 'string',
30
+ description: 'LRCLIB record ID if known',
31
+ },
32
+ },
33
+ required: ['title', 'artist'],
34
+ },
35
+ },
36
+ ];
37
+ // Factory function for creating lyrics tool category with dependencies
38
+ export function createLyricsToolCategory(_client, config) {
39
+ return {
40
+ tools,
41
+ async handleToolCall(name, args) {
42
+ switch (name) {
43
+ case 'get_lyrics':
44
+ return await getLyrics(config, args);
45
+ default:
46
+ throw new Error(`Unknown lyrics tool: ${name}`);
47
+ }
48
+ }
49
+ };
50
+ }
51
+ //# sourceMappingURL=lyrics-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lyrics-handlers.js","sourceRoot":"","sources":["../../../src/tools/handlers/lyrics-handlers.ts"],"names":[],"mappings":"AAKA,wBAAwB;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,uCAAuC;AACvC,MAAM,KAAK,GAAW;IACpB;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,kHAAkH;QAC/H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,YAAY;iBAC1B;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,aAAa;iBAC3B;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;iBACpD;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yDAAyD;oBACtE,OAAO,EAAE,CAAC;iBACX;gBACD,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2BAA2B;iBACzC;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;SAC9B;KACF;CACF,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,wBAAwB,CAAC,OAAwB,EAAE,MAAc;IAC/E,OAAO;QACL,KAAK;QACL,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,IAAa;YAC9C,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,YAAY;oBACf,OAAO,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACvC;oBACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -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 createPlaylistToolCategory(client: NavidromeClient, _config: Config): ToolCategory;
5
+ //# sourceMappingURL=playlist-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playlist-handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/playlist-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;AA2SlD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CA8BjG"}