mcp-arr-suite 1.3.0 → 1.6.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/README.md +87 -101
- package/dist/clients/arr-client.d.ts +245 -2
- package/dist/clients/arr-client.d.ts.map +1 -1
- package/dist/clients/arr-client.js +212 -8
- package/dist/clients/arr-client.js.map +1 -1
- package/dist/clients/sabnzbd-client.d.ts +193 -0
- package/dist/clients/sabnzbd-client.d.ts.map +1 -0
- package/dist/clients/sabnzbd-client.js +150 -0
- package/dist/clients/sabnzbd-client.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/services/lidarr.d.ts.map +1 -1
- package/dist/services/lidarr.js +892 -0
- package/dist/services/lidarr.js.map +1 -1
- package/dist/services/prowlarr.d.ts.map +1 -1
- package/dist/services/prowlarr.js +315 -0
- package/dist/services/prowlarr.js.map +1 -1
- package/dist/services/radarr.d.ts.map +1 -1
- package/dist/services/radarr.js +527 -15
- package/dist/services/radarr.js.map +1 -1
- package/dist/services/sabnzbd.d.ts +9 -0
- package/dist/services/sabnzbd.d.ts.map +1 -0
- package/dist/services/sabnzbd.js +585 -0
- package/dist/services/sabnzbd.js.map +1 -0
- package/dist/services/sonarr.d.ts.map +1 -1
- package/dist/services/sonarr.js +558 -18
- package/dist/services/sonarr.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# mcp-arr-suite
|
|
2
2
|
|
|
3
|
-
MCP server for the \*arr media management suite — Sonarr, Radarr, Lidarr, and
|
|
3
|
+
MCP server for the \*arr media management suite — Sonarr, Radarr, Lidarr, Prowlarr, and SABnzbd.
|
|
4
4
|
|
|
5
|
-
Exposes your
|
|
5
|
+
Exposes your media services as MCP tools consumable by Claude or any MCP-capable client. 215 tools across 7 modules.
|
|
6
6
|
|
|
7
7
|
<img width="854" height="739" alt="MCP Suite Image Diagram" src="https://github.com/user-attachments/assets/099d2cb3-ff71-4a27-8816-6e0d66f22a7a" />
|
|
8
8
|
|
|
9
9
|
## Requirements
|
|
10
10
|
|
|
11
11
|
- Node.js >= 18
|
|
12
|
-
- At least one
|
|
12
|
+
- At least one service running and accessible
|
|
13
13
|
|
|
14
14
|
## Install
|
|
15
15
|
|
|
@@ -41,10 +41,14 @@ All configuration is via environment variables. Set at least one service pair:
|
|
|
41
41
|
| `LIDARR_API_KEY` | Lidarr API key |
|
|
42
42
|
| `PROWLARR_URL` | Prowlarr base URL (e.g. `http://localhost:9696`) |
|
|
43
43
|
| `PROWLARR_API_KEY` | Prowlarr API key |
|
|
44
|
+
| `SABNZBD_URL` | SABnzbd base URL (e.g. `http://localhost:8080`) |
|
|
45
|
+
| `SABNZBD_API_KEY` | SABnzbd API key (from `sabnzbd.ini`, field `api_key`) |
|
|
46
|
+
|
|
47
|
+
Tools are only registered for services that are configured.
|
|
44
48
|
|
|
45
49
|
## MCP Client Setup
|
|
46
50
|
|
|
47
|
-
Example Claude Desktop config (npm install):
|
|
51
|
+
Example Claude Desktop / Claude Code config (npm install):
|
|
48
52
|
|
|
49
53
|
```json
|
|
50
54
|
{
|
|
@@ -52,10 +56,14 @@ Example Claude Desktop config (npm install):
|
|
|
52
56
|
"mcp-arr-suite": {
|
|
53
57
|
"command": "mcp-arr-suite",
|
|
54
58
|
"env": {
|
|
59
|
+
"SONARR_URL": "http://localhost:8989",
|
|
60
|
+
"SONARR_API_KEY": "...",
|
|
55
61
|
"RADARR_URL": "http://localhost:7878",
|
|
56
62
|
"RADARR_API_KEY": "...",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
63
|
+
"PROWLARR_URL": "http://localhost:9696",
|
|
64
|
+
"PROWLARR_API_KEY": "...",
|
|
65
|
+
"SABNZBD_URL": "http://localhost:8080",
|
|
66
|
+
"SABNZBD_API_KEY": "..."
|
|
59
67
|
}
|
|
60
68
|
}
|
|
61
69
|
}
|
|
@@ -71,106 +79,77 @@ If running from source, replace `"command": "mcp-arr-suite"` with:
|
|
|
71
79
|
|
|
72
80
|
## Tools
|
|
73
81
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
### Cross-service
|
|
82
|
+
### Cross-service (always available)
|
|
77
83
|
| Tool | Description |
|
|
78
84
|
|---|---|
|
|
79
85
|
| `arr_status` | Connection status and version for all configured services |
|
|
80
|
-
| `arr_search_all` | Search across all configured services simultaneously |
|
|
86
|
+
| `arr_search_all` | Search across all configured media services simultaneously |
|
|
81
87
|
|
|
82
|
-
### Sonarr
|
|
83
|
-
|
|
|
88
|
+
### Sonarr — 54 tools
|
|
89
|
+
| Category | Tools |
|
|
84
90
|
|---|---|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
| `
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
| `
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
|
98
|
-
| `sonarr_get_queue` | Current download queue |
|
|
99
|
-
| `sonarr_remove_from_queue` | Remove queue items, optionally blocklisting |
|
|
100
|
-
| `sonarr_get_calendar` | Upcoming episode air dates |
|
|
101
|
-
| `sonarr_get_history` | Download history, optionally filtered by series |
|
|
102
|
-
| `sonarr_get_wanted_missing` | Monitored episodes not yet downloaded |
|
|
103
|
-
| `sonarr_get_wanted_cutoff` | Episodes that haven't met the quality cutoff |
|
|
104
|
-
| `sonarr_get_blocklist` | Blocked/failed releases |
|
|
105
|
-
| `sonarr_delete_from_blocklist` | Remove a blocklist entry |
|
|
106
|
-
| `sonarr_get_disk_space` | Disk space for all root folders |
|
|
107
|
-
| `sonarr_get_quality_profiles` | Quality profiles |
|
|
108
|
-
| `sonarr_get_health` | Health check warnings |
|
|
109
|
-
| `sonarr_get_root_folders` | Root folders and free space |
|
|
110
|
-
| `sonarr_get_download_clients` | Download client configuration |
|
|
111
|
-
| `sonarr_get_naming` | File and folder naming configuration |
|
|
112
|
-
| `sonarr_get_tags` | All tags |
|
|
113
|
-
| `sonarr_review_setup` | Full configuration review in one call |
|
|
114
|
-
|
|
115
|
-
### Radarr (Movies)
|
|
116
|
-
| Tool | Description |
|
|
91
|
+
| Library | `sonarr_get_series`, `sonarr_search`, `sonarr_add_series`, `sonarr_delete_series`, `sonarr_update_series`, `sonarr_bulk_update_series`, `sonarr_bulk_delete_series` |
|
|
92
|
+
| Episodes | `sonarr_get_episodes`, `sonarr_get_episode_files`, `sonarr_delete_episode_file`, `sonarr_delete_episode_files_bulk`, `sonarr_monitor_episodes`, `sonarr_season_pass` |
|
|
93
|
+
| Search & import | `sonarr_search_missing`, `sonarr_search_episode`, `sonarr_search_releases`, `sonarr_grab_release`, `sonarr_get_manual_import`, `sonarr_process_manual_import` |
|
|
94
|
+
| Queue | `sonarr_get_queue`, `sonarr_remove_from_queue`, `sonarr_get_wanted_missing`, `sonarr_get_wanted_cutoff` |
|
|
95
|
+
| History & blocklist | `sonarr_get_history`, `sonarr_get_blocklist`, `sonarr_delete_from_blocklist` |
|
|
96
|
+
| Quality & formats | `sonarr_get_quality_profiles`, `sonarr_get_quality_profile`, `sonarr_update_quality_profile`, `sonarr_update_quality_definition`, `sonarr_list_custom_formats`, `sonarr_get_custom_format`, `sonarr_create_custom_format`, `sonarr_update_custom_format`, `sonarr_delete_custom_format` |
|
|
97
|
+
| Config | `sonarr_get_import_lists`, `sonarr_update_import_list`, `sonarr_get_import_exclusions`, `sonarr_delete_import_exclusion`, `sonarr_get_tags`, `sonarr_create_tag`, `sonarr_delete_tag` |
|
|
98
|
+
| System | `sonarr_get_health`, `sonarr_get_disk_space`, `sonarr_get_root_folders`, `sonarr_get_download_clients`, `sonarr_get_naming`, `sonarr_get_system_tasks`, `sonarr_get_logs`, `sonarr_get_notifications`, `sonarr_get_calendar`, `sonarr_get_command_status` |
|
|
99
|
+
| Commands | `sonarr_refresh_series`, `sonarr_trigger_backup`, `sonarr_trigger_rss_sync`, `sonarr_trigger_refresh_monitored_downloads`, `sonarr_trigger_cutoff_unmet_search`, `sonarr_trigger_rescan_series`, `sonarr_trigger_rename_series`, `sonarr_trigger_downloaded_scan` |
|
|
100
|
+
| Overview | `sonarr_review_setup` |
|
|
101
|
+
|
|
102
|
+
### Radarr — 50 tools
|
|
103
|
+
| Category | Tools |
|
|
117
104
|
|---|---|
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
| `
|
|
121
|
-
|
|
|
122
|
-
|
|
|
123
|
-
| `
|
|
124
|
-
|
|
|
125
|
-
| `
|
|
126
|
-
| `radarr_refresh_movie`
|
|
127
|
-
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
|
131
|
-
| `radarr_get_wanted_missing` | Monitored movies not yet downloaded |
|
|
132
|
-
| `radarr_get_wanted_cutoff` | Movies that haven't met the quality cutoff |
|
|
133
|
-
| `radarr_get_blocklist` | Blocked/failed releases |
|
|
134
|
-
| `radarr_delete_from_blocklist` | Remove a blocklist entry |
|
|
135
|
-
| `radarr_get_disk_space` | Disk space for all root folders |
|
|
136
|
-
| `radarr_get_quality_profiles` | Quality profiles |
|
|
137
|
-
| `radarr_get_health` | Health check warnings |
|
|
138
|
-
| `radarr_get_root_folders` | Root folders and free space |
|
|
139
|
-
| `radarr_get_download_clients` | Download client configuration |
|
|
140
|
-
| `radarr_get_naming` | File and folder naming configuration |
|
|
141
|
-
| `radarr_get_tags` | All tags |
|
|
142
|
-
| `radarr_review_setup` | Full configuration review in one call |
|
|
143
|
-
|
|
144
|
-
### Lidarr (Music)
|
|
145
|
-
| Tool | Description |
|
|
105
|
+
| Library | `radarr_get_movies`, `radarr_search`, `radarr_add_movie`, `radarr_delete_movie`, `radarr_update_movie`, `radarr_bulk_update_movies`, `radarr_bulk_delete_movies` |
|
|
106
|
+
| Files | `radarr_get_movie_files`, `radarr_delete_movie_file` |
|
|
107
|
+
| Search & import | `radarr_search_movie`, `radarr_search_releases`, `radarr_grab_release`, `radarr_get_manual_import`, `radarr_process_manual_import` |
|
|
108
|
+
| Queue | `radarr_get_queue`, `radarr_remove_from_queue`, `radarr_get_wanted_missing`, `radarr_get_wanted_cutoff` |
|
|
109
|
+
| History & blocklist | `radarr_get_history`, `radarr_get_blocklist`, `radarr_delete_from_blocklist` |
|
|
110
|
+
| Quality & formats | `radarr_get_quality_profiles`, `radarr_get_quality_profile`, `radarr_update_quality_profile`, `radarr_update_quality_definition`, `radarr_list_custom_formats`, `radarr_get_custom_format`, `radarr_create_custom_format`, `radarr_update_custom_format`, `radarr_delete_custom_format` |
|
|
111
|
+
| Config | `radarr_get_import_lists`, `radarr_update_import_list`, `radarr_get_import_exclusions`, `radarr_delete_import_exclusion`, `radarr_get_tags`, `radarr_create_tag`, `radarr_delete_tag` |
|
|
112
|
+
| System | `radarr_get_health`, `radarr_get_disk_space`, `radarr_get_root_folders`, `radarr_get_download_clients`, `radarr_get_naming`, `radarr_get_system_tasks`, `radarr_get_logs`, `radarr_get_notifications`, `radarr_get_calendar`, `radarr_get_command_status` |
|
|
113
|
+
| Commands | `radarr_refresh_movie`, `radarr_trigger_backup`, `radarr_trigger_rss_sync`, `radarr_trigger_refresh_monitored_downloads`, `radarr_trigger_cutoff_unmet_search`, `radarr_trigger_rescan_movies`, `radarr_trigger_rename_movies`, `radarr_trigger_missing_search`, `radarr_trigger_downloaded_scan` |
|
|
114
|
+
| Overview | `radarr_review_setup` |
|
|
115
|
+
|
|
116
|
+
### Lidarr — 49 tools
|
|
117
|
+
| Category | Tools |
|
|
146
118
|
|---|---|
|
|
147
|
-
|
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
| `
|
|
154
|
-
| `
|
|
155
|
-
| `
|
|
156
|
-
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
|
160
|
-
| `lidarr_get_naming` | File and folder naming configuration |
|
|
161
|
-
| `lidarr_get_tags` | All tags |
|
|
162
|
-
| `lidarr_review_setup` | Full configuration review in one call |
|
|
163
|
-
|
|
164
|
-
### Prowlarr (Indexers)
|
|
165
|
-
| Tool | Description |
|
|
119
|
+
| Library | `lidarr_get_artists`, `lidarr_search`, `lidarr_add_artist`, `lidarr_delete_artist`, `lidarr_update_artist` |
|
|
120
|
+
| Albums & files | `lidarr_get_albums`, `lidarr_get_album_by_id`, `lidarr_monitor_albums`, `lidarr_get_track_files`, `lidarr_delete_track_file` |
|
|
121
|
+
| Search | `lidarr_search_album`, `lidarr_search_missing` |
|
|
122
|
+
| Queue | `lidarr_get_queue`, `lidarr_remove_from_queue`, `lidarr_get_wanted_missing`, `lidarr_get_wanted_cutoff` |
|
|
123
|
+
| History & blocklist | `lidarr_get_history`, `lidarr_get_blocklist`, `lidarr_delete_from_blocklist` |
|
|
124
|
+
| Quality & formats | `lidarr_get_quality_profiles`, `lidarr_get_quality_profile`, `lidarr_update_quality_profile`, `lidarr_update_quality_definition`, `lidarr_list_custom_formats`, `lidarr_get_custom_format`, `lidarr_create_custom_format`, `lidarr_update_custom_format`, `lidarr_delete_custom_format` |
|
|
125
|
+
| Config | `lidarr_get_metadata_profiles`, `lidarr_get_import_lists`, `lidarr_update_import_list`, `lidarr_get_import_exclusions`, `lidarr_delete_import_exclusion`, `lidarr_get_tags`, `lidarr_create_tag`, `lidarr_delete_tag` |
|
|
126
|
+
| System | `lidarr_get_health`, `lidarr_get_disk_space`, `lidarr_get_root_folders`, `lidarr_get_download_clients`, `lidarr_get_naming`, `lidarr_get_system_tasks`, `lidarr_get_logs`, `lidarr_get_notifications`, `lidarr_get_calendar`, `lidarr_get_command_status` |
|
|
127
|
+
| Commands | `lidarr_refresh_artist`, `lidarr_trigger_backup`, `lidarr_trigger_rss_sync`, `lidarr_trigger_refresh_monitored_downloads`, `lidarr_trigger_cutoff_unmet_search`, `lidarr_trigger_rescan_artists`, `lidarr_trigger_rename_artists`, `lidarr_trigger_refresh_all_artists`, `lidarr_trigger_downloaded_scan` |
|
|
128
|
+
| Overview | `lidarr_review_setup` |
|
|
129
|
+
|
|
130
|
+
### Prowlarr — 24 tools
|
|
131
|
+
| Category | Tools |
|
|
166
132
|
|---|---|
|
|
167
|
-
| `prowlarr_get_indexers`
|
|
168
|
-
|
|
|
169
|
-
|
|
|
170
|
-
| `
|
|
171
|
-
| `prowlarr_get_health`
|
|
172
|
-
|
|
173
|
-
|
|
133
|
+
| Indexers | `prowlarr_get_indexers`, `prowlarr_get_indexer`, `prowlarr_update_indexer`, `prowlarr_test_indexer`, `prowlarr_test_indexers`, `prowlarr_search` |
|
|
134
|
+
| Applications | `prowlarr_get_apps`, `prowlarr_update_app` |
|
|
135
|
+
| Stats & history | `prowlarr_get_stats`, `prowlarr_get_history` |
|
|
136
|
+
| Config | `prowlarr_get_tags`, `prowlarr_create_tag`, `prowlarr_delete_tag`, `prowlarr_get_download_clients`, `prowlarr_get_notifications`, `prowlarr_test_notification` |
|
|
137
|
+
| System | `prowlarr_get_status`, `prowlarr_get_health`, `prowlarr_get_logs`, `prowlarr_get_system_tasks`, `prowlarr_get_command_status` |
|
|
138
|
+
| Commands | `prowlarr_trigger_backup`, `prowlarr_trigger_rss_sync`, `prowlarr_sync_apps` |
|
|
139
|
+
|
|
140
|
+
### SABnzbd — 29 tools
|
|
141
|
+
| Category | Tools |
|
|
142
|
+
|---|---|
|
|
143
|
+
| Queue | `sabnzbd_get_queue`, `sabnzbd_pause`, `sabnzbd_resume`, `sabnzbd_set_priority`, `sabnzbd_set_speed_limit`, `sabnzbd_change_cat`, `sabnzbd_change_opts` |
|
|
144
|
+
| History | `sabnzbd_get_history`, `sabnzbd_retry`, `sabnzbd_retry_all`, `sabnzbd_mark_completed`, `sabnzbd_purge_failed` |
|
|
145
|
+
| Delete | `sabnzbd_delete`, `sabnzbd_delete_orphans` |
|
|
146
|
+
| Post-processing | `sabnzbd_pause_pp`, `sabnzbd_resume_pp`, `sabnzbd_add_orphans` |
|
|
147
|
+
| Add NZBs | `sabnzbd_add_url` |
|
|
148
|
+
| Config | `sabnzbd_get_cats`, `sabnzbd_get_scripts`, `sabnzbd_get_paths` |
|
|
149
|
+
| System | `sabnzbd_get_status`, `sabnzbd_get_warnings`, `sabnzbd_unblock_server`, `sabnzbd_server_stats`, `sabnzbd_version` |
|
|
150
|
+
| Triggers | `sabnzbd_rss_now`, `sabnzbd_watched_now`, `sabnzbd_get_files` |
|
|
151
|
+
|
|
152
|
+
### TRaSH Guides — 7 tools (always available)
|
|
174
153
|
| Tool | Description |
|
|
175
154
|
|---|---|
|
|
176
155
|
| `trash_list_profiles` | List recommended quality profiles from TRaSH Guides |
|
|
@@ -184,11 +163,13 @@ Tools are only registered for configured services.
|
|
|
184
163
|
## Testing
|
|
185
164
|
|
|
186
165
|
```bash
|
|
187
|
-
# Unit tests (
|
|
166
|
+
# Unit tests (MSW mocks, no services required)
|
|
188
167
|
npm test
|
|
189
168
|
|
|
190
169
|
# Live smoke tests against real services
|
|
191
|
-
|
|
170
|
+
SONARR_URL=http://localhost:8989 SONARR_API_KEY=... \
|
|
171
|
+
RADARR_URL=http://localhost:7878 RADARR_API_KEY=... \
|
|
172
|
+
npm run test:live
|
|
192
173
|
```
|
|
193
174
|
|
|
194
175
|
Additional live test variables:
|
|
@@ -197,9 +178,13 @@ Additional live test variables:
|
|
|
197
178
|
|---|---|
|
|
198
179
|
| `MCP_ARR_LIVE_SEARCH_TERM` | Override default search term (default: `dune`) |
|
|
199
180
|
| `MCP_ARR_ENABLE_TRASH=1` | Include TRaSH Guides smoke tests |
|
|
200
|
-
| `MCP_ARR_ENABLE_COMMAND_SMOKE=1` | Include
|
|
181
|
+
| `MCP_ARR_ENABLE_COMMAND_SMOKE=1` | Include command tests (refresh, scan, trigger, etc.) |
|
|
201
182
|
| `RADARR_TEST_MOVIE_ID` | Movie ID for command smoke tests |
|
|
183
|
+
| `RADARR_TEST_DOWNLOADS_PATH` | Downloads path for `radarr_trigger_downloaded_scan` (default: `/downloads/complete`) |
|
|
202
184
|
| `SONARR_TEST_SERIES_ID` | Series ID for command smoke tests |
|
|
185
|
+
| `SONARR_TEST_EPISODE_ID` | Episode ID for release search tests |
|
|
186
|
+
| `SONARR_TEST_DOWNLOADS_PATH` | Downloads path for `sonarr_trigger_downloaded_scan` (default: `/downloads/complete`) |
|
|
187
|
+
| `SONARR_TEST_IMPORT_FOLDER` | Folder for manual import tests (default: `/tmp`) |
|
|
203
188
|
| `LIDARR_TEST_ARTIST_ID` | Artist ID for command smoke tests |
|
|
204
189
|
|
|
205
190
|
## API Documentation
|
|
@@ -208,6 +193,7 @@ Additional live test variables:
|
|
|
208
193
|
- [Radarr API](https://wiki.servarr.com/radarr/api)
|
|
209
194
|
- [Lidarr API](https://wiki.servarr.com/lidarr/api)
|
|
210
195
|
- [Prowlarr API](https://wiki.servarr.com/prowlarr/api)
|
|
196
|
+
- [SABnzbd API](https://sabnzbd.org/wiki/advanced/api)
|
|
211
197
|
- [TRaSH Guides](https://trash-guides.info)
|
|
212
198
|
|
|
213
199
|
## License
|
|
@@ -345,6 +345,65 @@ export interface MetadataProfile {
|
|
|
345
345
|
allowedLanguages?: string;
|
|
346
346
|
minPages?: number;
|
|
347
347
|
}
|
|
348
|
+
export interface TrackFile {
|
|
349
|
+
id: number;
|
|
350
|
+
artistId: number;
|
|
351
|
+
albumId: number;
|
|
352
|
+
path: string;
|
|
353
|
+
size: number;
|
|
354
|
+
dateAdded: string;
|
|
355
|
+
quality?: {
|
|
356
|
+
quality?: {
|
|
357
|
+
name: string;
|
|
358
|
+
};
|
|
359
|
+
};
|
|
360
|
+
qualityCutoffNotMet?: boolean;
|
|
361
|
+
mediaInfo?: {
|
|
362
|
+
audioFormat?: string;
|
|
363
|
+
audioBitrate?: number;
|
|
364
|
+
audioChannels?: number;
|
|
365
|
+
audioBits?: number;
|
|
366
|
+
audioSampleRate?: number;
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
export interface LidarrHistoryRecord {
|
|
370
|
+
id: number;
|
|
371
|
+
artistId: number;
|
|
372
|
+
albumId: number;
|
|
373
|
+
sourceTitle: string;
|
|
374
|
+
quality: {
|
|
375
|
+
quality: {
|
|
376
|
+
id: number;
|
|
377
|
+
name: string;
|
|
378
|
+
};
|
|
379
|
+
};
|
|
380
|
+
date: string;
|
|
381
|
+
eventType: string;
|
|
382
|
+
data: Record<string, string>;
|
|
383
|
+
}
|
|
384
|
+
export interface LidarrBlocklistRecord {
|
|
385
|
+
id: number;
|
|
386
|
+
artistId: number;
|
|
387
|
+
sourceTitle: string;
|
|
388
|
+
quality: {
|
|
389
|
+
quality: {
|
|
390
|
+
id: number;
|
|
391
|
+
name: string;
|
|
392
|
+
};
|
|
393
|
+
};
|
|
394
|
+
date: string;
|
|
395
|
+
protocol: string;
|
|
396
|
+
indexer: string;
|
|
397
|
+
message: string;
|
|
398
|
+
}
|
|
399
|
+
export interface LidarrWantedRecord {
|
|
400
|
+
page: number;
|
|
401
|
+
pageSize: number;
|
|
402
|
+
sortKey: string;
|
|
403
|
+
sortDirection: string;
|
|
404
|
+
totalRecords: number;
|
|
405
|
+
records: Album[];
|
|
406
|
+
}
|
|
348
407
|
export interface DiskSpace {
|
|
349
408
|
path: string;
|
|
350
409
|
label: string;
|
|
@@ -552,6 +611,40 @@ export interface ImportExclusion {
|
|
|
552
611
|
tvdbId?: number;
|
|
553
612
|
tmdbId?: number;
|
|
554
613
|
}
|
|
614
|
+
export interface ManualImportItem {
|
|
615
|
+
id: number;
|
|
616
|
+
path: string;
|
|
617
|
+
relativePath: string;
|
|
618
|
+
folderName: string;
|
|
619
|
+
name: string;
|
|
620
|
+
size: number;
|
|
621
|
+
movie?: {
|
|
622
|
+
id: number;
|
|
623
|
+
title: string;
|
|
624
|
+
year: number;
|
|
625
|
+
};
|
|
626
|
+
series?: {
|
|
627
|
+
id: number;
|
|
628
|
+
title: string;
|
|
629
|
+
};
|
|
630
|
+
seasonNumber?: number;
|
|
631
|
+
episodes?: Array<{
|
|
632
|
+
id: number;
|
|
633
|
+
title: string;
|
|
634
|
+
}>;
|
|
635
|
+
quality: {
|
|
636
|
+
quality: {
|
|
637
|
+
name: string;
|
|
638
|
+
};
|
|
639
|
+
revision: {
|
|
640
|
+
version: number;
|
|
641
|
+
};
|
|
642
|
+
};
|
|
643
|
+
rejections: Array<{
|
|
644
|
+
reason: string;
|
|
645
|
+
type: string;
|
|
646
|
+
}>;
|
|
647
|
+
}
|
|
555
648
|
export interface CustomFormat {
|
|
556
649
|
id: number;
|
|
557
650
|
name: string;
|
|
@@ -569,6 +662,72 @@ export interface CustomFormat {
|
|
|
569
662
|
}>;
|
|
570
663
|
}>;
|
|
571
664
|
}
|
|
665
|
+
export interface ImportList {
|
|
666
|
+
id: number;
|
|
667
|
+
name: string;
|
|
668
|
+
implementation: string;
|
|
669
|
+
implementationName: string;
|
|
670
|
+
enabled: boolean;
|
|
671
|
+
enableAuto: boolean;
|
|
672
|
+
shouldMonitor: boolean;
|
|
673
|
+
qualityProfileId: number;
|
|
674
|
+
tags: number[];
|
|
675
|
+
fields: Array<{
|
|
676
|
+
name: string;
|
|
677
|
+
value: unknown;
|
|
678
|
+
}>;
|
|
679
|
+
}
|
|
680
|
+
export interface Notification {
|
|
681
|
+
id: number;
|
|
682
|
+
name: string;
|
|
683
|
+
implementation: string;
|
|
684
|
+
implementationName: string;
|
|
685
|
+
onGrab: boolean;
|
|
686
|
+
onDownload: boolean;
|
|
687
|
+
onUpgrade: boolean;
|
|
688
|
+
onRename: boolean;
|
|
689
|
+
onHealthIssue: boolean;
|
|
690
|
+
onApplicationUpdate: boolean;
|
|
691
|
+
supportsOnGrab: boolean;
|
|
692
|
+
supportsOnDownload: boolean;
|
|
693
|
+
supportsOnUpgrade: boolean;
|
|
694
|
+
supportsOnRename: boolean;
|
|
695
|
+
supportsOnHealthIssue: boolean;
|
|
696
|
+
supportsOnApplicationUpdate: boolean;
|
|
697
|
+
tags: number[];
|
|
698
|
+
fields: Array<{
|
|
699
|
+
name: string;
|
|
700
|
+
value: unknown;
|
|
701
|
+
}>;
|
|
702
|
+
}
|
|
703
|
+
export interface SystemTask {
|
|
704
|
+
id: number;
|
|
705
|
+
name: string;
|
|
706
|
+
taskName: string;
|
|
707
|
+
interval: number;
|
|
708
|
+
lastExecution: string;
|
|
709
|
+
lastStartTime: string;
|
|
710
|
+
nextExecution: string;
|
|
711
|
+
lastDuration: string;
|
|
712
|
+
isRunning: boolean;
|
|
713
|
+
}
|
|
714
|
+
export interface LogEntry {
|
|
715
|
+
id: number;
|
|
716
|
+
time: string;
|
|
717
|
+
level: string;
|
|
718
|
+
logger: string;
|
|
719
|
+
message: string;
|
|
720
|
+
exception?: string;
|
|
721
|
+
exceptionType?: string;
|
|
722
|
+
}
|
|
723
|
+
export interface LogPage {
|
|
724
|
+
page: number;
|
|
725
|
+
pageSize: number;
|
|
726
|
+
sortKey: string;
|
|
727
|
+
sortDirection: string;
|
|
728
|
+
totalRecords: number;
|
|
729
|
+
records: LogEntry[];
|
|
730
|
+
}
|
|
572
731
|
export interface ProwlarrApplication {
|
|
573
732
|
id: number;
|
|
574
733
|
name: string;
|
|
@@ -648,6 +807,7 @@ export declare class ArrClient {
|
|
|
648
807
|
getCalendar(start?: string, end?: string): Promise<unknown[]>;
|
|
649
808
|
getQualityProfiles(): Promise<QualityProfile[]>;
|
|
650
809
|
getQualityDefinitions(): Promise<QualityDefinition[]>;
|
|
810
|
+
updateQualityDefinition(id: number, definition: QualityDefinition): Promise<QualityDefinition>;
|
|
651
811
|
getDownloadClients(): Promise<DownloadClient[]>;
|
|
652
812
|
getNamingConfig(): Promise<NamingConfig>;
|
|
653
813
|
getMediaManagement(): Promise<MediaManagementConfig>;
|
|
@@ -658,11 +818,31 @@ export declare class ArrClient {
|
|
|
658
818
|
getQualityProfile(id: number): Promise<QualityProfile>;
|
|
659
819
|
updateQualityProfile(id: number, profile: QualityProfile): Promise<QualityProfile>;
|
|
660
820
|
getCustomFormats(): Promise<CustomFormat[]>;
|
|
821
|
+
getCustomFormat(id: number): Promise<CustomFormat>;
|
|
822
|
+
createCustomFormat(format: Omit<CustomFormat, 'id'>): Promise<CustomFormat>;
|
|
823
|
+
updateCustomFormat(id: number, format: CustomFormat): Promise<CustomFormat>;
|
|
824
|
+
deleteCustomFormat(id: number): Promise<void>;
|
|
825
|
+
getSystemTasks(): Promise<SystemTask[]>;
|
|
826
|
+
getLogs(page: number, pageSize: number, level?: string): Promise<LogPage>;
|
|
827
|
+
triggerBackup(): Promise<{
|
|
828
|
+
id: number;
|
|
829
|
+
}>;
|
|
830
|
+
getNotifications(): Promise<Notification[]>;
|
|
831
|
+
getImportLists(): Promise<ImportList[]>;
|
|
832
|
+
updateImportList(id: number, importList: ImportList): Promise<ImportList>;
|
|
661
833
|
createTag(label: string): Promise<Tag>;
|
|
662
834
|
deleteTag(id: number): Promise<void>;
|
|
663
835
|
runCommand(name: string, extra?: Record<string, unknown>): Promise<{
|
|
664
836
|
id: number;
|
|
665
837
|
}>;
|
|
838
|
+
getCommandStatus(commandId: number): Promise<{
|
|
839
|
+
id: number;
|
|
840
|
+
name: string;
|
|
841
|
+
status: string;
|
|
842
|
+
message: string;
|
|
843
|
+
started?: string;
|
|
844
|
+
ended?: string;
|
|
845
|
+
}>;
|
|
666
846
|
testConnection(): Promise<boolean>;
|
|
667
847
|
}
|
|
668
848
|
export declare class SonarrClient extends ArrClient {
|
|
@@ -682,11 +862,23 @@ export declare class SonarrClient extends ArrClient {
|
|
|
682
862
|
searchEpisode(episodeIds: number[]): Promise<{
|
|
683
863
|
id: number;
|
|
684
864
|
}>;
|
|
685
|
-
refreshSeries(seriesId
|
|
865
|
+
refreshSeries(seriesId?: number): Promise<{
|
|
686
866
|
id: number;
|
|
687
867
|
}>;
|
|
688
868
|
deleteSeries(seriesId: number, deleteFiles?: boolean, addImportListExclusion?: boolean): Promise<void>;
|
|
689
869
|
updateSeries(seriesId: number, changes: Partial<Series>): Promise<Series>;
|
|
870
|
+
rescanAllSeries(): Promise<{
|
|
871
|
+
id: number;
|
|
872
|
+
}>;
|
|
873
|
+
bulkUpdateSeries(seriesIds: number[], changes: {
|
|
874
|
+
monitored?: boolean;
|
|
875
|
+
qualityProfileId?: number;
|
|
876
|
+
tags?: number[];
|
|
877
|
+
applyTags?: 'add' | 'remove' | 'replace';
|
|
878
|
+
}): Promise<void>;
|
|
879
|
+
bulkDeleteSeries(seriesIds: number[], deleteFiles?: boolean, addImportListExclusion?: boolean): Promise<void>;
|
|
880
|
+
getManualImport(folder: string, filterExistingFiles?: boolean, page?: number, pageSize?: number): Promise<ManualImportItem[]>;
|
|
881
|
+
processManualImport(items: ManualImportItem[]): Promise<void>;
|
|
690
882
|
getDiskSpace(): Promise<DiskSpace[]>;
|
|
691
883
|
getHistory(seriesId?: number, page?: number, pageSize?: number): Promise<{
|
|
692
884
|
records: SeriesHistoryRecord[];
|
|
@@ -698,6 +890,7 @@ export declare class SonarrClient extends ArrClient {
|
|
|
698
890
|
getWantedCutoff(page?: number, pageSize?: number): Promise<SeriesWantedRecord>;
|
|
699
891
|
getEpisodeFiles(seriesId: number): Promise<EpisodeFile[]>;
|
|
700
892
|
deleteEpisodeFile(fileId: number): Promise<void>;
|
|
893
|
+
deleteEpisodeFiles(ids: number[]): Promise<void>;
|
|
701
894
|
getBlocklist(page?: number, pageSize?: number): Promise<{
|
|
702
895
|
records: SeriesBlocklistRecord[];
|
|
703
896
|
totalRecords: number;
|
|
@@ -730,11 +923,23 @@ export declare class RadarrClient extends ArrClient {
|
|
|
730
923
|
searchMovie(movieId: number): Promise<{
|
|
731
924
|
id: number;
|
|
732
925
|
}>;
|
|
733
|
-
refreshMovie(movieId
|
|
926
|
+
refreshMovie(movieId?: number): Promise<{
|
|
734
927
|
id: number;
|
|
735
928
|
}>;
|
|
736
929
|
deleteMovie(movieId: number, deleteFiles?: boolean, addImportExclusion?: boolean): Promise<void>;
|
|
737
930
|
updateMovie(movieId: number, changes: Partial<Movie>): Promise<Movie>;
|
|
931
|
+
rescanAllMovies(): Promise<{
|
|
932
|
+
id: number;
|
|
933
|
+
}>;
|
|
934
|
+
bulkUpdateMovies(movieIds: number[], changes: {
|
|
935
|
+
monitored?: boolean;
|
|
936
|
+
qualityProfileId?: number;
|
|
937
|
+
tags?: number[];
|
|
938
|
+
applyTags?: 'add' | 'remove' | 'replace';
|
|
939
|
+
}): Promise<void>;
|
|
940
|
+
bulkDeleteMovies(movieIds: number[], deleteFiles?: boolean, addImportExclusion?: boolean): Promise<void>;
|
|
941
|
+
getManualImport(folder: string, filterExistingFiles?: boolean, page?: number, pageSize?: number): Promise<ManualImportItem[]>;
|
|
942
|
+
processManualImport(items: ManualImportItem[]): Promise<void>;
|
|
738
943
|
getDiskSpace(): Promise<DiskSpace[]>;
|
|
739
944
|
getHistory(movieId?: number, page?: number, pageSize?: number): Promise<{
|
|
740
945
|
records: HistoryRecord[];
|
|
@@ -777,6 +982,30 @@ export declare class LidarrClient extends ArrClient {
|
|
|
777
982
|
}>;
|
|
778
983
|
getCalendar(start?: string, end?: string): Promise<Album[]>;
|
|
779
984
|
getMetadataProfiles(): Promise<MetadataProfile[]>;
|
|
985
|
+
deleteArtist(artistId: number, deleteFiles?: boolean, addImportListExclusion?: boolean): Promise<void>;
|
|
986
|
+
updateArtist(artistId: number, changes: Partial<Artist>): Promise<Artist>;
|
|
987
|
+
refreshArtist(artistId: number): Promise<{
|
|
988
|
+
id: number;
|
|
989
|
+
}>;
|
|
990
|
+
getTrackFiles(artistId: number): Promise<TrackFile[]>;
|
|
991
|
+
deleteTrackFile(fileId: number): Promise<void>;
|
|
992
|
+
removeFromQueue(queueId: number, blocklist?: boolean, removeFromClient?: boolean): Promise<void>;
|
|
993
|
+
removeFromQueueBulk(ids: number[], blocklist?: boolean, removeFromClient?: boolean): Promise<void>;
|
|
994
|
+
getWantedMissing(page?: number, pageSize?: number): Promise<LidarrWantedRecord>;
|
|
995
|
+
getWantedCutoff(page?: number, pageSize?: number): Promise<LidarrWantedRecord>;
|
|
996
|
+
getHistory(artistId?: number, page?: number, pageSize?: number): Promise<{
|
|
997
|
+
records: LidarrHistoryRecord[];
|
|
998
|
+
totalRecords: number;
|
|
999
|
+
}>;
|
|
1000
|
+
getBlocklist(page?: number, pageSize?: number): Promise<{
|
|
1001
|
+
records: LidarrBlocklistRecord[];
|
|
1002
|
+
totalRecords: number;
|
|
1003
|
+
}>;
|
|
1004
|
+
deleteFromBlocklist(blocklistId: number): Promise<void>;
|
|
1005
|
+
getDiskSpace(): Promise<DiskSpace[]>;
|
|
1006
|
+
monitorAlbums(albumIds: number[], monitored: boolean): Promise<void>;
|
|
1007
|
+
getImportExclusions(): Promise<ImportExclusion[]>;
|
|
1008
|
+
deleteImportExclusion(id: number): Promise<void>;
|
|
780
1009
|
}
|
|
781
1010
|
export declare class ProwlarrClient extends ArrClient {
|
|
782
1011
|
constructor(config: ArrConfig);
|
|
@@ -800,5 +1029,19 @@ export declare class ProwlarrClient extends ArrClient {
|
|
|
800
1029
|
getTags(): Promise<Tag[]>;
|
|
801
1030
|
getDownloadClients(): Promise<DownloadClient[]>;
|
|
802
1031
|
getApplications(): Promise<ProwlarrApplication[]>;
|
|
1032
|
+
getIndexer(id: number): Promise<Indexer & Record<string, unknown>>;
|
|
1033
|
+
testIndexer(indexer: Indexer & Record<string, unknown>): Promise<{
|
|
1034
|
+
id: number;
|
|
1035
|
+
isValid: boolean;
|
|
1036
|
+
validationFailures: Array<{
|
|
1037
|
+
propertyName: string;
|
|
1038
|
+
errorMessage: string;
|
|
1039
|
+
}>;
|
|
1040
|
+
}>;
|
|
1041
|
+
updateIndexer(id: number, patch: Partial<Pick<Indexer, 'enableRss' | 'enableAutomaticSearch' | 'enableInteractiveSearch' | 'priority'>>): Promise<Indexer & Record<string, unknown>>;
|
|
1042
|
+
getApplication(id: number): Promise<ProwlarrApplication>;
|
|
1043
|
+
updateApplication(id: number, patch: {
|
|
1044
|
+
syncLevel: string;
|
|
1045
|
+
}): Promise<ProwlarrApplication>;
|
|
803
1046
|
}
|
|
804
1047
|
//# sourceMappingURL=arr-client.d.ts.map
|