Skip to main content
Glama

Arr MCP

Version License

A small tool that lets Claude read and manage your media stack:

  • Sonarr (shows)

  • Radarr (movies)

  • Prowlarr (indexers)

  • Bazarr (subtitles)

  • Seerr (requests)

  • qBittorrent (downloads)

  • Jellyfin (your media server)

  • Plex (your other media server)

  • Tdarr (video conversion)

It runs on your own computer. Your keys stay on your computer. Only the services you set up are turned on.

What Claude can do with it

  • Check that every service is alive, with version and health warnings.

  • Show the download queue, torrents, and upcoming episodes and movies.

  • Search for a show or movie and add it (arr_add).

  • Show Seerr requests. Approve or decline them.

  • Show who is watching on Jellyfin and Plex.

  • List Plex libraries with item counts (plex_libraries).

  • Show what Tdarr is converting, and which files failed (tdarr_summary).

  • Anything else the apps can do (arr_call), for example refresh a library, trigger a search, pause a torrent, or change a setting.

Related MCP server: Sonarr & Radarr MCP Server

Safety

Every call has a safety level.

  • read: runs right away.

  • change: does not run until Claude asks you and sets confirm.

  • destructive: deleting, restarting an app, restoring a backup, host and security settings, password changes, qBittorrent web login settings. It also needs an exact phrase, like sonarr DELETE /series/5.

Other protections:

  • Login, key and token paths are blocked. They would put a secret in the chat.

  • Keys and passwords are hidden in anything Claude sees. This includes the password fields inside download client and indexer settings.

  • Keys are never printed and never saved by this tool.

Set up

1. Find your keys

  • Sonarr, Radarr, Prowlarr: Settings, General, Security, API Key.

  • Bazarr: Settings, General, Security, API Key.

  • Seerr: Settings, General, API Key.

  • Jellyfin: Dashboard, API Keys, add a key named Claude.

  • Plex: it has no key page. Use your Plex token (open any item in Plex Web, Get Info, View XML, copy the X-Plex-Token from the address bar). Treat it like a password.

  • Tdarr: Tools, API Keys, make a key named Claude.

  • qBittorrent: it has no key. Use your web page user name and password. Best: turn on the web page login for a separate user if your version allows it.

Do not paste keys in a chat. Put them only in the config file below. If a key ever lands in a chat, make a new one in that app.

2. Add the tool to Claude

Open the Claude desktop app settings and find the MCP servers config file. Add the block from claude_desktop_config.example.json. Change the addresses and keys. Delete the lines for services you do not use.

An address can include a URL base, like http://nas:8989/sonarr.

That file now holds secrets. Do not share it. Do not put it on GitHub.

The example uses uvx. It downloads arr-mcp from GitHub. No local copy is needed. To get a new version later, run uvx --refresh --from git+https://github.com/drmogie/arr-mcp arr-mcp --help once, or restart the app. To pin one release, add @2026.10.12.01 after the URL.

If you do not have uvx, use Python instead:

pip install git+https://github.com/drmogie/arr-mcp

Then use "command": "arr-mcp" and no args.

Restart the Claude desktop app.

3. Try it

Ask Claude: "Check my arr stack."

Settings

  • ARR_<SERVICE>_URL and ARR_<SERVICE>_KEY: see the example file. Services are SONARR, RADARR, PROWLARR, BAZARR, SEERR, JELLYFIN, PLEX, TDARR.

  • ARR_QBITTORRENT_URL. ARR_QBITTORRENT_USER and ARR_QBITTORRENT_PASS are optional. Leave them out if qBittorrent skips the login for your network.

  • ARR_VERIFY_TLS=false: for an https address with a self-signed certificate.

  • ARR_TIMEOUT: seconds to wait for an answer. Default 30.

Tools

  • arr_services: which services are set up.

  • arr_status: version and health for each service.

  • arr_queue: Sonarr and Radarr downloads.

  • arr_search: look up a show or movie.

  • arr_add: add it. Shows a preview first.

  • arr_calendar: coming episodes and releases.

  • arr_downloads: qBittorrent torrents.

  • arr_requests: Seerr requests.

  • jellyfin_now_playing: who is watching.

  • plex_now_playing: who is watching on Plex.

  • plex_libraries: Plex libraries, folders and item counts.

  • tdarr_summary: Tdarr nodes, workers, files by state, failed files.

  • arr_call: any other API call.

Test it

pip install "mcp>=1.2,<2"
python tests/test_server.py

The test starts a fake server that acts like all nine services. It checks every tool and every safety rule.

Limits

  • Tested against a fake server only. Not yet tested on your real apps.

  • qBittorrent file uploads (adding a .torrent file) are not supported. Adding by magnet link or URL works.

  • Lidarr and Readarr are not included. They use the same style, so they are easy to add later.

  • Jellyfin library lists can be big. Use limit style options in params.

Credits

Built from the public API docs of each app. This project is not made by any of them.

License

MIT. See LICENSE.

Available Tools

13 tools
arr_addA

Add a show to Sonarr or a movie to Radarr.

service: sonarr or radarr. external_id: the TVDB id for a show, or the TMDB id for a movie (from arr_search). quality_profile: profile name. If empty and there is only one, it is used. root_folder: folder path. If empty and there is only one, it is used. search_now: start looking for downloads right away. First call without confirm to see what will be added. Ask the user, then call again with confirm=true.

Inputs: service (required), external_id (required), confirm, search_now, +2 more. Returns: result

arr_calendarB

Upcoming episodes (sonarr) or movie releases (radarr) for the next days.

Inputs: days, service. Returns: result

arr_callA

Call any API path on a service.

service: sonarr, radarr, prowlarr, bazarr, seerr, jellyfin, plex, qbittorrent or tdarr. path: the path after the API root, for example /series, /movie/12, /system/status, /torrents/info, /Items, /get-nodes. Do not add a query string. method: GET, POST, PUT, DELETE or PATCH. params: query options (for qBittorrent POST calls these are the form fields). body: JSON body for POST and PUT (not used by qBittorrent).

API roots added for you: Sonarr and Radarr /api/v3, Prowlarr and Seerr /api/v1, Bazarr /api, qBittorrent and Tdarr /api/v2, Jellyfin and Plex none. Plex paths look like /library/sections, /status/sessions, /accounts is blocked. Plex answers in JSON because this tool asks for it.

Tdarr reads its database with POST /cruddb and a body like {"data": {"collection": "LibrarySettingsJSONDB", "mode": "getAll"}}. Those read modes run at once. Other modes need confirm=true.

GET runs at once. Any change is NOT run until you set confirm=true, and you must first tell the user what will change and get a clear yes. Deleting, restarting, restoring a backup, host or security settings and password changes also need confirm_phrase set to exactly " ", for example "sonarr DELETE /series/5". Never guess a body: read an existing item with GET first and send it back with changes.

Inputs: path (required), service (required), body, method, +4 more. Returns: result

arr_downloadsB

Show qBittorrent torrents.

filter: all, downloading, seeding, completed, paused, active, stalled, errored.

Inputs: limit, filter. Returns: result

arr_queueA

Show what Sonarr and Radarr are downloading right now.

service: sonarr, radarr, or empty for both.

Inputs: service. Returns: result

arr_requestsA

Show Seerr requests.

filter: pending, approved, available, processing, unavailable, failed, all. To approve or decline, use arr_call with POST /request//approve (or /decline) after the user says yes.

Inputs: take, filter. Returns: result

arr_servicesA

List which services are set up (Sonarr, Radarr, Prowlarr, Bazarr, Seerr, Jellyfin, Plex, qBittorrent, Tdarr). Shows addresses only, never keys.

Inputs: no named parameters. Returns: result

arr_statusA

Check that services answer. Shows version and health warnings.

service: one name, or leave empty to check every service that is set up.

Inputs: service. Returns: result

jellyfin_now_playingA

Show who is watching on Jellyfin right now, and on which device.

Inputs: no named parameters. Returns: result

plex_librariesA

List the Plex libraries with their folders and how many items each has.

Inputs: no named parameters. Returns: result

plex_now_playingA

Show who is watching on Plex right now, and on which device.

Inputs: no named parameters. Returns: result

tdarr_summaryA

Show what Tdarr is doing: nodes, workers, and how many files are in each state.

show_failed: how many failed file names to list (0 to 50).

Inputs: show_failed. Returns: result

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 13 tools

    Disambiguation4/5

    Most tools target distinct resources (search vs add, queue vs torrents, plex vs jellyfin now-playing are clearly separated by description). The main ambiguity is arr_call, a generic escape hatch that overlaps with every other tool and could tempt agents to bypass the specific ones. arr_downloads (qBittorrent) and arr_queue (Sonarr/Radarr) are close but the descriptions disambiguate them.

    Naming Consistency3/5

    The dominant arr_ prefix is used for 9 tools, but jellyfin_, plex_, and tdarr_ prefixes break the pattern into per-service namespaces. Verbs and nouns are mixed (arr_add, arr_search vs arr_services, arr_calendar, arr_status). Still readable but not a single predictable convention.

    Tool Count5/5

    13 tools is well within a comfortable range for a multi-service media-management server. Each tool maps to a distinct user intent (search, add, monitor, queue, requests, health, playback) and none feel redundant.

    Completeness4/5

    Core read workflows (search, calendar, queue, downloads, status, now-playing, libraries) and add are covered, plus arr_call as a generic escape hatch for the rest. However, mutations beyond add — delete/remove, edit quality profile, monitor toggles, request approve/decline — only exist via raw arr_call rather than dedicated tools, so agents face steeper paths for common write operations.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      B
      maintenance
      Enables running Overseerr or Jellyseerr from Claude.ai and Claude Code, with all 170 API operations exposed as tools for managing requests, settings, users, issues, and media services.
      171
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables Claude Desktop to troubleshoot and manage a self-hosted Plex + Servarr media stack, including diagnosing missing media, monitoring download queues and indexer health, and coordinating operational tasks across Radarr, Sonarr, SABnzbd, qBittorrent, Tautulli, TMDb, Prowlarr, and remote hosts.
      26
      MIT