@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.
- package/LICENSE +21 -0
- package/README.md +363 -0
- package/dist/arr-client.d.ts +784 -0
- package/dist/arr-client.d.ts.map +1 -0
- package/dist/arr-client.js +487 -0
- package/dist/arr-client.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1947 -0
- package/dist/index.js.map +1 -0
- package/dist/lingarr-client.d.ts +316 -0
- package/dist/lingarr-client.d.ts.map +1 -0
- package/dist/lingarr-client.js +320 -0
- package/dist/lingarr-client.js.map +1 -0
- package/dist/lingarr-handlers.d.ts +40 -0
- package/dist/lingarr-handlers.d.ts.map +1 -0
- package/dist/lingarr-handlers.js +347 -0
- package/dist/lingarr-handlers.js.map +1 -0
- package/dist/lingarr-tools.d.ts +19 -0
- package/dist/lingarr-tools.d.ts.map +1 -0
- package/dist/lingarr-tools.js +271 -0
- package/dist/lingarr-tools.js.map +1 -0
- package/dist/trash-client.d.ts +121 -0
- package/dist/trash-client.d.ts.map +1 -0
- package/dist/trash-client.js +287 -0
- package/dist/trash-client.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TRaSH Guides Client
|
|
3
|
+
*
|
|
4
|
+
* Fetches and caches quality profiles, custom formats, and naming conventions
|
|
5
|
+
* from the TRaSH Guides GitHub repository.
|
|
6
|
+
*
|
|
7
|
+
* Data source: https://github.com/TRaSH-Guides/Guides
|
|
8
|
+
*/
|
|
9
|
+
export type TrashService = 'radarr' | 'sonarr';
|
|
10
|
+
export interface TrashCustomFormat {
|
|
11
|
+
trash_id: string;
|
|
12
|
+
trash_scores?: {
|
|
13
|
+
default: number;
|
|
14
|
+
};
|
|
15
|
+
name: string;
|
|
16
|
+
includeCustomFormatWhenRenaming: boolean;
|
|
17
|
+
specifications: Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
implementation: string;
|
|
20
|
+
negate: boolean;
|
|
21
|
+
required: boolean;
|
|
22
|
+
fields: Record<string, unknown>;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export interface TrashQualityProfile {
|
|
26
|
+
trash_id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
trash_description?: string;
|
|
29
|
+
group?: number;
|
|
30
|
+
upgradeAllowed: boolean;
|
|
31
|
+
cutoff: string;
|
|
32
|
+
minFormatScore: number;
|
|
33
|
+
cutoffFormatScore: number;
|
|
34
|
+
minUpgradeFormatScore: number;
|
|
35
|
+
language: string;
|
|
36
|
+
items: Array<{
|
|
37
|
+
name: string;
|
|
38
|
+
allowed: boolean;
|
|
39
|
+
items?: string[];
|
|
40
|
+
}>;
|
|
41
|
+
formatItems: Record<string, string>;
|
|
42
|
+
}
|
|
43
|
+
export interface TrashQualitySize {
|
|
44
|
+
trash_id: string;
|
|
45
|
+
type: string;
|
|
46
|
+
qualities: Array<{
|
|
47
|
+
quality: string;
|
|
48
|
+
min: number;
|
|
49
|
+
preferred: number;
|
|
50
|
+
max: number;
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
export interface TrashNaming {
|
|
54
|
+
folder: Record<string, string>;
|
|
55
|
+
file: Record<string, string>;
|
|
56
|
+
season?: Record<string, string>;
|
|
57
|
+
series?: Record<string, string>;
|
|
58
|
+
specials?: Record<string, string>;
|
|
59
|
+
}
|
|
60
|
+
export interface TrashCFGroup {
|
|
61
|
+
name: string;
|
|
62
|
+
trash_id: string;
|
|
63
|
+
trash_description?: string;
|
|
64
|
+
default?: string;
|
|
65
|
+
custom_formats: Array<{
|
|
66
|
+
name: string;
|
|
67
|
+
trash_id: string;
|
|
68
|
+
required?: boolean;
|
|
69
|
+
}>;
|
|
70
|
+
quality_profiles?: {
|
|
71
|
+
exclude?: Record<string, string>;
|
|
72
|
+
include?: Record<string, string>;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export declare class TrashClient {
|
|
76
|
+
/**
|
|
77
|
+
* List available quality profiles
|
|
78
|
+
*/
|
|
79
|
+
listProfiles(service: TrashService): Promise<{
|
|
80
|
+
name: string;
|
|
81
|
+
description?: string;
|
|
82
|
+
}[]>;
|
|
83
|
+
/**
|
|
84
|
+
* Get a specific quality profile
|
|
85
|
+
*/
|
|
86
|
+
getProfile(service: TrashService, profileName: string): Promise<TrashQualityProfile | null>;
|
|
87
|
+
/**
|
|
88
|
+
* List available custom formats
|
|
89
|
+
*/
|
|
90
|
+
listCustomFormats(service: TrashService, category?: string): Promise<{
|
|
91
|
+
name: string;
|
|
92
|
+
categories: string[];
|
|
93
|
+
defaultScore?: number;
|
|
94
|
+
}[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Get a specific custom format
|
|
97
|
+
*/
|
|
98
|
+
getCustomFormat(service: TrashService, cfName: string): Promise<TrashCustomFormat | null>;
|
|
99
|
+
/**
|
|
100
|
+
* Get naming conventions
|
|
101
|
+
*/
|
|
102
|
+
getNaming(service: TrashService): Promise<TrashNaming | null>;
|
|
103
|
+
/**
|
|
104
|
+
* Get quality size recommendations
|
|
105
|
+
*/
|
|
106
|
+
getQualitySizes(service: TrashService, type?: string): Promise<TrashQualitySize[]>;
|
|
107
|
+
/**
|
|
108
|
+
* Get custom format groups
|
|
109
|
+
*/
|
|
110
|
+
listCFGroups(service: TrashService): Promise<string[]>;
|
|
111
|
+
/**
|
|
112
|
+
* Get a specific CF group
|
|
113
|
+
*/
|
|
114
|
+
getCFGroup(service: TrashService, groupName: string): Promise<TrashCFGroup | null>;
|
|
115
|
+
/**
|
|
116
|
+
* Clear the cache (force refresh)
|
|
117
|
+
*/
|
|
118
|
+
clearCache(): void;
|
|
119
|
+
}
|
|
120
|
+
export declare const trashClient: TrashClient;
|
|
121
|
+
//# sourceMappingURL=trash-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trash-client.d.ts","sourceRoot":"","sources":["../src/trash-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TRaSH Guides Client
|
|
3
|
+
*
|
|
4
|
+
* Fetches and caches quality profiles, custom formats, and naming conventions
|
|
5
|
+
* from the TRaSH Guides GitHub repository.
|
|
6
|
+
*
|
|
7
|
+
* Data source: https://github.com/TRaSH-Guides/Guides
|
|
8
|
+
*/
|
|
9
|
+
const TRASH_BASE_URL = 'https://raw.githubusercontent.com/TRaSH-Guides/Guides/master/docs/json';
|
|
10
|
+
const GITHUB_API_URL = 'https://api.github.com/repos/TRaSH-Guides/Guides/contents/docs/json';
|
|
11
|
+
const CACHE_TTL = 60 * 60 * 1000; // 1 hour
|
|
12
|
+
class TrashCache {
|
|
13
|
+
profiles = new Map();
|
|
14
|
+
profileLists = new Map();
|
|
15
|
+
customFormats = new Map();
|
|
16
|
+
cfLists = new Map();
|
|
17
|
+
cfGroups = new Map();
|
|
18
|
+
qualitySizes = new Map();
|
|
19
|
+
naming = new Map();
|
|
20
|
+
isValid(entry) {
|
|
21
|
+
return entry !== undefined && (Date.now() - entry.timestamp) < CACHE_TTL;
|
|
22
|
+
}
|
|
23
|
+
setProfile(key, data) {
|
|
24
|
+
this.profiles.set(key, { data, timestamp: Date.now() });
|
|
25
|
+
}
|
|
26
|
+
getProfile(key) {
|
|
27
|
+
const entry = this.profiles.get(key);
|
|
28
|
+
return this.isValid(entry) ? entry.data : null;
|
|
29
|
+
}
|
|
30
|
+
setProfileList(service, data) {
|
|
31
|
+
this.profileLists.set(service, { data, timestamp: Date.now() });
|
|
32
|
+
}
|
|
33
|
+
getProfileList(service) {
|
|
34
|
+
const entry = this.profileLists.get(service);
|
|
35
|
+
return this.isValid(entry) ? entry.data : null;
|
|
36
|
+
}
|
|
37
|
+
setCustomFormat(key, data) {
|
|
38
|
+
this.customFormats.set(key, { data, timestamp: Date.now() });
|
|
39
|
+
}
|
|
40
|
+
getCustomFormat(key) {
|
|
41
|
+
const entry = this.customFormats.get(key);
|
|
42
|
+
return this.isValid(entry) ? entry.data : null;
|
|
43
|
+
}
|
|
44
|
+
setCFList(service, data) {
|
|
45
|
+
this.cfLists.set(service, { data, timestamp: Date.now() });
|
|
46
|
+
}
|
|
47
|
+
getCFList(service) {
|
|
48
|
+
const entry = this.cfLists.get(service);
|
|
49
|
+
return this.isValid(entry) ? entry.data : null;
|
|
50
|
+
}
|
|
51
|
+
setCFGroup(key, data) {
|
|
52
|
+
this.cfGroups.set(key, { data, timestamp: Date.now() });
|
|
53
|
+
}
|
|
54
|
+
getCFGroup(key) {
|
|
55
|
+
const entry = this.cfGroups.get(key);
|
|
56
|
+
return this.isValid(entry) ? entry.data : null;
|
|
57
|
+
}
|
|
58
|
+
setQualitySize(key, data) {
|
|
59
|
+
this.qualitySizes.set(key, { data, timestamp: Date.now() });
|
|
60
|
+
}
|
|
61
|
+
getQualitySize(key) {
|
|
62
|
+
const entry = this.qualitySizes.get(key);
|
|
63
|
+
return this.isValid(entry) ? entry.data : null;
|
|
64
|
+
}
|
|
65
|
+
setNaming(key, data) {
|
|
66
|
+
this.naming.set(key, { data, timestamp: Date.now() });
|
|
67
|
+
}
|
|
68
|
+
getNaming(key) {
|
|
69
|
+
const entry = this.naming.get(key);
|
|
70
|
+
return this.isValid(entry) ? entry.data : null;
|
|
71
|
+
}
|
|
72
|
+
clear() {
|
|
73
|
+
this.profiles.clear();
|
|
74
|
+
this.profileLists.clear();
|
|
75
|
+
this.customFormats.clear();
|
|
76
|
+
this.cfLists.clear();
|
|
77
|
+
this.cfGroups.clear();
|
|
78
|
+
this.qualitySizes.clear();
|
|
79
|
+
this.naming.clear();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const cache = new TrashCache();
|
|
83
|
+
// Custom format categories
|
|
84
|
+
const CF_CATEGORIES = {
|
|
85
|
+
hdr: [/hdr/i, /dv/i, /dolby.*vision/i, /hdr10/i],
|
|
86
|
+
audio: [/atmos/i, /dts/i, /truehd/i, /audio/i, /surround/i, /sound/i, /stereo/i, /mono/i, /aac/i, /flac/i],
|
|
87
|
+
resolution: [/1080p/i, /2160p/i, /720p/i, /4k/i, /480p/i],
|
|
88
|
+
source: [/bluray/i, /web/i, /remux/i, /hdtv/i, /dvd/i, /cam/i, /telesync/i],
|
|
89
|
+
streaming: [/amzn/i, /nf\b/i, /netflix/i, /dsnp/i, /disney/i, /atvp/i, /apple/i, /hmax/i, /hbo/i, /hulu/i, /pcok/i, /peacock/i],
|
|
90
|
+
anime: [/anime/i],
|
|
91
|
+
unwanted: [/lq/i, /x265.*hdtv/i, /extras/i, /3d/i, /upscale/i, /bad.*dual/i],
|
|
92
|
+
release: [/repack/i, /proper/i, /scene/i, /p2p/i],
|
|
93
|
+
language: [/french/i, /german/i, /dutch/i, /multi/i, /language/i],
|
|
94
|
+
};
|
|
95
|
+
function categorizeCustomFormat(name) {
|
|
96
|
+
const categories = [];
|
|
97
|
+
for (const [category, patterns] of Object.entries(CF_CATEGORIES)) {
|
|
98
|
+
if (patterns.some(p => p.test(name))) {
|
|
99
|
+
categories.push(category);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return categories.length > 0 ? categories : ['other'];
|
|
103
|
+
}
|
|
104
|
+
// API functions
|
|
105
|
+
async function fetchJSON(url) {
|
|
106
|
+
const response = await fetch(url);
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
throw new Error(`Failed to fetch ${url}: ${response.status} ${response.statusText}`);
|
|
109
|
+
}
|
|
110
|
+
return response.json();
|
|
111
|
+
}
|
|
112
|
+
async function listGitHubDir(path) {
|
|
113
|
+
const files = await fetchJSON(`${GITHUB_API_URL}/${path}`);
|
|
114
|
+
return files
|
|
115
|
+
.filter(f => f.type === 'file' && f.name.endsWith('.json'))
|
|
116
|
+
.map(f => f.name.replace('.json', ''));
|
|
117
|
+
}
|
|
118
|
+
// Public API
|
|
119
|
+
export class TrashClient {
|
|
120
|
+
/**
|
|
121
|
+
* List available quality profiles
|
|
122
|
+
*/
|
|
123
|
+
async listProfiles(service) {
|
|
124
|
+
// Check cache
|
|
125
|
+
const cached = cache.getProfileList(service);
|
|
126
|
+
if (cached) {
|
|
127
|
+
// Fetch details for each
|
|
128
|
+
const profiles = await Promise.all(cached.map(name => this.getProfile(service, name)));
|
|
129
|
+
return profiles.filter((p) => p !== null).map(p => ({
|
|
130
|
+
name: p.name,
|
|
131
|
+
description: p.trash_description,
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
// Fetch list from GitHub
|
|
135
|
+
const profileNames = await listGitHubDir(`${service}/quality-profiles`);
|
|
136
|
+
cache.setProfileList(service, profileNames);
|
|
137
|
+
// Fetch details
|
|
138
|
+
const profiles = await Promise.all(profileNames.map(name => this.getProfile(service, name)));
|
|
139
|
+
return profiles.filter((p) => p !== null).map(p => ({
|
|
140
|
+
name: p.name,
|
|
141
|
+
description: p.trash_description,
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get a specific quality profile
|
|
146
|
+
*/
|
|
147
|
+
async getProfile(service, profileName) {
|
|
148
|
+
const key = `${service}/${profileName}`;
|
|
149
|
+
const cached = cache.getProfile(key);
|
|
150
|
+
if (cached)
|
|
151
|
+
return cached;
|
|
152
|
+
try {
|
|
153
|
+
const profile = await fetchJSON(`${TRASH_BASE_URL}/${service}/quality-profiles/${profileName}.json`);
|
|
154
|
+
cache.setProfile(key, profile);
|
|
155
|
+
return profile;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* List available custom formats
|
|
163
|
+
*/
|
|
164
|
+
async listCustomFormats(service, category) {
|
|
165
|
+
// Check cache
|
|
166
|
+
let cfNames = cache.getCFList(service);
|
|
167
|
+
if (!cfNames) {
|
|
168
|
+
cfNames = await listGitHubDir(`${service}/cf`);
|
|
169
|
+
cache.setCFList(service, cfNames);
|
|
170
|
+
}
|
|
171
|
+
// Fetch details for categorization
|
|
172
|
+
const formats = [];
|
|
173
|
+
// Batch fetch - limit to prevent rate limiting
|
|
174
|
+
const batchSize = 20;
|
|
175
|
+
for (let i = 0; i < cfNames.length; i += batchSize) {
|
|
176
|
+
const batch = cfNames.slice(i, i + batchSize);
|
|
177
|
+
const results = await Promise.all(batch.map(async (name) => {
|
|
178
|
+
const cf = await this.getCustomFormat(service, name);
|
|
179
|
+
if (!cf)
|
|
180
|
+
return null;
|
|
181
|
+
const cats = categorizeCustomFormat(cf.name);
|
|
182
|
+
return {
|
|
183
|
+
name: cf.name,
|
|
184
|
+
categories: cats,
|
|
185
|
+
defaultScore: cf.trash_scores?.default,
|
|
186
|
+
};
|
|
187
|
+
}));
|
|
188
|
+
formats.push(...results.filter((f) => f !== null));
|
|
189
|
+
}
|
|
190
|
+
// Filter by category if specified
|
|
191
|
+
if (category) {
|
|
192
|
+
return formats.filter(f => f.categories.includes(category.toLowerCase()));
|
|
193
|
+
}
|
|
194
|
+
return formats;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get a specific custom format
|
|
198
|
+
*/
|
|
199
|
+
async getCustomFormat(service, cfName) {
|
|
200
|
+
const key = `${service}/${cfName}`;
|
|
201
|
+
const cached = cache.getCustomFormat(key);
|
|
202
|
+
if (cached)
|
|
203
|
+
return cached;
|
|
204
|
+
try {
|
|
205
|
+
const cf = await fetchJSON(`${TRASH_BASE_URL}/${service}/cf/${cfName}.json`);
|
|
206
|
+
cache.setCustomFormat(key, cf);
|
|
207
|
+
return cf;
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get naming conventions
|
|
215
|
+
*/
|
|
216
|
+
async getNaming(service) {
|
|
217
|
+
const cached = cache.getNaming(service);
|
|
218
|
+
if (cached)
|
|
219
|
+
return cached;
|
|
220
|
+
try {
|
|
221
|
+
const naming = await fetchJSON(`${TRASH_BASE_URL}/${service}/naming/${service}-naming.json`);
|
|
222
|
+
cache.setNaming(service, naming);
|
|
223
|
+
return naming;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get quality size recommendations
|
|
231
|
+
*/
|
|
232
|
+
async getQualitySizes(service, type) {
|
|
233
|
+
const sizeTypes = service === 'radarr'
|
|
234
|
+
? ['movie', 'anime']
|
|
235
|
+
: ['series', 'anime'];
|
|
236
|
+
const sizes = [];
|
|
237
|
+
for (const sizeType of sizeTypes) {
|
|
238
|
+
const key = `${service}/${sizeType}`;
|
|
239
|
+
let size = cache.getQualitySize(key);
|
|
240
|
+
if (!size) {
|
|
241
|
+
try {
|
|
242
|
+
size = await fetchJSON(`${TRASH_BASE_URL}/${service}/quality-size/${sizeType}.json`);
|
|
243
|
+
cache.setQualitySize(key, size);
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (!type || size.type === type) {
|
|
250
|
+
sizes.push(size);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return sizes;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get custom format groups
|
|
257
|
+
*/
|
|
258
|
+
async listCFGroups(service) {
|
|
259
|
+
return listGitHubDir(`${service}/cf-groups`);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Get a specific CF group
|
|
263
|
+
*/
|
|
264
|
+
async getCFGroup(service, groupName) {
|
|
265
|
+
const key = `${service}/${groupName}`;
|
|
266
|
+
const cached = cache.getCFGroup(key);
|
|
267
|
+
if (cached)
|
|
268
|
+
return cached;
|
|
269
|
+
try {
|
|
270
|
+
const group = await fetchJSON(`${TRASH_BASE_URL}/${service}/cf-groups/${groupName}.json`);
|
|
271
|
+
cache.setCFGroup(key, group);
|
|
272
|
+
return group;
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Clear the cache (force refresh)
|
|
280
|
+
*/
|
|
281
|
+
clearCache() {
|
|
282
|
+
cache.clear();
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Singleton instance
|
|
286
|
+
export const trashClient = new TrashClient();
|
|
287
|
+
//# sourceMappingURL=trash-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trash-client.js","sourceRoot":"","sources":["../src/trash-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@thelord/mcp-arr",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"mcpName": "io.github.gilberth/mcp-arr",
|
|
5
|
+
"description": "MCP server for *arr media management suite - Sonarr, Radarr, Lidarr, Readarr, Prowlarr, Lingarr (subtitle translation)",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"bin": {
|
|
10
|
+
"mcp-arr": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"README.md"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"watch": "tsc --watch",
|
|
20
|
+
"prepublishOnly": "npm run build"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"mcp",
|
|
24
|
+
"sonarr",
|
|
25
|
+
"radarr",
|
|
26
|
+
"lidarr",
|
|
27
|
+
"readarr",
|
|
28
|
+
"prowlarr",
|
|
29
|
+
"lingarr",
|
|
30
|
+
"subtitles",
|
|
31
|
+
"translation",
|
|
32
|
+
"media",
|
|
33
|
+
"plex",
|
|
34
|
+
"jellyfin",
|
|
35
|
+
"emby",
|
|
36
|
+
"model-context-protocol",
|
|
37
|
+
"claude",
|
|
38
|
+
"ai",
|
|
39
|
+
"arr"
|
|
40
|
+
],
|
|
41
|
+
"author": "Gilberth (fork of mcp-arr by Jim Christian)",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/node": "^20.10.0",
|
|
48
|
+
"typescript": "^5.3.0"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=18.0.0"
|
|
52
|
+
},
|
|
53
|
+
"repository": {
|
|
54
|
+
"type": "git",
|
|
55
|
+
"url": "https://github.com/gilberth/mcp-arr.git"
|
|
56
|
+
},
|
|
57
|
+
"homepage": "https://github.com/gilberth/mcp-arr#readme",
|
|
58
|
+
"bugs": {
|
|
59
|
+
"url": "https://github.com/gilberth/mcp-arr/issues"
|
|
60
|
+
}
|
|
61
|
+
}
|