Arr MCP
This server exposes MCP tools to inspect and manage a *arr media stack through a generic API caller plus convenience endpoints.
List configured services and their addresses without exposing keys (
arr_services).Check service versions and health warnings (
arr_status).Call any API path on Sonarr, Radarr, Prowlarr, Bazarr, Overseerr, Jellyfin, or qBittorrent with GET/POST/PUT/DELETE/PATCH (
arr_call).Run read calls immediately; require
confirm=truefor changes and an exactconfirm_phrasefor destructive actions.View Sonarr/Radarr download queues (
arr_queue).Search Sonarr/Radarr/Overseerr by name without adding anything (
arr_search).Add a show or movie after preview and confirmation (
arr_add).View upcoming episodes or movie releases (
arr_calendar).List and filter qBittorrent torrents (
arr_downloads).List/filter Overseerr requests; approve or decline via
arr_call(arr_requests).See who is currently watching on Jellyfin (
jellyfin_now_playing).
Note: the schema does not expose the README-mentioned Plex, Tdarr, or dedicated Seerr approval tools; those would require arr_call only where supported.
Provides tools for interacting with Jellyfin to check service health and version, see who is currently watching, and make other API calls such as refreshing libraries.
Provides tools for interacting with qBittorrent to view torrents, manage downloads, and add torrents by magnet link or URL.
Provides tools for interacting with Radarr to manage movies, check service health and version, search for and add movies, view download queues, and see upcoming releases.
Provides tools for interacting with Sonarr to manage TV shows, check service health and version, search for and add shows, view download queues, and see upcoming episodes.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Arr MCP Check my arr stack."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Arr MCP
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-Tokenfrom 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-mcpThen use "command": "arr-mcp" and no args.
Restart the Claude desktop app.
3. Try it
Ask Claude: "Check my arr stack."
Settings
ARR_<SERVICE>_URLandARR_<SERVICE>_KEY: see the example file. Services areSONARR,RADARR,PROWLARR,BAZARR,SEERR,JELLYFIN,PLEX,TDARR.ARR_QBITTORRENT_URL.ARR_QBITTORRENT_USERandARR_QBITTORRENT_PASSare 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.pyThe 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
.torrentfile) 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
limitstyle options inparams.
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 toolsarr_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_searchA
Look up a show or movie by name. Nothing is added.
service: sonarr (shows), radarr (movies) or seerr (both). Shows the id to use with arr_add. "in_library" is set when it already exists.
Inputs: term (required), service. 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
Scored across 13 tools
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.
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.
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.
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
Related MCP Connectors
The media memory layer for AI agents and their humans. Your AI client can search your collection, add and log what you've finished, update ratings and lists, and find patterns across everything you've read, watched, played, and listened to.
Uptime, SSL, DNS and domain monitoring you can talk to from Claude or any MCP client.
One workspace of tools for Claude and ChatGPT: connect 600+ apps, generate media, build tools.
Connect Claude or any MCP client to Wireflow, the AI canvas for image, video and audio workflows. List, build, inspect and run your workflows and published apps, browse templates, check models, prices and credits, edit a video node's timeline, and plan or schedule social posts. Drafts and edits cost no credits; run tools spend the user's credits.
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables unified control of \*arr media management applications (Sonarr, Radarr, Lidarr, Readarr, Prowlarr) through natural language queries. Manage TV shows, movies, music, books, search for content, monitor downloads, and check upcoming releases across all services.661,269 npm238MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Sonarr and Radarr APIs to query media libraries, check recent additions, view upcoming releases, manage download queues, and perform searches for TV shows and movies through natural language.1MIT
- AlicenseCqualityBmaintenanceEnables 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.171MIT
- AlicenseAqualityBmaintenanceEnables 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.26MIT