Library
get_libraryQuery a unified media library across Radarr, Sonarr, Whisparr, Lidarr, Grimmory, and your media server, with filters, sorting, counts, and presence checks to spot broken imports or unmanaged titles.
Instructions
Your library joined across Radarr, Sonarr, Whisparr, Lidarr, Grimmory and your media server on shared external ids: films, series, artists and books. Use it for filtered lists and counts; for one title use get_media_details. presence is what no single service can tell: arr_only with a file is a likely broken import, jellyfin_only (spelled that way for any media server) is media nothing manages, and unknown means the other half was not read. When degraded or note explain a gap, report that reason rather than calling it unwatched or unrated. has_file: false with monitored: true is what you are still waiting for. An artist's monitored is the artist-level flag, not the album flag; its albums and their ids come from get_media_details on the Lidarr artist. A series has an IMDb rating only with the IMDb dataset on, so ask rating_source: "imdb" explicitly. Series seasons and folder paths need detail: "full". Field reference: arr://docs/get_library.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Films, series, Lidarr artists or Grimmory books. Omit for all. | |
| sort | No | Order the results *before* `limit` is applied — which is what makes "the best rated" or "most recently added" answerable at all, since a filter alone would leave the top item outside the returned window. `rating` is descending and uses `rating_source`, excluding items that source has no rating for and reporting them in `ratingCoverage`; `added` is newest first and excludes media no *arr manages, which has no added date; `year` is descending; `title` ascending. Omit to keep the library's own order. | |
| user | No | Whose playback to read. Defaults to the configured default_user; any other value requires allow_other_users. | |
| year | No | ||
| genre | No | Matched case-insensitively against the *arr genres. | |
| limit | No | Maximum items to return. Defaults to 50, hard maximum 500. | |
| detail | No | How much per-item detail to return. Defaults to standard. | standard |
| offset | No | Items to skip: page two of 50 is `offset: 50`. Pair it with `sort`, or items can move between pages. | |
| library | No | A Grimmory library, by name. Matches books only. | |
| quality | No | Films, or a book's file format such as EPUB. | |
| watched | No | The media server's watch state, or a Grimmory book's read status (READ is watched). Items it has never seen count as unwatched. Pair with `user` to ask about someone else. | |
| has_file | No | Whether a file is actually on disk. For an artist this means any track of any of its albums is on disk. `false` with `monitored: true` is "what am I still waiting for"; `true` is "what can I watch now". Media no *arr manages is excluded from both answers rather than counted as missing — nothing is going to fetch it. | |
| presence | No | both / arr_only (possible broken import) / jellyfin_only (unmanaged media — the value keeps this name whichever media server is configured) / unknown (media server degraded or unconfigured, so arr_only cannot be asserted; for an artist it also means the music read did not run). | |
| monitored | No | ||
| min_rating | No | Always 0-10, regardless of source. Metacritic and Rotten Tomatoes are reported in the response on their native 0-100 scale, but rescaled to 0-10 for this comparison. | |
| watched_by | No | Whose playback to read. Defaults to the configured default_user; any other value requires allow_other_users. | |
| added_since | No | Only items added at or after this ISO 8601 date. Items with no added date are left out. | |
| rating_source | No | Defaults to whichever source covers the most of your library. `tvdb` is series-only. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| items | Yes | ||
| total | Yes | ||
| counts | No | ||
| offset | Yes | ||
| degraded | Yes | ||
| returned | Yes | ||
| truncated | Yes |