Skip to main content
Glama
drakonkat

wizzy-mcp-tmdb

discover_tv

Find TV shows using advanced filters for language, genres, air dates, networks, ratings, and streaming providers to support AI content curation.

Instructions

Performs advanced discovery of TV shows with extensive filtering options. Input: Optional parameters including language (ISO 639-1), sort_by, air dates, genres, networks, keywords, watch providers, vote counts, etc. Output: JSON with paginated results. Purpose: Enable complex, criteria-based TV show discovery for AI-driven content curation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
air_date.gteNoAir date from (YYYY-MM-DD)
air_date.lteNoAir date to (YYYY-MM-DD)
first_air_date.gteNoFirst air date from (YYYY-MM-DD)
first_air_date.lteNoFirst air date to (YYYY-MM-DD)
first_air_date_yearNoFirst air date year
include_null_first_air_datesNoInclude shows with null first air dates
languageNoISO 639-1 language (e.g., en-US)
pageNoPage number (1-500)
screened_theatricallyNoNot applicable to TV but accepted safely
sort_byNoSort by (e.g., popularity.desc, first_air_date.desc, vote_average.desc)
timezoneNoTimezone for air date lookups (e.g., America/New_York)
vote_average.gteNoMinimum vote average
vote_average.lteNoMaximum vote average
vote_count.gteNoMinimum vote count
vote_count.lteNoMaximum vote count
watch_regionNoISO 3166-1 region for watch providers
with_companiesNoComma-separated company IDs
with_genresNoComma-separated genre IDs
with_keywordsNoComma-separated keyword IDs
with_name_translationNoISO 639-1 language to filter by available translations
with_networksNoComma-separated network IDs
with_original_languageNoOriginal language (ISO 639-1)
with_overview_translationNoISO 639-1 language to filter overview translations
with_runtime.gteNoRuntime min (minutes)
with_runtime.lteNoRuntime max (minutes)
with_statusNoComma-separated production status (Returning Series|Planned|In Production|Ended|Canceled|Pilot)
with_typeNoComma-separated TV types (e.g., Documentary, News)
with_watch_monetization_typesNoComma-separated monetization types (flatrate|free|ads|rent|buy)
with_watch_providersNoComma-separated watch provider IDs
without_genresNoComma-separated genre IDs to exclude
without_keywordsNoComma-separated keyword IDs to exclude

Implementation Reference

  • The core handler function for the 'discover_tv' tool. It invokes the TMDB '/discover/tv' endpoint with provided arguments and returns the JSON response formatted as MCP content.
    handler: async (args = {}) => {
        const data = await tmdbFetch('/discover/tv', args);
        return {content: [{type: 'text', text: JSON.stringify(data, null, 2)}]};
    }
  • Input schema defining all optional parameters for filtering TV show discovery, including sort options, dates, genres, networks, providers, votes, etc.
    inputSchema: {
        type: "object",
        properties: {
            language: {type: "string", description: "ISO 639-1 language (e.g., en-US)"},
            sort_by: {
                type: "string",
                description: "Sort by (e.g., popularity.desc, first_air_date.desc, vote_average.desc)"
            },
            'air_date.gte': {type: "string", description: "Air date from (YYYY-MM-DD)"},
            'air_date.lte': {type: "string", description: "Air date to (YYYY-MM-DD)"},
            'first_air_date.gte': {type: "string", description: "First air date from (YYYY-MM-DD)"},
            'first_air_date.lte': {type: "string", description: "First air date to (YYYY-MM-DD)"},
            'first_air_date_year': {type: "number", description: "First air date year"},
            page: {type: "number", minimum: 1, description: "Page number (1-500)"},
            timezone: {type: "string", description: "Timezone for air date lookups (e.g., America/New_York)"},
            'with_runtime.gte': {type: "number", description: "Runtime min (minutes)"},
            'with_runtime.lte': {type: "number", description: "Runtime max (minutes)"},
            include_null_first_air_dates: {type: "boolean", description: "Include shows with null first air dates"},
            'with_original_language': {type: "string", description: "Original language (ISO 639-1)"},
            'without_genres': {type: "string", description: "Comma-separated genre IDs to exclude"},
            'with_genres': {type: "string", description: "Comma-separated genre IDs"},
            'with_networks': {type: "string", description: "Comma-separated network IDs"},
            'with_companies': {type: "string", description: "Comma-separated company IDs"},
            'with_keywords': {type: "string", description: "Comma-separated keyword IDs"},
            'without_keywords': {type: "string", description: "Comma-separated keyword IDs to exclude"},
            'screened_theatrically': {type: "boolean", description: "Not applicable to TV but accepted safely"},
            'with_status': {
                type: "string",
                description: "Comma-separated production status (Returning Series|Planned|In Production|Ended|Canceled|Pilot)"
            },
            'with_type': {type: "string", description: "Comma-separated TV types (e.g., Documentary, News)"},
            'vote_average.gte': {type: "number", description: "Minimum vote average"},
            'vote_average.lte': {type: "number", description: "Maximum vote average"},
            'vote_count.gte': {type: "number", description: "Minimum vote count"},
            'vote_count.lte': {type: "number", description: "Maximum vote count"},
            'with_watch_providers': {type: "string", description: "Comma-separated watch provider IDs"},
            'watch_region': {type: "string", description: "ISO 3166-1 region for watch providers"},
            'with_watch_monetization_types': {
                type: "string",
                description: "Comma-separated monetization types (flatrate|free|ads|rent|buy)"
            },
            'with_name_translation': {
                type: "string",
                description: "ISO 639-1 language to filter by available translations"
            },
            'with_overview_translation': {
                type: "string",
                description: "ISO 639-1 language to filter overview translations"
            }
        },
        additionalProperties: false
    },
  • The complete tool registration object for 'discover_tv' added to the tools array, which is used by MCP server handlers for ListTools and CallTool requests.
    {
        name: "discover_tv",
        description: "Performs advanced discovery of TV shows with extensive filtering options. Input: Optional parameters including language (ISO 639-1), sort_by, air dates, genres, networks, keywords, watch providers, vote counts, etc. Output: JSON with paginated results. Purpose: Enable complex, criteria-based TV show discovery for AI-driven content curation.",
        inputSchema: {
            type: "object",
            properties: {
                language: {type: "string", description: "ISO 639-1 language (e.g., en-US)"},
                sort_by: {
                    type: "string",
                    description: "Sort by (e.g., popularity.desc, first_air_date.desc, vote_average.desc)"
                },
                'air_date.gte': {type: "string", description: "Air date from (YYYY-MM-DD)"},
                'air_date.lte': {type: "string", description: "Air date to (YYYY-MM-DD)"},
                'first_air_date.gte': {type: "string", description: "First air date from (YYYY-MM-DD)"},
                'first_air_date.lte': {type: "string", description: "First air date to (YYYY-MM-DD)"},
                'first_air_date_year': {type: "number", description: "First air date year"},
                page: {type: "number", minimum: 1, description: "Page number (1-500)"},
                timezone: {type: "string", description: "Timezone for air date lookups (e.g., America/New_York)"},
                'with_runtime.gte': {type: "number", description: "Runtime min (minutes)"},
                'with_runtime.lte': {type: "number", description: "Runtime max (minutes)"},
                include_null_first_air_dates: {type: "boolean", description: "Include shows with null first air dates"},
                'with_original_language': {type: "string", description: "Original language (ISO 639-1)"},
                'without_genres': {type: "string", description: "Comma-separated genre IDs to exclude"},
                'with_genres': {type: "string", description: "Comma-separated genre IDs"},
                'with_networks': {type: "string", description: "Comma-separated network IDs"},
                'with_companies': {type: "string", description: "Comma-separated company IDs"},
                'with_keywords': {type: "string", description: "Comma-separated keyword IDs"},
                'without_keywords': {type: "string", description: "Comma-separated keyword IDs to exclude"},
                'screened_theatrically': {type: "boolean", description: "Not applicable to TV but accepted safely"},
                'with_status': {
                    type: "string",
                    description: "Comma-separated production status (Returning Series|Planned|In Production|Ended|Canceled|Pilot)"
                },
                'with_type': {type: "string", description: "Comma-separated TV types (e.g., Documentary, News)"},
                'vote_average.gte': {type: "number", description: "Minimum vote average"},
                'vote_average.lte': {type: "number", description: "Maximum vote average"},
                'vote_count.gte': {type: "number", description: "Minimum vote count"},
                'vote_count.lte': {type: "number", description: "Maximum vote count"},
                'with_watch_providers': {type: "string", description: "Comma-separated watch provider IDs"},
                'watch_region': {type: "string", description: "ISO 3166-1 region for watch providers"},
                'with_watch_monetization_types': {
                    type: "string",
                    description: "Comma-separated monetization types (flatrate|free|ads|rent|buy)"
                },
                'with_name_translation': {
                    type: "string",
                    description: "ISO 639-1 language to filter by available translations"
                },
                'with_overview_translation': {
                    type: "string",
                    description: "ISO 639-1 language to filter overview translations"
                }
            },
            additionalProperties: false
        },
        handler: async (args = {}) => {
            const data = await tmdbFetch('/discover/tv', args);
            return {content: [{type: 'text', text: JSON.stringify(data, null, 2)}]};
        }
    },
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'Output: JSON with paginated results,' which is useful for understanding the response format and pagination behavior. However, it doesn't cover other critical aspects like rate limits, authentication needs, error handling, or whether it's a read-only operation (implied by 'discovery' but not explicit). The description adds some value but leaves gaps for a tool with 31 parameters.

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?

The description is efficiently structured into three sentences: stating the tool's function, detailing inputs/outputs, and explaining the purpose. It's front-loaded with the core action and avoids redundancy. However, the second sentence is somewhat lengthy with a list of parameter examples, slightly reducing conciseness.

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?

Given the tool's complexity (31 parameters, no output schema, no annotations), the description is moderately complete. It covers the purpose, input scope, and output format but lacks details on behavioral traits like rate limits or error handling. For a discovery tool with extensive filtering, more guidance on usage constraints or response structure would improve completeness, but it's adequate as a baseline.

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 description lists examples of parameters ('language, sort_by, air dates, genres, networks, keywords, watch providers, vote counts, etc.') and notes they are optional. Since schema description coverage is 100%, the schema already documents all 31 parameters thoroughly. The description adds minimal semantic context beyond what's in the schema, meeting the baseline of 3 for high schema coverage.

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?

The description clearly states the tool's purpose: 'Performs advanced discovery of TV shows with extensive filtering options' and 'Enable complex, criteria-based TV show discovery for AI-driven content curation.' It specifies the verb ('discovery'), resource ('TV shows'), and scope ('advanced' with 'extensive filtering'), distinguishing it from siblings like search_tmdb_tv or trending_tv by emphasizing comprehensive filtering capabilities.

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

Usage Guidelines3/5

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

The description implies usage context ('for AI-driven content curation') and mentions 'extensive filtering options,' suggesting it's for complex queries. However, it lacks explicit guidance on when to use this tool versus alternatives like search_tmdb_tv (which might be for simpler searches) or trending_tv (for popularity-based discovery). No exclusions or prerequisites are stated.

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

Install Server

Other Tools

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/drakonkat/wizzy-mcp-tmdb'

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