Skip to main content
Glama
icyrainz

XMLTV MCP Server

by icyrainz

XMLTV MCP Server

MCP server for accessing Tunarr XMLTV feed data. Provides tools to query TV channels, programmes, schedules, and search content.

Features

  • get_channels - List all available TV channels

  • get_now_playing - See what's currently playing on all channels

  • get_schedule - Get upcoming schedule for a specific channel

  • search_programmes - Search for programmes by title or description

  • get_programme_details - Get detailed information about a specific programme

Related MCP server: MCP *arr Server

Installation

npm install
npm run build

Configuration

Set the XMLTV URL via environment variable (defaults to http://tunarr.lan/api/xmltv.xml):

export XMLTV_URL="http://your-tunarr-instance/api/xmltv.xml"

Usage with Claude Desktop

Add to your Claude Desktop configuration file:

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%/Claude/claude_desktop_config.json

Configuration:

{
  "mcpServers": {
    "xmltv": {
      "command": "node",
      "args": ["/absolute/path/to/xmltv-mcp/dist/index.js"],
      "env": {
        "XMLTV_URL": "http://tunarr.lan/api/xmltv.xml"
      }
    }
  }
}

After updating the configuration, restart Claude Desktop.

Tools

get_channels

Lists all available channels.

Example:

What channels are available?

Response:

[
  {
    "id": "C1.49.tunarr.com",
    "name": "Animation (Simpsons, South Park, Futurama, Rick & Morty, Courage)"
  },
  {
    "id": "C2.50.tunarr.com",
    "name": "Sitcom (Big Bang Theory, Friends, How I Met Your Mother)"
  }
]

get_now_playing

Shows what's currently playing on all channels.

Example:

What's on TV right now?

Response:

[
  {
    "channel": {
      "id": "C1.49.tunarr.com",
      "name": "Animation"
    },
    "programme": {
      "title": "The Simpsons",
      "subtitle": "Homer's Odyssey",
      "start": "20251221180000 +0000",
      "stop": "20251221183000 +0000"
    }
  }
]

get_schedule

Get upcoming programmes for a specific channel.

Parameters:

  • channel_id (required) - Channel ID (e.g., "C1.49.tunarr.com")

  • hours_ahead (optional) - Hours to look ahead (default: 24)

Example:

Show me the schedule for the Animation channel for the next 12 hours

search_programmes

Search for programmes by title, subtitle, or description.

Parameters:

  • query (required) - Search term

Example:

Search for Simpsons episodes

Response:

[
  {
    "channel": {
      "id": "C1.49.tunarr.com",
      "name": "Animation"
    },
    "title": "The Simpsons",
    "subtitle": "Bart the Genius",
    "start": "20251221190000 +0000",
    "stop": "20251221193000 +0000"
  }
]

get_programme_details

Get detailed information about a specific programme.

Parameters:

  • channel_id (required) - Channel ID

  • start_time (required) - Programme start time in XMLTV format (YYYYMMDDHHMMSS +0000)

Example:

Get details for the programme on C1.49.tunarr.com at 20251221180000 +0000

Development

# Build
npm run build

# Watch mode
npm run dev

Data Caching

The server caches XMLTV data for 5 minutes to reduce load on your Tunarr instance. The cache automatically refreshes when expired.

Channel Information

Based on your Tunarr setup, the following channels are available:

  1. C1.49.tunarr.com - Animation (Simpsons, South Park, Futurama, Rick & Morty, Courage)

  2. C2.50.tunarr.com - Sitcom (Big Bang Theory, Friends, How I Met Your Mother)

  3. C3.51.tunarr.com - Space (SEA, Anton Petrov, Cool Worlds, Astrum - YouTube science)

  4. C4.52.tunarr.com - Classic Sci-Fi (Twilight Zone, X-Files)

License

MIT

Available Tools

5 tools
get_channelsB

Get list of all available TV channels

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a read operation ('Get list'), but doesn't mention whether it returns live data, cached data, pagination, rate limits, authentication requirements, or error conditions. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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

Conciseness5/5

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

The description is a single, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a simple retrieval tool and front-loads the essential information.

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

Completeness3/5

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

For a simple read-only tool with no parameters and no output schema, the description covers the basic purpose adequately. However, without annotations or output schema, it should ideally mention what format the channel list returns (e.g., array of objects with IDs/names) and any behavioral constraints. The lack of output schema increases the need for return value description.

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?

The tool has zero parameters (schema coverage 100%), so the description doesn't need to explain any inputs. The baseline for zero parameters is 4, as there are no parameters requiring semantic explanation beyond what the empty schema already indicates.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('list of all available TV channels'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'get_schedule' or 'search_programmes', but the focus on channels rather than programmes or schedules provides implicit differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_schedule' (which might return channel schedules) or 'search_programmes' (which might filter by content). There's no mention of prerequisites, context, or comparison with sibling tools.

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

get_now_playingB

Get currently playing programmes on all channels

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Get' implies a read operation, it doesn't specify whether this requires authentication, has rate limits, returns real-time vs cached data, or what format the response takes. The description is minimal and lacks important behavioral context for a tool with zero annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a zero-parameter tool and front-loads the essential information. Every word earns its place.

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

Completeness3/5

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

For a zero-parameter tool with no output schema, the description provides basic purpose but lacks important context. It doesn't explain what 'currently playing' means temporally (real-time? within what window?), what data is returned, or how this differs from schedule-based siblings. The minimal description is adequate but has clear gaps given the tool's function.

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?

The tool has zero parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, and the schema already fully documents this. No additional parameter information is needed or provided.

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

Purpose4/5

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

The description clearly states the verb 'Get' and resource 'currently playing programmes on all channels', making the purpose immediately understandable. It doesn't specifically differentiate from siblings like 'get_schedule' or 'search_programmes', but the scope ('currently playing' vs scheduled/future programs) provides some implicit distinction.

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

Usage Guidelines2/5

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

No explicit guidance is provided about when to use this tool versus alternatives like 'get_schedule' or 'search_programmes'. The description implies it's for real-time/current programming only, but doesn't state this as explicit usage criteria or mention any prerequisites or exclusions.

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

get_programme_detailsC

Get detailed information about a specific programme

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYesChannel ID
start_timeYesProgramme start time in XMLTV format (YYYYMMDDHHMMSS +0000)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states it's a read operation ('Get'), implying it's likely safe and non-destructive, but doesn't cover aspects like rate limits, error handling, or response format. For a tool with zero annotation coverage, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly.

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

Completeness2/5

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

Given the tool has no annotations and no output schema, the description is incomplete. It doesn't explain what 'detailed information' includes, the return format, or any behavioral traits like pagination or errors. For a tool with 2 required parameters and no structured output, more context is needed to be fully helpful.

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

Parameters3/5

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

The input schema has 100% description coverage, with clear documentation for both parameters (channel_id and start_time). The description adds no additional meaning beyond the schema, such as explaining how these parameters uniquely identify a programme or providing usage examples. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('detailed information about a specific programme'), making the purpose understandable. However, it doesn't distinguish this tool from sibling tools like 'search_programmes' or 'get_schedule', which might also retrieve programme information, so it lacks sibling differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context, or exclusions, such as how it differs from 'search_programmes' or 'get_schedule', leaving the agent without usage direction.

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

get_scheduleC

Get upcoming schedule for a specific channel

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYesChannel ID (e.g., C1.49.tunarr.com)
hours_aheadNoNumber of hours to look ahead (default: 24)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action but does not cover critical aspects like whether this is a read-only operation, potential rate limits, authentication needs, error handling, or the format of the returned schedule. This leaves significant gaps in understanding the tool's behavior.

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

Conciseness5/5

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

The description is a single, direct sentence that efficiently conveys the core purpose without any redundant information. It is appropriately sized and front-loaded, making it easy to understand at a glance.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It does not explain what the returned schedule includes (e.g., list of programs, timings) or any behavioral traits, which are essential for a tool with parameters and no structured output documentation. This leaves the agent with insufficient context for effective use.

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

Parameters3/5

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

The input schema has 100% description coverage, with clear documentation for 'channel_id' and 'hours_ahead'. The description adds no additional parameter semantics beyond what the schema provides, such as examples of valid channel IDs or constraints on 'hours_ahead'. Thus, it meets the baseline for high schema coverage without adding extra value.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('upcoming schedule for a specific channel'), making the purpose unambiguous. However, it does not explicitly differentiate from sibling tools like 'get_now_playing' or 'search_programmes', which might also involve schedule-related queries, so it falls short of a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as 'get_now_playing' for current content or 'search_programmes' for broader searches. It lacks explicit when-to-use or when-not-to-use instructions, leaving usage context implied at best.

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

search_programmesC

Search programmes by title, subtitle, or description

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe how it behaves: no information about pagination, rate limits, authentication requirements, error conditions, or what happens when no results are found. For a search tool with zero annotation coverage, this leaves significant gaps in understanding operational behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence that communicates the core functionality without unnecessary words. It's appropriately sized for a simple search tool and front-loads the essential information. Every word earns its place in this concise statement.

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

Completeness2/5

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

For a search tool with no annotations and no output schema, the description is insufficient. It doesn't explain what format results are returned in, whether there are limitations on search scope, or how results are ordered. Given the lack of structured metadata, the description should provide more operational context to be complete.

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

Parameters3/5

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

Schema description coverage is 100% with the single 'query' parameter well-documented in the schema. The description adds minimal value by mentioning what fields are searched (title, subtitle, description), which provides context about how the query parameter is used. This meets the baseline for high schema coverage but doesn't significantly enhance parameter understanding beyond the schema.

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

Purpose4/5

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

The description clearly states the action ('search') and target resource ('programmes'), specifying the searchable fields (title, subtitle, description). It distinguishes from siblings like 'get_channels' or 'get_schedule' by focusing on search functionality rather than retrieval of specific data sets. However, it doesn't explicitly differentiate from potential similar search tools that might exist.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_programme_details' or 'get_now_playing'. It doesn't mention prerequisites, limitations, or typical use cases. The agent must infer usage from the tool name and description alone.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv1.0.0
    • First observedget_channels
    • First observedget_now_playing
    • First observedget_programme_details
    • First observedget_schedule
    • First observedsearch_programmes

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting different aspects of the XMLTV domain: channel listing, current programs, program details, channel schedules, and program search. There is no overlap in functionality, making tool selection straightforward for an agent.

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern (get_channels, get_now_playing, get_programme_details, get_schedule, search_programmes) with clear, descriptive names. The pattern is uniform throughout the set, enhancing readability and predictability.

Tool Count5/5

With 5 tools, this server is well-scoped for its XMLTV purpose, covering key operations without bloat. Each tool serves a distinct and necessary function, making the count appropriate for the domain's typical use cases.

Completeness4/5

The tool set provides strong coverage for querying and browsing TV data, including channels, schedules, programs, and search. A minor gap exists in update or management operations (e.g., modifying channels or programs), but this is reasonable for a read-only server focused on data retrieval.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/icyrainz/xmltv-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server