Skip to main content
Glama

Download Programme

download_programme

Save a past programme from a channel's catchup archive in the background, returning a job ID for status polling; optionally name files for Jellyfin/Plex.

Instructions

Download a past programme from a channel's catchup archive in the background. Returns a job_id; poll download_status.

Identify the programme with programme_id (from search_programmes / channel_schedule), or give start/end as ISO local datetimes (e.g. 2026-10-18T10:00) plus a title. The default format 'ts' saves the provider's stream untouched (Jellyfin/Plex play it). 'mkv' remuxes with ffmpeg (no re-encode, keeps subtitles) only if the user asks for it; it stays .ts if ffmpeg is missing or the video is interlaced (fields don't convert cleanly), with a warning on the job. force=True skips the free-connection check. Providers often take a few hours after a programme ends to make its recording available; a "not ready yet" failure means try again later.

Media-server naming (optional): give show (the series name as your media server knows it) to save as Jellyfin/Plex TV layout with an .nfo file: with season+episode -> 'Show/Season 02/Show - S02E05 - <episode_title>', without them -> date-based 'Show/Show - 2026-10-18'. season/episode are your best-effort identification (see programme_details); only pass them when confident. Without show, files are named ' - - '.

Input Schema

NameRequiredDescriptionDefault
endNo
showNo
forceNo
startNo
titleNo
formatNots
seasonNo
episodeNo
stream_idYes
programme_idNo
episode_titleNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does a lot: async job semantics, ffmpeg fallback to .ts with a warning, interlaced-video limitation, force skipping the connection check, and 'not ready yet' meaning retry later. It does not say where files are written, what happens if a file already exists, or whether a failed job leaves partial output — meaningful gaps for a write operation.

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 job pattern, then identification, then format, then naming — a sensible priority order with no filler sentences. It is on the long side, and the media-server naming paragraph is dense, but every clause carries operational information.

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 needn't be explained, and the description still handles failure modes, format fallbacks, and naming layouts that the schema cannot express. The missing explanation of the required stream_id parameter is the one thing an agent could get wrong when invoking it.

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 0% across 11 parameters, so the description must compensate and largely does: format enum values and their trade-offs, force, show, season/episode, episode_title (via the naming pattern), and start/end/title are all given meaning beyond the bare types. The notable hole is stream_id, the only required parameter, which is never mentioned.

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?

Opens with a specific verb, resource, and source ('Download a past programme from a channel's catchup archive in the background'), which immediately separates it from siblings like download_status, cancel_download, and list_downloads. The async job model (returns job_id; poll download_status) is stated up front.

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?

Explicitly names two identification routes (programme_id from search_programmes/channel_schedule, or start/end plus title) and routes the agent to programme_details for season/episode verification. Gives a clear when-not for the mkv format ('only if the user asks for it'), plus guidance to omit season/episode unless confident.

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