Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
XTREAM_TZNoTimezone used to display times, e.g. Europe/Dublinyour system timezone
XTREAM_SERVERYesThe address your IPTV app uses, e.g. http://provider.example:80
XTREAM_PASSWORDYesYour Xtream Codes password
XTREAM_USERNAMEYesYour Xtream Codes username
XTREAM_CACHE_DIRNoDirectory used to cache the channel list and guide~/Library/Caches/mcp-xtream (macOS), ~/.cache/mcp-xtream (Linux)
XTREAM_DOWNLOAD_DIRNoDirectory where downloaded programmes are saved~/Movies/IPTV (macOS), ~/Videos/IPTV (Linux)

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": true
}
resources
{
  "subscribe": false,
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
subscribe_eventsA

Register this session for server-push download events.

Call once after connecting (and again after reconnecting; repeat calls are harmless). When a download finishes, fails or is cancelled, the server pushes an MCP log notification with logger="events" and a payload like {"event": "download_finished", "title": ..., "output": ..., "message": ...}. The first subscription from a client covers downloads that end from then on; later ones also catch up on any that ended while disconnected. Requires a persistent session (stdio).

account_infoA

Account status: expiry, connection limit and current active connections (fetched live).

list_channelsA

Find live channels by name or category (case-insensitive; all words must match). Each result includes stream_id, epg_id, catchup_days (0 = no catch-up archive; still fine for live TV) and what's on now. catchup_only keeps just channels with an archive.

search_programmesA

Search the TV guide by programme title (all words must match).

channel: optional channel-name filter (e.g. "bbc one"). The window is hours_back before now to hours_ahead after. Each result lists every channel carrying that guide entry, best catch-up bet first, each with a catchup_status (see server instructions) and catchup_available (true for in_window / just_aired). catchup_only keeps only channels where it's true, and drops programmes with none. Results are newest first.

channel_scheduleC

A channel's guide for one day. date: 'today', 'yesterday', 'tomorrow' or YYYY-MM-DD (local time).

programme_detailsA

Everything the guide knows about one programme: full description, air times and every channel carrying it (with catchup availability).

Use this to identify the episode yourself before downloading; the guide has no season/episode numbers.

check_recordingA

Ask the provider whether this channel's catch-up recording of a programme exists right now (the advertised window is only a hint).

Opens the recording briefly (a 1 KB request) and reports whether it's there and how big it is. That uses one of the account's connections for a moment, so it refuses while they're all in use (e.g. the user is watching TV) unless force=True, and while a download is running.

download_programmeA

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 ' - - '.

download_statusB

Progress of a download job: state is queued, downloading, converting, done, failed or cancelled.

list_downloadsC

Recent download jobs, newest first.

cancel_downloadA

Cancel a running download (including its MKV conversion) and delete its partial file. Poll download_status to see it reach 'cancelled'.

refresh_dataA

Re-fetch the channel list and TV guide from the provider now. They refresh automatically (guide every 3h, channels every 6h) when a tool is used; past programmes are kept for 7 days so catchup stays searchable.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 12 tools

Disambiguation4/5

Each tool targets a distinct step in the workflow: channel discovery (list_channels), guide lookup (search_programmes, channel_schedule, programme_details), availability probing (check_recording), and download lifecycle (download_programme, download_status, list_downloads, cancel_download). The guide-related trio (search_programmes / channel_schedule / programme_details) and the two availability signals (programme_details' catchup_available vs check_recording) are close enough that an agent may occasionally hesitate, but descriptions draw clear boundaries.

Naming Consistency3/5

All snake_case, which is good, but the convention is mixed: about half are verb_noun (list_channels, search_programmes, download_programme, cancel_download, refresh_data) and the rest are bare noun phrases (account_info, download_status, channel_schedule, programme_details). Readable and semantically sensible, but not a predictable pattern an agent can extrapolate from.

Tool Count5/5

Twelve tools for an IPTV/catch-up download server is well-scoped: discovery, EPG, availability check, download controls, event subscription and cache refresh each earn their place with no filler or redundancy.

Completeness4/5

The catch-up download lifecycle is fully covered (search → verify recording → download → status → list → cancel), plus account info, push events and cache refresh. The main gap is live playback: list_channels returns stream_ids but there is no tool to obtain a playable stream URL or otherwise watch live TV, and there is no way to delete or manage completed files.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues