@thelord/mcp-arr 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.
@@ -0,0 +1,320 @@
1
+ /**
2
+ * Lingarr API Client
3
+ *
4
+ * Lingarr is an application that leverages translation technologies to
5
+ * automatically translate subtitle files to your desired target language.
6
+ *
7
+ * API Authentication: X-Api-Key header
8
+ */
9
+ // Enums
10
+ export var MediaType;
11
+ (function (MediaType) {
12
+ MediaType[MediaType["Movie"] = 0] = "Movie";
13
+ MediaType[MediaType["Show"] = 1] = "Show";
14
+ MediaType[MediaType["Season"] = 2] = "Season";
15
+ MediaType[MediaType["Episode"] = 3] = "Episode";
16
+ })(MediaType || (MediaType = {}));
17
+ export var TranslationStatus;
18
+ (function (TranslationStatus) {
19
+ TranslationStatus[TranslationStatus["Pending"] = 0] = "Pending";
20
+ TranslationStatus[TranslationStatus["InProgress"] = 1] = "InProgress";
21
+ TranslationStatus[TranslationStatus["Completed"] = 2] = "Completed";
22
+ TranslationStatus[TranslationStatus["Failed"] = 3] = "Failed";
23
+ TranslationStatus[TranslationStatus["Cancelled"] = 4] = "Cancelled";
24
+ TranslationStatus[TranslationStatus["Interrupted"] = 5] = "Interrupted";
25
+ })(TranslationStatus || (TranslationStatus = {}));
26
+ export class LingarrClient {
27
+ config;
28
+ constructor(config) {
29
+ this.config = {
30
+ url: config.url.replace(/\/$/, ''),
31
+ apiKey: config.apiKey,
32
+ };
33
+ }
34
+ /**
35
+ * Make an API request
36
+ */
37
+ async request(endpoint, options = {}) {
38
+ const url = `${this.config.url}/api${endpoint}`;
39
+ const headers = {
40
+ 'Content-Type': 'application/json',
41
+ 'X-Api-Key': this.config.apiKey,
42
+ ...(options.headers || {}),
43
+ };
44
+ const response = await fetch(url, {
45
+ ...options,
46
+ headers,
47
+ });
48
+ if (!response.ok) {
49
+ const text = await response.text();
50
+ throw new Error(`Lingarr API error: ${response.status} ${response.statusText} - ${text}`);
51
+ }
52
+ // Handle empty responses
53
+ const text = await response.text();
54
+ if (!text) {
55
+ return {};
56
+ }
57
+ return JSON.parse(text);
58
+ }
59
+ // ============ Version & Health ============
60
+ /**
61
+ * Get version info and check for updates
62
+ */
63
+ async getVersion() {
64
+ return this.request('/Version');
65
+ }
66
+ /**
67
+ * Check if authenticated (connection test)
68
+ */
69
+ async testConnection() {
70
+ try {
71
+ await this.request('/Auth/authenticated');
72
+ return true;
73
+ }
74
+ catch {
75
+ return false;
76
+ }
77
+ }
78
+ // ============ Media ============
79
+ /**
80
+ * Get movies with pagination
81
+ */
82
+ async getMovies(pageNumber = 1, pageSize = 20, searchQuery, orderBy, ascending = true) {
83
+ const params = new URLSearchParams({
84
+ pageNumber: pageNumber.toString(),
85
+ pageSize: pageSize.toString(),
86
+ ascending: ascending.toString(),
87
+ });
88
+ if (searchQuery)
89
+ params.append('searchQuery', searchQuery);
90
+ if (orderBy)
91
+ params.append('orderBy', orderBy);
92
+ return this.request(`/Media/movies?${params.toString()}`);
93
+ }
94
+ /**
95
+ * Get shows with pagination
96
+ */
97
+ async getShows(pageNumber = 1, pageSize = 20, searchQuery, orderBy, ascending = true) {
98
+ const params = new URLSearchParams({
99
+ pageNumber: pageNumber.toString(),
100
+ pageSize: pageSize.toString(),
101
+ ascending: ascending.toString(),
102
+ });
103
+ if (searchQuery)
104
+ params.append('searchQuery', searchQuery);
105
+ if (orderBy)
106
+ params.append('orderBy', orderBy);
107
+ return this.request(`/Media/shows?${params.toString()}`);
108
+ }
109
+ /**
110
+ * Exclude or include media from translation
111
+ */
112
+ async setExcludeMedia(mediaType, id) {
113
+ await this.request('/Media/exclude', {
114
+ method: 'POST',
115
+ body: JSON.stringify({ mediaType, id }),
116
+ });
117
+ }
118
+ /**
119
+ * Set translation age threshold for media
120
+ */
121
+ async setTranslationThreshold(mediaType, id, hours) {
122
+ await this.request('/Media/threshold', {
123
+ method: 'POST',
124
+ body: JSON.stringify({ mediaType, id, hours }),
125
+ });
126
+ }
127
+ // ============ Translation ============
128
+ /**
129
+ * Translate a subtitle file
130
+ */
131
+ async translateFile(request) {
132
+ await this.request('/Translate/file', {
133
+ method: 'POST',
134
+ body: JSON.stringify(request),
135
+ });
136
+ }
137
+ /**
138
+ * Translate a single subtitle line
139
+ */
140
+ async translateLine(request) {
141
+ return this.request('/Translate/line', {
142
+ method: 'POST',
143
+ body: JSON.stringify(request),
144
+ });
145
+ }
146
+ /**
147
+ * Get available source languages with their target languages
148
+ */
149
+ async getLanguages() {
150
+ return this.request('/Translate/languages');
151
+ }
152
+ /**
153
+ * Get available AI models for translation
154
+ */
155
+ async getModels() {
156
+ return this.request('/Translate/models');
157
+ }
158
+ // ============ Translation Requests ============
159
+ /**
160
+ * Get count of active translations
161
+ */
162
+ async getActiveTranslationsCount() {
163
+ return this.request('/TranslationRequest/active');
164
+ }
165
+ /**
166
+ * Get translation requests with pagination
167
+ */
168
+ async getTranslationRequests(pageNumber = 1, pageSize = 20) {
169
+ const params = new URLSearchParams({
170
+ pageNumber: pageNumber.toString(),
171
+ pageSize: pageSize.toString(),
172
+ });
173
+ return this.request(`/TranslationRequest/requests?${params.toString()}`);
174
+ }
175
+ /**
176
+ * Cancel a translation request
177
+ */
178
+ async cancelTranslation(id) {
179
+ await this.request('/TranslationRequest/cancel', {
180
+ method: 'POST',
181
+ body: JSON.stringify({ id }),
182
+ });
183
+ }
184
+ /**
185
+ * Remove a translation request
186
+ */
187
+ async removeTranslation(id) {
188
+ await this.request('/TranslationRequest/remove', {
189
+ method: 'POST',
190
+ body: JSON.stringify({ id }),
191
+ });
192
+ }
193
+ /**
194
+ * Retry a failed translation request
195
+ */
196
+ async retryTranslation(id) {
197
+ await this.request('/TranslationRequest/retry', {
198
+ method: 'POST',
199
+ body: JSON.stringify({ id }),
200
+ });
201
+ }
202
+ // ============ Subtitles ============
203
+ /**
204
+ * Get all subtitles for a given path
205
+ */
206
+ async getSubtitles(path) {
207
+ return this.request('/Subtitle/all', {
208
+ method: 'POST',
209
+ body: JSON.stringify({ path }),
210
+ });
211
+ }
212
+ // ============ Statistics ============
213
+ /**
214
+ * Get general statistics
215
+ */
216
+ async getStatistics() {
217
+ return this.request('/Statistics');
218
+ }
219
+ /**
220
+ * Get daily statistics
221
+ */
222
+ async getDailyStatistics(days = 30) {
223
+ return this.request(`/Statistics/daily/${days}`);
224
+ }
225
+ /**
226
+ * Reset statistics
227
+ */
228
+ async resetStatistics() {
229
+ await this.request('/Statistics/reset', { method: 'POST' });
230
+ }
231
+ // ============ Schedule / Jobs ============
232
+ /**
233
+ * Get all scheduled jobs
234
+ */
235
+ async getJobs() {
236
+ return this.request('/Schedule/jobs');
237
+ }
238
+ /**
239
+ * Start a job by name
240
+ */
241
+ async startJob(jobName) {
242
+ await this.request('/Schedule/job/start', {
243
+ method: 'POST',
244
+ body: JSON.stringify({ jobName }),
245
+ });
246
+ }
247
+ /**
248
+ * Run automated translation job
249
+ */
250
+ async runAutomatedTranslation() {
251
+ await this.request('/Schedule/job/automation');
252
+ }
253
+ /**
254
+ * Sync movies from Radarr
255
+ */
256
+ async syncMovies() {
257
+ await this.request('/Schedule/job/movie');
258
+ }
259
+ /**
260
+ * Sync shows from Sonarr
261
+ */
262
+ async syncShows() {
263
+ await this.request('/Schedule/job/show');
264
+ }
265
+ /**
266
+ * Remove a job from queue
267
+ */
268
+ async removeJob(jobId) {
269
+ await this.request(`/Schedule/job/remove/${encodeURIComponent(jobId)}`, {
270
+ method: 'DELETE',
271
+ });
272
+ }
273
+ /**
274
+ * Reindex movies
275
+ */
276
+ async reindexMovies() {
277
+ await this.request('/Schedule/job/index/movies', { method: 'POST' });
278
+ }
279
+ /**
280
+ * Reindex shows
281
+ */
282
+ async reindexShows() {
283
+ await this.request('/Schedule/job/index/shows', { method: 'POST' });
284
+ }
285
+ // ============ Settings ============
286
+ /**
287
+ * Get a setting value
288
+ */
289
+ async getSetting(key) {
290
+ return this.request(`/Setting/${encodeURIComponent(key)}`);
291
+ }
292
+ /**
293
+ * Get multiple settings
294
+ */
295
+ async getSettings(keys) {
296
+ return this.request('/Setting/multiple/get', {
297
+ method: 'POST',
298
+ body: JSON.stringify(keys),
299
+ });
300
+ }
301
+ /**
302
+ * Set a setting value
303
+ */
304
+ async setSetting(key, value) {
305
+ await this.request('/Setting', {
306
+ method: 'POST',
307
+ body: JSON.stringify({ key, value }),
308
+ });
309
+ }
310
+ /**
311
+ * Set multiple settings
312
+ */
313
+ async setSettings(settings) {
314
+ await this.request('/Setting/multiple/set', {
315
+ method: 'POST',
316
+ body: JSON.stringify(settings),
317
+ });
318
+ }
319
+ }
320
+ //# sourceMappingURL=lingarr-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lingarr-client.js","sourceRoot":"","sources":["../src/lingarr-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Lingarr MCP Tool Handlers
3
+ *
4
+ * This module contains all the handlers for Lingarr tools.
5
+ * Separated from index.ts to reduce merge conflicts when mcp-arr updates.
6
+ */
7
+ import { LingarrClient } from "./lingarr-client.js";
8
+ /**
9
+ * Handler result type matching MCP SDK expectations
10
+ */
11
+ export interface HandlerResult {
12
+ content: Array<{
13
+ type: "text";
14
+ text: string;
15
+ }>;
16
+ isError?: boolean;
17
+ [key: string]: unknown;
18
+ }
19
+ /**
20
+ * Handle Lingarr tool calls
21
+ * @param toolName The name of the tool being called
22
+ * @param args The arguments passed to the tool
23
+ * @param client The LingarrClient instance
24
+ * @returns The handler result or null if not a Lingarr tool
25
+ */
26
+ export declare function handleLingarrTool(toolName: string, args: Record<string, unknown>, client: LingarrClient | undefined): Promise<HandlerResult | null>;
27
+ /**
28
+ * Get Lingarr status for arr_status handler
29
+ * @param client The LingarrClient instance
30
+ * @returns Status object for Lingarr
31
+ */
32
+ export declare function getLingarrStatus(client: LingarrClient): Promise<{
33
+ configured: boolean;
34
+ connected: boolean;
35
+ version?: string;
36
+ appName?: string;
37
+ updateAvailable?: boolean;
38
+ error?: string;
39
+ }>;
40
+ //# sourceMappingURL=lingarr-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lingarr-handlers.d.ts","sourceRoot":"","sources":["../src/lingarr-handlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAiC,MAAM,qBAAqB,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,aAAa,GAAG,SAAS,GAChC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAwV/B;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;IACrE,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAiBD"}