Skip to main content
Glama

Interactive search results

get_releases
Read-only

Search media indexers via Radarr, Sonarr, Whisparr, or Lidarr and return all release candidates, including rejected ones with reasons, plus the IDs needed to grab a release.

Instructions

Runs the interactive search Radarr, Sonarr, Whisparr or Lidarr's own UI runs and returns every candidate, rejected ones included with their rejections (often because the library already holds an equal or better file). trigger_search cannot show what was found; this can, and its guid and indexerId (at detail: "full") are what grab_release takes. Slow: every indexer is polled synchronously, 15 seconds or more is normal and the timeout is 120s. A long wait is not a hang: do not retry. Keep it narrow: on Sonarr pass episode for one search instead of a season (one search per episode); on Lidarr id is the artist, so pass album, since a whole artist can return over a thousand rows. season is refused on Radarr. seeders is absent, not zero, on usenet. For a book, service: "shelfmark" with a book id from lookup_media. Field reference: arr://docs/get_releases.

Input Schema

NameRequiredDescriptionDefault
idNoThe movie, series or artist id — `acquisition.id` on a get_library or get_media_details record. On shelfmark, the id of a lookup_media row whose kind is book.
albumNoLidarr only — one album id of the artist `id`, as an integer string (from get_media_details at `detail: "full"`). Searches that album alone. Refused elsewhere.
limitNoMaximum items to return. Defaults to 50, hard maximum 500.
titleNoA film or series title in place of `id`. A title two items match equally is refused with both ids.
detailNoHow much per-item detail to return. Defaults to standard.standard
offsetNoItems to skip: page two of 50 is `offset: 50`. Pair it with `sort`, or items can move between pages.
seasonNoSonarr and Whisparr only — search one season (a release year on Whisparr) rather than the whole series. Refused against Radarr.
episodeNoSonarr only — one episode id, as an integer string (from get_media_details with episodes). Searches that episode alone, far faster than a season. Mutually exclusive with `season`; refused against Radarr.
serviceYes
instanceNoWhich instance (e.g. "4k") when several of this service exist. Omit it when there is one.

Output Schema

NameRequiredDescriptionDefault
itemsYes
totalYes
countsNo
offsetYes
degradedYes
returnedYes
truncatedYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed23 schema fields changedv1.74.0
    • removedInput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • changedInput schema / properties / instance / description
      Previous value: -"Which instance, when several of this service are configured — for example \"4k\" or \"hd\". Omit it when there is only one. If several are configured and you omit it, the call is refused and the names are listed."New value: +"Which instance (e.g. \"4k\") when several of this service exist. Omit it when there is one."
    • changedInput schema / properties / offset / description
      Previous value: -"How many items to skip before the window `limit` returns — page two of 50 is `offset: 50`. `total` always counts the whole list, so `offset + returned < total` is how you know there is another page. Pair it with `sort` for a stable walk: without one the order is whatever the services returned, and an item can move between pages."New value: +"Items to skip: page two of 50 is `offset: 50`. Pair it with `sort`, or items can move between pages."
    • removedInput schema / properties / offset / maximum
      Removed value: -9007199254740991
    • removedInput schema / properties / season / maximum
      Removed value: -9007199254740991
    • removedInput schema / properties / service / description
      Removed value: -"radarr, sonarr, whisparr, lidarr or shelfmark. Required — this searches one item, never merges across services."
    • changedInput schema / properties / service / enum
      Previous value: -[
      -  "radarr",
      -  "sonarr",
      -  "whisparr",
      -  "lidarr",
      -  "prowlarr",
      -  "bazarr",
      -  "jellyfin",
      -  "seerr",
      -  "sabnzbd",
      -  "nzbget",
      -  "transmission",
      -  "qbittorrent",
      -  "plex",
      -  "profilarr",
      -  "cleanuparr",
      -  "reclaimerr",
      -  "dispatcharr",
      -  "shelfmark",
      -  "grimmory"
      -]New value: +[
      +  "radarr",
      +  "sonarr",
      +  "whisparr",
      +  "lidarr",
      +  "shelfmark"
      +]
    • addedInput schema / properties / title
      Added value: +{
      +  "description": "A film or series title in place of `id`. A title two items match equally is refused with both ids.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "service",
      -  "id"
      -]New value: +[
      +  "service"
      +]
    • removedOutput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • removedOutput schema / properties / counts / description
      Removed value: -"How many results each service contributed."
    • removedOutput schema / properties / degraded / description
      Removed value: -"Services that could not be reached. Their contribution is missing from `items`, so a short list may be an outage rather than an answer."
    • removedOutput schema / properties / items / description
      Removed value: -"The window of results. What an item carries depends on the tool and on `detail`."
    • removedOutput schema / properties / offset / description
      Removed value: -"How many were skipped. `offset + returned < total` means there is another page."
    • removedOutput schema / properties / offset / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / offset / minimum
      Removed value: --9007199254740991
    • removedOutput schema / properties / returned / description
      Removed value: -"How many are in `items`."
    • removedOutput schema / properties / returned / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / returned / minimum
      Removed value: --9007199254740991
    • removedOutput schema / properties / total / description
      Removed value: -"How many matched in total — the whole list, never the window. Compare against `returned` before reporting a count to anyone."
    • removedOutput schema / properties / total / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / total / minimum
      Removed value: --9007199254740991
    • removedOutput schema / properties / truncated / description
      Removed value: -"True when this is not the whole list — including on the last page of a paged walk, where the rest is behind you rather than ahead."
  2. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true; the description adds the behavior that actually matters: synchronous polling of every indexer, 15s+ typical, 120s timeout, and an explicit no-retry instruction. It further discloses refusal behavior (`season` refused on Radarr, `episode` mutually exclusive with `season`) and a data quirk (`seeders` absent, not zero, on usenet) that no other field carries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by differentiation, then the slow/timeout warning and per-service narrowing rules — a sensible order. The prose is dense but nearly every clause carries a distinct, actionable fact; the bolded '**Slow**' aside and the field-reference pointer at the end are slightly crammed rather than cleanly separated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, five-service tool, this covers the things an agent would otherwise get wrong: latency and retry policy, service-specific parameter refusals, breadth controls, and the book path via shelfmark. Return shape is partly covered by the existing output schema, so the description is not obligated to explain values, and it still explains what `rejections` means and where `guid` lives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 90%, so the baseline is 3; the description earns above that by adding cross-parameter meaning the schema lacks — that Lidarr's `id` is the artist so `album` should be passed to avoid thousand-row responses, that `episode` is far faster than `season`, and that `detail: "full"` is what surfaces the `guid`/`indexerId` `grab_release` needs. It does not restate schema text, but it also doesn't touch `limit`, `offset`, or `instance`, leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — runs the same interactive indexer search the *arr UI runs — and scopes the output precisely (every candidate, rejected ones included, with `rejections`). It explicitly contrasts itself with `trigger_search` and names `grab_release` as the consumer of its `guid`/`indexerId`, so an agent can place it in the workflow without opening siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing rules: use this instead of `trigger_search` when you need to see what was found, keep searches narrow (episode over season on Sonarr, album over artist on Lidarr), and use `service: "shelfmark"` for books. It also includes a when-not rule — 'a long wait is not a hang: do not retry' — which is exactly the kind of exclusion agents otherwise get wrong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.