mcp-arr-suite 1.0.0
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 +21 -0
- package/README.md +198 -0
- package/dist/clients/arr-client.d.ts +681 -0
- package/dist/clients/arr-client.d.ts.map +1 -0
- package/dist/clients/arr-client.js +367 -0
- package/dist/clients/arr-client.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +16 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +32 -0
- package/dist/registry.js.map +1 -0
- package/dist/services/cross-service.d.ts +8 -0
- package/dist/services/cross-service.d.ts.map +1 -0
- package/dist/services/cross-service.js +113 -0
- package/dist/services/cross-service.js.map +1 -0
- package/dist/services/lidarr.d.ts +6 -0
- package/dist/services/lidarr.d.ts.map +1 -0
- package/dist/services/lidarr.js +263 -0
- package/dist/services/lidarr.js.map +1 -0
- package/dist/services/prowlarr.d.ts +10 -0
- package/dist/services/prowlarr.d.ts.map +1 -0
- package/dist/services/prowlarr.js +140 -0
- package/dist/services/prowlarr.js.map +1 -0
- package/dist/services/radarr.d.ts +9 -0
- package/dist/services/radarr.d.ts.map +1 -0
- package/dist/services/radarr.js +574 -0
- package/dist/services/radarr.js.map +1 -0
- package/dist/services/sonarr.d.ts +9 -0
- package/dist/services/sonarr.d.ts.map +1 -0
- package/dist/services/sonarr.js +696 -0
- package/dist/services/sonarr.js.map +1 -0
- package/dist/shared/config-tools.d.ts +15 -0
- package/dist/shared/config-tools.d.ts.map +1 -0
- package/dist/shared/config-tools.js +225 -0
- package/dist/shared/config-tools.js.map +1 -0
- package/dist/shared/formatting.d.ts +37 -0
- package/dist/shared/formatting.d.ts.map +1 -0
- package/dist/shared/formatting.js +57 -0
- package/dist/shared/formatting.js.map +1 -0
- package/dist/trash/client.d.ts +127 -0
- package/dist/trash/client.d.ts.map +1 -0
- package/dist/trash/client.js +289 -0
- package/dist/trash/client.js.map +1 -0
- package/dist/trash/tools.d.ts +13 -0
- package/dist/trash/tools.d.ts.map +1 -0
- package/dist/trash/tools.js +377 -0
- package/dist/trash/tools.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Radarr (Movies) ToolModule
|
|
3
|
+
*
|
|
4
|
+
* Tool definitions and handlers live together — scroll down from any
|
|
5
|
+
* tool schema to find its implementation directly below it.
|
|
6
|
+
*/
|
|
7
|
+
import { ok } from '../types.js';
|
|
8
|
+
import { formatBytes, truncate, paginate, clampLimit, clampOffset, today, daysFromNow } from '../shared/formatting.js';
|
|
9
|
+
export const radarrModule = {
|
|
10
|
+
tools: [
|
|
11
|
+
{
|
|
12
|
+
name: 'radarr_get_movies',
|
|
13
|
+
description: 'Get movies from the Radarr library. Returns summary fields only — use search to filter before paginating. Default limit=25 to keep context usage low.',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
limit: { type: 'number', description: 'Results per page (default: 25, max: 100)' },
|
|
18
|
+
offset: { type: 'number', description: 'Skip N results (default: 0)' },
|
|
19
|
+
search: { type: 'string', description: 'Case-insensitive title filter' },
|
|
20
|
+
},
|
|
21
|
+
required: [],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'radarr_search',
|
|
26
|
+
description: 'Search for movies by name. Returns top 10 results with tmdbId needed for radarr_add_movie.',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
term: { type: 'string', description: 'Movie name to search for' },
|
|
31
|
+
},
|
|
32
|
+
required: ['term'],
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'radarr_get_queue',
|
|
37
|
+
description: 'Get current Radarr download queue. Shows active downloads and their progress.',
|
|
38
|
+
inputSchema: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: {
|
|
41
|
+
limit: { type: 'number', description: 'Max queue items to return (default: 10)' },
|
|
42
|
+
},
|
|
43
|
+
required: [],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'radarr_get_calendar',
|
|
48
|
+
description: 'Get upcoming movie releases from Radarr.',
|
|
49
|
+
inputSchema: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
days: { type: 'number', description: 'Days to look ahead (default: 30)' },
|
|
53
|
+
},
|
|
54
|
+
required: [],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'radarr_search_movie',
|
|
59
|
+
description: 'Trigger a download search for a movie already in the Radarr library.',
|
|
60
|
+
inputSchema: {
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {
|
|
63
|
+
movieId: { type: 'number', description: 'Movie ID (from radarr_get_movies)' },
|
|
64
|
+
},
|
|
65
|
+
required: ['movieId'],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'radarr_refresh_movie',
|
|
70
|
+
description: 'Trigger a metadata refresh for a specific movie in Radarr.',
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
movieId: { type: 'number', description: 'Movie ID (from radarr_get_movies)' },
|
|
75
|
+
},
|
|
76
|
+
required: ['movieId'],
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'radarr_add_movie',
|
|
81
|
+
description: 'Add a movie to Radarr. Use radarr_search first to get the tmdbId, radarr_get_root_folders for rootFolderPath, radarr_get_quality_profiles for qualityProfileId, and radarr_get_tags for tag IDs.',
|
|
82
|
+
inputSchema: {
|
|
83
|
+
type: 'object',
|
|
84
|
+
properties: {
|
|
85
|
+
tmdbId: { type: 'number', description: 'TMDB ID from radarr_search results' },
|
|
86
|
+
title: { type: 'string', description: 'Movie title' },
|
|
87
|
+
qualityProfileId: { type: 'number', description: 'Quality profile ID' },
|
|
88
|
+
rootFolderPath: { type: 'string', description: 'Root folder path' },
|
|
89
|
+
monitored: { type: 'boolean', description: 'Monitor the movie (default: true)' },
|
|
90
|
+
minimumAvailability: {
|
|
91
|
+
type: 'string',
|
|
92
|
+
enum: ['announced', 'inCinemas', 'released', 'tba'],
|
|
93
|
+
description: 'When to consider available (default: announced)',
|
|
94
|
+
},
|
|
95
|
+
tags: {
|
|
96
|
+
type: 'array',
|
|
97
|
+
items: { type: 'number' },
|
|
98
|
+
description: 'Tag IDs (optional)',
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
required: ['tmdbId', 'title', 'qualityProfileId', 'rootFolderPath'],
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: 'radarr_delete_movie',
|
|
106
|
+
description: 'Remove a movie from Radarr. Optionally delete the files from disk and/or add to import exclusions.',
|
|
107
|
+
inputSchema: {
|
|
108
|
+
type: 'object',
|
|
109
|
+
properties: {
|
|
110
|
+
movieId: { type: 'number', description: 'Movie ID (from radarr_get_movies)' },
|
|
111
|
+
deleteFiles: { type: 'boolean', description: 'Delete movie files from disk (default: false)' },
|
|
112
|
+
addImportExclusion: { type: 'boolean', description: 'Prevent re-importing this movie (default: false)' },
|
|
113
|
+
},
|
|
114
|
+
required: ['movieId'],
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'radarr_update_movie',
|
|
119
|
+
description: 'Update a movie in Radarr — change monitored status, quality profile, minimum availability, or tags.',
|
|
120
|
+
inputSchema: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
movieId: { type: 'number', description: 'Movie ID (from radarr_get_movies)' },
|
|
124
|
+
monitored: { type: 'boolean', description: 'Set monitored status' },
|
|
125
|
+
qualityProfileId: { type: 'number', description: 'Change quality profile ID' },
|
|
126
|
+
minimumAvailability: {
|
|
127
|
+
type: 'string',
|
|
128
|
+
enum: ['announced', 'inCinemas', 'released', 'tba'],
|
|
129
|
+
description: 'Change minimum availability',
|
|
130
|
+
},
|
|
131
|
+
tags: { type: 'array', items: { type: 'number' }, description: 'Replace tag IDs' },
|
|
132
|
+
},
|
|
133
|
+
required: ['movieId'],
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'radarr_get_disk_space',
|
|
138
|
+
description: 'Get disk space usage for all Radarr root folders and mounts.',
|
|
139
|
+
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'radarr_get_history',
|
|
143
|
+
description: 'Get download history. Filter to a specific movie with movieId, or leave blank for recent activity across all movies.',
|
|
144
|
+
inputSchema: {
|
|
145
|
+
type: 'object',
|
|
146
|
+
properties: {
|
|
147
|
+
movieId: { type: 'number', description: 'Filter to a specific movie (optional)' },
|
|
148
|
+
page: { type: 'number', description: 'Page number (default: 1)' },
|
|
149
|
+
pageSize: { type: 'number', description: 'Results per page (default: 20, max: 100)' },
|
|
150
|
+
},
|
|
151
|
+
required: [],
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'radarr_remove_from_queue',
|
|
156
|
+
description: 'Remove one or more items from the Radarr download queue. Optionally blocklist them to prevent re-grabbing.',
|
|
157
|
+
inputSchema: {
|
|
158
|
+
type: 'object',
|
|
159
|
+
properties: {
|
|
160
|
+
ids: {
|
|
161
|
+
type: 'array',
|
|
162
|
+
items: { type: 'number' },
|
|
163
|
+
description: 'Queue item ID(s) to remove (from radarr_get_queue)',
|
|
164
|
+
},
|
|
165
|
+
blocklist: { type: 'boolean', description: 'Add to blocklist to prevent re-grab (default: false)' },
|
|
166
|
+
removeFromClient: { type: 'boolean', description: 'Also remove from download client (default: true)' },
|
|
167
|
+
},
|
|
168
|
+
required: ['ids'],
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'radarr_get_wanted_missing',
|
|
173
|
+
description: 'Get paginated list of monitored movies that are missing (not yet downloaded).',
|
|
174
|
+
inputSchema: {
|
|
175
|
+
type: 'object',
|
|
176
|
+
properties: {
|
|
177
|
+
page: { type: 'number', description: 'Page number (default: 1)' },
|
|
178
|
+
pageSize: { type: 'number', description: 'Results per page (default: 20, max: 100)' },
|
|
179
|
+
},
|
|
180
|
+
required: [],
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: 'radarr_get_wanted_cutoff',
|
|
185
|
+
description: 'Get paginated list of movies that have a file but have not met the quality cutoff (upgrade candidates).',
|
|
186
|
+
inputSchema: {
|
|
187
|
+
type: 'object',
|
|
188
|
+
properties: {
|
|
189
|
+
page: { type: 'number', description: 'Page number (default: 1)' },
|
|
190
|
+
pageSize: { type: 'number', description: 'Results per page (default: 20, max: 100)' },
|
|
191
|
+
},
|
|
192
|
+
required: [],
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: 'radarr_get_movie_files',
|
|
197
|
+
description: 'Get file details for a specific movie — quality, size, codecs, languages.',
|
|
198
|
+
inputSchema: {
|
|
199
|
+
type: 'object',
|
|
200
|
+
properties: {
|
|
201
|
+
movieId: { type: 'number', description: 'Movie ID (from radarr_get_movies)' },
|
|
202
|
+
},
|
|
203
|
+
required: ['movieId'],
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: 'radarr_delete_movie_file',
|
|
208
|
+
description: 'Delete a specific movie file from disk (the movie remains in Radarr as unmonitored).',
|
|
209
|
+
inputSchema: {
|
|
210
|
+
type: 'object',
|
|
211
|
+
properties: {
|
|
212
|
+
fileId: { type: 'number', description: 'File ID (from radarr_get_movie_files)' },
|
|
213
|
+
},
|
|
214
|
+
required: ['fileId'],
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: 'radarr_get_blocklist',
|
|
219
|
+
description: 'Get the Radarr blocklist — releases that were blocked/failed and won\'t be re-grabbed.',
|
|
220
|
+
inputSchema: {
|
|
221
|
+
type: 'object',
|
|
222
|
+
properties: {
|
|
223
|
+
page: { type: 'number', description: 'Page number (default: 1)' },
|
|
224
|
+
pageSize: { type: 'number', description: 'Results per page (default: 20, max: 100)' },
|
|
225
|
+
},
|
|
226
|
+
required: [],
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: 'radarr_delete_from_blocklist',
|
|
231
|
+
description: 'Remove an entry from the Radarr blocklist so that release can be grabbed again.',
|
|
232
|
+
inputSchema: {
|
|
233
|
+
type: 'object',
|
|
234
|
+
properties: {
|
|
235
|
+
blocklistId: { type: 'number', description: 'Blocklist entry ID (from radarr_get_blocklist)' },
|
|
236
|
+
},
|
|
237
|
+
required: ['blocklistId'],
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
handlers: {
|
|
242
|
+
radarr_get_movies: async (args, clients) => {
|
|
243
|
+
if (!clients.radarr)
|
|
244
|
+
throw new Error('Radarr is not configured');
|
|
245
|
+
const limit = clampLimit(args.limit ?? 25);
|
|
246
|
+
const offset = clampOffset(args.offset ?? 0);
|
|
247
|
+
const search = args.search?.trim().toLowerCase();
|
|
248
|
+
const all = await clients.radarr.getMovies();
|
|
249
|
+
const filtered = search ? all.filter(m => m.title.toLowerCase().includes(search)) : all;
|
|
250
|
+
const page = filtered.slice(offset, offset + limit);
|
|
251
|
+
return ok({
|
|
252
|
+
...paginate(page.map(m => ({
|
|
253
|
+
id: m.id,
|
|
254
|
+
title: m.title,
|
|
255
|
+
year: m.year,
|
|
256
|
+
status: m.status,
|
|
257
|
+
hasFile: m.hasFile,
|
|
258
|
+
sizeOnDisk: formatBytes(m.sizeOnDisk),
|
|
259
|
+
monitored: m.monitored,
|
|
260
|
+
studio: m.studio,
|
|
261
|
+
qualityProfileId: m.qualityProfileId,
|
|
262
|
+
})), filtered.length, offset, limit),
|
|
263
|
+
...(search ? { search } : {}),
|
|
264
|
+
totalLibrary: all.length,
|
|
265
|
+
});
|
|
266
|
+
},
|
|
267
|
+
radarr_search: async (args, clients) => {
|
|
268
|
+
if (!clients.radarr)
|
|
269
|
+
throw new Error('Radarr is not configured');
|
|
270
|
+
const term = args.term;
|
|
271
|
+
const results = await clients.radarr.searchMovies(term);
|
|
272
|
+
return ok({
|
|
273
|
+
count: results.length,
|
|
274
|
+
results: results.slice(0, 10).map(r => ({
|
|
275
|
+
title: r.title,
|
|
276
|
+
year: r.year,
|
|
277
|
+
tmdbId: r.tmdbId,
|
|
278
|
+
imdbId: r.imdbId,
|
|
279
|
+
status: r.status,
|
|
280
|
+
overview: truncate(r.overview, 200),
|
|
281
|
+
})),
|
|
282
|
+
});
|
|
283
|
+
},
|
|
284
|
+
radarr_get_queue: async (args, clients) => {
|
|
285
|
+
if (!clients.radarr)
|
|
286
|
+
throw new Error('Radarr is not configured');
|
|
287
|
+
const limit = clampLimit(args.limit ?? 10);
|
|
288
|
+
const queue = await clients.radarr.getQueue();
|
|
289
|
+
const items = queue.records.slice(0, limit);
|
|
290
|
+
return ok({
|
|
291
|
+
totalRecords: queue.totalRecords,
|
|
292
|
+
returned: items.length,
|
|
293
|
+
items: items.map(q => ({
|
|
294
|
+
title: q.title,
|
|
295
|
+
status: q.status,
|
|
296
|
+
progress: q.size > 0 ? `${((1 - q.sizeleft / q.size) * 100).toFixed(1)}%` : '0%',
|
|
297
|
+
timeLeft: q.timeleft,
|
|
298
|
+
downloadClient: q.downloadClient,
|
|
299
|
+
})),
|
|
300
|
+
});
|
|
301
|
+
},
|
|
302
|
+
radarr_get_calendar: async (args, clients) => {
|
|
303
|
+
if (!clients.radarr)
|
|
304
|
+
throw new Error('Radarr is not configured');
|
|
305
|
+
const days = args.days ?? 30;
|
|
306
|
+
const calendar = await clients.radarr.getCalendar(today(), daysFromNow(days));
|
|
307
|
+
const items = calendar;
|
|
308
|
+
return ok({
|
|
309
|
+
days,
|
|
310
|
+
count: items.length,
|
|
311
|
+
releases: items.map(m => ({
|
|
312
|
+
id: m['id'],
|
|
313
|
+
title: m['title'],
|
|
314
|
+
year: m['year'],
|
|
315
|
+
inCinemas: m['inCinemas'],
|
|
316
|
+
physicalRelease: m['physicalRelease'],
|
|
317
|
+
digitalRelease: m['digitalRelease'],
|
|
318
|
+
status: m['status'],
|
|
319
|
+
hasFile: m['hasFile'],
|
|
320
|
+
})),
|
|
321
|
+
});
|
|
322
|
+
},
|
|
323
|
+
radarr_search_movie: async (args, clients) => {
|
|
324
|
+
if (!clients.radarr)
|
|
325
|
+
throw new Error('Radarr is not configured');
|
|
326
|
+
const movieId = args.movieId;
|
|
327
|
+
const result = await clients.radarr.searchMovie(movieId);
|
|
328
|
+
return ok({ success: true, message: 'Search triggered for movie', commandId: result.id });
|
|
329
|
+
},
|
|
330
|
+
radarr_refresh_movie: async (args, clients) => {
|
|
331
|
+
if (!clients.radarr)
|
|
332
|
+
throw new Error('Radarr is not configured');
|
|
333
|
+
const movieId = args.movieId;
|
|
334
|
+
const [movie, result] = await Promise.all([
|
|
335
|
+
clients.radarr.getMovieById(movieId),
|
|
336
|
+
clients.radarr.refreshMovie(movieId),
|
|
337
|
+
]);
|
|
338
|
+
return ok({
|
|
339
|
+
success: true,
|
|
340
|
+
message: 'Metadata refresh triggered',
|
|
341
|
+
movie: { id: movie.id, title: movie.title, year: movie.year },
|
|
342
|
+
commandId: result.id,
|
|
343
|
+
});
|
|
344
|
+
},
|
|
345
|
+
radarr_add_movie: async (args, clients) => {
|
|
346
|
+
if (!clients.radarr)
|
|
347
|
+
throw new Error('Radarr is not configured');
|
|
348
|
+
const { tmdbId, title, qualityProfileId, rootFolderPath, monitored, minimumAvailability, tags } = args;
|
|
349
|
+
const added = await clients.radarr.addMovie({
|
|
350
|
+
tmdbId,
|
|
351
|
+
title,
|
|
352
|
+
qualityProfileId,
|
|
353
|
+
rootFolderPath,
|
|
354
|
+
monitored,
|
|
355
|
+
minimumAvailability,
|
|
356
|
+
tags: tags ?? [],
|
|
357
|
+
});
|
|
358
|
+
return ok({
|
|
359
|
+
success: true,
|
|
360
|
+
message: `Added "${added.title}" (${added.year}) to Radarr`,
|
|
361
|
+
id: added.id,
|
|
362
|
+
path: added.path,
|
|
363
|
+
monitored: added.monitored,
|
|
364
|
+
});
|
|
365
|
+
},
|
|
366
|
+
radarr_delete_movie: async (args, clients) => {
|
|
367
|
+
if (!clients.radarr)
|
|
368
|
+
throw new Error('Radarr is not configured');
|
|
369
|
+
const { movieId, deleteFiles = false, addImportExclusion = false } = args;
|
|
370
|
+
const movie = await clients.radarr.getMovieById(movieId);
|
|
371
|
+
await clients.radarr.deleteMovie(movieId, deleteFiles, addImportExclusion);
|
|
372
|
+
return ok({
|
|
373
|
+
success: true,
|
|
374
|
+
message: `Removed "${movie.title}" (${movie.year}) from Radarr`,
|
|
375
|
+
deletedFiles: deleteFiles,
|
|
376
|
+
addedToExclusions: addImportExclusion,
|
|
377
|
+
});
|
|
378
|
+
},
|
|
379
|
+
radarr_update_movie: async (args, clients) => {
|
|
380
|
+
if (!clients.radarr)
|
|
381
|
+
throw new Error('Radarr is not configured');
|
|
382
|
+
const { movieId, monitored, qualityProfileId, minimumAvailability, tags } = args;
|
|
383
|
+
const changes = {};
|
|
384
|
+
if (monitored !== undefined)
|
|
385
|
+
changes['monitored'] = monitored;
|
|
386
|
+
if (qualityProfileId !== undefined)
|
|
387
|
+
changes['qualityProfileId'] = qualityProfileId;
|
|
388
|
+
if (minimumAvailability !== undefined)
|
|
389
|
+
changes['minimumAvailability'] = minimumAvailability;
|
|
390
|
+
if (tags !== undefined)
|
|
391
|
+
changes['tags'] = tags;
|
|
392
|
+
const updated = await clients.radarr.updateMovie(movieId, changes);
|
|
393
|
+
return ok({
|
|
394
|
+
success: true,
|
|
395
|
+
message: `Updated "${updated.title}" (${updated.year})`,
|
|
396
|
+
id: updated.id,
|
|
397
|
+
monitored: updated.monitored,
|
|
398
|
+
qualityProfileId: updated.qualityProfileId,
|
|
399
|
+
minimumAvailability: updated.minimumAvailability,
|
|
400
|
+
tags: updated.tags,
|
|
401
|
+
});
|
|
402
|
+
},
|
|
403
|
+
radarr_get_disk_space: async (_args, clients) => {
|
|
404
|
+
if (!clients.radarr)
|
|
405
|
+
throw new Error('Radarr is not configured');
|
|
406
|
+
const diskSpace = await clients.radarr.getDiskSpace();
|
|
407
|
+
return ok({
|
|
408
|
+
count: diskSpace.length,
|
|
409
|
+
disks: diskSpace.map(d => ({
|
|
410
|
+
path: d.path,
|
|
411
|
+
label: d.label,
|
|
412
|
+
freeSpace: formatBytes(d.freeSpace),
|
|
413
|
+
totalSpace: formatBytes(d.totalSpace),
|
|
414
|
+
usedSpace: formatBytes(d.totalSpace - d.freeSpace),
|
|
415
|
+
freePercent: d.totalSpace > 0
|
|
416
|
+
? `${((d.freeSpace / d.totalSpace) * 100).toFixed(1)}%`
|
|
417
|
+
: 'unknown',
|
|
418
|
+
})),
|
|
419
|
+
});
|
|
420
|
+
},
|
|
421
|
+
radarr_get_history: async (args, clients) => {
|
|
422
|
+
if (!clients.radarr)
|
|
423
|
+
throw new Error('Radarr is not configured');
|
|
424
|
+
const { movieId, page = 1, pageSize = 20 } = args;
|
|
425
|
+
const clampedPageSize = clampLimit(pageSize);
|
|
426
|
+
const history = await clients.radarr.getHistory(movieId, page, clampedPageSize);
|
|
427
|
+
// getHistory for a specific movie returns an array, not a paged object
|
|
428
|
+
const isArray = Array.isArray(history);
|
|
429
|
+
const records = isArray
|
|
430
|
+
? history
|
|
431
|
+
: (history.records);
|
|
432
|
+
const total = isArray ? records.length : history.totalRecords;
|
|
433
|
+
return ok({
|
|
434
|
+
totalRecords: total,
|
|
435
|
+
returned: records.length,
|
|
436
|
+
...(movieId ? { movieId } : {}),
|
|
437
|
+
records: records.map(r => ({
|
|
438
|
+
id: r['id'],
|
|
439
|
+
movieId: r['movieId'],
|
|
440
|
+
sourceTitle: r['sourceTitle'],
|
|
441
|
+
eventType: r['eventType'],
|
|
442
|
+
date: r['date'],
|
|
443
|
+
quality: r['quality']?.['quality'],
|
|
444
|
+
languages: r['languages'],
|
|
445
|
+
downloadId: r['downloadId'],
|
|
446
|
+
data: r['data'],
|
|
447
|
+
})),
|
|
448
|
+
});
|
|
449
|
+
},
|
|
450
|
+
radarr_remove_from_queue: async (args, clients) => {
|
|
451
|
+
if (!clients.radarr)
|
|
452
|
+
throw new Error('Radarr is not configured');
|
|
453
|
+
const { ids, blocklist = false, removeFromClient = true } = args;
|
|
454
|
+
if (ids.length === 1) {
|
|
455
|
+
await clients.radarr.removeFromQueue(ids[0], blocklist, removeFromClient);
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
await clients.radarr.removeFromQueueBulk(ids, blocklist, removeFromClient);
|
|
459
|
+
}
|
|
460
|
+
return ok({
|
|
461
|
+
success: true,
|
|
462
|
+
message: `Removed ${ids.length} item(s) from queue`,
|
|
463
|
+
ids,
|
|
464
|
+
blocklisted: blocklist,
|
|
465
|
+
removedFromClient: removeFromClient,
|
|
466
|
+
});
|
|
467
|
+
},
|
|
468
|
+
radarr_get_wanted_missing: async (args, clients) => {
|
|
469
|
+
if (!clients.radarr)
|
|
470
|
+
throw new Error('Radarr is not configured');
|
|
471
|
+
const { page = 1, pageSize = 20 } = args;
|
|
472
|
+
const wanted = await clients.radarr.getWantedMissing(page, clampLimit(pageSize));
|
|
473
|
+
return ok({
|
|
474
|
+
totalRecords: wanted.totalRecords,
|
|
475
|
+
page: wanted.page,
|
|
476
|
+
pageSize: wanted.pageSize,
|
|
477
|
+
returned: wanted.records.length,
|
|
478
|
+
hasMore: wanted.page * wanted.pageSize < wanted.totalRecords,
|
|
479
|
+
movies: wanted.records.map(m => ({
|
|
480
|
+
id: m.id,
|
|
481
|
+
title: m.title,
|
|
482
|
+
year: m.year,
|
|
483
|
+
status: m.status,
|
|
484
|
+
monitored: m.monitored,
|
|
485
|
+
minimumAvailability: m.minimumAvailability,
|
|
486
|
+
qualityProfileId: m.qualityProfileId,
|
|
487
|
+
})),
|
|
488
|
+
});
|
|
489
|
+
},
|
|
490
|
+
radarr_get_wanted_cutoff: async (args, clients) => {
|
|
491
|
+
if (!clients.radarr)
|
|
492
|
+
throw new Error('Radarr is not configured');
|
|
493
|
+
const { page = 1, pageSize = 20 } = args;
|
|
494
|
+
const wanted = await clients.radarr.getWantedCutoff(page, clampLimit(pageSize));
|
|
495
|
+
return ok({
|
|
496
|
+
totalRecords: wanted.totalRecords,
|
|
497
|
+
page: wanted.page,
|
|
498
|
+
pageSize: wanted.pageSize,
|
|
499
|
+
returned: wanted.records.length,
|
|
500
|
+
hasMore: wanted.page * wanted.pageSize < wanted.totalRecords,
|
|
501
|
+
movies: wanted.records.map(m => ({
|
|
502
|
+
id: m.id,
|
|
503
|
+
title: m.title,
|
|
504
|
+
year: m.year,
|
|
505
|
+
hasFile: m.hasFile,
|
|
506
|
+
sizeOnDisk: formatBytes(m.sizeOnDisk),
|
|
507
|
+
monitored: m.monitored,
|
|
508
|
+
qualityProfileId: m.qualityProfileId,
|
|
509
|
+
})),
|
|
510
|
+
});
|
|
511
|
+
},
|
|
512
|
+
radarr_get_movie_files: async (args, clients) => {
|
|
513
|
+
if (!clients.radarr)
|
|
514
|
+
throw new Error('Radarr is not configured');
|
|
515
|
+
const movieId = args.movieId;
|
|
516
|
+
const files = await clients.radarr.getMovieFiles(movieId);
|
|
517
|
+
return ok({
|
|
518
|
+
count: files.length,
|
|
519
|
+
files: files.map(f => ({
|
|
520
|
+
id: f.id,
|
|
521
|
+
relativePath: f.relativePath,
|
|
522
|
+
size: formatBytes(f.size),
|
|
523
|
+
sizeBytes: f.size,
|
|
524
|
+
dateAdded: f.dateAdded,
|
|
525
|
+
quality: f.quality?.quality?.name,
|
|
526
|
+
qualityCutoffNotMet: f.qualityCutoffNotMet,
|
|
527
|
+
videoCodec: f.mediaInfo?.videoCodec,
|
|
528
|
+
audioCodec: f.mediaInfo?.audioCodec,
|
|
529
|
+
audioChannels: f.mediaInfo?.audioChannels,
|
|
530
|
+
languages: f.languages?.map(l => l.name),
|
|
531
|
+
edition: f.edition || undefined,
|
|
532
|
+
dynamicRange: f.mediaInfo?.videoDynamicRangeType || undefined,
|
|
533
|
+
})),
|
|
534
|
+
});
|
|
535
|
+
},
|
|
536
|
+
radarr_delete_movie_file: async (args, clients) => {
|
|
537
|
+
if (!clients.radarr)
|
|
538
|
+
throw new Error('Radarr is not configured');
|
|
539
|
+
const fileId = args.fileId;
|
|
540
|
+
await clients.radarr.deleteMovieFile(fileId);
|
|
541
|
+
return ok({ success: true, message: `Deleted movie file ${fileId} from disk` });
|
|
542
|
+
},
|
|
543
|
+
radarr_get_blocklist: async (args, clients) => {
|
|
544
|
+
if (!clients.radarr)
|
|
545
|
+
throw new Error('Radarr is not configured');
|
|
546
|
+
const { page = 1, pageSize = 20 } = args;
|
|
547
|
+
const blocklist = await clients.radarr.getBlocklist(page, clampLimit(pageSize));
|
|
548
|
+
const records = Array.isArray(blocklist) ? blocklist : blocklist.records;
|
|
549
|
+
const total = Array.isArray(blocklist) ? records.length : blocklist.totalRecords;
|
|
550
|
+
return ok({
|
|
551
|
+
totalRecords: total,
|
|
552
|
+
returned: records.length,
|
|
553
|
+
entries: records.map(b => ({
|
|
554
|
+
id: b.id,
|
|
555
|
+
movieId: b.movieId,
|
|
556
|
+
sourceTitle: b.sourceTitle,
|
|
557
|
+
quality: b.quality?.quality?.name,
|
|
558
|
+
date: b.date,
|
|
559
|
+
protocol: b.protocol,
|
|
560
|
+
indexer: b.indexer,
|
|
561
|
+
message: b.message,
|
|
562
|
+
})),
|
|
563
|
+
});
|
|
564
|
+
},
|
|
565
|
+
radarr_delete_from_blocklist: async (args, clients) => {
|
|
566
|
+
if (!clients.radarr)
|
|
567
|
+
throw new Error('Radarr is not configured');
|
|
568
|
+
const blocklistId = args.blocklistId;
|
|
569
|
+
await clients.radarr.deleteFromBlocklist(blocklistId);
|
|
570
|
+
return ok({ success: true, message: `Removed blocklist entry ${blocklistId}` });
|
|
571
|
+
},
|
|
572
|
+
},
|
|
573
|
+
};
|
|
574
|
+
//# sourceMappingURL=radarr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radarr.js","sourceRoot":"","sources":["../../src/services/radarr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sonarr (TV Series) ToolModule
|
|
3
|
+
*
|
|
4
|
+
* Tool definitions and handlers live together — scroll down from any
|
|
5
|
+
* tool schema to find its implementation directly below it.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolModule } from '../types.js';
|
|
8
|
+
export declare const sonarrModule: ToolModule;
|
|
9
|
+
//# sourceMappingURL=sonarr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sonarr.d.ts","sourceRoot":"","sources":["../../src/services/sonarr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,eAAO,MAAM,YAAY,EAAE,UAktB1B,CAAC"}
|