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.
- package/LICENSE +661 -0
- package/README.md +397 -0
- package/dist/capabilities.d.ts +20 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +25 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/client/auth-manager.d.ts +27 -0
- package/dist/client/auth-manager.d.ts.map +1 -0
- package/dist/client/auth-manager.js +54 -0
- package/dist/client/auth-manager.js.map +1 -0
- package/dist/client/navidrome-client.d.ts +28 -0
- package/dist/client/navidrome-client.d.ts.map +1 -0
- package/dist/client/navidrome-client.js +84 -0
- package/dist/client/navidrome-client.js.map +1 -0
- package/dist/config.d.ts +41 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +132 -0
- package/dist/config.js.map +1 -0
- package/dist/constants/defaults.d.ts +29 -0
- package/dist/constants/defaults.d.ts.map +1 -0
- package/dist/constants/defaults.js +37 -0
- package/dist/constants/defaults.js.map +1 -0
- package/dist/constants/timeouts.d.ts +66 -0
- package/dist/constants/timeouts.d.ts.map +1 -0
- package/dist/constants/timeouts.js +66 -0
- package/dist/constants/timeouts.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/index.d.ts +21 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +83 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/schemas/common.d.ts +68 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +69 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/index.d.ts +21 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +24 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/pagination.d.ts +153 -0
- package/dist/schemas/pagination.d.ts.map +1 -0
- package/dist/schemas/pagination.js +93 -0
- package/dist/schemas/pagination.js.map +1 -0
- package/dist/schemas/validation.d.ts +147 -0
- package/dist/schemas/validation.d.ts.map +1 -0
- package/dist/schemas/validation.js +143 -0
- package/dist/schemas/validation.js.map +1 -0
- package/dist/tools/handlers/lastfm-handlers.d.ts +5 -0
- package/dist/tools/handlers/lastfm-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/lastfm-handlers.js +143 -0
- package/dist/tools/handlers/lastfm-handlers.js.map +1 -0
- package/dist/tools/handlers/lyrics-handlers.d.ts +5 -0
- package/dist/tools/handlers/lyrics-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/lyrics-handlers.js +51 -0
- package/dist/tools/handlers/lyrics-handlers.js.map +1 -0
- package/dist/tools/handlers/playlist-handlers.d.ts +5 -0
- package/dist/tools/handlers/playlist-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/playlist-handlers.js +316 -0
- package/dist/tools/handlers/playlist-handlers.js.map +1 -0
- package/dist/tools/handlers/queue-handlers.d.ts +5 -0
- package/dist/tools/handlers/queue-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/queue-handlers.js +135 -0
- package/dist/tools/handlers/queue-handlers.js.map +1 -0
- package/dist/tools/handlers/radio-handlers.d.ts +5 -0
- package/dist/tools/handlers/radio-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/radio-handlers.js +323 -0
- package/dist/tools/handlers/radio-handlers.js.map +1 -0
- package/dist/tools/handlers/registry.d.ts +26 -0
- package/dist/tools/handlers/registry.d.ts.map +1 -0
- package/dist/tools/handlers/registry.js +77 -0
- package/dist/tools/handlers/registry.js.map +1 -0
- package/dist/tools/handlers/search-handlers.d.ts +5 -0
- package/dist/tools/handlers/search-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/search-handlers.js +125 -0
- package/dist/tools/handlers/search-handlers.js.map +1 -0
- package/dist/tools/handlers/tag-handlers.d.ts +5 -0
- package/dist/tools/handlers/tag-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/tag-handlers.js +155 -0
- package/dist/tools/handlers/tag-handlers.js.map +1 -0
- package/dist/tools/handlers/user-preferences-handlers.d.ts +5 -0
- package/dist/tools/handlers/user-preferences-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/user-preferences-handlers.js +155 -0
- package/dist/tools/handlers/user-preferences-handlers.js.map +1 -0
- package/dist/tools/index.d.ts +19 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +20 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/lastfm-discovery.d.ts +107 -0
- package/dist/tools/lastfm-discovery.d.ts.map +1 -0
- package/dist/tools/lastfm-discovery.js +238 -0
- package/dist/tools/lastfm-discovery.js.map +1 -0
- package/dist/tools/library.d.ts +31 -0
- package/dist/tools/library.d.ts.map +1 -0
- package/dist/tools/library.js +272 -0
- package/dist/tools/library.js.map +1 -0
- package/dist/tools/listening-history.d.ts +51 -0
- package/dist/tools/listening-history.d.ts.map +1 -0
- package/dist/tools/listening-history.js +126 -0
- package/dist/tools/listening-history.js.map +1 -0
- package/dist/tools/lyrics.d.ts +35 -0
- package/dist/tools/lyrics.d.ts.map +1 -0
- package/dist/tools/lyrics.js +222 -0
- package/dist/tools/lyrics.js.map +1 -0
- package/dist/tools/media-library.d.ts +46 -0
- package/dist/tools/media-library.d.ts.map +1 -0
- package/dist/tools/media-library.js +179 -0
- package/dist/tools/media-library.js.map +1 -0
- package/dist/tools/playlist-management.d.ts +80 -0
- package/dist/tools/playlist-management.d.ts.map +1 -0
- package/dist/tools/playlist-management.js +384 -0
- package/dist/tools/playlist-management.js.map +1 -0
- package/dist/tools/queue-management.d.ts +48 -0
- package/dist/tools/queue-management.d.ts.map +1 -0
- package/dist/tools/queue-management.js +83 -0
- package/dist/tools/queue-management.js.map +1 -0
- package/dist/tools/radio-discovery.d.ts +95 -0
- package/dist/tools/radio-discovery.d.ts.map +1 -0
- package/dist/tools/radio-discovery.js +352 -0
- package/dist/tools/radio-discovery.js.map +1 -0
- package/dist/tools/radio-validation.d.ts +49 -0
- package/dist/tools/radio-validation.d.ts.map +1 -0
- package/dist/tools/radio-validation.js +463 -0
- package/dist/tools/radio-validation.js.map +1 -0
- package/dist/tools/radio.d.ts +38 -0
- package/dist/tools/radio.d.ts.map +1 -0
- package/dist/tools/radio.js +315 -0
- package/dist/tools/radio.js.map +1 -0
- package/dist/tools/search.d.ts +54 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +165 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/tags.d.ts +63 -0
- package/dist/tools/tags.d.ts.map +1 -0
- package/dist/tools/tags.js +260 -0
- package/dist/tools/tags.js.map +1 -0
- package/dist/tools/test.d.ts +50 -0
- package/dist/tools/test.d.ts.map +1 -0
- package/dist/tools/test.js +121 -0
- package/dist/tools/test.js.map +1 -0
- package/dist/tools/user-preferences.d.ts +73 -0
- package/dist/tools/user-preferences.d.ts.map +1 -0
- package/dist/tools/user-preferences.js +231 -0
- package/dist/tools/user-preferences.js.map +1 -0
- package/dist/transformers/song-transformer.d.ts +122 -0
- package/dist/transformers/song-transformer.d.ts.map +1 -0
- package/dist/transformers/song-transformer.js +232 -0
- package/dist/transformers/song-transformer.js.map +1 -0
- package/dist/types/core.d.ts +147 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +19 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lyrics.d.ts +58 -0
- package/dist/types/lyrics.d.ts.map +1 -0
- package/dist/types/lyrics.js +19 -0
- package/dist/types/lyrics.js.map +1 -0
- package/dist/types/playlists.d.ts +150 -0
- package/dist/types/playlists.d.ts.map +1 -0
- package/dist/types/playlists.js +19 -0
- package/dist/types/playlists.js.map +1 -0
- package/dist/types/radio.d.ts +192 -0
- package/dist/types/radio.d.ts.map +1 -0
- package/dist/types/radio.js +19 -0
- package/dist/types/radio.js.map +1 -0
- package/dist/types/tags.d.ts +72 -0
- package/dist/types/tags.d.ts.map +1 -0
- package/dist/types/tags.js +19 -0
- package/dist/types/tags.js.map +1 -0
- package/dist/utils/cache.d.ts +32 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +84 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/error-formatter.d.ts +108 -0
- package/dist/utils/error-formatter.d.ts.map +1 -0
- package/dist/utils/error-formatter.js +161 -0
- package/dist/utils/error-formatter.js.map +1 -0
- package/dist/utils/logger.d.ts +33 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +52 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/message-manager.d.ts +74 -0
- package/dist/utils/message-manager.d.ts.map +1 -0
- package/dist/utils/message-manager.js +134 -0
- package/dist/utils/message-manager.js.map +1 -0
- package/dist/utils/version.d.ts +5 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +19 -0
- package/dist/utils/version.js.map +1 -0
- 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"}
|