Skip to main content
Glama
mcp-arr-suite

mcp-arr-suite

by ismael9291

mcp-arr-suite

MCP server for the *arr media management suite — Sonarr, Radarr, Lidarr, Prowlarr, and SABnzbd.

Exposes your media services as MCP tools consumable by Claude or any MCP-capable client. 215 tools across 7 modules.

Requirements

  • Node.js >= 18

  • At least one service running and accessible

Related MCP server: Arr-MCP

Install

Via npm (recommended):

npm install -g mcp-arr-suite

From source:

git clone https://github.com/ismael9291/mcp-arr-suite.git
cd mcp-arr-suite
npm install && npm run build

Configuration

All configuration is via environment variables. Set at least one service pair:

Variable

Description

SONARR_URL

Sonarr base URL (e.g. http://localhost:8989)

SONARR_API_KEY

Sonarr API key

RADARR_URL

Radarr base URL (e.g. http://localhost:7878)

RADARR_API_KEY

Radarr API key

LIDARR_URL

Lidarr base URL (e.g. http://localhost:8686)

LIDARR_API_KEY

Lidarr API key

PROWLARR_URL

Prowlarr base URL (e.g. http://localhost:9696)

PROWLARR_API_KEY

Prowlarr API key

SABNZBD_URL

SABnzbd base URL (e.g. http://localhost:8080)

SABNZBD_API_KEY

SABnzbd API key (from sabnzbd.ini, field api_key)

Tools are only registered for services that are configured.

MCP Client Setup

Example Claude Desktop / Claude Code config (npm install):

{
  "mcpServers": {
    "mcp-arr-suite": {
      "command": "mcp-arr-suite",
      "env": {
        "SONARR_URL": "http://localhost:8989",
        "SONARR_API_KEY": "...",
        "RADARR_URL": "http://localhost:7878",
        "RADARR_API_KEY": "...",
        "PROWLARR_URL": "http://localhost:9696",
        "PROWLARR_API_KEY": "...",
        "SABNZBD_URL": "http://localhost:8080",
        "SABNZBD_API_KEY": "..."
      }
    }
  }
}

If running from source, replace "command": "mcp-arr-suite" with:

"command": "node",
"args": ["/path/to/mcp-arr-suite/dist/index.js"],

Tools

Cross-service (always available)

Tool

Description

arr_status

Connection status and version for all configured services

arr_search_all

Search across all configured media services simultaneously

Sonarr — 54 tools

Category

Tools

Library

sonarr_get_series, sonarr_search, sonarr_add_series, sonarr_delete_series, sonarr_update_series, sonarr_bulk_update_series, sonarr_bulk_delete_series

Episodes

sonarr_get_episodes, sonarr_get_episode_files, sonarr_delete_episode_file, sonarr_delete_episode_files_bulk, sonarr_monitor_episodes, sonarr_season_pass

Search & import

sonarr_search_missing, sonarr_search_episode, sonarr_search_releases, sonarr_grab_release, sonarr_get_manual_import, sonarr_process_manual_import

Queue

sonarr_get_queue, sonarr_remove_from_queue, sonarr_get_wanted_missing, sonarr_get_wanted_cutoff

History & blocklist

sonarr_get_history, sonarr_get_blocklist, sonarr_delete_from_blocklist

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

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

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

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

Overview

sonarr_review_setup

Radarr — 50 tools

Category

Tools

Library

radarr_get_movies, radarr_search, radarr_add_movie, radarr_delete_movie, radarr_update_movie, radarr_bulk_update_movies, radarr_bulk_delete_movies

Files

radarr_get_movie_files, radarr_delete_movie_file

Search & import

radarr_search_movie, radarr_search_releases, radarr_grab_release, radarr_get_manual_import, radarr_process_manual_import

Queue

radarr_get_queue, radarr_remove_from_queue, radarr_get_wanted_missing, radarr_get_wanted_cutoff

History & blocklist

radarr_get_history, radarr_get_blocklist, radarr_delete_from_blocklist

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

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

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

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

Overview

radarr_review_setup

Lidarr — 49 tools

Category

Tools

Library

lidarr_get_artists, lidarr_search, lidarr_add_artist, lidarr_delete_artist, lidarr_update_artist

Albums & files

lidarr_get_albums, lidarr_get_album_by_id, lidarr_monitor_albums, lidarr_get_track_files, lidarr_delete_track_file

Search

lidarr_search_album, lidarr_search_missing

Queue

lidarr_get_queue, lidarr_remove_from_queue, lidarr_get_wanted_missing, lidarr_get_wanted_cutoff

History & blocklist

lidarr_get_history, lidarr_get_blocklist, lidarr_delete_from_blocklist

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

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

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

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

Overview

lidarr_review_setup

Prowlarr — 24 tools

Category

Tools

Indexers

prowlarr_get_indexers, prowlarr_get_indexer, prowlarr_update_indexer, prowlarr_test_indexer, prowlarr_test_indexers, prowlarr_search

Applications

prowlarr_get_apps, prowlarr_update_app

Stats & history

prowlarr_get_stats, prowlarr_get_history

Config

prowlarr_get_tags, prowlarr_create_tag, prowlarr_delete_tag, prowlarr_get_download_clients, prowlarr_get_notifications, prowlarr_test_notification

System

prowlarr_get_status, prowlarr_get_health, prowlarr_get_logs, prowlarr_get_system_tasks, prowlarr_get_command_status

Commands

prowlarr_trigger_backup, prowlarr_trigger_rss_sync, prowlarr_sync_apps

SABnzbd — 29 tools

Category

Tools

Queue

sabnzbd_get_queue, sabnzbd_pause, sabnzbd_resume, sabnzbd_set_priority, sabnzbd_set_speed_limit, sabnzbd_change_cat, sabnzbd_change_opts

History

sabnzbd_get_history, sabnzbd_retry, sabnzbd_retry_all, sabnzbd_mark_completed, sabnzbd_purge_failed

Delete

sabnzbd_delete, sabnzbd_delete_orphans

Post-processing

sabnzbd_pause_pp, sabnzbd_resume_pp, sabnzbd_add_orphans

Add NZBs

sabnzbd_add_url

Config

sabnzbd_get_cats, sabnzbd_get_scripts, sabnzbd_get_paths

System

sabnzbd_get_status, sabnzbd_get_warnings, sabnzbd_unblock_server, sabnzbd_server_stats, sabnzbd_version

Triggers

sabnzbd_rss_now, sabnzbd_watched_now, sabnzbd_get_files

TRaSH Guides — 7 tools (always available)

Tool

Description

trash_list_profiles

List recommended quality profiles from TRaSH Guides

trash_get_profile

Full profile details including custom format scores

trash_list_custom_formats

List custom formats, optionally filtered by category

trash_get_naming

Recommended naming conventions for your media server

trash_get_quality_sizes

Recommended min/max/preferred file sizes per quality

trash_compare_profile

Compare your quality profile against TRaSH recommendations

trash_compare_naming

Compare your naming config against TRaSH recommendations

Testing

# Unit tests (MSW mocks, no services required)
npm test

# Live smoke tests against real services
SONARR_URL=http://localhost:8989 SONARR_API_KEY=... \
RADARR_URL=http://localhost:7878 RADARR_API_KEY=... \
npm run test:live

Additional live test variables:

Variable

Description

MCP_ARR_LIVE_SEARCH_TERM

Override default search term (default: dune)

MCP_ARR_ENABLE_TRASH=1

Include TRaSH Guides smoke tests

MCP_ARR_ENABLE_COMMAND_SMOKE=1

Include command tests (refresh, scan, trigger, etc.)

RADARR_TEST_MOVIE_ID

Movie ID for command smoke tests

RADARR_TEST_DOWNLOADS_PATH

Downloads path for radarr_trigger_downloaded_scan (default: /downloads/complete)

SONARR_TEST_SERIES_ID

Series ID for command smoke tests

SONARR_TEST_EPISODE_ID

Episode ID for release search tests

SONARR_TEST_DOWNLOADS_PATH

Downloads path for sonarr_trigger_downloaded_scan (default: /downloads/complete)

SONARR_TEST_IMPORT_FOLDER

Folder for manual import tests (default: /tmp)

LIDARR_TEST_ARTIST_ID

Artist ID for command smoke tests

API Documentation

License

MIT

Available Tools

70 tools
arr_search_allA

Search across all configured *arr services simultaneously. Returns top 5 results per service. Useful for finding whether something is already tracked in any service. Use the "type" filter to narrow to a specific media type.

Inputs: term (required), type.

arr_statusA

Get connection status and version info for all configured *arr services. Use this to verify which services are running and reachable.

Inputs: no named parameters.

sonarr_add_seriesA

Add a TV series to Sonarr. Use sonarr_search first to get the tvdbId, sonarr_get_root_folders for rootFolderPath, sonarr_get_quality_profiles for qualityProfileId, and sonarr_get_tags for tag IDs.

Inputs: title (required), tvdbId (required), rootFolderPath (required), qualityProfileId (required), +3 more.

sonarr_bulk_delete_seriesA

Bulk delete multiple series from Sonarr. WARNING: Setting deleteFiles to true is destructive and irreversible — files will be permanently removed from disk.

Inputs: seriesIds (required), deleteFiles, addImportListExclusion.

sonarr_bulk_update_seriesA

Bulk update multiple Sonarr series at once — change monitored status, quality profile, or tags in a single API call. Use this instead of calling sonarr_update_series in a loop.

Inputs: seriesIds (required), tags, applyTags, monitored, +1 more.

sonarr_create_custom_formatB

Create a new custom format in Sonarr. Pass a full specifications array to define matching rules.

Inputs: name (required), specifications (required), includeWhenRenaming.

sonarr_create_tagB

Create a new tag in Sonarr.

Inputs: label (required).

sonarr_delete_custom_formatB

Delete a custom format from Sonarr by ID.

Inputs: formatId (required).

sonarr_delete_episode_fileA

Delete a specific episode file from disk (the episode remains in Sonarr as unmonitored).

Inputs: fileId (required).

sonarr_delete_episode_files_bulkA

Delete multiple episode files at once. Pass explicit fileIds, or pass seriesId (+ optional seasonNumber) to delete all files for a series or season. Use instead of calling sonarr_delete_episode_file in a loop.

Inputs: fileIds, seriesId, seasonNumber.

sonarr_delete_from_blocklistA

Remove an entry from the Sonarr blocklist so that release can be grabbed again.

Inputs: blocklistId (required).

sonarr_delete_import_exclusionA

Remove a series from the Sonarr import exclusion list, allowing it to be re-added.

Inputs: exclusionId (required).

sonarr_delete_seriesA

Remove a series from Sonarr. Optionally delete files from disk and/or add to import exclusions.

Inputs: seriesId (required), deleteFiles, addImportListExclusion.

sonarr_delete_tagA

Delete a tag from Sonarr by ID.

Inputs: tagId (required).

sonarr_get_blocklistA

Get the Sonarr blocklist — releases that were blocked/failed and won't be re-grabbed.

Inputs: page, pageSize.

sonarr_get_calendarB

Get upcoming episode air dates from Sonarr.

Inputs: days.

sonarr_get_command_statusA

Poll the status of an async command previously triggered (e.g. RescanSeries, RefreshSeries). Pass the commandId returned by the trigger tool.

Inputs: commandId (required).

sonarr_get_custom_formatA

Get a single custom format by ID, including full specification details.

Inputs: formatId (required).

sonarr_get_disk_spaceA

Get disk space usage for all Sonarr root folders and mounts.

Inputs: no named parameters.

sonarr_get_download_clientsB

Get download client configurations from Sonarr (TV).

Inputs: no named parameters.

sonarr_get_episode_filesA

Get file details for episodes in a series — quality, size, codecs, languages. Use seasonNumber to filter to a single season and avoid large responses.

Inputs: seriesId (required), seasonNumber.

sonarr_get_episodesA

Get episodes for a series. Shows which episodes are available and which are missing. Filter by season to reduce response size.

Inputs: seriesId (required), seasonNumber.

sonarr_get_healthA

Get health check warnings from Sonarr (TV). Shows any problems the application has detected.

Inputs: no named parameters.

sonarr_get_historyA

Get download history. Filter to a specific series with seriesId, or leave blank for recent activity across all series.

Inputs: page, pageSize, seriesId.

sonarr_get_import_exclusionsA

List series that are excluded from import (blocked from being re-added after deletion).

Inputs: no named parameters.

sonarr_get_import_listsA

List all configured import list sources in Sonarr (Trakt, IMDb, Plex Watchlist, etc.).

Inputs: no named parameters.

sonarr_get_logsB

Fetch recent application log entries from Sonarr.

Inputs: page, level, pageSize.

sonarr_get_manual_importA

Scan a folder and preview how Sonarr would match each file for manual import. Shows quality, matched series/episode, and any rejection reasons. Use sonarr_process_manual_import to confirm.

Inputs: folder (required), page, pageSize, filterExistingFiles.

sonarr_get_namingA

Get file and folder naming configuration from Sonarr (TV).

Inputs: no named parameters.

sonarr_get_notificationsA

List all configured notification providers in Sonarr (webhooks, email, Slack, etc.).

Inputs: no named parameters.

sonarr_get_quality_profileA

Get a single Sonarr quality profile by ID with full details including quality items and custom format scores. Required before calling sonarr_update_quality_profile.

Inputs: profileId (required).

sonarr_get_quality_profilesA

Get quality profiles from Sonarr (TV). Shows allowed qualities, upgrade settings, and custom format scores.

Inputs: no named parameters.

sonarr_get_queueA

Get current Sonarr download queue. Shows active downloads and their progress.

Inputs: limit.

sonarr_get_root_foldersA

Get root folders and free space from Sonarr (TV). Use this to find valid rootFolderPath values when adding media.

Inputs: no named parameters.

sonarr_get_seriesA

Get TV series from the Sonarr library. Returns summary fields only — use search to filter before paginating. Default limit=25 to keep context usage low.

Inputs: limit, offset, search.

sonarr_get_system_tasksA

List all scheduled background tasks in Sonarr with their last/next run times and current status.

Inputs: no named parameters.

sonarr_get_tagsA

Get all tags defined in Sonarr (TV). Use tag IDs when adding media.

Inputs: no named parameters.

sonarr_get_wanted_cutoffA

Get paginated list of episodes that have a file but have not met the quality cutoff (upgrade candidates).

Inputs: page, pageSize.

sonarr_get_wanted_missingA

Get paginated list of monitored episodes that are missing (not yet downloaded).

Inputs: page, pageSize.

sonarr_grab_releaseA

Grab a specific release and send it to the download client. Use sonarr_search_releases first to find the guid and indexerId.

Inputs: guid (required), indexerId (required).

sonarr_list_custom_formatsA

List all custom formats defined in Sonarr with their IDs and specifications.

Inputs: no named parameters.

sonarr_monitor_episodesA

Bulk set monitored/unmonitored status for specific episodes.

Inputs: monitored (required), episodeIds (required).

sonarr_process_manual_importA

Confirm and import files identified by sonarr_get_manual_import. Pass the items array from the preview response (optionally filtered to only importable items with no rejections).

Inputs: items (required).

sonarr_refresh_seriesB

Trigger a metadata refresh for a specific series in Sonarr. Omit seriesId to refresh metadata for all series.

Inputs: seriesId.

sonarr_remove_from_queueB

Remove one or more items from the Sonarr download queue. Optionally blocklist them to prevent re-grabbing.

Inputs: ids (required), blocklist, removeFromClient.

sonarr_review_setupA

Comprehensive configuration review for Sonarr (TV). Returns quality profiles, download clients, naming, storage, indexers, and health in one call. Use this to analyse the setup and suggest improvements.

Inputs: no named parameters.

sonarr_search_episodeC

Trigger a download search for specific episode(s).

Inputs: episodeIds (required).

sonarr_search_missingA

Trigger a search for all missing episodes in a series.

Inputs: seriesId (required).

sonarr_search_releasesA

Search indexers for available releases for a specific episode. Returns release candidates with quality, size, seeders, and rejection reasons. Use the guid and indexerId from results to grab a release with sonarr_grab_release.

Inputs: episodeId (required).

sonarr_season_passB

Bulk set monitored status for entire seasons across one or more series.

Inputs: seasons (required), seriesId (required).

sonarr_trigger_backupA

Create an on-demand backup of Sonarr configuration and database.

Inputs: no named parameters.

sonarr_trigger_downloaded_scanA

Force a scan of a completed downloads path to import any files that were not auto-imported. A path is required — pass the absolute path to the completed downloads folder (e.g. /downloads/complete).

Inputs: path (required).

sonarr_trigger_refresh_monitored_downloadsA

Trigger Sonarr to refresh its view of monitored downloads — useful for checking stalled or stuck downloads.

Inputs: no named parameters.

sonarr_trigger_rename_seriesA

Rename episode files on disk to match current Sonarr naming settings. Pass specific seriesIds or omit to rename all.

Inputs: seriesIds.

sonarr_trigger_rescan_seriesA

Rescan disk for all series to link existing files Sonarr does not know about.

Inputs: no named parameters.

sonarr_trigger_rss_syncA

Trigger an immediate RSS feed sync across all configured indexers in Sonarr.

Inputs: no named parameters.

sonarr_update_custom_formatA

Update an existing custom format. Fetches the current format first then applies your changes. Only provide fields you want to change.

Inputs: formatId (required), name, specifications, includeWhenRenaming.

sonarr_update_import_listA

Update an import list in Sonarr — primarily used to enable or disable it.

Inputs: listId (required), enabled, enableAuto.

sonarr_update_quality_definitionA

Update the min/max/preferred size limits for a quality tier in Sonarr. WARNING: misconfigured sizes can block all imports — verify values before applying.

Inputs: definitionId (required), maxSize, minSize, preferredSize.

sonarr_update_quality_profileA

Update a Sonarr quality profile — change upgradeAllowed, minFormatScore, cutoffFormatScore, cutoff quality, or individual custom format scores. Fetches the existing profile first to avoid overwriting unrelated fields.

Inputs: profileId (required), cutoff, formatScores, minFormatScore, +2 more.

sonarr_update_seriesB

Update a series in Sonarr — change monitored status, quality profile, or tags.

Inputs: seriesId (required), tags, monitored, seasonFolder, +1 more.

trash_compare_namingA

Compare your naming configuration against TRaSH Guides recommendations. Requires the corresponding *arr service to be configured.

Inputs: service (required), mediaServer (required).

trash_compare_profileA

Compare your quality profile against TRaSH Guides recommendations. Shows missing custom formats, scoring differences, and quality settings. Requires the corresponding *arr service to be configured.

Inputs: service (required), profileId (required), trashProfile (required).

trash_get_namingA

Get TRaSH Guides recommended naming conventions for your media server (Plex, Emby, Jellyfin, or standard).

Inputs: service (required), mediaServer (required).

trash_get_profileA

Get a specific TRaSH Guides quality profile with all custom format scores, quality settings, and implementation details.

Inputs: profile (required), service (required).

trash_get_quality_sizesA

Get TRaSH Guides recommended min/max/preferred file sizes for each quality level.

Inputs: service (required), type.

trash_list_custom_formatsA

List available TRaSH Guides custom formats. Filter by category: hdr, audio, resolution, source, streaming, anime, unwanted, release, language.

Inputs: service (required), category.

trash_list_profilesA

List available TRaSH Guides quality profiles for Radarr or Sonarr. Shows recommended profiles for different use cases (1080p, 4K, Remux, etc.)

Inputs: service (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 70 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes, with clear verb-object naming. Minor confusion possible between sonarr_get_quality_profiles and sonarr_get_quality_profile, or between various search tools (search_episode vs search_releases vs search_missing), but descriptions clarify usage.

    Naming Consistency5/5

    All tools follow a consistent [domain]_[verb]_[object] snake_case pattern. Prefixes (arr_, trash_, sonarr_) group related functionality, and verbs (get, add, delete, update, trigger) are used predictably across the suite.

    Tool Count2/5

    With 70 tools, this is a very large surface. While it covers many Sonarr operations, the sheer number overwhelms the typical agent and includes many niche administrative tools (logs, system tasks, backup) that could be omitted or combined.

    Completeness3/5

    The Sonarr library management surface is comprehensive (series, episodes, quality profiles, custom formats, tags, blocklist, imports). However, the suite claims to cover all *arr services but has no Radarr-specific tools, and missing indexer management and notification configuration are notable gaps.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      MCP server to manage your *ARR media stack (Radarr, Sonarr, Lidarr, Readarr, Prowlarr) for searching, adding, and managing movies, TV shows, music, books, and indexers.
      1
      ISC