Skip to main content
Glama

Download history

get_history
Read-only

Retrieve merged download history across *arr apps and download clients to diagnose why a download failed, including finished or failed items with the client's error message.

Instructions

What happened to a download after it left the queue (grabbed, imported, failed, deleted), merged across the *arrs, SABnzbd, NZBGet, Bazarr (subtitle rows), Cleanuparr (strikes and removals), Reclaimerr (cleanup), Shelfmark and Grimmory, in one vocabulary with the upstream word kept as rawEvent. This answers "why did last night's download fail": get_queue cannot see finished or failed items, and a failure carries the download client's own message. Pass service and id to scope it to one movie, series or Lidarr artist. downloadId links a row to its *arr grab; on an NZBGet row it is what trigger_scan action: "postprocess" takes. Deleting a title also deletes its Radarr and Sonarr history, so source: "webhooks" reads what they reported to arr-mcp instead, when the library event log is on. Field reference: arr://docs/get_history.

Input Schema

NameRequiredDescriptionDefault
idNoOne movie, series or Lidarr artist id — `acquisition.id` on a get_library or get_media_details record. Requires `service`.
limitNoMaximum items to return. Defaults to 50, hard maximum 500.
sinceNoISO 8601. Only entries at or after this time.
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.
sourceNo`services` asks each service for its own history. `webhooks` reads the events Radarr and Sonarr reported to arr-mcp, which survive deleting a title.services
serviceNoScope to one service. Required alongside `id`.
instanceNoWhich instance (e.g. "4k") when several of this service exist. Omit it when there is one.
event_typeNoOnly entries of this normalised type. Omit for all.

Output Schema

NameRequiredDescriptionDefault
noteNo
itemsYes
totalYes
countsNo
offsetYes
degradedYes
returnedYes
truncatedYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed19 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
    • 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 / note / description
      Removed value: -"Why a `source: \"webhooks\"` answer may be empty: the log is off, or nothing has arrived."
    • 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.3/5.0
Behavior3/5

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

readOnlyHint=true is consistent with a history read. Beyond annotations it discloses genuinely useful behaviour: results are merged across many backends into one vocabulary with the upstream word kept in `rawEvent`, failures carry the download client's own message, and deleting a title also destroys its Radarr/Sonarr history. It stops short of describing pagination stability or response shape (offset warns items can move between pages only via the schema).

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?

Front-loaded with the core definition, then escalation to the failure-diagnosis use case and the deletion caveat. Dense but nearly every clause carries new information; the parenthetical service inventory is long but earns its place by signalling coverage breadth.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the description covers sources, scoping, and the history-loss caveat. Minor gap: it doesn't state whether merged multi-service results can fail partially or how `detail` levels differ, though the schema covers the latter.

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 100%, so the baseline is 3; the description still adds cross-tool meaning by tying `service`+`id` to a single movie/series/artist and by linking the returned `downloadId` to an *arr grab and to trigger_scan's postprocess action. It also points to arr://docs/get_history for the field reference rather than duplicating it.

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 scope: 'What happened to a download after it left the queue (grabbed, imported, failed, deleted), merged across the *arrs, SABnzbd, NZBGet...'. It enumerates the normalised event vocabulary and names the sibling it differs from (get_queue), so an agent can pick it without opening the schema.

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?

Explicit when-to-use with the motivating question ('why did last night's download fail') and the exclusion ('get_queue cannot see finished or failed items'). It also gives conditional routing: pass `service` and `id` to scope to one title, and use `source: "webhooks"` when a title was deleted and its *arr history is gone.

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