Skip to content
Agentmart
Submit a tool

arr-mcp

One server, 39 tools, the whole media stack: the *arrs, Jellyfin, Plex, Seerr and download clients

Connector by bardesss · GitHub account verified by the MCP Registry

IndexedMITRemote (HTTP)★ 84
Write a review

Install

Pick your client. Read the repository before you give any tool access to your data.

No install instructions from the source yet. Check the repository for setup steps.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

One server, 39 tools, the whole media stack: the *arrs, Jellyfin, Plex, Seerr and download clients

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
20 read · 11 write · 7 delete · 1 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Docker image

Tools by what they do 39

Read from the source code; the running server may list different tools.

Read 20 · Look things up without changing anything.

  • diagnose
  • discover_media
  • get_blocklist
  • get_calendar
  • get_history
  • get_indexers
  • get_library
  • get_media_details
  • get_metadata_issues
  • get_playback
  • get_profile_issues
  • get_queue
Show 8 more tools
  • get_releases
  • get_requests
  • get_subtitles
  • get_wanted
  • lookup_media
  • request_media
  • search_media
  • stack_health

Write 11 · Create, change, send or run things.

  • add_media
  • grab_release
  • pause_downloads
  • respond_to_request
  • set_monitoring
  • set_watched
  • sync_database
  • trigger_scan
  • trigger_search
  • trigger_subtitle_search
  • update_media

Delete 7 · Delete, drop, revoke or wipe things.

  • clean_queue
  • delete_episode_files
  • delete_media
  • delete_request
  • manage_indexer
  • remove_blocklist_item
  • remove_queue_item

Not yet classified 1 · We could not tell from the name and description.

  • fix_metadata

Network hosts it talks to 14

  • 127-0-0-1.2ab6ce1a093d465e910def96cf4e4799.plex.direct · found in code
  • api.jellyfin.org · found in code
  • app.plex.tv · found in code
  • arr-mcp.fixture · found in code
  • artworks.thetvdb.com · found in code
  • cdn.jsdelivr.net · found in code
  • datasets.imdbws.com · found in code
  • github.com · found in code
  • imdb.com · found in code
  • indexer.example.test · found in code
  • my.jellyfin.host · found in code
  • raw.githubusercontent.com · found in code
  • rottentomatoes.com · found in code
  • tracker.example.test · found in code

Files it touches

  • /opt/arr-mcp/package.json

Tools (39)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_mediaAdd a film or series

    Adds a film to Radarr or a series to Sonarr — or a site to Whisparr — and, by default, starts searching for it. Radarr takes a TMDB id, Sonarr and Whisparr take a TVDB id (Whisparr reuses that field for its own scene-database id, not TheTVDB) — get the right one from lookup_media, which returns both under `ids`. If the service has more than one quality profile or root folder you must name which, because guessing wrong is only discovered once the download finishes — `stack_health` at `detail: "full"` lists the profiles, root folders and tags each instance actually has. Sonarr and Whisparr also …

  • clean_queueClean up orphaned queue items

    Removes every completed download stuck in a Radarr or Sonarr queue because the film or series it belongs to no longer exists — the ones that pile up at "importBlocked" for years. Also drops them from the download client. Only touches items that are both orphaned and import-blocked, so a download still in progress is never affected, and it never blocklists: the release was fine, the media was deleted. Previews the exact list by default — call again with the returned `confirm` token to remove them.

  • delete_episode_filesDelete episode files

    Deletes the files for one Sonarr season, or for specific episodes, from disk. Destructive and not undoable. Give `season` or `episodes`, never both; there is no whole-series form — that is delete_media. **Unmonitor first with set_monitoring**, or Sonarr treats the episodes as missing and re-downloads exactly what you just deleted; the preview says so when the target is still monitored. Leaves the series, its monitoring and its history in Sonarr — only the files go. Previews by default — call again with the returned `confirm` token to actually delete.

  • delete_mediaDelete a film or series

    Removes a film from Radarr or a whole series (or Whisparr site) from Sonarr or Whisparr, optionally deleting its files from disk. Destructive and not undoable — files are gone, not moved to a recycle bin unless the service itself is configured for one. Takes `service` and `id`, never a title: take `id` from `acquisition.id` on a get_library or get_media_details record. Sonarr and Whisparr delete the entire series/site; to remove one season's files or specific episodes, use delete_episode_files instead. Previews by default — call again with the returned `confirm` token to actually delete.

  • delete_requestDelete a request

    Deletes a Seerr request record entirely. This removes the request, not the media — anything already downloaded stays on disk and in Radarr or Sonarr. Use respond_to_request with `decline` to refuse a request while keeping the record. Take `id` from get_requests. Previews by default — call again with the returned `confirm` token to actually delete it.

  • diagnoseDiagnose a missing or unplayable itemread-only

    Why is this not playable? Walks the whole chain — requested, managed, monitored, downloaded, indexed, imported, scanned — and names the first thing that explains the absence, with what to do about it. Give a title as `query` for how a person actually asks; give `service` plus `id` only when you already have an exact item in hand (e.g. from get_media_details) — the explicit id wins if both are given. Works with services down: any step it could not check sets `certain: false` and the summary says what was missed, rather than guessing across the hole.

  • discover_mediaDiscover trending mediaread-only

    Browse what exists rather than what you have: films or series by genre, year and minimum rating, or things similar to one you know via similar_to. Nothing is requested or added. Answered by Seerr when it is configured — TMDB-backed, so the rating is TMDB’s. With no Seerr, genre/year/min_rating are answered from the local IMDb dataset instead, where the rating is IMDb’s; similar_to needs Seerr and has no dataset fallback.

  • fix_metadataRepair wrong metadata

    Description is built at runtime.

  • get_blocklistBlocklisted releasesread-only

    Why a release keeps getting skipped. Lists what Radarr and Sonarr have blocklisted — releases they will not grab again — with the reason each was blocklisted, usually relayed from the download client. This is the answer to "it keeps finding the same thing and never downloading it", which `get_history` shows as a repeating grab-then-fail and nothing explains. Rows carry `mediaId` for get_media_details, and `id` for remove_blocklist_item. Newest first. Radarr and Sonarr only — the download clients have no blocklist of their own.

  • get_calendarUpcoming releasesread-only

    Films and episodes due in a date window, merged from Radarr and Sonarr and sorted by date. Covers both upcoming releases and recently aired items, with whether each already has a file.

  • get_historyDownload historyread-only

    What happened to a grab after it left the queue: grabbed, imported, failed or deleted, merged across Radarr, Sonarr, SABnzbd and Bazarr and normalised to one vocabulary — the upstream spelling survives as `rawEvent`. SABnzbd's own rows are the layer below the *arrs: when Radarr says it grabbed something and nothing arrived, the download client's failure message is here. Bazarr contributes `subtitle` rows — a downloaded subtitle is not an import, and calling it one would put it in the answer to "what did Radarr import last night". `trigger_search` only ever hands back a command handle with no w…

  • get_indexersIndexersread-only

    Prowlarr indexer health: which indexers are enabled, which are temporarily disabled and why, per-indexer query and grab counts, and — at detail: full — the queries indexers recently rejected and the reasons they gave. Failure messages and rejection reasons come from the indexer itself and are fenced as untrusted data.

  • get_libraryLibraryread-only

    Description is built at runtime.

  • get_media_detailsMedia detailsread-only

    Description is built at runtime.

  • get_metadata_issuesMetadata issuesread-only

    Description is built at runtime.

Show 24 more tools
  • get_playbackPlayback activityread-only

    Description is built at runtime.

  • get_profile_issuesProfile issuesread-only

    Faults in Radarr, Sonarr and Whisparr quality profiles: a minimum custom format score nothing can reach, a score set exactly on the edge, a narrower language format scored while a wider one sits at zero, a scored language the minimum does not enforce, a dialect sibling left uncovered, and Profilarr-reported drift between its saved profiles and what an instance actually holds. Each profile is checked on its own, so a finding on some profiles says nothing about which others score the same format. Drift findings are instance-scoped, not tied to any one profile, and are unaffected by the `profile`…

  • get_queueDownload queueread-only

    Everything currently downloading or stalled, merged across Radarr, Sonarr, SABnzbd, Transmission and qBittorrent. Sizes are bytes and ETAs are seconds regardless of how each service reports them. Titles are release names from public indexers and are fenced as untrusted data. A Radarr or Sonarr row also carries `downloadId`, the download client's own id for that grab — pass it to `trigger_scan` with `action: "import"` when a finished download is sitting at `importState: "importBlocked"` and never got imported. Such a row also carries `statusMessages`, the service's own reasons, fenced: a title …

  • get_releasesInteractive search resultsread-only

    Description is built at runtime.

  • get_requestsRequestsread-only

    Media requests in Seerr — pending, approved or declined — for one user. Defaults to the configured user; reading another requires allow_other_users. At `detail: "full"` it also returns `issues`: what your users have reported as broken (video, audio, subtitle), each with its newest comments. Issues are everyone's, not just this user's, and a Seerr that cannot answer for them still answers for the requests.

  • get_subtitlesSubtitlesread-only

    Subtitles Bazarr knows are missing, for both films and episodes, with the languages wanted for each — and which subtitle providers are currently working, throttled, or blocked, which is usually why something is missing. Release names come from public indexers and are fenced as untrusted data.

  • get_wantedMissing and upgradableread-only

    `get_library` can say a movie is missing (`monitored` with no file), but not which episodes of a show are missing, and neither tool can say what already has a file but not yet the wanted quality. `get_wanted` answers both, from Radarr and Sonarr's own wanted lists. `scope: "missing"` is monitored items with no file; `scope: "upgradable"` is monitored items with a file below the quality profile's cutoff — both required, since a default would hide one. Sonarr rows carry `season`, `episode` and the episode's own `episodeTitle`, with `title` naming the show; Radarr rows are movies, and only ever s…

  • grab_releaseGrab a specific release

    Tells Radarr or Sonarr to grab one specific release listed by get_releases — the "not that one, the 1080p remux" action. Takes `guid` and `indexer_id` from a get_releases result verbatim; together they identify the release and nothing else does. It also takes a `magnet` link instead, sent straight to transmission or qbittorrent — that path skips Radarr and Sonarr entirely, so nothing vets the release and nothing imports it into your library afterwards. Safe tier: the download can be removed again with remove_queue_item, so `safe_write` is enough. Slow to preview — it re-runs the interactive se…

  • lookup_mediaLook up a title externallyread-only

    Metadata for something you may not have: title, year, and external ids, from Radarr, Sonarr and Seerr. Query imdb:tt… to turn an IMDb id into a TMDB id; a bare tt… misses Seerr. Reads only — nothing is added, requested or monitored.

  • manage_indexerAdd, edit, disable or delete an indexer

    Adds, edits, disables, re-enables or deletes one Prowlarr indexer, then syncs Prowlarr to Radarr and Sonarr. `add` takes a `definition` name and only adds public indexers that need no login; anything private or semi-private is refused, because arr-mcp never handles indexer credentials. `edit` changes priority, app profile, tags and torrent seed settings, nothing else. `disable` stops every grab through that indexer in every app, whatever its sync level, and `enable` undoes it. All of those are safe tier. `delete` removes the indexer from Prowlarr and from each app Prowlarr syncs to, needs the …

  • pause_downloadsPause, resume or throttle a download client

    Pauses, resumes or throttles one download client — SABnzbd, Transmission or qBittorrent — or pauses one item in its queue when `id` is given. The bandwidth answer: "stop downloading for an hour", or `action: "limit"` with `speed_limit_kbps` to slow it down instead of stopping it (0 removes the cap). A limit is always client-wide, never per item. Safe tier, because the undo is this same tool with the other action. It does NOT stop Radarr or Sonarr grabbing: they carry on finding and sending releases, which then sit in the paused client. `service` is required and names one client; pausing "every…

  • remove_blocklist_itemUn-blocklist a release

    Removes one entry from Radarr or Sonarr's blocklist, so that release can be grabbed again. The fix for "this never downloads and I do not know why" once get_blocklist has said why. Take `service` and `id` from a get_blocklist row. Safe tier: the entry is a refusal to grab, and removing it only withdraws that refusal — nothing on disk changes, and the release can be blocklisted again through remove_queue_item's `blocklist` flag. Previews by default — call again with the returned `confirm` token to remove it.

  • remove_queue_itemRemove a queue item

    Removes one item from a download queue — the stuck-at-0%, wrong-release, or stalled download. Works against Radarr, Sonarr, SABnzbd, Transmission and qBittorrent; take `service` and `id` from get_queue. Optionally deletes partial data and, on Radarr and Sonarr only, blocklists the release so it will not be grabbed again. Previews by default — call again with the returned `confirm` token to actually remove it.

  • request_mediaRequest a film or series

    Asks Seerr for a film or series, the way a household member would through its web UI — it enters the approval queue and counts against that user's quota. This is the tool for "request X". It is not add_media: add_media writes straight into Radarr or Sonarr, skipping approval and quota entirely, and needs that service's own write permission. `media_id` is a TMDB id — take one from search_media, lookup_media or discover_media (an IMDb tt… id is not one: look it up as imdb:tt… to get its TMDB id); Seerr resolves the TVDB id itself. For a series, `seasons` defaults to every season. `user` names wh…

  • respond_to_requestApprove or decline a request

    Approves or declines a pending Seerr request. Approving hands it to Radarr or Sonarr, which will search for it and download it — so it costs disk space and bandwidth even though the decision itself is reversible. Take `id` from get_requests. Previews by default — call again with the returned `confirm` token to actually apply the verdict.

  • search_mediaSearch mediaread-only

    Search across the stack: your existing library, metadata for things you do not have yet, or what indexers currently offer. Indexer results contain attacker-controllable release names and are returned inside an explicit untrusted-data boundary.

  • set_monitoringStart or stop monitoring

    Turns Sonarr monitoring on or off for a whole series, one season, or specific episodes. Safe tier — nothing is deleted and Sonarr can undo it, so `safe_write` is enough. Give `season` for one season, `episodes` for specific episode ids, or neither for the whole series; giving both is refused rather than resolved. Unmonitoring **before** deleting files is what stops Sonarr immediately re-downloading them — see delete_episode_files. Takes `service` and `id`, never a title: take `id` from `acquisition.id` on a get_library or get_media_details record. Previews by default — call again with the retu…

  • set_watchedMark watched or unwatched

    Description is built at runtime.

  • stack_healthStack healthread-only

    Health of every configured service: version, disk space, failing health checks, when each library was last scanned, and what each instance is permitted to do. Returns partial results with a `degraded` list rather than failing when a service is down. `commands` is how you follow up a `trigger_search` or `trigger_scan`: it lists the searches, scans, refreshes, renames and imports each service has queued or running, plus any it finished in the last fifteen minutes — so a command that is not there has finished. A service's own per-minute housekeeping is left out. The `permissions` list is also the…

  • sync_databaseSync a Profilarr database

    Asks Profilarr to pull one of its databases — custom formats, quality profiles, delay profiles — from its configured git source. Safe tier: it only changes Profilarr's own store, never Radarr or Sonarr directly. `database` names one by name or id; required only when Profilarr has more than one. Profilarr answers the request with a queued job, and this tool polls it to a terminal status before reporting anything, so the result reflects whether the sync actually finished, not just that it was accepted. A sync can legitimately find nothing to pull; that reports as a completed call whose `outcome`…

  • trigger_scanScan for new files

    Asks a service to reconcile itself with what is on disk — the "it downloaded but still will not play" family of actions, and the usual fix for what `diagnose` reports as a stale scan. With no `id`, it rescans the whole library of Radarr, Sonarr, Jellyfin or Plex; the media server is the one that matters when something is missing from what you can actually watch. On Prowlarr there is no library, and this pushes its indexer list to Radarr and Sonarr instead — the fix for "the app is using an indexer Prowlarr no longer has". With an `id`, it rescans just that Radarr/Sonarr item, which is far chea…

  • trigger_searchSearch indexers for a release

    Asks Radarr, Sonarr or Whisparr to go looking for releases for one item it already tracks — the "it never downloaded, try again" action. Takes `service` and `id`, deliberately not a title: take `id` from `acquisition.id` on a get_library or get_media_details record. On Sonarr or Whisparr, give `season` to search one season or `episodes` for specific episode ids; giving both is refused rather than resolved, and neither on Radarr, which has no seasons. This queues a search and returns immediately; it does not wait for a release to be found, and finding one is not guaranteed. Previews by default …

  • trigger_subtitle_searchSearch for a subtitle

    Asks Bazarr to go looking for one language of subtitles for one item it already tracks — the "it is missing Dutch subs and I do not want to wait for the next round" action. Takes `kind`, `id` and `language` exactly as get_subtitles reports them. By default it only searches for something Bazarr lists as missing; `search_anyway: true` searches regardless, which is how you replace a subtitle you already have but do not want (for an episode outside that list, pass `series_id` too). This queues a search and returns immediately; it does not wait, and finding a subtitle is not guaranteed. Previews by…

  • update_mediaChange what a library item is set to

    Changes settings on something already in Radarr or Sonarr: quality profile, root folder, monitoring, tags, Radarr’s minimum availability, Sonarr’s series type. The counterpart to add_media, which only ever adds — and the only way to change a **Radarr** item’s monitoring, since set_monitoring is Sonarr’s per-season tool. Takes `service` and `id`, never a title: take `id` from `acquisition.id` on a get_library or get_media_details record. Changing `root_folder` asks the service to **move the files on disk**; pass `move_files: false` to leave them where they are, which reports them missing until …

Signals

Stars
84
Forks
7
Open issues
1
Last commit
Oct 24, 2026 (5 days ago)
Last release
Oct 26, 2026 (3 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.bardesss/arr-mcp
Version
1.45.1
Auth
No auth
Packages
oci ghcr.io/bardesss/arr-mcp:1.45.1
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 26, 2026
Cite this page

arr-mcp. Agent Mart. https://agentmart.dev/connectors/bardesss-arr-mcp (last updated 2026-10-26)