TMDB MCP Server
Search and explore TMDB movies, TV shows, and people, with optional IMDb/Rotten Tomatoes/Metacritic ratings and awards via OMDb.
Search movies, TV shows, people, and mixed results; resolve keywords, companies, collections, and watch providers.
Get full movie/TV details, compact cards for 1–20 titles, genres, certifications, localization, and optional ratings/awards.
Retrieve cast/crew, person biographies and filmographies, franchises/collections, and episode-level TV details.
Find recommendations, similar titles, trending titles, and discover titles with structured filters.
Check where to watch, trailers/videos, and user reviews.
Resolve IMDb IDs, list TV seasons/episodes, and look up IMDb/RT/Metacritic ratings standalone.
Provides IMDb ratings enrichment via OMDb, included in movie/TV details when available.
Provides Metacritic ratings enrichment via OMDb, included in movie/TV details when available.
Provides Rotten Tomatoes ratings enrichment via OMDb, included in movie/TV details when available.
Primary source for movie, TV show, and person metadata; provides search, details, credits, recommendations, trending, discover, watch providers, and more via TMDB API.
Provides links to trailers, teasers, and clips for movies and TV shows via the get_videos tool.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TMDB MCP Serverfind 'The Matrix' and get its ratings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TMDB MCP Server
An MCP server for The Movie Database (TMDB): search and look up movies, TV shows and people, and read IMDb / Rotten Tomatoes / Metacritic ratings (via OMDb) in the same call.
The server speaks standard MCP over stdio, so it works with any MCP client (Claude Desktop/Code, Cursor, VS Code, Cline, …).
Once it's connected, just ask your agent in natural language (needs a free TMDB token; see Getting your credentials):
"Search for the movie Dune: Part Two and show its overview, genres and runtime."
"What movies are trending this week?"
"Find TV shows similar to Breaking Bad."
"Who directed Oppenheimer? Show the main cast."
"What's Greta Gerwig's filmography?"
"Discover highly-rated sci-fi movies from the 2010s, sorted by rating."
"Where can I stream The Bear in the US?"
"Show me the trailer for Deadpool & Wolverine."
"List the episodes of Severance season 1."
"Which movie has IMDb id tt0111161?"
"Search for people named Zendaya."
"Get the year, genres and rating for these five movies in one go: Dune, Dune: Part Two, Arrival, Sicario and Blade Runner 2049."
"What are the best limited series to binge over a weekend?"
"What TV shows can I watch with my 9-year-old kid?"
"What movies has A24 produced?"
"What are Tarantino's best-rated crime movies?"
"Who composed the music for My Neighbor Totoro, and what else has he scored?"With an optional (free) OMDb key, ratings are added too:
"What are the IMDb, Rotten Tomatoes and Metacritic scores for The Godfather?"
"Compare the critics' scores for Barbie and Oppenheimer."Install
Add it to your MCP client's config. The only required credential is a TMDB v4
Read Access Token; OMDB_API_KEY (ratings) and TMDB_LANGUAGE / TMDB_REGION
(localization) are optional.
Via npx (no install):
{
"mcpServers": {
"tmdb": {
"command": "npx",
"args": ["-y", "tmdb-mcp"],
"env": {
"TMDB_API_TOKEN": "your-tmdb-v4-read-access-token (required)",
"OMDB_API_KEY": "your-omdb-key (optional: IMDb/RT/Metacritic ratings)",
"TMDB_LANGUAGE": "en-US (optional: localize, e.g. ru-RU)",
"TMDB_REGION": "US (optional: region for certifications, e.g. RU)"
}
}
}
}Replace each value with your own. Only
TMDB_API_TOKENis required; delete the lines marked optional if you don't need them.
As a .mcpb bundle (easiest for Claude Desktop): download tmdb-mcp.mcpb
from the latest release,
then open it / drag it into Claude Desktop's Extensions. It's a self-contained
bundle (no Node or npm needed); enter the token and the optional fields in the
install dialog. Re-download and reinstall to update.
From source: git clone, then npm ci && npm run build, and point the client
at it with "command": "node", "args": ["/ABS/PATH/tmdb-mcp/dist/index.js"] and
the same env as above.
See docs/clients.md for per-client details and all tunables.
Related MCP server: moviefinder-mcp
What it does
Tool | Purpose |
| Find titles/people by name → TMDB id |
| Search movies, TV and people at once (each row has a |
| Full details + IMDb/RT/Metacritic ratings (toggle with |
| Compact card(s) (title/year/genres/vote average, ratings opt-in) for 1-20 ids in one call |
| Biography, department, links |
| Top-billed cast and headline crew (TV: whole run, ranked by episode count) |
| Recommendations from co-viewing data (what fans also liked) |
| Algorithmically similar titles ( |
| What's popular now (movies / TV / people, day or week) |
| Movies in cinemas now ( |
| Genre id ↔ name reference |
| Filter by genre, date range, rating, cast/crew, companies, origin country, keywords, providers (+/-, access type), certification, regional release dates |
| Same, plus networks/type/status and episodes airing in a date range, but no cast/crew/person or regional release-date filter (use |
| Where to stream/rent/buy, by region (JustWatch via TMDB) |
| A person's filmography (cast & crew) |
| Trailers/teasers/clips (YouTube links) |
| User reviews (author, rating, text) for a movie/TV |
| A movie franchise/collection and its parts, in release order |
| Resolve an IMDb id → TMDB movie/TV/person |
| Season episode list / single-episode details |
| Resolve keyword names → ids for |
| Resolve a production company name → id for |
| Resolve a franchise name (e.g. 'harry potter') → collection id for |
| Resolve a streaming/rental service name (e.g. 'Netflix') → id for |
| IMDb/RT/Metacritic ratings by IMDb id or title (standalone) |
Prompts. Alongside the tools above, the server exposes two MCP prompts:
recommend_similar (title, optional media_type, optional count) plans a
search for titles similar to one the user liked, driving get_similar /
get_movie_recommendations / get_tv_recommendations / discover_movies /
discover_tv instead of relying on the model's own knowledge. top_by_entity
(name, optional entity_type, genre, media_type, count) finds the
best-regarded titles from a person or a production company/studio (e.g. "A24's
top movies" or "Tarantino's best crime films") via discover_movies/
discover_tv, and for a person's TV work specifically falls back to
get_person_credits (TMDB's own /discover/tv can't filter by person at all).
Backbone vs. enrichment. TMDB is the primary source (search, metadata,
people, trending). OMDb is optional enrichment: get_movie/get_tv chain the
imdb_id TMDB returns into an OMDb lookup, so ratings come back in one call,
along with a free-text awards summary (major-award wins/nominations, e.g. Oscars
for a film or Emmys for a show, for the title as a whole, not attributed to any
one person) and OMDb's own age rating (ratings.rated, separate from this
server's own certification). Without an OMDb key the TMDB data still works;
the ratings field just reports that it is unconfigured.
Localization. Set TMDB_LANGUAGE (e.g. ru-RU) and TMDB_REGION (e.g.
RU) to get localized titles/overviews/genre names and region-specific
certifications. search_movies/search_tv/search_multi/search_people/
search_collections, get_movie/get_tv/get_movies/get_tv_shows/get_person,
get_collection, get_movie_releases and discover_movies/discover_tv also
accept a per-call language override.
Getting your credentials
One token is required (TMDB); the OMDb key is optional. Both are free.
TMDB token (required). Create a free account at themoviedb.org, then open Settings → API and request an API key (personal use). Copy the "API Read Access Token" (the long v4 token, not the short v3 key) into
TMDB_API_TOKEN. It's sent asAuthorization: Bearer ….OMDb key (optional). Grab a free key at omdbapi.com/apikey.aspx (the free tier is fine), click the activation link in the email, and set
OMDB_API_KEY. This unlocksget_ratingsand the IMDb / Rotten Tomatoes / Metacritic scores in movie and TV details. Without it, everything else still works.
Put these in your MCP client config's env block (see
docs/clients.md for per-client snippets). Never commit them.
TMDB_LANGUAGE / TMDB_REGION optionally set default locale/region (e.g. ru-RU, RU).
Advanced tuning (env-only, no install-UI equivalent)
Sensible defaults; only set these if you know you need to. Env var only, not exposed in Claude Desktop's install form, so CLI/Docker users set them directly.
Variable | Default | Purpose |
|
| Override TMDB's API base (e.g. a proxy) |
|
| Override OMDb's API base |
|
| Per-request timeout before aborting |
|
| Retries on a transient upstream failure |
|
| Minimum spacing between TMDB requests |
|
| Minimum spacing between OMDb requests |
|
| How long cached responses stay fresh |
|
|
|
If TMDB/OMDb is briefly down and a tool falls back to a cached-but-expired
response rather than failing, the result carries
_meta: {"tmdb-mcp/stale": true} alongside the normal data, so a client can
tell a degraded answer from a fresh one.
Develop
npm install
npm run build # type-check + bundle to dist/index.js
npm test # node:test (mocked, offline)
npm run lint
npm run format
npm run check:api # live upstream health-check (needs the env credentials)
npm run inspector # run under the MCP InspectorRuntime requires Node ≥ 22.18. Contributor/agent guidance lives in AGENTS.md.
Updating
.mcpbbundle: download the new bundle from the releases page and reinstall.From source:
git pull && npm ci && npm run build.npx: unpinned
npx -y tmdb-mcpfetches the latest on the next run.
This product uses the TMDB API but is not endorsed or certified by TMDB.
Privacy Policy
tmdb-mcp runs entirely on your own machine and collects no data of its own.
See PRIVACY.md for exactly what it sends to TMDB/OMDb and what
(if anything) it stores locally.
Security
Read-only, two fixed upstream hosts, credentials never persisted. See SECURITY.md for the full breakdown and how to report a vulnerability.
License
MIT © Grinv
Available Tools
33 toolsdiscover_moviesDiscover movies (filters)ARead-only
Find movies by structured filters instead of a title query: genres (include/exclude), year or release-date range, TMDB vote-average range, vote count, runtime range, original language, cast/crew/people, companies (include/exclude), origin country, keywords (include/exclude), watch providers (include/exclude) and access model (subscription/rent/buy/free/ads), certification, a release window in one country by release type (any_release_date_gte/lte + region + with_release_type — e.g. 'movies in German cinemas this month'), an adult-content toggle, and sort order. certification/with_watch_providers/without_watch_providers/with_watch_monetization_types/with_release_type/region have validation and silent-fallback rules — see their own field descriptions. Use for 'popular sci-fi from the 1990s with a TMDB vote average above 7 available on Netflix', or for a specific person's work in one genre — 'which of this director's/actor's/composer's films are animated' — via with_crew/with_cast/with_people + with_genres together; get_person_credits has no genre filter, so this combination is the right tool for that question, not that one. Resolve ids with get_movie_genres, search_people, search_keywords, search_companies, search_watch_providers.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| year | No | Release / first-air year. | |
| region | No | ISO-3166-1 country code: limits any_release_date_gte/lte (and with_release_type) to releases in this country, e.g. 'DE'. Requires any_release_date_gte or any_release_date_lte; it has no effect on year/release_date_gte/lte. An unrecognized code such as 'ZZ' matches nothing ('XX' is a real TMDB pseudo-region, not an error). Movie-only. | |
| sort_by | No | Sort order. Defaults to TMDB's own default (roughly popularity-based) if omitted. | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| min_votes | No | Minimum vote count (filters obscure titles). | |
| with_cast | No | TMDB person ids, restricted to cast (actor) roles. Use search_people to resolve an actor's name to their id. Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| with_crew | No | TMDB person ids, restricted to crew roles (e.g. a director). Use search_people to resolve a name to their id. Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| max_rating | No | Maximum TMDB vote average (0-10). | |
| min_rating | No | Minimum TMDB vote average (0-10). Must be <= max_rating if both are given. | |
| max_runtime | No | Maximum runtime in minutes. | |
| min_runtime | No | Minimum runtime in minutes. Must be <= max_runtime if both are given. | |
| with_genres | No | TMDB genre ids; get them from get_movie_genres/get_tv_genres. Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| with_people | No | TMDB person ids, matching either a cast or crew role. Use search_people to resolve a name to their id. Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| watch_region | No | Two-letter ISO-3166-1 country code, e.g. 'US', whose streaming catalog with_watch_providers / without_watch_providers / with_watch_monetization_types filter on. Only valid together with at least one of them. | |
| certification | No | Filter by exact age/content certification, e.g. 'PG-13' (movies) or 'TV-Y7' (TV); join several with '|' to match ANY of them, e.g. 'G|PG' for kids/family movies or 'TV-Y|TV-Y7|TV-G' for kids' TV. Requires certification_country, and a certification_country TMDB doesn't recognize silently disables this filter (returns unfiltered results) instead of erroring or matching nothing — double-check the country actually has data for that rating system. Matching is case-insensitive (verified live: 'pg-13' and 'PG-13' return identical results) but must otherwise exactly match one of TMDB's known rating strings for that country's system, punctuation included (e.g. 'PG-13', not 'PG13'). Unlike get_movie/get_tv's own certification field (which falls back to the US rating, then any country, when the requested region has none), this filter has NO fallback: a title with no certification entry at all for the exact country given is silently excluded from results, even if it's certified elsewhere (e.g. has a US rating) — for a country with sparse TMDB certification data, prefer certification_country='US' for broader, more reliable coverage over the user's actual country if completeness matters more than exact local ratings. | |
| include_adult | No | Include adult (NSFW) results. Defaults to false. | |
| with_keywords | No | TMDB keyword ids (use search_keywords to resolve names → ids). Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| with_companies | No | TMDB production company ids (use search_companies to resolve names → ids). Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| without_genres | No | Comma-separated TMDB genre ids to exclude; get ids from get_movie_genres/get_tv_genres. | |
| release_date_gte | No | Only entries released on/after this date (YYYY-MM-DD). Must be <= release_date_lte if both are given. | |
| release_date_lte | No | Only entries released on/before this date (YYYY-MM-DD). | |
| without_keywords | No | Comma-separated TMDB keyword ids to exclude (use search_keywords to resolve names → ids). | |
| with_release_type | No | Only count releases of these types toward any_release_date_gte/lte (and region): 'premiere', 'theatrical_limited', 'theatrical' (wide cinema release), 'digital' (VOD/streaming), 'physical' (DVD/Blu-ray), 'tv' (TV broadcast). Several values match ANY of them. Requires any_release_date_gte or any_release_date_lte. | |
| without_companies | No | Comma-separated TMDB production company ids to exclude: titles produced by ANY of them are dropped (use search_companies to resolve names → ids). | |
| with_origin_country | No | Only titles whose country of origin (where they were produced, not where they can be watched) is one of these ISO-3166-1 codes, e.g. ['KR'] for Korean titles; several codes match ANY of them. An unrecognized code such as 'ZZ' matches nothing. | |
| any_release_date_gte | No | Only movies with at least one release (any country and release type, re-releases included) on/after this date (YYYY-MM-DD) — unlike release_date_gte, which uses each movie's original premiere date. Narrow it with region and with_release_type, e.g. region='DE' + with_release_type=['theatrical'] + this window = movies in German cinemas then. A re-released movie matches, but its row's release_date stays the original one. Must be <= any_release_date_lte if both are given. | |
| any_release_date_lte | No | Only movies with at least one release (see any_release_date_gte) on/before this date (YYYY-MM-DD). | |
| with_watch_providers | No | TMDB watch-provider ids (use search_watch_providers to resolve a service name, e.g. 'Netflix', to its numeric id); requires watch_region to also be set. Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| certification_country | No | Country whose certification system the `certification` filter uses, e.g. 'US'. Only valid together with certification. | |
| with_original_language | No | ISO-639-1 original-language code, e.g. 'en', 'ja'. | |
| without_watch_providers | No | Comma-separated TMDB watch-provider ids to exclude: titles that ANY of them offers in watch_region are dropped, e.g. 'not on Netflix' (use search_watch_providers to resolve a service name to its id); requires watch_region to also be set. | |
| with_watch_monetization_types | No | Only titles available in watch_region through at least one of these access models: 'flatrate' = included in a subscription (e.g. Netflix), 'free' = free to watch, 'ads' = free with ads, 'rent' = paid rental, 'buy' = paid purchase. Several values match ANY of them. Requires watch_region; works alone (any provider). Combined with with_watch_providers, TMDB checks the two independently, not per provider: with_watch_providers=2 (Apple TV, rent/buy only) + 'flatrate' still matches titles rentable on Apple TV that some OTHER service streams — check get_watch_providers to confirm which service offers which access model. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/openWorld, so the description carries the real burden and does flag non-obvious behavior: validation and silent-fallback rules for certification, watch providers, monetization types, release type and region. It defers the specifics to the per-field descriptions rather than restating them, which is reasonable but means the agent must open the schema to learn what the fallback actually does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scoping contrast is correctly front-loaded, but the middle portion is one enormous run-on enumeration of every filter family that largely duplicates a schema already at 100% coverage. The valuable parts (examples, sibling routing, fallback warning) are buried at the end of an overly long sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 33-parameter, all-optional query tool with an output schema and readOnly annotations, the description covers purpose, choosing against siblings, id-resolution helpers and fallback hazards — enough to call it correctly. Missing only a note on pagination/result limits (present in the schema) and any ranking caveat for sort_by defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds cross-parameter semantics the schema does not state — notably that with_crew/with_cast/with_people must be combined with with_genres to answer 'a person's work in one genre'. The catalogue of filter families (include vs exclude, date-window vs original-release-date) also aids navigation of 33 parameters, though much of it echoes the field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource and an explicit contrast ('by structured filters instead of a title query'), which immediately separates it from search_movies. It also names the exact capability boundary against get_person_credits ('has no genre filter, so this combination is the right tool for that question, not that one').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete use cases ('popular sci-fi from the 1990s with a TMDB vote average above 7 available on Netflix'; 'which of this director's films are animated') and explicitly routes the agent away from the wrong sibling. It also tells the agent how to prepare inputs via get_movie_genres, search_people, search_keywords, search_companies, search_watch_providers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_tvDiscover TV shows (filters)ARead-only
Find TV shows by structured filters (genres (include/exclude), first-air year or date range, TMDB vote-average range, vote count, runtime, language, origin country, companies (include/exclude), networks, keywords (include/exclude), watch providers (include/exclude) and access model (subscription/rent/buy/free/ads), episodes airing in a date range (air_date_gte/lte), type, status, certification, an adult-content toggle, sort) — but NOT cast/crew/person: this tool doesn't accept those params for TV at all (calling with them is a validation error, not a silent no-op) because TMDB's own /discover/tv would silently ignore them anyway, unlike /discover/movie; to find TV shows featuring someone, call get_person_credits instead and filter its results to media_type 'tv'. certification/with_watch_providers/without_watch_providers/with_watch_monetization_types have validation and silent-fallback rules — see their own field descriptions. The TV counterpart of discover_movies; use with_networks for 'HBO shows', with_type='Miniseries' for short/limited series (e.g. 'best miniseries to binge in a weekend'), with_status='Ended' to exclude shows still airing, certification='TV-Y7' + certification_country='US' for 'shows appropriate for a young kid'. Resolve ids with get_tv_genres, search_companies, search_keywords, search_watch_providers.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| year | No | Release / first-air year. | |
| sort_by | No | Sort order. Defaults to TMDB's own default (roughly popularity-based) if omitted. TV's vocabulary differs from discover_movies' — 'name'/'first_air_date' instead of 'original_title'/'primary_release_date', and no 'revenue' (TMDB doesn't track it per-show). | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| min_votes | No | Minimum vote count (filters obscure titles). | |
| with_type | No | Restrict to this TV type — e.g. 'Miniseries' for short/limited series, excluding documentaries/reality/talk shows/etc. that would otherwise mix into a genre/rating search. | |
| max_rating | No | Maximum TMDB vote average (0-10). | |
| min_rating | No | Minimum TMDB vote average (0-10). Must be <= max_rating if both are given. | |
| max_runtime | No | Maximum runtime in minutes. | |
| min_runtime | No | Minimum runtime in minutes. Must be <= max_runtime if both are given. | |
| with_genres | No | TMDB genre ids; get them from get_movie_genres/get_tv_genres. Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| with_status | No | Restrict to this production status, e.g. 'Ended' to exclude shows still airing (a still-airing show's later seasons could still be mediocre or unfinished). | |
| air_date_gte | No | Only shows with an episode airing on/after this date (YYYY-MM-DD) — e.g. 'what's airing this week' with air_date_lte; unlike release_date_gte, which uses the show's first air date. Dates are US Eastern time. Must be <= air_date_lte if both are given. | |
| air_date_lte | No | Only shows with an episode airing on/before this date (YYYY-MM-DD), see air_date_gte. | |
| watch_region | No | Two-letter ISO-3166-1 country code, e.g. 'US', whose streaming catalog with_watch_providers / without_watch_providers / with_watch_monetization_types filter on. Only valid together with at least one of them. | |
| certification | No | Filter by exact age/content certification, e.g. 'PG-13' (movies) or 'TV-Y7' (TV); join several with '|' to match ANY of them, e.g. 'G|PG' for kids/family movies or 'TV-Y|TV-Y7|TV-G' for kids' TV. Requires certification_country, and a certification_country TMDB doesn't recognize silently disables this filter (returns unfiltered results) instead of erroring or matching nothing — double-check the country actually has data for that rating system. Matching is case-insensitive (verified live: 'pg-13' and 'PG-13' return identical results) but must otherwise exactly match one of TMDB's known rating strings for that country's system, punctuation included (e.g. 'PG-13', not 'PG13'). Unlike get_movie/get_tv's own certification field (which falls back to the US rating, then any country, when the requested region has none), this filter has NO fallback: a title with no certification entry at all for the exact country given is silently excluded from results, even if it's certified elsewhere (e.g. has a US rating) — for a country with sparse TMDB certification data, prefer certification_country='US' for broader, more reliable coverage over the user's actual country if completeness matters more than exact local ratings. | |
| include_adult | No | Include adult (NSFW) results. Defaults to false. | |
| with_keywords | No | TMDB keyword ids (use search_keywords to resolve names → ids). Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| with_networks | No | TMDB TV network ids, e.g. HBO=49, Netflix=213 (verified live). Unlike with_companies/with_keywords/with_people, this server has no name-based resolver for networks — supply the raw TMDB network id directly; a well-known network's id may already be known, otherwise there's no in-server way to look one up. Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| with_companies | No | TMDB production company ids (use search_companies to resolve names → ids). Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| without_genres | No | Comma-separated TMDB genre ids to exclude; get ids from get_movie_genres/get_tv_genres. | |
| release_date_gte | No | Only entries released on/after this date (YYYY-MM-DD). Must be <= release_date_lte if both are given. | |
| release_date_lte | No | Only entries released on/before this date (YYYY-MM-DD). | |
| without_keywords | No | Comma-separated TMDB keyword ids to exclude (use search_keywords to resolve names → ids). | |
| without_companies | No | Comma-separated TMDB production company ids to exclude: titles produced by ANY of them are dropped (use search_companies to resolve names → ids). | |
| with_origin_country | No | Only titles whose country of origin (where they were produced, not where they can be watched) is one of these ISO-3166-1 codes, e.g. ['KR'] for Korean titles; several codes match ANY of them. An unrecognized code such as 'ZZ' matches nothing. | |
| with_watch_providers | No | TMDB watch-provider ids (use search_watch_providers to resolve a service name, e.g. 'Netflix', to its numeric id); requires watch_region to also be set. Join several ids with "," to require ALL of them, or "|" to match ANY (e.g. "8|9"). | |
| certification_country | No | Country whose certification system the `certification` filter uses, e.g. 'US'. Only valid together with certification. | |
| with_original_language | No | ISO-639-1 original-language code, e.g. 'en', 'ja'. | |
| without_watch_providers | No | Comma-separated TMDB watch-provider ids to exclude: titles that ANY of them offers in watch_region are dropped, e.g. 'not on Netflix' (use search_watch_providers to resolve a service name to its id); requires watch_region to also be set. | |
| with_watch_monetization_types | No | Only titles available in watch_region through at least one of these access models: 'flatrate' = included in a subscription (e.g. Netflix), 'free' = free to watch, 'ads' = free with ads, 'rent' = paid rental, 'buy' = paid purchase. Several values match ANY of them. Requires watch_region; works alone (any provider). Combined with with_watch_providers, TMDB checks the two independently, not per provider: with_watch_providers=2 (Apple TV, rent/buy only) + 'flatrate' still matches titles rentable on Apple TV that some OTHER service streams — check get_watch_providers to confirm which service offers which access model. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses critical behavioral quirks: cast/crew/person params are validation errors rather than silent no-ops, TMDB's own /discover/tv silently ignores them, and certification/watch-provider filters have validation and silent-fallback rules. This is exactly the kind of surprising behavior an agent needs surfaced before calling the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loads the core filter scope before the important exclusion of cast/crew/person. Given 31 parameters and complex TMDB fallback behavior, the length is largely justified, though the single long paragraph and nested parentheticals make it less scannable than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 31-parameter discovery tool with an output schema already present, the description covers the important selection guidance, exclusions, resolver tools, and silent-fallback warnings. No return-value explanation is needed because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already defines all 31 parameters in detail. The description still adds value by mapping natural-language intents to parameters, such as with_networks='HBO shows,' with_type='Miniseries,' with_status='Ended,' and the certification-country pairing, plus which resolver tools supply ids.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find TV shows by structured filters,' then names the supported filter families and explicitly excludes cast/crew/person parameters. It directly distinguishes this from discover_movies and get_person_credits, so an agent can identify the tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: use get_person_credits for shows featuring someone, use with_networks for 'HBO shows,' with_type='Miniseries' for limited series, with_status='Ended' to exclude ongoing shows, and certification='TV-Y7' for kid-appropriate TV. It also names resolver tools for ids, covering when to use this tool and its alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_imdb_idFind by IMDb idARead-only
Resolve an IMDb id (e.g. 'tt0133093') to TMDB entities — returns matching movie, TV and person results. Use when you only have an IMDb id and need the TMDB id for the other tools. Only matches whole movies/shows/people: IMDb also assigns 'tt' ids to individual episodes (verified live, e.g. Breaking Bad's pilot 'tt0959621'), which this tool does not resolve — such an id comes back with every result list empty, indistinguishable from a genuinely unknown id.
| Name | Required | Description | Default |
|---|---|---|---|
| imdb_id | Yes | IMDb title (tt…) or name (nm…) id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tv_results | Yes | |
| movie_results | Yes | |
| person_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and openWorld, so the description's job is to add beyond that, and it does: it discloses that unresolved or episode ids return all result lists empty and are indistinguishable from unknown ids — a real failure mode an agent must plan around. It does not mention multiple-match behavior or ordering, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose then usage then caveat; each carries distinct information. The episode-id caveat is slightly long but is the highest-value content, so it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 not be described. With a single fully documented parameter, annotations covering safety, and the key semantic pitfall called out, an agent has everything needed to call this correctly and interpret empties.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already documents the tt/nm pattern, so baseline is 3. The description still adds value by giving a concrete example id ('tt0133093') and clarifying that episode-level ids pass the format check but fail semantically — meaning the agent cannot rely on the pattern alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Resolve an IMDb id ... to TMDB entities', and specifies the returned entity types (movie, TV, person). This distinguishes it clearly from the sibling search_* tools, which take free-text queries rather than ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use when you only have an IMDb id and need the TMDB id for the other tools') and an explicit exclusion: IMDb episode-level 'tt' ids are not resolved. The alternative is implied by the sibling tool family and named indirectly as 'the other tools'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionGet a movie collectionARead-only
Get a movie collection/franchise and all its parts in release order (e.g. the whole 'The Dark Knight Collection'). Get the collection id from search_collections (by franchise name) or from a movie's collection field in get_movie.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| parts | Yes | |
| overview | Yes | |
| poster_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered; the description adds a real behavioral detail not in annotations: results include every part of the franchise and are returned in release order. It doesn't discuss failure modes (bad id) or localization interaction with the language parameter, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the tool returns and followed by the prerequisite for calling it. No filler, no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description only needs to add scope, ordering, and id provenance — and it does all three. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 nevertheless adds meaning to `id` beyond 'TMDB numeric id' by explaining its two authoritative sources. The `language` parameter is left entirely to the schema, which documents it thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (get) plus resource (movie collection/franchise) plus a scope guarantee (all parts in release order), with a concrete example ('The Dark Knight Collection'). An agent can distinguish it from search_collections or get_movie 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states how to obtain the required id — from search_collections by franchise name, or from a movie's `collection` field in get_movie — which routes the agent to the correct preceding tool. It also implicitly excludes use of this tool for lookup-by-name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_movieGet movie detailsARead-only
Get full details for one movie by TMDB id: overview, genres, runtime, budget/revenue, vote average, the age/content rating (certification) for region — falling back to the US rating, then any available country, when region has none; check certification_region to see which one was used — and links (TMDB + IMDb). By default also includes IMDb/Rotten Tomatoes/Metacritic ratings and an awards summary (see include_ratings), plus OMDb's own age rating (ratings.rated — separate from this tool's own certification above; the two can differ) from OMDb (set include_ratings=false to skip); if unavailable (no OMDB_API_KEY, no imdb_id, or the OMDb lookup fails), ratings degrades to {found:false, reason} instead of failing the call. If you only need the headline info (title/year/genres/vote average) — for one id or several — use get_movies instead; it's trimmed on purpose and skips the rest of this payload. Get the id from search_movies.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| region | No | ISO-3166-1 country code for region-specific results (default 'US'). | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| include_ratings | No | If true (default), enrich the result with IMDb/Rotten Tomatoes/Metacritic ratings plus an awards summary (major-award wins/nominations — Oscars, Emmys, Golden Globes, etc., whatever OMDb aggregates; free text, not a structured count, and describes the whole film/show, not any one person's award) from OMDb (requires OMDB_API_KEY). Set false to skip the extra lookup when ratings are not needed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| year | Yes | |
| title | No | |
| genres | Yes | |
| status | Yes | |
| imdb_id | Yes | |
| ratings | No | |
| tagline | Yes | |
| homepage | Yes | |
| imdb_url | Yes | |
| overview | Yes | |
| tmdb_url | Yes | |
| budget_usd | Yes | |
| collection | Yes | |
| media_type | Yes | |
| popularity | Yes | |
| poster_url | Yes | |
| vote_count | Yes | |
| revenue_usd | Yes | |
| release_date | Yes | |
| vote_average | Yes | TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two. |
| certification | Yes | |
| certifications | Yes | |
| origin_country | Yes | |
| original_title | No | |
| runtime_minutes | Yes | |
| spoken_languages | Yes | |
| original_language | Yes | |
| certification_region | Yes | |
| production_companies | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint/openWorldHint, but the description discloses far more: the certification fallback chain (region → US → any country) and how to detect it via certification_region, and the graceful-degradation contract where ratings becomes {found:false, reason} rather than failing on missing key/imdb_id/lookup error. It also flags that OMDb's ratings.rated is a separate value that can disagree with this tool's certification — a non-obvious behavior an agent would otherwise get wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded and every clause carries information (fallbacks, degradation, sibling routing). However, it is a single dense run-on paragraph with heavy nested parentheticals and partially restates the ratings enrichment twice, costing some readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be spelled out, yet the description still covers the failure mode and fallback behavior an agent must anticipate. Combined with 100% param coverage and annotations, nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description adds real meaning: the non-obvious region fallback semantics and the certification_region output cue, plus the failure behavior tied to include_ratings. It adds less about `language` (the schema already documents localization and null-overview behavior) and repeats some of the include_ratings schema text, so it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+key ('Get full details for one movie by TMDB id') and then enumerates the exact payload (overview, genres, runtime, budget/revenue, vote average, certification, links). It ends by naming the sibling it is not (get_movies, trimmed on purpose) and the sibling that supplies the id (search_movies), so an agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing is given in both directions: 'If you only need the headline info ... for one id or several — use get_movies instead' plus 'Get the id from search_movies.' Prerequisite (OMDB_API_KEY) and the opt-out (include_ratings=false) are stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_movie_creditsGet movie cast & crewARead-only
List the top-billed cast (up to 20) and the headline crew (director, writers, composer, DoP, …) of a movie by TMDB id. Get the id from search_movies.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cast | Yes | |
| crew | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuine behavioral context the annotations do not: results are truncated to the top 20 cast and a curated 'headline' crew list (director, writers, composer, DoP), so the agent knows this is not the full credit roll.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the scope and the 20-item cap front-loaded before the id-sourcing instruction. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Low-complexity single-parameter read tool with an output schema and read-only annotations; the description covers scope, truncation limits, and id provenance. Nothing further is needed to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already described as 'TMDB numeric id.' The description adds the practical step of sourcing that id from search_movies, which is value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("List") plus precise resource scope: top-billed cast (capped at 20) and headline crew roles for a movie. It is clearly distinguishable from sibling get_tv_credits (TV) and get_person_credits (by person) without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to search_movies to obtain the required TMDB id, which is the main prerequisite. It does not state exclusions (e.g. use get_tv_credits for TV shows), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_movie_genresList movie genresARead-only
List TMDB movie genres with their numeric ids and names (reference data; rarely changes). Feed the ids into discover_movies' with_genres/without_genres.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| genres | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that the data is reference and rarely changes, providing useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the core purpose and then a usage hint. Concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains what the tool does and how its output is used. With an output schema present and no parameters, the description is complete for the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the description's job is minimal. The schema coverage is 100%, and the description adds no parameter info because none exist. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists TMDB movie genres with numeric ids and names, using a specific verb and resource. It distinguishes from the sibling tool get_tv_genres by specifying 'movie' genres.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells when to use the tool (to get genre ids) and how to use the output (feed into discover_movies' with_genres/without_genres). It also notes that the data rarely changes, implying caching. No explicit when-not-to-use, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_movie_recommendationsGet movie recommendationsARead-only
Get movies TMDB recommends for the given movie id, based on co-viewing/personalization data (what users who liked this also liked) — usually the more thematically relevant list. Prefer this over get_similar as the default choice; get_similar matches on shared genres/keywords, a blunter heuristic that can surface tonally unrelated titles. Get the id from search_movies.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and scope are covered. The description adds genuinely useful behavioral context by disclosing what the ranking is actually based on (co-viewing/personalization) and warning that get_similar can surface 'tonally unrelated titles' — a quality trait an agent can act on. It doesn't discuss result volume or pagination, though the schema already handles the latter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and the key routing decision, and every sentence carries usable information. Slightly longer than needed — the parenthetical gloss 'what users who liked this also liked' and the editorial 'blunter heuristic' restate the same contrast twice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 id-provenance plus sibling routing cover the calling decision. The only soft spot is that result volume ('up to 20 per page') lives solely in the param schema rather than the description, which is acceptable here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns above that by telling the agent where the required id comes from ('Get the id from search_movies'), which the schema's 'TMDB numeric id' does not say. Pagination is left to the schema, which documents it fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get movies TMDB recommends for the given movie id') and immediately characterizes the underlying signal (co-viewing/personalization). It explicitly contrasts itself with the closest sibling, get_similar, so the agent can differentiate without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit default recommendation ('Prefer this over get_similar as the default choice') and explains the condition that selects the alternative ('matches on shared genres/keywords, a blunter heuristic'). It also routes to search_movies for obtaining the required id, closing the prerequisite loop.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_movie_releasesGet movies in or coming to cinemasARead-only
List movies in cinemas now (list='now_playing') or opening soon (list='upcoming') in one country — for 'what's playing in theaters' or 'what comes out next month'. Use get_trending for overall popularity regardless of release, discover_movies for an arbitrary date range. region filters to movies with a theatrical release in that country inside the window (a different set per country, not just a re-sort; an unrecognized code such as 'ZZ' returns an empty page, but 'XX' is a real TMDB pseudo-region), and each row's release_date is that country's release date, which can predate the window for a re-release (e.g. a 2014 film re-released this month). The window itself comes from TMDB and is returned as dates {minimum, maximum} (YYYY-MM-DD; same for every region — roughly the last six weeks for now_playing, the next three weeks for upcoming). TMDB's own order: roughly most popular first, not by date.
| Name | Required | Description | Default |
|---|---|---|---|
| list | Yes | 'now_playing' = in cinemas now; 'upcoming' = opening soon. | |
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| region | No | ISO-3166-1 country code for region-specific results (default 'US'). | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| dates | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/open-world, but the description adds substantial non-obvious behavior: region changes the actual movie set rather than re-sorting, an unrecognized code like 'ZZ' yields an empty page while 'XX' is a real pseudo-region, release_date is the country's date and may predate the window for re-releases, and ordering is popularity-based, not chronological.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and alternatives, then the caveats; every clause carries information and nothing is filler. It is nonetheless a single dense paragraph whose nested parentheticals make it harder to scan than a short bulleted structure would.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter list tool with an output schema, everything an agent needs is present: mode selection, regional filtering semantics, window derivation and its approximate bounds, and result ordering. Nothing material is deferred to the schema or left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 real meaning for `region` (per-country result sets, invalid-code behavior, the 'XX' pseudo-region) that the schema's one-line 'ISO-3166-1 country code' does not convey. It also documents where the implicit date window comes from and that it is returned as `dates` {minimum, maximum} with approximate spans per list, though page/language are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List movies in cinemas now ... or opening soon ... in one country') and binds each mode to a concrete parameter value. It explicitly distinguishes itself from get_trending and discover_movies, so an agent can route correctly without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the triggering user intents ('what's playing in theaters', 'what comes out next month') and names two alternatives with the condition that selects each: get_trending for popularity regardless of release, discover_movies for an arbitrary date range.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_moviesGet compact movie card(s)ARead-only
Get a compact card — title, year, genres, vote average, and (opt-in) ratings — for 1-20 movies by TMDB id in one call. Deliberately trimmed (no overview, cast, budget, certifications, production companies, etc.): use this for a single id too when you only need that headline info and not the full get_movie payload, not just for checking many at once. Call get_movie instead when you need the full details for a title (including region-specific certification). A bad/unknown id never fails the whole call — that entry comes back {id, found:false, reason} instead, in the same order as ids.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | TMDB movie ids to fetch (1-20). Get them from search_movies/discover_movies/get_similar/get_movie_recommendations/etc. | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| include_ratings | No | If true, enrich every card with compact IMDb/Rotten Tomatoes/Metacritic ratings from OMDb (requires OMDB_API_KEY) — one extra OMDb lookup per id, so a large batch means a burst of OMDb calls; mind OMDb's own rate limit. Unlike get_movie/get_tv, defaults to false (off) here. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/openWorldHint annotations: it discloses graceful per-id failure with a `{id, found:false, reason}` shape, guarantees result ordering matches `ids`, and warns about a burst of OMDb calls and rate limits when include_ratings is set. This is exactly the behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and field list, then the sibling routing, then the failure semantics. Every sentence carries information, though the parenthetical enumerations make it denser than strictly necessary; it is long but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a 3-parameter read tool: an output schema exists so return structure need not be restated, and the description still documents the one non-obvious return case (per-id not-found entries). Sibling routing, defaults, and rate-limit caveats are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds value the schema does not: it explains that include_ratings enriches every card via OMDb, that its default is false here (unlike get_movie/get_tv), and that batches amplify OMDb traffic. `ids` and `language` are covered by the schema and not repeated, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a compact card — title, year, genres, vote average, and (opt-in) ratings — for 1-20 movies by TMDB id') with explicit scope (1-20 ids, trimmed field set). It distinguishes itself from the sibling get_movie by naming the exact fields it excludes and what the sibling provides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance including the non-obvious case ('use this for a single id too when you only need that headline info'), and names the alternative with its selection condition ('Call get_movie instead when you need the full details ... including region-specific certification'). No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personGet person detailsARead-only
Get full details for one person by TMDB id: biography, birthday/deathday, department, and links (TMDB + IMDb). Does not include filmography — use get_person_credits for that. Get the id from search_people or a credits list.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| gender | Yes | |
| imdb_id | Yes | |
| birthday | Yes | |
| deathday | Yes | |
| homepage | Yes | |
| imdb_url | Yes | |
| tmdb_url | Yes | |
| biography | Yes | |
| popularity | Yes | |
| profile_url | Yes | |
| also_known_as | Yes | |
| place_of_birth | Yes | |
| known_for_department | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds valuable scope disclosure about what the response contains and deliberately omits. It does not mention language/localization behavior or the shape of the returned links, but the output schema and the language parameter description carry those details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero padding: what it returns first, the exclusion second, how to obtain the id third. Every clause carries information an agent needs to route the call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-record lookup with an output schema, full parameter documentation, and read-only annotations, the description supplies the remaining unknowns: field coverage, filmography exclusion, and id provenance. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including a detailed explanation of the language override and TMDB fallback behavior, so the schema does the heavy lifting. The description only echoes 'by TMDB id' and adds no semantics beyond the schema — the expected baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get full details for one person by TMDB id') and enumerates the returned fields (biography, birthday/deathday, department, links). It explicitly separates itself from get_person_credits, so the agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the excluded use case and the alternative ('Does not include filmography — use get_person_credits for that'), plus prerequisite routing for the id ('Get the id from search_people or a credits list'). Both the when and the when-not are stated outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_person_creditsGet person filmographyARead-only
List the movies and TV shows a person is known for (cast roles and crew jobs), most popular first, capped to the top 25 of each by default; talk-show/awards-show guest appearances ('Self'/'Himself'/'Herself', plus any cast credit on a TV talk or news show) and repeat entries for the same title are excluded so the list stays about actual roles. A cameo credited under the person's own name is kept, since TMDB marks it no differently from a real role (verified live: Tom Hanks's top cast row is The Simpsons as 'Tom Hanks (voice)'). A title with several crew jobs (writer AND director AND producer on one film) still only counts once against the crew cap. Cast entries include a vote_average; crew entries (director, writer, …) do not — call get_movie/get_tv on the id for a crew credit's own vote_average. Pass department (e.g. 'Directing') to restrict crew to just that role — the reliable way to get someone's complete filmography in one department when their other departments would otherwise compete for the same cap; for a handful of exceptionally prolific people even that isn't enough (e.g. 50+ directing credits), so raise limit too when department alone still looks short. Use for 'what has this actor/director been in'. This tool has no genre filter — for 'which of X's movies are animated/horror/etc.' use discover_movies instead, combining with_cast/with_crew/with_people with with_genres (discover_tv has no equivalent — it can't filter by person at all — so for a person's TV work in one genre, call this tool and check the returned media_type 'tv' entries' genres yourself, e.g. via get_tv_shows). Get the id from search_people.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| limit | No | Max cast entries and max crew entries to return (each capped separately; default 25). Raise this for an exceptionally prolific person — e.g. a director with 50+ films — where even a department filter still leaves more titles than the default cap keeps. | |
| department | No | Restrict crew credits to this department (e.g. 'Directing' for a director's filmography). Without it, a multi-hyphenate's OTHER departments (writing, producing, …) compete for the same 25-credit cap and can crowd out titles in the department you actually want. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cast | Yes | |
| crew | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint/openWorldHint, but the description adds substantial non-obvious behavior: default 25-per-side caps applied separately to cast and crew, self/talk-show guest credit exclusion, de-duplication of repeat titles, single-count for multiple crew jobs on one title, and the asymmetry that cast rows have vote_average while crew rows do not. The cameo caveat and the Tom Hanks verification are exactly the edge case an agent would otherwise get wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior and exclusions, then parameters, then routing guidance — good ordering. It is long and a couple of parentheticals (the live Tom Hanks verification, the 50+ directing aside) are illustrative rather than strictly load-bearing, but almost every sentence conveys a rule an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema and full annotation coverage, the description still supplies everything missing: ordering, cap semantics, exclusion policy, what rating fields appear where, and cross-tool routing for the genre case the tool cannot handle. Nothing an agent needs to call this correctly and interpret the result is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds real semantics the schema cannot: department is framed as the reliable way to get a complete single-department filmography because other departments compete for the same cap, and limit should be raised specifically when the department filter still under-returns for prolific people. That is decision-relevant, not paraphrase.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the movies and TV shows a person is known for') and immediately distinguishes scope from siblings by noting it covers both cast and crew, ordered by popularity. An agent can tell this apart from get_movie_credits/get_tv_credits and discover_movies without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the trigger ('what has this actor/director been in'), names the exclusion ('no genre filter'), and routes to the correct alternative per case: discover_movies with with_cast/with_crew for movie genres, and a manual TV workaround because discover_tv can't filter by person. It also names search_people as the source of the id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ratingsGet IMDb/RT/Metacritic ratingsARead-only
Look up IMDb, Rotten Tomatoes and Metacritic ratings, an awards summary (major-award wins/nominations — Oscars, Emmys, Golden Globes, etc.; free text, not a structured count, for the whole film/show — or for one episode, given an episode's imdb_id — never one person), and OMDb's own age rating (rated), from OMDb by IMDb id (preferred, e.g. 'tt0133093') or by title (+ optional year/type). Prefer get_movie/get_tv when you have a TMDB id — they already include this. Requires OMDB_API_KEY. One of imdb_id or title is required; omitting both returns an error. A no-match lookup is not an error: it returns {found:false, reason}. A title lookup resolves to whichever single entry OMDb picks, reports no runner-up, and cannot be validated against anything — so it can silently return a different work of the same name. Verified live: title:'Halloween' with no year returns the 1978 original (tt0077651, IMDb 7.7, RT 97%), not the 2018 film titled exactly the same (tt1502407, IMDb 6.5, RT 79%). Always read back the returned imdb_id/title/year to confirm which work you actually got, and pass year (and type) whenever you know them. When you only have a title, prefer search_movies/search_tv → get_movie/get_tv instead: that path matches by imdb_id and additionally drops an OMDb hit whose release year is more than two years from TMDB's, which this tool's title path has no way to do.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Restrict a title lookup to this entry type. Verified live: without it, OMDb's own title match can silently prefer one type over another when the exact same title exists as more than one — e.g. a title lookup for 'Chuck' with no `type` returns the 2007 TV series, not the unrelated 2016 movie of the same name, with no signal the movie was ever in contention. Only affects a title lookup; has no effect when imdb_id is given (already unambiguous). | |
| year | No | Year, to disambiguate a title. | |
| title | No | Movie/show title (used when imdb_id is absent). | |
| imdb_id | No | IMDb title id. Takes precedence over title when both are given. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say read-only and open-world; the description adds the real behavioral load: the API key requirement, that a no-match returns `{found:false, reason}` rather than an error, that the title path silently resolves to one arbitrary OMDb entry with no runner-up and no validation, and a concrete verified Halloween example showing a wrong-work risk. It even prescribes the mitigation (read back returned imdb_id/title/year).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what it returns, then routing, then failure and ambiguity caveats — a sensible order with no filler sentences. It is dense and slightly overlong as a single paragraph, and the Halloween anecdote plus the repeated 'always read back / pass year' advice partly restate each other.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be spelled out, yet the description still covers the one non-obvious return case (`found:false`) and the awards-summary shape. Combined with the annotations and schema, an agent has everything needed to call it correctly and interpret a suspicious result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself already documents precedence and the type/year disambiguation with examples, so the description is not carrying the full burden. It still adds operational guidance beyond the schema: 'imdb_id preferred', 'always pass year (and type) whenever you know them', and that type/ year only matter on the title path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb plus the exact resources it returns: IMDb/Rotten Tomatoes/Metacritic ratings, an awards summary (explicitly free-text, whole-title or single-episode, never a person), and OMDb's `rated` age rating. It also names its data source (OMDb) and its two lookup keys, so an agent can immediately distinguish it from get_movie/get_tv and find_by_imdb_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules: prefer get_movie/get_tv when holding a TMDB id because they already include this data, and prefer search_movies/search_tv → get_movie/get_tv for title-only queries because that path validates against TMDB's year. It also states the precondition (OMDB_API_KEY) and the argument rule (one of imdb_id or title required; pass year/type when known).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reviewsGet user reviewsARead-only
Get user reviews for a movie or TV show (author, that one reviewer's own 0-10 rating if they left one — a single person's score, not the aggregate vote_average and not an IMDb/RT/Metacritic value; it can be null, and the review text, clipped to ~1500 characters). Get the id from search_movies/search_tv.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| media_type | Yes | Media type: 'movie' or 'tv'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description does add real value beyond that: the rating can be null, and review text is clipped to ~1500 characters — a non-obvious truncation behavior worth knowing. It stops short of describing pagination or total-count behavior, so a 3 is fair.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and result, and no filler. The nested em-dash clauses make the seating of the rating caveats slightly hard to parse on first read, but every clause carries needed information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values needn't be explained, and all three parameters are covered via schema plus the id-source hint. Missing only pagination/total-results guidance for paging through reviews, which matters for a tool capped at page 500.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining where id comes from and by characterizing media_type semantics ('movie or TV show'). The only gap is the page parameter, which the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get user reviews for a movie or TV show') and then explicitly disambiguates the returned rating from aggregate vote_average and from IMDb/RT/Metacritic scores, which is exactly the confusion a sibling like get_ratings would create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to obtain the id from search_movies/search_tv, a concrete prerequisite no other wording provides. It lacks an explicit 'do not use this for aggregate ratings — use get_ratings' routing statement, so it falls short of the 5 bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_similarGet similar titlesARead-only
Get titles TMDB considers similar to a given movie or TV show, based on shared genres and keywords — a blunter heuristic than get_movie_recommendations'/get_tv_recommendations' behavioral (co-viewing) data, so results are often thematically noisy (verified live: The Matrix's first page mixes Videodrome and Dune with The Man with the Golden Gun). Returned exactly as TMDB ranks them, 20 per page; the list runs into the whole catalog (total_results 20001 for The Matrix), so only the first page or two are worth reading. Try recommendations first for thematically closer picks; use this when you specifically want genre/keyword-adjacent titles. Get the id from search_movies/search_tv.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| media_type | Yes | Media type: 'movie' or 'tv'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful, non-annotation context: the heuristic is noisy, results come in TMDB rank order, 20 per page, and the list can run into the whole catalog. However, some of this overlaps the schema's pagination text, so the added value is real but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition and the sibling comparison before the caveats. Dense but largely earning its place; the 'verified live' anecdote is illustrative but slightly verbose for a definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be explained, and the description still covers quality expectations, ordering, pagination limits, and id acquisition. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description adds value the schema lacks: it sources the id from search_movies/search_tv and frames page usage via the 'first page or two' caveat. The media_type/page semantics are otherwise left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get titles TMDB considers similar), the underlying basis (shared genres and keywords), and explicitly contrasts with get_movie_recommendations/get_tv_recommendations. An agent can distinguish this from its nearest siblings without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: try recommendations first for thematically closer picks, use this when you specifically want genre/keyword-adjacent titles. Also tells the agent how to obtain the required id (search_movies/search_tv), covering the only real prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trendingGet trending titlesARead-only
Get what's trending on TMDB. media_type selects movies, TV, people, or all; time_window is the trending period (today vs this week). Good for 'what's popular right now'. Each result row carries its own media_type ('movie' | 'tv' | 'person') — check it to route to the right get_* tool, especially when media_type is left at 'all'.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| media_type | No | Which kind of entity to rank. Defaults to 'all'. | |
| time_window | No | Trending period: 'day' or 'week'. Defaults to 'week'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely non-obvious behavior: each result row carries its own media_type, which can differ from the requested filter when 'all' is used — an agent would otherwise likely assume homogeneous results. It does not mention rate limits or auth, but for a public read endpoint that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, then parameters, then the result-routing caveat. No restatement of the title and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-optional-parameter read tool with full schema descriptions, an output schema, and annotated safety, nothing essential is missing. Pagination limits and return shape are handled by the structured fields, so the description correctly spends its budget on the cross-row media_type caveat instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns credit by mapping the enums to plain meanings ('day vs this week') and by calling out the 'all' default's consequence for result routing. The page parameter is left entirely to the schema, which is acceptable given its thorough description there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get what's trending on TMDB') and names the two dimensions that shape the result (media_type, time_window). 'Trending' is inherently distinguishable from the search_* siblings, though the description never explicitly names them as alternatives, so it stops just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use context ('Good for what's popular right now') and a downstream routing instruction ('check the per-row media_type to route to the right get_* tool'). It omits any when-not guidance — e.g., that search_movies/discover_movies serve lookup or filter queries rather than popularity ranking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tvGet TV show detailsARead-only
Get full details for one TV show by TMDB id: overview, genres, seasons/episodes counts, networks, created_by (the show's creator(s)), status, the age/content rating (certification) for region — falling back to the US rating, then any available country, when region has none; check certification_region to see which one was used — and links. By default also includes IMDb/Rotten Tomatoes/Metacritic ratings and an awards summary (see include_ratings), plus OMDb's own age rating (ratings.rated — separate from this tool's own certification above; the two can differ) from OMDb (set include_ratings=false to skip); if unavailable (no OMDB_API_KEY, no imdb_id, or the OMDb lookup fails), ratings degrades to {found:false, reason} instead of failing the call. Set expand_episodes=true to also pull every season's episode list in one extra request instead of calling get_tv_season per season. If you only need the headline info (name/year/genres/vote average, season/episode counts) — for one id or several — use get_tv_shows instead; it's trimmed on purpose and skips the rest of this payload. Get the id from search_tv.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| region | No | ISO-3166-1 country code for region-specific results (default 'US'). | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| expand_episodes | No | If true, also fetch every season's full episode list (name, air date, runtime, and TMDB `vote_average` — TMDB's own 0-10 user score, not this tool's IMDb/RT/Metacritic `ratings`) as `seasons_detail`, in one extra request — use this instead of calling get_tv_season once per season when you need all episodes of a multi-season show. Episode overviews are omitted here to keep that aggregate response usable — call get_tv_season for one season's full detail including overview. Each season's episode list is capped at 50 (season 0 'Specials' in particular can otherwise run to hundreds of bonus clips), and the combined count across every season is capped at 250 total, and the whole aggregate additionally has a hard size ceiling (trims further if episode names are unusually long) since a 30+ season show could otherwise still exceed a usable response size even with the per-season cap alone; `episode_count` on each season still reports that season's true total. The 250 budget is spent in season order starting at season 0, so on a long-running show the specials are served first and the last seasons are the ones that fall off. A season that falls entirely beyond the 250-episode budget is skipped rather than fetched-then-discarded, so its `overview`/`poster_url` come back null too, not just its `episodes` list — call get_tv_season for that season's full detail. Defaults to false. | |
| include_ratings | No | If true (default), enrich the result with IMDb/Rotten Tomatoes/Metacritic ratings plus an awards summary (major-award wins/nominations — Oscars, Emmys, Golden Globes, etc., whatever OMDb aggregates; free text, not a structured count, and describes the whole film/show, not any one person's award) from OMDb (requires OMDB_API_KEY). Set false to skip the extra lookup when ratings are not needed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| type | Yes | |
| year | Yes | |
| genres | Yes | |
| status | Yes | |
| imdb_id | Yes | |
| ratings | No | |
| seasons | Yes | |
| tagline | Yes | |
| homepage | Yes | |
| imdb_url | Yes | |
| networks | Yes | |
| overview | Yes | |
| tmdb_url | Yes | |
| created_by | Yes | |
| media_type | Yes | |
| popularity | Yes | |
| poster_url | Yes | |
| vote_count | Yes | |
| vote_average | Yes | TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two. |
| certification | Yes | |
| in_production | Yes | |
| last_air_date | Yes | |
| original_name | No | |
| certifications | Yes | |
| first_air_date | Yes | |
| seasons_detail | No | |
| episode_run_time | Yes | |
| number_of_seasons | Yes | |
| original_language | Yes | |
| number_of_episodes | Yes | |
| last_episode_to_air | Yes | |
| next_episode_to_air | Yes | |
| certification_region | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint and openWorldHint annotations, the description adds substantial behavioral context: certification fallback behavior, the separate OMDb ratings.rated field, ratings degradation to {found:false, reason} instead of failure, the extra request for expand_episodes, and the episode caps and trimming order. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and all major information is present, but it is a very dense single paragraph with nested asides and semicolon-heavy clauses. It is appropriately sized for a complex tool, though it could be easier to scan if structured more cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complex read tool with five parameters, an output schema, and minimal annotations, the description is complete: it covers routing, fallback behavior, enrichment behavior, degradation behavior, and expansion limits. No critical invocation detail appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is already 100%, the description adds important cross-parameter meaning: region fallback rules and certification_region, include_ratings degradation and API-key dependency, and expand_episodes budget/order behavior beyond the schema text. These details materially help correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — full details for one TV show by TMDB id — and enumerates the payload included. It also explicitly distinguishes this tool from get_tv_shows and get_tv_season, so an agent can identify its role 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing: use get_tv_shows for headline info across one or several ids, use get_tv_season for one season's full detail, and use expand_episodes instead of repeated get_tv_season calls when all episodes are needed. It also says where to get the id via search_tv.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tv_creditsGet TV cast & crewARead-only
List a TV show's cast and key crew across its whole run, by TMDB id: up to 20 cast members ranked by how many episodes they appear in (each with their main character and episode_count), plus up to 5 people per key crew job — Director, Writer, Teleplay, Story, Executive Producer, Producer, Original Music Composer, Director of Photography — ranked by episode_count, so 'who directed most of it' is the first Director listed. Creators aren't listed here; use get_tv's created_by. For one specific episode's director/writer, use get_tv_episode. Get the id from search_tv.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cast | Yes | |
| crew | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, openWorldHint), and the description adds substantial non-annotation behavior: result caps (20 cast, 5 per crew job), ranking by episode_count, and the semantic that the first Director is the one who directed most episodes. That is exactly the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and no filler sentences, but the payload is one long run-on sentence with nested clauses that an agent must parse in pieces. Slightly shorter, chunked phrasing would improve scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema and full annotation coverage, nothing an agent needs is missing: it knows what comes back, how it is ordered, how it is capped, and where to get the input and the alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the `id` description already says TMDB numeric id, so the baseline is 3; the description adds marginal value by telling the agent to obtain the id via search_tv, closing the provenance gap. It does not add format constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (a TV show's cast and key crew across its whole run), plus the identifier domain (TMDB id). It is clearly distinct from get_movie_credits and from get_tv, so an agent can select 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: creators live in get_tv's `created_by`, a single episode's director/writer is get_tv_episode, and the id comes from search_tv. Both exclusion and prerequisite are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tv_episodeGet TV episodeARead-only
Get one episode of a TV show by show id + season number + episode number: overview, air date, runtime, TMDB vote average (vote_average, TMDB's own 0-10 user score — not an IMDb/RT/Metacritic score; get_movie/get_tv's ratings are whole-show only and this tool makes no OMDb call), guest stars (up to 15) and director/writer. Also returns the episode's own imdb_id/imdb_url — pass that id to get_ratings for this one episode's IMDb rating, the only way to get a per-episode IMDb score here. Get the show id from search_tv.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| season_number | Yes | Season number (0 = specials). | |
| episode_number | Yes | Episode number within the season. |
Output Schema
| Name | Required | Description |
|---|---|---|
| crew | Yes | |
| name | Yes | |
| imdb_id | Yes | This episode's own IMDb id (not the show's) — pass it to get_ratings for the episode's IMDb rating, which no TMDB field carries. Null when TMDB has no IMDb id for it. |
| air_date | Yes | |
| imdb_url | Yes | |
| overview | Yes | |
| still_url | Yes | |
| guest_stars | Yes | |
| vote_average | Yes | TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two. |
| season_number | Yes | |
| episode_number | Yes | |
| runtime_minutes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is known. The description adds useful behavior beyond annotations: it notes no OMDb call is made, lists guest stars capped at 15, and explains the imdb_id handoff to get_ratings. It does not cover error cases or rate limits, but those are minor given the output schema and openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and every clause (rating clarification, imdb_id handoff, show id source) earns its place for disambiguation. However, it is a dense, parenthetical-heavy run-on that would be easier to parse as separate sentences or bullets.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple 3-parameter read-only tool with an output schema and annotations, the description covers everything an agent needs: what it returns, how to obtain the show id, and how to get per-episode IMDb ratings via get_ratings. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds a useful pointer ('Get the show id from search_tv') and reiterates the required id/season/episode combination, but does not expand on the semantics of season_number (0 = specials) or episode_number beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one episode of a TV show') and enumerates returned fields, then explicitly distinguishes itself from get_movie/get_tv (whole-show ratings only) and get_ratings (per-episode IMDb via imdb_id). An agent can identify the exact operation and scope 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing: 'pass that id to get_ratings for this one episode's IMDb rating' and 'Get the show id from search_tv.' It also clarifies that get_movie/get_tv ratings are whole-show only, which implicitly tells the agent when not to use this tool for aggregate ratings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tv_genresList TV genresARead-only
List TMDB TV genres with their numeric ids and names (reference data; rarely changes). Feed the ids into discover_tv's with_genres/without_genres.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| genres | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds that it is reference data which rarely changes, providing useful stability context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded purpose and a usage hint. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema (referenced in context), the description explains the output content (genre ids and names) and how to use them, making it complete for a reference data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description does not need to explain parameters, and the baseline for zero-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists TV genres with ids and names, and notes it is reference data. The sibling get_movie_genres is similar but the tool name and description provide enough specificity for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to feed ids into discover_tv's with_genres/without_genres, providing clear usage context. Does not explicitly mention when not to use, but the directive is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tv_recommendationsGet TV recommendationsARead-only
Get TV shows TMDB recommends for the given show id, based on co-viewing/personalization data (what users who liked this also liked) — usually the more thematically relevant list. Prefer this over get_similar as the default choice; get_similar matches on shared genres/keywords, a blunter heuristic that can surface tonally unrelated titles. Get the id from search_tv.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuine behavioral context the annotations don't: the recommendation basis is co-viewing/personalization data, which tells the agent how results are ordered and how much to trust them. Pagination and return shape are left to the schema and output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with purpose, followed by the tool-selection rule and the id prerequisite. No filler; the comparative clause about get_similar earns its length by directly changing tool selection behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 not be described, and both parameters are fully documented in the schema. Combined with the sibling routing and the id-sourcing hint, nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both id (TMDB numeric id) and page (pagination, max 500). The description only adds provenance for the id ("Get the id from search_tv"), which is a useful but minor supplement — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get TV shows TMDB recommends for the given show id") and immediately disambiguates from the sibling tool get_similar. The agent can distinguish this from get_similar without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes default choice: "Prefer this over get_similar as the default choice", then explains why the alternative differs ("matches on shared genres/keywords, a blunter heuristic that can surface tonally unrelated titles"). It also gives the prerequisite for the id parameter ("Get the id from search_tv").
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tv_seasonGet TV seasonARead-only
Get one season of a TV show (by show id + season number): overview and the episode list with air dates, runtimes and TMDB vote averages (per-episode vote_average, TMDB's own 0-10 user score — not the IMDb/RT/Metacritic scores get_movie/get_tv return as ratings, which are whole-show only; this tool makes no OMDb call, and TMDB's season payload carries no per-episode IMDb ids either, so call get_tv_episode when you need one episode's imdb_id for get_ratings), capped at 50 episodes (episode_count reports the true total). Season 0 is usually specials, which can run to hundreds of bonus clips on a long-running show. Use get_tv with expand_episodes=true instead if you need every season's episodes in one call. Get the show id from search_tv.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| season_number | Yes | Season number (0 = specials). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| air_date | Yes | |
| episodes | Yes | |
| overview | Yes | |
| poster_url | Yes | |
| episode_count | Yes | |
| season_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses important behavior: no OMDb call is made, TMDB's season payload has no per-episode IMDb ids, results are capped at 50 episodes while episode_count reports the true total, and season 0 can contain hundreds of specials. These are exactly the traits an agent needs before invoking it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key purpose and constraints are front-loaded, and every sentence carries useful guidance. However, the long nested parenthetical about vote_average, OMDb, and IMDb ids is dense and could be split or tightened for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema available, the description does not need to explain return values, and it already covers the important edge cases: the 50-episode cap, season 0 specials, and when to use sibling tools instead. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are already documented, so the baseline is 3. The description adds real meaning by explaining where the id comes from (search_tv) and warning that season_number 0 means specials that may be unusually large.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: get one season of a TV show by show id and season number, and lists exactly what comes back (overview, episode list, air dates, runtimes, vote averages). It clearly distinguishes itself from get_tv, get_tv_episode, and search_tv.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing rules: use get_tv with expand_episodes=true for every season at once, call get_tv_episode when you need a per-episode imdb_id, and get the show id from search_tv. It also flags the season 0 specials case as a usage caveat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tv_showsGet compact TV show card(s)ARead-only
Get a compact card — name, year, genres, vote average, season/episode counts, and (opt-in) ratings — for 1-20 TV shows by TMDB id in one call. A quick way to spot short/miniseries shows (low episode count) across many candidates without a per-title get_tv call. Deliberately trimmed otherwise (no overview, the actual episode list, networks, certifications, etc.): use this for a single id too when you only need that headline info and not the full get_tv payload, not just for checking many at once. Call get_tv instead when you need the full details for a title (including region-specific certification). A bad/unknown id never fails the whole call — that entry comes back {id, found:false, reason} instead, in the same order as ids.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | TMDB TV show ids to fetch (1-20). Get them from search_tv/discover_tv/get_similar/get_tv_recommendations/etc. | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| include_ratings | No | If true, enrich every card with compact IMDb/Rotten Tomatoes/Metacritic ratings from OMDb (requires OMDB_API_KEY) — one extra OMDb lookup per id, so a large batch means a burst of OMDb calls; mind OMDb's own rate limit. Unlike get_movie/get_tv, defaults to false (off) here. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint/openWorldHint; the description adds genuinely non-obvious behavior — trimmed payload contents, opt-in ratings that cost one OMDb lookup per id with its own rate limit, a default that differs from get_movie/get_tv, and partial-failure semantics where a bad id returns `{id, found:false, reason}` in input order rather than failing the batch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the payload shape right after the verb, and every sentence carries operational information. The nested parenthetical clauses and the self-correcting 'not just for checking many at once' aside make it denser than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 prose, yet the description still spells out the per-entry error shape and ordering. Combined with the exclusions list, the batch cap, and the ratings cost model, an agent has everything needed to call this correctly instead of get_tv.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 is the baseline; the description goes beyond it by explaining that `include_ratings` is opt-in and defaults to false here (unlike sibling tools) and that each id incurs a lookup. It also reinforces the 1-20 batch bound and the ordering guarantee for `ids`, though it adds nothing about the `language` parameter beyond what the schema documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get a compact card'), the exact fields returned, the batch limit (1-20), and the keying by TMDB id. It is immediately distinguishable from get_tv and get_tv_season because it names what is deliberately excluded from the payload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes both directions: use get_tv 'when you need the full details for a title (including region-specific certification)', and use this tool even for a single id when only headline info is needed. It also names the motivating use case (spotting miniseries via low episode count).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_videosGet trailers & videosARead-only
List trailers, teasers and clips for a movie or TV show; YouTube entries include a watch URL. Get the id from search_movies/search_tv. Returns videos in the server's configured TMDB_LANGUAGE (default 'en-US') plus English, the title's original language (e.g. Spirited Away's Japanese trailer) and untagged ones; each entry's language (ISO-639-1) says which. No per-call language override.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| media_type | Yes | Media type: 'movie' or 'tv'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds meaningful behavior beyond that: YouTube entries include watch URLs and results span the configured language, English, original language, and untagged entries, with each entry's language field indicating its language. It stops short of describing ordering or pagination, but the main return semantics are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with its primary purpose and contains no filler sentences. The language-handling sentence is dense but every clause carries useful information for interpreting the returned videos.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter lookup with an output schema and annotations, the description covers the key missing context: where to obtain the id, what kind of videos are returned, how language selection works, and how to interpret each entry's language field. Nothing essential for correct invocation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the input schema. The description adds only provenance for the id via search_movies/search_tv and notes that no language parameter exists; it does not need to explain media_type or id syntax beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List trailers, teasers and clips for a movie or TV show.' It also distinguishes the YouTube return detail and tells the agent where to get the required id, making the tool easy to separate from sibling detail endpoints like get_movie or get_tv.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear prerequisite by saying 'Get the id from search_movies/search_tv,' which helps an agent route correctly. It also states there is no per-call language override, but it does not explicitly name alternatives or when-not-to-use conditions beyond the id source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watch_providersWhere to watchARead-only
Find where a movie or TV show can be streamed, rented or bought in a given country (JustWatch data via TMDB). Returns provider names per access type for that country; if it has no data, returns available:false plus available_regions to retry with. Get the id from search_movies/search_tv.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | TMDB numeric id. | |
| region | No | ISO-3166-1 country code for region-specific results (default 'US'). | |
| media_type | Yes | Media type: 'movie' or 'tv'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly and openWorld, so the description carries the rest: it discloses the return shape (provider names per access type per country) and the failure mode (`available:false` plus `available_regions`), which is genuinely actionable behavior an agent could not infer from annotations alone. It does not mention rate limits, caching, or data freshness, which is the only remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core purpose, then return/fallback behavior, then the id prerequisite. No filler or restated name/title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 not be fully spelled out, yet the description still flags the one non-obvious return case (available:false with available_regions). Combined with full param coverage and the id-sourcing hint, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description still adds value by tying `region` to country-scoped results and by establishing where `id` must come from (search_movies/search_tv), which is workflow semantics not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Find where a movie or TV show can be streamed, rented or bought in a given country', plus the data provenance (JustWatch via TMDB). It is clearly distinguishable from data-retrieval siblings like get_movie or search_watch_providers, though it never names the closest sibling (search_watch_providers) explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the concrete prerequisite and upstream alternative: 'Get the id from search_movies/search_tv', which tells the agent the required call order. It also explains what to do when the result is empty (retry with available_regions). No explicit when-not-to-use or sibling exclusion is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_collectionsSearch movie collectionsARead-only
Resolve a franchise/series name (e.g. 'harry potter', 'james bond') to its TMDB collection id — a collection is TMDB's grouping of a movie series' films. Pass the id to get_collection for every part in release order. Use this when you only have the franchise name; if you already have one of its movies, get_movie's collection field carries the same id. Movies only: collection parts are movies, and a TV series name finds nothing (e.g. 'breaking bad' → 0 results). A name can match several collections ('star wars' also returns 'LEGO Star Wars Collection' and other spin-off groupings) — pick by name/overview. Rows are id, name, overview, poster_url, localized per language (e.g. 'de-DE' → 'Harry Potter Filmreihe').
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| query | Yes | Franchise/collection name to look up. | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds real behavioral context beyond that — multiple matches are possible, TV queries return zero results, and results are localized by `language`. It stops short of describing pagination limits, but the schema covers those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and tightly written with no filler. It is dense — one long multi-clause paragraph with several parenthetical examples — which costs a bit of scannability but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers selection criteria, alternatives, the movies-only constraint, ambiguity handling, and localization behavior; an output schema exists, so the return-value detail given is a bonus rather than a requirement. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3; the description adds genuine meaning by showing how `language` alters the `name` field ('de-DE' → 'Harry Potter Filmreihe') and by enumerating the returned row fields. `query` is clarified as a franchise name, though `page` is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource: resolve a franchise name to a TMDB collection id, and defines what a collection is. It explicitly separates itself from get_collection (which takes the id) and get_movie (whose `collection` field carries the same id).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use rule ('Use this when you only have the franchise name'), names the alternative path when you already have a movie, and states a hard exclusion ('Movies only... a TV series name finds nothing'). It even handles the ambiguous-name case with a disambiguation instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesSearch production companiesARead-only
Resolve a production company's name to its TMDB numeric id (e.g. 'A24', 'Pixar'). Feed the id into discover_movies/discover_tv via with_companies. Company names aren't unique — TMDB can have several unrelated companies sharing the same name (e.g. two different 'A24's, one US and one GB) — check origin_country and logo_url to tell rows apart when a name matches more than one.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| query | Yes | Company name to look up. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: company names are not unique, multiple TMDB rows may share a name, and origin_country plus logo_url are needed to distinguish them. It does not describe pagination behavior, but the schema covers page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with no wasted text. The core purpose is front-loaded, followed by the downstream usage and the disambiguation warning in a logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the read-only annotations, complete parameter schema, and output schema, the description is complete enough for correct selection and invocation. It covers the purpose, the downstream integration, and the key real-world ambiguity an agent must handle when resolving company names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both query and page are already documented in the schema. The description adds examples for query ('A24', 'Pixar') and clarifies the disambiguation fields to check, but it does not add format or pagination semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: resolve a production company name to its TMDB numeric id. It gives examples ('A24', 'Pixar') and clearly distinguishes the tool's output from sibling search tools by explaining that the id is for use with discover_movies/discover_tv via with_companies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains the downstream use: feed the returned id into discover_movies or discover_tv via with_companies. It also gives a clear warning about non-unique company names and how to disambiguate using origin_country and logo_url. It does not explicitly contrast with other sibling search tools, but the intended usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_keywordsSearch keywordsARead-only
Resolve keyword names to TMDB keyword ids (e.g. 'time travel', 'based on true story'). Feed the ids into discover_movies/discover_tv via with_keywords / without_keywords.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| query | Yes | Keyword text to look up. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint. The description adds the purpose (resolving) and downstream usage, disclosing that it returns ids for discovery. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place: purpose with examples, then usage instruction. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, and examples. Does not mention pagination or output format, but schema and output schema handle those. Sufficient for a simple lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description provides example inputs ('time travel') adding marginal value beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves keyword names to TMDB keyword ids, with examples. It distinguishes from sibling tools (e.g., search_movies) by focusing on keywords.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use the output (feed into discover_movies/discover_tv with with/without_keywords). Does not explicitly state when not to use, but context makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_moviesSearch moviesARead-only
Search TMDB movies by title; returns compact summaries with the TMDB id that the other movie tools (get_movie, get_movie_credits, …) require, plus pagination info. Use this over search_multi when you already know the result is a movie. region here only picks which country's release_date is shown per result (e.g. a title's US vs. India theatrical date) — verified live, it does not filter which movies match or reorder them; for actual region-based availability use get_watch_providers instead.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| year | No | Bias results toward this release year. Soft by default: it matches any of a movie's release dates, so re-releases and older films still appear (verified live: 'alien' with year 2003 ranks the 1979 Alien first). Set exact_year to match only the original release year. | |
| query | Yes | Movie title to search for. | |
| region | No | ISO-3166-1 country code for region-specific results (default 'US'). | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| exact_year | No | Match `year` against the original (primary) release year only, dropping every movie first released in another year. Requires `year`. | |
| include_adult | No | Include adult (NSFW) results. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, it discloses return characteristics (compact summaries, required TMDB id, pagination info) and a non-obvious live-verified behavior of `region` that could otherwise mislead an agent. This is meaningful behavioral context, not repetition of structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and return value, then moves into sibling routing and a high-value caveat about `region`. Every sentence carries actionable information for tool selection or invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full schema, existing output schema, and annotations, the description supplies the remaining routing and behavioral context an agent needs. It covers the main trap (`region` semantics), the sibling alternative, and the downstream use of returned ids.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter documentation is already strong. The description still adds important meaning for `region`, explaining that it only selects which country's release_date is displayed rather than filtering or reordering results, which goes beyond the schema's basic ISO-code description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Search TMDB movies by title') and explains what the tool returns: compact summaries with the TMDB id needed by related movie tools. It also distinguishes itself from the sibling search_multi, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: use this over search_multi when the result is known to be a movie. It also clarifies that `region` does not filter or reorder matches and points to get_watch_providers for actual region-based availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_multiSearch everythingARead-only
Search movies, TV shows and people in one call. Each result carries a media_type ('movie' | 'tv' | 'person') so you can route to the right get_* tool. Use when the user's query could be any of these; if you already know the type, search_movies/search_tv/search_people are more precise.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| query | Yes | Free-text query. | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| include_adult | No | Include adult (NSFW) results. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description contributes beyond that by disclosing the shape of results — every record carries media_type with its three possible values — which lets the agent plan routing. It does not discuss pagination limits or adult-content defaults, but those are handled in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the capability, then the result contract, then the alternative routing. No filler or restated field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't enumerate return fields, and it correctly highlights only the one result property an agent must reason about (media_type). Nothing critical is missing for correct invocation, though it says nothing about result volume or paging expectations at the description level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including paging limits, language fallback behavior, and the adult flag default, so the schema carries parameter meaning. The description adds only the implication that the query is type-agnostic; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource set ('Search movies, TV shows and people in one call') and explicitly separates this tool from search_movies/search_tv/search_people by scope. An agent can distinguish it from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states both the selection condition ('when the user's query could be any of these') and the alternative ('if you already know the type, search_movies/search_tv/search_people are more precise'). Both branches of the decision are given explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_peopleSearch peopleARead-only
Search TMDB people (actors, directors, crew) by name; returns the TMDB id needed by get_person plus their top 5 best-known titles (known_for). Use this over search_multi when you already know the result is a person.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| query | Yes | Person name to search for. | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| include_adult | No | Include adult (NSFW) results. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety and external-data traits are covered; the description adds real value by describing the return payload shape (id + best-known titles) and the get_person workflow dependency. It doesn't mention pagination or the adult-filter default, but the schema documents both, so the gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence doing three jobs: what it searches, what it returns, and when to prefer it over search_multi. Front-loaded with the core action and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter documentation, the description need only cover routing and the downstream dependency, and it does exactly that. An agent has everything required to pick this tool and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, page, language, and include_adult are all documented in structured data. The description only implies that query is a person name and adds nothing about page or language behavior, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search TMDB people), scopes it to actors/directors/crew, and describes the payload (TMDB id plus top 5 known_for titles). It also names search_multi as the contrasting sibling, so the tool is distinguishable 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this over search_multi when the target is known to be a person. That names both the alternative and the condition that selects it, and it also flags the downstream tool (get_person) that consumes the returned id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tvSearch TV showsARead-only
Search TMDB TV shows by name; returns compact summaries with the TMDB id that get_tv and the other TV tools require. Use this over search_multi when you already know the result is a TV show.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| year | No | Filter by first-air-date year. Unlike search_movies' soft year filter, this is a hard first-air-year match (verified live). For a first-air-date range, use discover_tv. | |
| query | Yes | TV show name to search for. | |
| language | No | Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name. | |
| include_adult | No | Include adult (NSFW) results. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, it discloses that results are compact and that the returned TMDB id is the key required by get_tv and sibling TV tools — valuable chaining context. It does not add anything about rate limits, pagination limits, or empty-result behavior, though those are partly covered by the page schema description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, with the core purpose and the return-value/chaining fact front-loaded before the routing note. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover the safety profile, so the description only needs to convey purpose, routing, and the ID-chaining detail — all present. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, year, page, language, and include_adult are already fully documented in the schema (including the hard first-air-year note and the discover_tv redirect). The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search TMDB TV shows by name) and adds a return-shape summary (compact summaries with the TMDB id). It also names the sibling it replaces (search_multi), so an agent can distinguish it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this over search_multi when you already know the result is a TV show" gives an explicit alternative-plus-condition rule. It does not explicitly address other adjacent siblings like search_movies or search_people, but the routing intent is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_watch_providersSearch streaming/rental providersARead-only
Resolve a streaming/rental/purchase service's name (e.g. 'Netflix', 'Disney Plus') to its TMDB numeric provider id. Feed the id into discover_movies/discover_tv's with_watch_providers (with watch_region set to the same region given here, if any) to find top titles on that service — TMDB has no name-based lookup of its own for this, only numeric ids, and there are hundreds of providers (269+ for the US alone, more elsewhere), so don't guess an id. A provider's id and even whether it's offered at all can differ by region (e.g. a service bundled as a channel add-on in one country vs. standalone in another) — pass watch_region to match what discover_movies/discover_tv will actually see; omitting it searches the full global provider list instead, which may include ids not valid for the region the caller actually cares about.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for pagination (TMDB returns up to 20 results per page, max 500). | |
| query | Yes | Service name (or part of it) to look up, e.g. 'Netflix'. | |
| media_type | Yes | Whether to search movie or TV providers — a service can be offered for one media type but not the other (its id stays the same either way; a movie-only or TV-only service just returns nothing from the wrong media_type). | |
| watch_region | No | Two-letter ISO-3166-1 country code, e.g. 'US'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| results | Yes | |
| total_pages | Yes | |
| total_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, it discloses that provider catalogs are large (269+ for the US), that ids and availability are region-dependent, and that an unscoped search returns the global list which may contain ids invalid for the caller's region. Return format and pagination are not described, but an output schema exists, so that gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core name-to-id mapping in the first sentence, then the downstream usage and the region caveat in order of importance. The middle clause about TMDB lacking name lookup is slightly redundant with the opening but still justifies the 'don't guess an id' warning in the same sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param search tool with an output schema and safety annotations already present, the description covers the purpose, the downstream consumer, the region consistency requirement, and the failure mode of guessing ids. An agent has everything needed to invoke it correctly and use the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds cross-tool meaning the schema cannot: watch_region must match the region later passed to discover_movies/discover_tv, and media_type filters availability while the id stays constant. It reinforces the schema's example-style guidance for query rather than merely restating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: resolving a service name ('Netflix', 'Disney Plus') to a TMDB numeric provider id. It also implicitly distinguishes itself from siblings by framing the id as input to discover_movies/discover_tv rather than as a per-title lookup like get_watch_providers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says what to do with the result (feed into discover_movies/discover_tv's with_watch_providers, keeping watch_region consistent), and explicitly warns not to guess ids since TMDB has no name-based lookup. It also states the consequence of omitting watch_region versus supplying it, giving the caller a clear conditional.
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.
30 tool updates
v0.14.0- Changed
discover_movies41 fields changed- added
Input schema / properties / any_release_date_gteAdded value: +{ + "description": "Only movies with at least one release (any country and release type, re-releases included) on/after this date (YYYY-MM-DD) — unlike release_date_gte, which uses each movie's original premiere date. Narrow it with region and with_release_type, e.g. region='DE' + with_release_type=['theatrical'] + this window = movies in German cinemas then. A re-released movie matches, but its row's release_date stays the original one. Must be <= any_release_date_lte if both are given.", + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" +} - added
Input schema / properties / any_release_date_lteAdded value: +{ + "description": "Only movies with at least one release (see any_release_date_gte) on/before this date (YYYY-MM-DD).", + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" +} - changed
Input schema / properties / certification / descriptionPrevious value: -"Filter by exact age/content certification, e.g. 'PG-13' (movies) or 'TV-Y7' (TV). Requires certification_country, and a certification_country TMDB doesn't recognize silently disables this filter (returns unfiltered results) instead of erroring or matching nothing — double-check the country actually has data for that rating system. Matching is case-insensitive (verified live: 'pg-13' and 'PG-13' return identical results) but must otherwise exactly match one of TMDB's known rating strings for that country's system, punctuation included (e.g. 'PG-13', not 'PG13'). Unlike get_movie/get_tv's own certification field (which falls back to the US rating, then any country, when the requested region has none), this filter has NO fallback: a title with no certification entry at all for the exact country given is silently excluded from results, even if it's certified elsewhere (e.g. has a US rating) — for a country with sparse TMDB certification data, prefer certification_country='US' for broader, more reliable coverage over the user's actual country if completeness matters more than exact local ratings."New value: +"Filter by exact age/content certification, e.g. 'PG-13' (movies) or 'TV-Y7' (TV); join several with '|' to match ANY of them, e.g. 'G|PG' for kids/family movies or 'TV-Y|TV-Y7|TV-G' for kids' TV. Requires certification_country, and a certification_country TMDB doesn't recognize silently disables this filter (returns unfiltered results) instead of erroring or matching nothing — double-check the country actually has data for that rating system. Matching is case-insensitive (verified live: 'pg-13' and 'PG-13' return identical results) but must otherwise exactly match one of TMDB's known rating strings for that country's system, punctuation included (e.g. 'PG-13', not 'PG13'). Unlike get_movie/get_tv's own certification field (which falls back to the US rating, then any country, when the requested region has none), this filter has NO fallback: a title with no certification entry at all for the exact country given is silently excluded from results, even if it's certified elsewhere (e.g. has a US rating) — for a country with sparse TMDB certification data, prefer certification_country='US' for broader, more reliable coverage over the user's actual country if completeness matters more than exact local ratings." - added
Input schema / properties / certification / patternAdded value: +"\\S" - changed
Input schema / properties / certification_country / descriptionPrevious value: -"Country whose certification system the `certification` filter uses, e.g. 'US'."New value: +"Country whose certification system the `certification` filter uses, e.g. 'US'. Only valid together with certification." - changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - changed
Input schema / properties / max_rating / descriptionPrevious value: -"Maximum vote average (0-10)."New value: +"Maximum TMDB vote average (0-10)." - changed
Input schema / properties / min_rating / descriptionPrevious value: -"Minimum vote average (0-10). Must be <= max_rating if both are given."New value: +"Minimum TMDB vote average (0-10). Must be <= max_rating if both are given." - changed
Input schema / properties / region / descriptionPrevious value: -"ISO-3166-1 country code. TMDB's docs describe this as picking which country's release date counts as a movie's release date for date-based filtering (year, release_date_gte/lte) — but live testing found no measurable effect there; use certification_country instead to scope the certification filter, which does work. The one confirmed live effect: supplying any value (even one TMDB doesn't recognize) shifts total_results by a handful of titles versus omitting this field entirely, even with no other filter — real but too small and unexplained to use for precise filtering. Movie-only."New value: +"ISO-3166-1 country code: limits any_release_date_gte/lte (and with_release_type) to releases in this country, e.g. 'DE'. Requires any_release_date_gte or any_release_date_lte; it has no effect on year/release_date_gte/lte. An unrecognized code such as 'ZZ' matches nothing ('XX' is a real TMDB pseudo-region, not an error). Movie-only." - changed
Input schema / properties / release_date_gte / descriptionPrevious value: -"Only entries released on/after this date (YYYY-MM-DD)."New value: +"Only entries released on/after this date (YYYY-MM-DD). Must be <= release_date_lte if both are given." - changed
Input schema / properties / watch_region / descriptionPrevious value: -"Two-letter ISO-3166-1 country code, e.g. 'US'."New value: +"Two-letter ISO-3166-1 country code, e.g. 'US', whose streaming catalog with_watch_providers / without_watch_providers / with_watch_monetization_types filter on. Only valid together with at least one of them." - changed
Input schema / properties / with_cast / descriptionPrevious value: -"Comma-separated TMDB person ids, restricted to cast (actor) roles. Use search_people to resolve an actor's name to their id."New value: +"TMDB person ids, restricted to cast (actor) roles. Use search_people to resolve an actor's name to their id. Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_cast / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - changed
Input schema / properties / with_companies / descriptionPrevious value: -"Comma-separated TMDB production company ids (use search_companies to resolve names → ids)."New value: +"TMDB production company ids (use search_companies to resolve names → ids). Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_companies / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - changed
Input schema / properties / with_crew / descriptionPrevious value: -"Comma-separated TMDB person ids, restricted to crew roles (e.g. a director). Use search_people to resolve a name to their id."New value: +"TMDB person ids, restricted to crew roles (e.g. a director). Use search_people to resolve a name to their id. Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_crew / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - changed
Input schema / properties / with_genres / descriptionPrevious value: -"Comma-separated TMDB genre ids (AND); get ids from get_movie_genres/get_tv_genres."New value: +"TMDB genre ids; get them from get_movie_genres/get_tv_genres. Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_genres / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - changed
Input schema / properties / with_keywords / descriptionPrevious value: -"Comma-separated TMDB keyword ids (use search_keywords to resolve names → ids)."New value: +"TMDB keyword ids (use search_keywords to resolve names → ids). Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_keywords / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - added
Input schema / properties / with_origin_countryAdded value: +{ + "description": "Only titles whose country of origin (where they were produced, not where they can be watched) is one of these ISO-3166-1 codes, e.g. ['KR'] for Korean titles; several codes match ANY of them. An unrecognized code such as 'ZZ' matches nothing.", + "items": { + "pattern": "^[A-Z]{2}$", + "type": "string" + }, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / with_people / descriptionPrevious value: -"Comma-separated TMDB person ids, matching either a cast or crew role. Use search_people to resolve a name to their id."New value: +"TMDB person ids, matching either a cast or crew role. Use search_people to resolve a name to their id. Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_people / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - added
Input schema / properties / with_release_typeAdded value: +{ + "description": "Only count releases of these types toward any_release_date_gte/lte (and region): 'premiere', 'theatrical_limited', 'theatrical' (wide cinema release), 'digital' (VOD/streaming), 'physical' (DVD/Blu-ray), 'tv' (TV broadcast). Several values match ANY of them. Requires any_release_date_gte or any_release_date_lte.", + "items": { + "enum": [ + "premiere", + "theatrical_limited", + "theatrical", + "digital", + "physical", + "tv" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / with_watch_monetization_typesAdded value: +{ + "description": "Only titles available in watch_region through at least one of these access models: 'flatrate' = included in a subscription (e.g. Netflix), 'free' = free to watch, 'ads' = free with ads, 'rent' = paid rental, 'buy' = paid purchase. Several values match ANY of them. Requires watch_region; works alone (any provider). Combined with with_watch_providers, TMDB checks the two independently, not per provider: with_watch_providers=2 (Apple TV, rent/buy only) + 'flatrate' still matches titles rentable on Apple TV that some OTHER service streams — check get_watch_providers to confirm which service offers which access model.", + "items": { + "enum": [ + "flatrate", + "free", + "ads", + "rent", + "buy" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / with_watch_providers / descriptionPrevious value: -"Comma-separated TMDB watch-provider ids (use search_watch_providers to resolve a service name, e.g. 'Netflix', to its numeric id); requires watch_region to also be set."New value: +"TMDB watch-provider ids (use search_watch_providers to resolve a service name, e.g. 'Netflix', to its numeric id); requires watch_region to also be set. Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_watch_providers / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - added
Input schema / properties / without_companiesAdded value: +{ + "description": "Comma-separated TMDB production company ids to exclude: titles produced by ANY of them are dropped (use search_companies to resolve names → ids).", + "pattern": "^\\d+(?:,\\d+)*$", + "type": "string" +} - added
Input schema / properties / without_watch_providersAdded value: +{ + "description": "Comma-separated TMDB watch-provider ids to exclude: titles that ANY of them offers in watch_region are dropped, e.g. 'not on Netflix' (use search_watch_providers to resolve a service name to its id); requires watch_region to also be set.", + "pattern": "^\\d+(?:,\\d+)*$", + "type": "string" +} - removed
Output schema / properties / results / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / results / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / year / typeAdded value: +[ + "number", + "null" +]
- Changed
discover_tv35 fields changed- added
Input schema / properties / air_date_gteAdded value: +{ + "description": "Only shows with an episode airing on/after this date (YYYY-MM-DD) — e.g. 'what's airing this week' with air_date_lte; unlike release_date_gte, which uses the show's first air date. Dates are US Eastern time. Must be <= air_date_lte if both are given.", + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" +} - added
Input schema / properties / air_date_lteAdded value: +{ + "description": "Only shows with an episode airing on/before this date (YYYY-MM-DD), see air_date_gte.", + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" +} - changed
Input schema / properties / certification / descriptionPrevious value: -"Filter by exact age/content certification, e.g. 'PG-13' (movies) or 'TV-Y7' (TV). Requires certification_country, and a certification_country TMDB doesn't recognize silently disables this filter (returns unfiltered results) instead of erroring or matching nothing — double-check the country actually has data for that rating system. Matching is case-insensitive (verified live: 'pg-13' and 'PG-13' return identical results) but must otherwise exactly match one of TMDB's known rating strings for that country's system, punctuation included (e.g. 'PG-13', not 'PG13'). Unlike get_movie/get_tv's own certification field (which falls back to the US rating, then any country, when the requested region has none), this filter has NO fallback: a title with no certification entry at all for the exact country given is silently excluded from results, even if it's certified elsewhere (e.g. has a US rating) — for a country with sparse TMDB certification data, prefer certification_country='US' for broader, more reliable coverage over the user's actual country if completeness matters more than exact local ratings."New value: +"Filter by exact age/content certification, e.g. 'PG-13' (movies) or 'TV-Y7' (TV); join several with '|' to match ANY of them, e.g. 'G|PG' for kids/family movies or 'TV-Y|TV-Y7|TV-G' for kids' TV. Requires certification_country, and a certification_country TMDB doesn't recognize silently disables this filter (returns unfiltered results) instead of erroring or matching nothing — double-check the country actually has data for that rating system. Matching is case-insensitive (verified live: 'pg-13' and 'PG-13' return identical results) but must otherwise exactly match one of TMDB's known rating strings for that country's system, punctuation included (e.g. 'PG-13', not 'PG13'). Unlike get_movie/get_tv's own certification field (which falls back to the US rating, then any country, when the requested region has none), this filter has NO fallback: a title with no certification entry at all for the exact country given is silently excluded from results, even if it's certified elsewhere (e.g. has a US rating) — for a country with sparse TMDB certification data, prefer certification_country='US' for broader, more reliable coverage over the user's actual country if completeness matters more than exact local ratings." - added
Input schema / properties / certification / patternAdded value: +"\\S" - changed
Input schema / properties / certification_country / descriptionPrevious value: -"Country whose certification system the `certification` filter uses, e.g. 'US'."New value: +"Country whose certification system the `certification` filter uses, e.g. 'US'. Only valid together with certification." - changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - changed
Input schema / properties / max_rating / descriptionPrevious value: -"Maximum vote average (0-10)."New value: +"Maximum TMDB vote average (0-10)." - changed
Input schema / properties / min_rating / descriptionPrevious value: -"Minimum vote average (0-10). Must be <= max_rating if both are given."New value: +"Minimum TMDB vote average (0-10). Must be <= max_rating if both are given." - changed
Input schema / properties / release_date_gte / descriptionPrevious value: -"Only entries released on/after this date (YYYY-MM-DD)."New value: +"Only entries released on/after this date (YYYY-MM-DD). Must be <= release_date_lte if both are given." - changed
Input schema / properties / watch_region / descriptionPrevious value: -"Two-letter ISO-3166-1 country code, e.g. 'US'."New value: +"Two-letter ISO-3166-1 country code, e.g. 'US', whose streaming catalog with_watch_providers / without_watch_providers / with_watch_monetization_types filter on. Only valid together with at least one of them." - changed
Input schema / properties / with_companies / descriptionPrevious value: -"Comma-separated TMDB production company ids (use search_companies to resolve names → ids)."New value: +"TMDB production company ids (use search_companies to resolve names → ids). Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_companies / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - changed
Input schema / properties / with_genres / descriptionPrevious value: -"Comma-separated TMDB genre ids (AND); get ids from get_movie_genres/get_tv_genres."New value: +"TMDB genre ids; get them from get_movie_genres/get_tv_genres. Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_genres / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - changed
Input schema / properties / with_keywords / descriptionPrevious value: -"Comma-separated TMDB keyword ids (use search_keywords to resolve names → ids)."New value: +"TMDB keyword ids (use search_keywords to resolve names → ids). Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_keywords / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - changed
Input schema / properties / with_networks / descriptionPrevious value: -"Comma-separated TMDB TV network ids, e.g. HBO=49, Netflix=213 (verified live). Unlike with_companies/with_keywords/with_people, this server has no name-based resolver for networks — supply the raw TMDB network id directly; a well-known network's id may already be known, otherwise there's no in-server way to look one up."New value: +"TMDB TV network ids, e.g. HBO=49, Netflix=213 (verified live). Unlike with_companies/with_keywords/with_people, this server has no name-based resolver for networks — supply the raw TMDB network id directly; a well-known network's id may already be known, otherwise there's no in-server way to look one up. Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_networks / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - added
Input schema / properties / with_origin_countryAdded value: +{ + "description": "Only titles whose country of origin (where they were produced, not where they can be watched) is one of these ISO-3166-1 codes, e.g. ['KR'] for Korean titles; several codes match ANY of them. An unrecognized code such as 'ZZ' matches nothing.", + "items": { + "pattern": "^[A-Z]{2}$", + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / with_watch_monetization_typesAdded value: +{ + "description": "Only titles available in watch_region through at least one of these access models: 'flatrate' = included in a subscription (e.g. Netflix), 'free' = free to watch, 'ads' = free with ads, 'rent' = paid rental, 'buy' = paid purchase. Several values match ANY of them. Requires watch_region; works alone (any provider). Combined with with_watch_providers, TMDB checks the two independently, not per provider: with_watch_providers=2 (Apple TV, rent/buy only) + 'flatrate' still matches titles rentable on Apple TV that some OTHER service streams — check get_watch_providers to confirm which service offers which access model.", + "items": { + "enum": [ + "flatrate", + "free", + "ads", + "rent", + "buy" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / with_watch_providers / descriptionPrevious value: -"Comma-separated TMDB watch-provider ids (use search_watch_providers to resolve a service name, e.g. 'Netflix', to its numeric id); requires watch_region to also be set."New value: +"TMDB watch-provider ids (use search_watch_providers to resolve a service name, e.g. 'Netflix', to its numeric id); requires watch_region to also be set. Join several ids with \",\" to require ALL of them, or \"|\" to match ANY (e.g. \"8|9\")." - changed
Input schema / properties / with_watch_providers / patternPrevious value: -"^\\d+(?:,\\d+)*$"New value: +"^\\d+(?:(?:,\\d+)*|(?:\\|\\d+)*)$" - added
Input schema / properties / without_companiesAdded value: +{ + "description": "Comma-separated TMDB production company ids to exclude: titles produced by ANY of them are dropped (use search_companies to resolve names → ids).", + "pattern": "^\\d+(?:,\\d+)*$", + "type": "string" +} - added
Input schema / properties / without_watch_providersAdded value: +{ + "description": "Comma-separated TMDB watch-provider ids to exclude: titles that ANY of them offers in watch_region are dropped, e.g. 'not on Netflix' (use search_watch_providers to resolve a service name to its id); requires watch_region to also be set.", + "pattern": "^\\d+(?:,\\d+)*$", + "type": "string" +} - removed
Output schema / properties / results / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / results / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / year / typeAdded value: +[ + "number", + "null" +]
- Changed
find_by_imdb_id29 fields changed- removed
Output schema / properties / movie_results / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / movie_results / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / movie_results / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / movie_results / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / movie_results / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / movie_results / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / movie_results / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / movie_results / items / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / movie_results / items / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / movie_results / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / movie_results / items / properties / year / typeAdded value: +[ + "number", + "null" +] - added
Output schema / properties / person_results / items / properties / known_forAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / person_results / items / properties / known_for_department / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / person_results / items / properties / known_for_department / typeAdded value: +[ + "string", + "null" +] - added
Output schema / properties / person_results / items / properties / popularityAdded value: +{ + "type": [ + "number", + "null" + ] +} - removed
Output schema / properties / person_results / items / properties / profile_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / person_results / items / properties / profile_url / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / person_results / items / requiredPrevious value: -[ - "id", - "media_type", - "known_for_department", - "profile_url" -]New value: +[ + "id", + "media_type", + "known_for_department", + "popularity", + "profile_url", + "known_for" +] - removed
Output schema / properties / tv_results / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / tv_results / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / tv_results / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / tv_results / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / tv_results / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / tv_results / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / tv_results / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / tv_results / items / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / tv_results / items / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / tv_results / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / tv_results / items / properties / year / typeAdded value: +[ + "number", + "null" +]
- Changed
get_collection16 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - removed
Output schema / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / parts / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / parts / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / parts / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / parts / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / parts / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / parts / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / parts / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / parts / items / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / parts / items / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / parts / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / parts / items / properties / year / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / poster_url / typeAdded value: +[ + "string", + "null" +]
- Changed
get_movie36 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - removed
Output schema / properties / budget_usd / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / budget_usd / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / certification / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / certification / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / collection / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "type": "number" - }, - "name": { - "type": "string" - }, - "poster_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "poster_url" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "name": { + "type": "string" + }, + "poster_url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "poster_url" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / homepage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / homepage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / imdb_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / imdb_id / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / imdb_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / imdb_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / original_language / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / original_language / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / popularity / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / popularity / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / ratings / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "found": { - "const": false, - "type": "boolean" - }, - "reason": { - "type": "string" - } - }, - "required": [ - "found", - "reason" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "awards": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "found": { - "const": true, - "type": "boolean" - }, - "imdb_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "imdb_rating": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "imdb_votes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "metascore": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "rated": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "ratings": { - "items": { - "additionalProperties": false, - "properties": { - "source": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "rotten_tomatoes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "runtime": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "found", - "imdb_id", - "title", - "year", - "rated", - "runtime", - "imdb_rating", - "imdb_votes", - "metascore", - "rotten_tomatoes", - "awards", - "ratings" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "found": { + "const": false, + "type": "boolean" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "found", + "reason" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "awards": { + "type": [ + "string", + "null" + ] + }, + "found": { + "const": true, + "type": "boolean" + }, + "imdb_id": { + "type": [ + "string", + "null" + ] + }, + "imdb_rating": { + "description": "IMDb user score, 0-10, as a string, e.g. '6.5'. Not TMDB's `vote_average`.", + "type": [ + "string", + "null" + ] + }, + "imdb_votes": { + "type": [ + "string", + "null" + ] + }, + "metascore": { + "description": "Metacritic critic score, 0-100 scale, as a string, e.g. '67'.", + "type": [ + "string", + "null" + ] + }, + "rated": { + "type": [ + "string", + "null" + ] + }, + "ratings": { + "items": { + "additionalProperties": false, + "properties": { + "source": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "rotten_tomatoes": { + "description": "Rotten Tomatoes Tomatometer — the percentage of positive critic reviews, as a string including the sign, e.g. '79%'. Not a 0-10 or 0-100 score.", + "type": [ + "string", + "null" + ] + }, + "runtime": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "year": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "found", + "imdb_id", + "title", + "year", + "rated", + "runtime", + "imdb_rating", + "imdb_votes", + "metascore", + "rotten_tomatoes", + "awards", + "ratings" + ], + "type": "object" + } +] - removed
Output schema / properties / revenue_usd / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / revenue_usd / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / runtime_minutes / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / runtime_minutes / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / status / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / status / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / tagline / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / tagline / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / year / typeAdded value: +[ + "number", + "null" +]
- Changed
get_movie_credits2 fields changed- removed
Output schema / properties / cast / items / properties / character / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / cast / items / properties / character / typeAdded value: +[ + "string", + "null" +]
- Changed
get_movie_recommendations11 fields changed- removed
Output schema / properties / results / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / results / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / year / typeAdded value: +[ + "number", + "null" +]
- Added
get_movie_releases - Changed
get_movies2 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - changed
Output schema / properties / results / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "found": { - "const": true, - "type": "boolean" - }, - "genres": { - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "type": "number" - }, - "ratings": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "found": { - "const": false, - "type": "boolean" - }, - "reason": { - "type": "string" - } - }, - "required": [ - "found", - "reason" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "found": { - "const": true, - "type": "boolean" - }, - "imdb_rating": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "metascore": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "rotten_tomatoes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "found", - "imdb_rating", - "rotten_tomatoes", - "metascore" - ], - "type": "object" - } - ] - }, - "title": { - "type": "string" - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "year", - "genres", - "vote_average", - "vote_count", - "found" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "found": { - "const": false, - "type": "boolean" - }, - "id": { - "type": "number" - }, - "reason": { - "type": "string" - } - }, - "required": [ - "found", - "id", - "reason" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "found": { + "const": true, + "type": "boolean" + }, + "genres": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "number" + }, + "ratings": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "found": { + "const": false, + "type": "boolean" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "found", + "reason" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "found": { + "const": true, + "type": "boolean" + }, + "imdb_rating": { + "description": "IMDb user score, 0-10, as a string, e.g. '6.5'. Not TMDB's `vote_average`.", + "type": [ + "string", + "null" + ] + }, + "metascore": { + "description": "Metacritic critic score, 0-100 scale, as a string, e.g. '67'.", + "type": [ + "string", + "null" + ] + }, + "rotten_tomatoes": { + "description": "Rotten Tomatoes Tomatometer — the percentage of positive critic reviews, as a string including the sign, e.g. '79%'. Not a 0-10 or 0-100 score.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "found", + "imdb_rating", + "rotten_tomatoes", + "metascore" + ], + "type": "object" + } + ] + }, + "title": { + "type": "string" + }, + "vote_average": { + "description": "TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two.", + "type": [ + "number", + "null" + ] + }, + "vote_count": { + "type": [ + "number", + "null" + ] + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "year", + "genres", + "vote_average", + "vote_count", + "found" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "found": { + "const": false, + "type": "boolean" + }, + "id": { + "type": "number" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "found", + "id", + "reason" + ], + "type": "object" + } +]
- Changed
get_person19 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - removed
Output schema / properties / biography / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / biography / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / gender / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / gender / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / homepage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / homepage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / imdb_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / imdb_id / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / imdb_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / imdb_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / known_for_department / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / known_for_department / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / place_of_birth / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / place_of_birth / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / popularity / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / popularity / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / profile_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / profile_url / typeAdded value: +[ + "string", + "null" +]
- Changed
get_person_credits13 fields changed- removed
Output schema / properties / cast / items / properties / character / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / cast / items / properties / character / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / cast / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / cast / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / cast / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / cast / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / cast / items / properties / year / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / crew / items / properties / department / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / crew / items / properties / department / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / crew / items / properties / job / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / crew / items / properties / job / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / crew / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / crew / items / properties / year / typeAdded value: +[ + "number", + "null" +]
- Changed
get_ratings1 field changed- changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "found": { - "const": false, - "type": "boolean" - }, - "reason": { - "type": "string" - } - }, - "required": [ - "found", - "reason" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "awards": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "found": { - "const": true, - "type": "boolean" - }, - "imdb_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "imdb_rating": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "imdb_votes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "metascore": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "rated": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "ratings": { - "items": { - "additionalProperties": false, - "properties": { - "source": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "rotten_tomatoes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "runtime": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "found", - "imdb_id", - "title", - "year", - "rated", - "runtime", - "imdb_rating", - "imdb_votes", - "metascore", - "rotten_tomatoes", - "awards", - "ratings" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "found": { + "const": false, + "type": "boolean" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "found", + "reason" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "awards": { + "type": [ + "string", + "null" + ] + }, + "found": { + "const": true, + "type": "boolean" + }, + "imdb_id": { + "type": [ + "string", + "null" + ] + }, + "imdb_rating": { + "description": "IMDb user score, 0-10, as a string, e.g. '6.5'. Not TMDB's `vote_average`.", + "type": [ + "string", + "null" + ] + }, + "imdb_votes": { + "type": [ + "string", + "null" + ] + }, + "metascore": { + "description": "Metacritic critic score, 0-100 scale, as a string, e.g. '67'.", + "type": [ + "string", + "null" + ] + }, + "rated": { + "type": [ + "string", + "null" + ] + }, + "ratings": { + "items": { + "additionalProperties": false, + "properties": { + "source": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "rotten_tomatoes": { + "description": "Rotten Tomatoes Tomatometer — the percentage of positive critic reviews, as a string including the sign, e.g. '79%'. Not a 0-10 or 0-100 score.", + "type": [ + "string", + "null" + ] + }, + "runtime": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "year": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "found", + "imdb_id", + "title", + "year", + "rated", + "runtime", + "imdb_rating", + "imdb_votes", + "metascore", + "rotten_tomatoes", + "awards", + "ratings" + ], + "type": "object" + } +]
- Changed
get_reviews9 fields changed- removed
Output schema / properties / results / items / properties / author / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / author / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / content / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / results / items / properties / created_at / anyOfPrevious value: -[ - { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / items / properties / rating / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / rating / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / url / typeAdded value: +[ + "string", + "null" +]
- Changed
get_similar1 field changed- changed
Output schema / properties / results / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "type": "number" - }, - "media_type": { - "const": "movie", - "type": "string" - }, - "original_title": { - "type": "string" - }, - "overview": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "poster_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "release_date": { - "anyOf": [ - { - "format": "date", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "title": { - "type": "string" - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "year", - "release_date", - "vote_average", - "vote_count", - "overview", - "poster_url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "first_air_date": { - "anyOf": [ - { - "format": "date", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "id": { - "type": "number" - }, - "media_type": { - "const": "tv", - "type": "string" - }, - "name": { - "type": "string" - }, - "original_name": { - "type": "string" - }, - "overview": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "poster_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "year", - "first_air_date", - "vote_average", - "vote_count", - "overview", - "poster_url" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "media_type": { + "const": "movie", + "type": "string" + }, + "original_title": { + "type": "string" + }, + "overview": { + "type": [ + "string", + "null" + ] + }, + "poster_url": { + "type": [ + "string", + "null" + ] + }, + "release_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "type": "string" + }, + "vote_average": { + "description": "TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two.", + "type": [ + "number", + "null" + ] + }, + "vote_count": { + "type": [ + "number", + "null" + ] + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "release_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "first_air_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "number" + }, + "media_type": { + "const": "tv", + "type": "string" + }, + "name": { + "type": "string" + }, + "original_name": { + "type": "string" + }, + "overview": { + "type": [ + "string", + "null" + ] + }, + "poster_url": { + "type": [ + "string", + "null" + ] + }, + "vote_average": { + "description": "TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two.", + "type": [ + "number", + "null" + ] + }, + "vote_count": { + "type": [ + "number", + "null" + ] + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "first_air_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + } +]
- Changed
get_trending1 field changed- changed
Output schema / properties / results / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "type": "number" - }, - "media_type": { - "const": "movie", - "type": "string" - }, - "original_title": { - "type": "string" - }, - "overview": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "poster_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "release_date": { - "anyOf": [ - { - "format": "date", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "title": { - "type": "string" - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "year", - "release_date", - "vote_average", - "vote_count", - "overview", - "poster_url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "first_air_date": { - "anyOf": [ - { - "format": "date", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "id": { - "type": "number" - }, - "media_type": { - "const": "tv", - "type": "string" - }, - "name": { - "type": "string" - }, - "original_name": { - "type": "string" - }, - "overview": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "poster_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "year", - "first_air_date", - "vote_average", - "vote_count", - "overview", - "poster_url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "id": { - "type": "number" - }, - "known_for": { - "items": { - "type": "string" - }, - "type": "array" - }, - "known_for_department": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "media_type": { - "const": "person", - "type": "string" - }, - "name": { - "type": "string" - }, - "popularity": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "profile_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "known_for_department", - "popularity", - "profile_url", - "known_for" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "media_type": { + "const": "movie", + "type": "string" + }, + "original_title": { + "type": "string" + }, + "overview": { + "type": [ + "string", + "null" + ] + }, + "poster_url": { + "type": [ + "string", + "null" + ] + }, + "release_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "type": "string" + }, + "vote_average": { + "description": "TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two.", + "type": [ + "number", + "null" + ] + }, + "vote_count": { + "type": [ + "number", + "null" + ] + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "release_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "first_air_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "number" + }, + "media_type": { + "const": "tv", + "type": "string" + }, + "name": { + "type": "string" + }, + "original_name": { + "type": "string" + }, + "overview": { + "type": [ + "string", + "null" + ] + }, + "poster_url": { + "type": [ + "string", + "null" + ] + }, + "vote_average": { + "description": "TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two.", + "type": [ + "number", + "null" + ] + }, + "vote_count": { + "type": [ + "number", + "null" + ] + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "first_air_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "known_for": { + "items": { + "type": "string" + }, + "type": "array" + }, + "known_for_department": { + "type": [ + "string", + "null" + ] + }, + "media_type": { + "const": "person", + "type": "string" + }, + "name": { + "type": "string" + }, + "popularity": { + "type": [ + "number", + "null" + ] + }, + "profile_url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "media_type", + "known_for_department", + "popularity", + "profile_url", + "known_for" + ], + "type": "object" + } +]
- Changed
get_tv65 fields changed- changed
Input schema / properties / expand_episodes / descriptionPrevious value: -"If true, also fetch every season's full episode list (name, air date, runtime, rating) as `seasons_detail`, in one extra request — use this instead of calling get_tv_season once per season when you need all episodes of a multi-season show. Episode overviews are omitted here to keep that aggregate response usable — call get_tv_season for one season's full detail including overview. Each season's episode list is capped at 50 (season 0 'Specials' in particular can otherwise run to hundreds of bonus clips), and the combined count across every season is capped at 250 total, and the whole aggregate additionally has a hard size ceiling (trims further if episode names are unusually long) since a 30+ season show could otherwise still exceed a usable response size even with the per-season cap alone; `episode_count` on each season still reports that season's true total. The 250 budget is spent in season order starting at season 0, so on a long-running show the specials are served first and the last seasons are the ones that fall off. A season that falls entirely beyond the 250-episode budget is skipped rather than fetched-then-discarded, so its `overview`/`poster_url` come back null too, not just its `episodes` list — call get_tv_season for that season's full detail. Defaults to false."New value: +"If true, also fetch every season's full episode list (name, air date, runtime, and TMDB `vote_average` — TMDB's own 0-10 user score, not this tool's IMDb/RT/Metacritic `ratings`) as `seasons_detail`, in one extra request — use this instead of calling get_tv_season once per season when you need all episodes of a multi-season show. Episode overviews are omitted here to keep that aggregate response usable — call get_tv_season for one season's full detail including overview. Each season's episode list is capped at 50 (season 0 'Specials' in particular can otherwise run to hundreds of bonus clips), and the combined count across every season is capped at 250 total, and the whole aggregate additionally has a hard size ceiling (trims further if episode names are unusually long) since a 30+ season show could otherwise still exceed a usable response size even with the per-season cap alone; `episode_count` on each season still reports that season's true total. The 250 budget is spent in season order starting at season 0, so on a long-running show the specials are served first and the last seasons are the ones that fall off. A season that falls entirely beyond the 250-episode budget is skipped rather than fetched-then-discarded, so its `overview`/`poster_url` come back null too, not just its `episodes` list — call get_tv_season for that season's full detail. Defaults to false." - changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - removed
Output schema / properties / certification / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / certification / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / homepage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / homepage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / imdb_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / imdb_id / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / imdb_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / imdb_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / in_production / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Output schema / properties / in_production / typeAdded value: +[ + "boolean", + "null" +] - changed
Output schema / properties / last_episode_to_air / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "air_date": { - "anyOf": [ - { - "format": "date", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "episode_number": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "season_number": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "season_number", - "episode_number", - "name", - "air_date" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "air_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "episode_number": { + "type": [ + "number", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "season_number": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "season_number", + "episode_number", + "name", + "air_date" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / next_episode_to_air / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "air_date": { - "anyOf": [ - { - "format": "date", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "episode_number": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "season_number": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "season_number", - "episode_number", - "name", - "air_date" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "air_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "episode_number": { + "type": [ + "number", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "season_number": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "season_number", + "episode_number", + "name", + "air_date" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / number_of_episodes / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / number_of_episodes / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / number_of_seasons / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / number_of_seasons / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / original_language / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / original_language / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / popularity / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / popularity / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / ratings / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "found": { - "const": false, - "type": "boolean" - }, - "reason": { - "type": "string" - } - }, - "required": [ - "found", - "reason" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "awards": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "found": { - "const": true, - "type": "boolean" - }, - "imdb_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "imdb_rating": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "imdb_votes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "metascore": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "rated": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "ratings": { - "items": { - "additionalProperties": false, - "properties": { - "source": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "rotten_tomatoes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "runtime": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "found", - "imdb_id", - "title", - "year", - "rated", - "runtime", - "imdb_rating", - "imdb_votes", - "metascore", - "rotten_tomatoes", - "awards", - "ratings" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "found": { + "const": false, + "type": "boolean" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "found", + "reason" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "awards": { + "type": [ + "string", + "null" + ] + }, + "found": { + "const": true, + "type": "boolean" + }, + "imdb_id": { + "type": [ + "string", + "null" + ] + }, + "imdb_rating": { + "description": "IMDb user score, 0-10, as a string, e.g. '6.5'. Not TMDB's `vote_average`.", + "type": [ + "string", + "null" + ] + }, + "imdb_votes": { + "type": [ + "string", + "null" + ] + }, + "metascore": { + "description": "Metacritic critic score, 0-100 scale, as a string, e.g. '67'.", + "type": [ + "string", + "null" + ] + }, + "rated": { + "type": [ + "string", + "null" + ] + }, + "ratings": { + "items": { + "additionalProperties": false, + "properties": { + "source": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "rotten_tomatoes": { + "description": "Rotten Tomatoes Tomatometer — the percentage of positive critic reviews, as a string including the sign, e.g. '79%'. Not a 0-10 or 0-100 score.", + "type": [ + "string", + "null" + ] + }, + "runtime": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "year": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "found", + "imdb_id", + "title", + "year", + "rated", + "runtime", + "imdb_rating", + "imdb_votes", + "metascore", + "rotten_tomatoes", + "awards", + "ratings" + ], + "type": "object" + } +] - removed
Output schema / properties / seasons / items / properties / episode_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons / items / properties / episode_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / seasons / items / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons / items / properties / name / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / seasons / items / properties / season_number / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons / items / properties / season_number / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / episode_number / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / episode_number / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / name / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / runtime_minutes / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / runtime_minutes / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / seasons_detail / items / properties / episodes / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / seasons_detail / items / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons_detail / items / properties / name / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / seasons_detail / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons_detail / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / seasons_detail / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons_detail / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / seasons_detail / items / properties / season_number / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / seasons_detail / items / properties / season_number / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / status / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / status / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / tagline / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / tagline / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / type / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - added
Output schema / properties / yearAdded value: +{ + "type": [ + "number", + "null" + ] +} - changed
Output schema / requiredPrevious value: -[ - "id", - "imdb_id", - "media_type", - "certification", - "certification_region", - "certifications", - "tagline", - "overview", - "type", - "first_air_date", - "last_air_date", - "status", - "in_production", - "next_episode_to_air", - "last_episode_to_air", - "number_of_seasons", - "number_of_episodes", - "episode_run_time", - "seasons", - "genres", - "vote_average", - "vote_count", - "popularity", - "original_language", - "networks", - "created_by", - "homepage", - "poster_url", - "tmdb_url", - "imdb_url" -]New value: +[ + "id", + "imdb_id", + "media_type", + "certification", + "certification_region", + "certifications", + "tagline", + "overview", + "type", + "year", + "first_air_date", + "last_air_date", + "status", + "in_production", + "next_episode_to_air", + "last_episode_to_air", + "number_of_seasons", + "number_of_episodes", + "episode_run_time", + "seasons", + "genres", + "vote_average", + "vote_count", + "popularity", + "original_language", + "networks", + "created_by", + "homepage", + "poster_url", + "tmdb_url", + "imdb_url" +]
- Changed
get_tv_credits6 fields changed- removed
Output schema / properties / cast / items / properties / character / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / cast / items / properties / character / typeAdded value: +[ + "string", + "null" +] - added
Output schema / properties / cast / items / properties / episode_countAdded value: +{ + "description": "Episodes across the whole run this person appears in, in any role.", + "type": "number" +} - changed
Output schema / properties / cast / items / requiredPrevious value: -[ - "character" -]New value: +[ + "character", + "episode_count" +] - added
Output schema / properties / crew / items / properties / episode_countAdded value: +{ + "description": "Episodes across the whole run this person is credited on in this job.", + "type": "number" +} - added
Output schema / properties / crew / items / requiredAdded value: +[ + "job", + "episode_count" +]
- Changed
get_tv_episode20 fields changed- removed
Output schema / properties / episode_number / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / episode_number / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / guest_stars / items / properties / character / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / guest_stars / items / properties / character / typeAdded value: +[ + "string", + "null" +] - added
Output schema / properties / imdb_idAdded value: +{ + "description": "This episode's own IMDb id (not the show's) — pass it to get_ratings for the episode's IMDb rating, which no TMDB field carries. Null when TMDB has no IMDb id for it.", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / imdb_urlAdded value: +{ + "type": [ + "string", + "null" + ] +} - removed
Output schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / name / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / runtime_minutes / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / runtime_minutes / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / season_number / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / season_number / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / still_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / still_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - changed
Output schema / requiredPrevious value: -[ - "season_number", - "episode_number", - "name", - "air_date", - "runtime_minutes", - "vote_average", - "overview", - "still_url", - "guest_stars", - "crew" -]New value: +[ + "season_number", + "episode_number", + "imdb_id", + "imdb_url", + "name", + "air_date", + "runtime_minutes", + "vote_average", + "overview", + "still_url", + "guest_stars", + "crew" +]
- Changed
get_tv_recommendations11 fields changed- removed
Output schema / properties / results / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / results / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / year / typeAdded value: +[ + "number", + "null" +]
- Changed
get_tv_season19 fields changed- removed
Output schema / properties / episodes / items / properties / episode_number / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / episodes / items / properties / episode_number / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / episodes / items / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / episodes / items / properties / name / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / episodes / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / episodes / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / episodes / items / properties / runtime_minutes / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / episodes / items / properties / runtime_minutes / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / episodes / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / episodes / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / episodes / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / name / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / season_number / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / season_number / typeAdded value: +[ + "number", + "null" +]
- Changed
get_tv_shows2 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - changed
Output schema / properties / results / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "found": { - "const": true, - "type": "boolean" - }, - "genres": { - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "type": "number" - }, - "name": { - "type": "string" - }, - "number_of_episodes": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "number_of_seasons": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "ratings": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "found": { - "const": false, - "type": "boolean" - }, - "reason": { - "type": "string" - } - }, - "required": [ - "found", - "reason" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "found": { - "const": true, - "type": "boolean" - }, - "imdb_rating": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "metascore": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "rotten_tomatoes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "found", - "imdb_rating", - "rotten_tomatoes", - "metascore" - ], - "type": "object" - } - ] - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "genres", - "vote_average", - "vote_count", - "number_of_seasons", - "number_of_episodes", - "found", - "year" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "found": { - "const": false, - "type": "boolean" - }, - "id": { - "type": "number" - }, - "reason": { - "type": "string" - } - }, - "required": [ - "found", - "id", - "reason" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "found": { + "const": true, + "type": "boolean" + }, + "genres": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "number" + }, + "name": { + "type": "string" + }, + "number_of_episodes": { + "type": [ + "number", + "null" + ] + }, + "number_of_seasons": { + "type": [ + "number", + "null" + ] + }, + "ratings": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "found": { + "const": false, + "type": "boolean" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "found", + "reason" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "found": { + "const": true, + "type": "boolean" + }, + "imdb_rating": { + "description": "IMDb user score, 0-10, as a string, e.g. '6.5'. Not TMDB's `vote_average`.", + "type": [ + "string", + "null" + ] + }, + "metascore": { + "description": "Metacritic critic score, 0-100 scale, as a string, e.g. '67'.", + "type": [ + "string", + "null" + ] + }, + "rotten_tomatoes": { + "description": "Rotten Tomatoes Tomatometer — the percentage of positive critic reviews, as a string including the sign, e.g. '79%'. Not a 0-10 or 0-100 score.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "found", + "imdb_rating", + "rotten_tomatoes", + "metascore" + ], + "type": "object" + } + ] + }, + "vote_average": { + "description": "TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two.", + "type": [ + "number", + "null" + ] + }, + "vote_count": { + "type": [ + "number", + "null" + ] + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "genres", + "vote_average", + "year", + "vote_count", + "number_of_seasons", + "number_of_episodes", + "found" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "found": { + "const": false, + "type": "boolean" + }, + "id": { + "type": "number" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "found", + "id", + "reason" + ], + "type": "object" + } +]
- Changed
get_videos11 fields changed- added
Output schema / properties / results / items / properties / languageAdded value: +{ + "description": "ISO-639-1 code of the video's language, e.g. 'en'.", + "type": [ + "string", + "null" + ] +} - removed
Output schema / properties / results / items / properties / official / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / official / typeAdded value: +[ + "boolean", + "null" +] - changed
Output schema / properties / results / items / properties / published_at / anyOfPrevious value: -[ - { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / items / properties / site / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / site / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / type / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / url / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "type", - "site", - "official", - "url", - "published_at" -]New value: +[ + "language", + "type", + "site", + "official", + "url", + "published_at" +]
- Changed
get_watch_providers1 field changed- changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "available": { - "const": false, - "type": "boolean" - }, - "available_regions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "region": { - "type": "string" - } - }, - "required": [ - "region", - "available", - "available_regions" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ads": { - "items": { - "type": "string" - }, - "type": "array" - }, - "available": { - "const": true, - "type": "boolean" - }, - "available_regions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "buy": { - "items": { - "type": "string" - }, - "type": "array" - }, - "free": { - "items": { - "type": "string" - }, - "type": "array" - }, - "link": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "region": { - "type": "string" - }, - "rent": { - "items": { - "type": "string" - }, - "type": "array" - }, - "streaming": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "region", - "available", - "link", - "streaming", - "free", - "ads", - "rent", - "buy", - "available_regions" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "available": { + "const": false, + "type": "boolean" + }, + "available_regions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "region": { + "type": "string" + } + }, + "required": [ + "region", + "available", + "available_regions" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ads": { + "items": { + "type": "string" + }, + "type": "array" + }, + "available": { + "const": true, + "type": "boolean" + }, + "available_regions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "buy": { + "items": { + "type": "string" + }, + "type": "array" + }, + "free": { + "items": { + "type": "string" + }, + "type": "array" + }, + "link": { + "type": [ + "string", + "null" + ] + }, + "region": { + "type": "string" + }, + "rent": { + "items": { + "type": "string" + }, + "type": "array" + }, + "streaming": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "region", + "available", + "link", + "streaming", + "free", + "ads", + "rent", + "buy", + "available_regions" + ], + "type": "object" + } +]
- Added
search_collections - Changed
search_companies4 fields changed- removed
Output schema / properties / results / items / properties / logo_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / logo_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / origin_country / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / origin_country / typeAdded value: +[ + "string", + "null" +]
- Changed
search_movies14 fields changed- added
Input schema / properties / exact_yearAdded value: +{ + "description": "Match `year` against the original (primary) release year only, dropping every movie first released in another year. Requires `year`.", + "type": "boolean" +} - changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - changed
Input schema / properties / year / descriptionPrevious value: -"Bias results toward this release year — TMDB's search 'year' filter is soft: some results outside this year can still appear (unlike discover_movies' year filter, a hard primary_release_year match). For an exact-year filter, use discover_movies instead."New value: +"Bias results toward this release year. Soft by default: it matches any of a movie's release dates, so re-releases and older films still appear (verified live: 'alien' with year 2003 ranks the 1979 Alien first). Set exact_year to match only the original release year." - removed
Output schema / properties / results / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / results / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / year / typeAdded value: +[ + "number", + "null" +]
- Changed
search_multi2 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - changed
Output schema / properties / results / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "type": "number" - }, - "media_type": { - "const": "movie", - "type": "string" - }, - "original_title": { - "type": "string" - }, - "overview": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "poster_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "release_date": { - "anyOf": [ - { - "format": "date", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "title": { - "type": "string" - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "year", - "release_date", - "vote_average", - "vote_count", - "overview", - "poster_url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "first_air_date": { - "anyOf": [ - { - "format": "date", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "id": { - "type": "number" - }, - "media_type": { - "const": "tv", - "type": "string" - }, - "name": { - "type": "string" - }, - "original_name": { - "type": "string" - }, - "overview": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "poster_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "year", - "first_air_date", - "vote_average", - "vote_count", - "overview", - "poster_url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "id": { - "type": "number" - }, - "known_for": { - "items": { - "type": "string" - }, - "type": "array" - }, - "known_for_department": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "media_type": { - "const": "person", - "type": "string" - }, - "name": { - "type": "string" - }, - "popularity": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "profile_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "known_for_department", - "popularity", - "profile_url", - "known_for" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "media_type": { + "const": "movie", + "type": "string" + }, + "original_title": { + "type": "string" + }, + "overview": { + "type": [ + "string", + "null" + ] + }, + "poster_url": { + "type": [ + "string", + "null" + ] + }, + "release_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "type": "string" + }, + "vote_average": { + "description": "TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two.", + "type": [ + "number", + "null" + ] + }, + "vote_count": { + "type": [ + "number", + "null" + ] + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "release_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "first_air_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "number" + }, + "media_type": { + "const": "tv", + "type": "string" + }, + "name": { + "type": "string" + }, + "original_name": { + "type": "string" + }, + "overview": { + "type": [ + "string", + "null" + ] + }, + "poster_url": { + "type": [ + "string", + "null" + ] + }, + "vote_average": { + "description": "TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two.", + "type": [ + "number", + "null" + ] + }, + "vote_count": { + "type": [ + "number", + "null" + ] + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "first_air_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "known_for": { + "items": { + "type": "string" + }, + "type": "array" + }, + "known_for_department": { + "type": [ + "string", + "null" + ] + }, + "media_type": { + "const": "person", + "type": "string" + }, + "name": { + "type": "string" + }, + "popularity": { + "type": [ + "number", + "null" + ] + }, + "profile_url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "media_type", + "known_for_department", + "popularity", + "profile_url", + "known_for" + ], + "type": "object" + } +]
- Changed
search_people7 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - removed
Output schema / properties / results / items / properties / known_for_department / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / known_for_department / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / popularity / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / popularity / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / profile_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / profile_url / typeAdded value: +[ + "string", + "null" +]
- Changed
search_tv12 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE."New value: +"Override the response language (ISO-639-1, optionally with a region), e.g. 'ru-RU' or 'en-US'. Localizes titles/overviews/genre names. Defaults to the server's TMDB_LANGUAGE. A well-formed code TMDB has no translation for (e.g. 'xx') is not an error: overviews come back null, movies/shows keep their original-language title, and episodes get a generic 'Episode N' name." - removed
Output schema / properties / results / items / properties / overview / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / overview / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / poster_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / poster_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / vote_average / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_average / descriptionAdded value: +"TMDB's own 0-10 user score. A different audience and scale from the IMDb/RT/Metacritic scores get_movie/get_tv return as `ratings` — don't compare, average or substitute across the two." - added
Output schema / properties / results / items / properties / vote_average / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / vote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / vote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / year / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / year / typeAdded value: +[ + "number", + "null" +]
- Changed
search_watch_providers2 fields changed- removed
Output schema / properties / results / items / properties / logo_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / logo_url / typeAdded value: +[ + "string", + "null" +]
4 tool updates
v0.11.0- Changed
discover_movies9 fields changed- added
Input schema / properties / with_cast / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_companies / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_crew / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_genres / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_keywords / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_people / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_watch_providers / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / without_genres / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / without_keywords / patternAdded value: +"^\\d+(?:,\\d+)*$"
- Changed
discover_tv7 fields changed- added
Input schema / properties / with_companies / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_genres / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_keywords / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_networks / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / with_watch_providers / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / without_genres / patternAdded value: +"^\\d+(?:,\\d+)*$" - added
Input schema / properties / without_keywords / patternAdded value: +"^\\d+(?:,\\d+)*$"
- Changed
get_tv1 field changed- changed
Input schema / properties / expand_episodes / descriptionPrevious value: -"If true, also fetch every season's full episode list (name, air date, runtime, rating) as `seasons_detail`, in one extra request — use this instead of calling get_tv_season once per season when you need all episodes of a multi-season show. Episode overviews are omitted here to keep that aggregate response usable — call get_tv_season for one season's full detail including overview. Each season's episode list is capped at 50 (season 0 'Specials' in particular can otherwise run to hundreds of bonus clips), and the combined count across every season is capped at 250 total, and the whole aggregate additionally has a hard size ceiling (trims further if episode names are unusually long) since a 30+ season show could otherwise still exceed a usable response size even with the per-season cap alone; `episode_count` on each season still reports that season's true total. A season that falls entirely beyond the 250-episode budget is skipped rather than fetched-then-discarded, so its `overview`/`poster_url` come back null too, not just its `episodes` list — call get_tv_season for that season's full detail. Defaults to false."New value: +"If true, also fetch every season's full episode list (name, air date, runtime, rating) as `seasons_detail`, in one extra request — use this instead of calling get_tv_season once per season when you need all episodes of a multi-season show. Episode overviews are omitted here to keep that aggregate response usable — call get_tv_season for one season's full detail including overview. Each season's episode list is capped at 50 (season 0 'Specials' in particular can otherwise run to hundreds of bonus clips), and the combined count across every season is capped at 250 total, and the whole aggregate additionally has a hard size ceiling (trims further if episode names are unusually long) since a 30+ season show could otherwise still exceed a usable response size even with the per-season cap alone; `episode_count` on each season still reports that season's true total. The 250 budget is spent in season order starting at season 0, so on a long-running show the specials are served first and the last seasons are the ones that fall off. A season that falls entirely beyond the 250-episode budget is skipped rather than fetched-then-discarded, so its `overview`/`poster_url` come back null too, not just its `episodes` list — call get_tv_season for that season's full detail. Defaults to false."
- Changed
search_tv1 field changed- changed
Input schema / properties / year / descriptionPrevious value: -"Filter by first-air-date year."New value: +"Filter by first-air-date year. Unlike search_movies' soft year filter, this is a hard first-air-year match (verified live). For a first-air-date range, use discover_tv."
23 tool updates
v0.10.1- Added
discover_movies - Changed
discover_tv16 fields changed- changed
Input schema / properties / certification / descriptionPrevious value: -"Filter by exact age/content certification, e.g. 'PG-13' (movies) or 'TV-Y7' (TV). Requires certification_country, and a certification_country TMDB doesn't recognize silently disables this filter (returns unfiltered results) instead of erroring or matching nothing — double-check the country actually has data for that rating system. Case-sensitive for movies ('pg-13' matches nothing; use 'PG-13'). Unlike get_movie/get_tv's own certification field (which falls back to the US rating, then any country, when the requested region has none), this filter has NO fallback: a title with no certification entry at all for the exact country given is silently excluded from results, even if it's certified elsewhere (e.g. has a US rating) — for a country with sparse TMDB certification data, prefer certification_country='US' for broader, more reliable coverage over the user's actual country if completeness matters more than exact local ratings."New value: +"Filter by exact age/content certification, e.g. 'PG-13' (movies) or 'TV-Y7' (TV). Requires certification_country, and a certification_country TMDB doesn't recognize silently disables this filter (returns unfiltered results) instead of erroring or matching nothing — double-check the country actually has data for that rating system. Matching is case-insensitive (verified live: 'pg-13' and 'PG-13' return identical results) but must otherwise exactly match one of TMDB's known rating strings for that country's system, punctuation included (e.g. 'PG-13', not 'PG13'). Unlike get_movie/get_tv's own certification field (which falls back to the US rating, then any country, when the requested region has none), this filter has NO fallback: a title with no certification entry at all for the exact country given is silently excluded from results, even if it's certified elsewhere (e.g. has a US rating) — for a country with sparse TMDB certification data, prefer certification_country='US' for broader, more reliable coverage over the user's actual country if completeness matters more than exact local ratings." - added
Input schema / properties / include_adultAdded value: +{ + "description": "Include adult (NSFW) results. Defaults to false.", + "type": "boolean" +} - changed
Input schema / properties / min_runtime / descriptionPrevious value: -"Minimum runtime in minutes."New value: +"Minimum runtime in minutes. Must be <= max_runtime if both are given." - added
Input schema / properties / release_date_gte / formatAdded value: +"date" - changed
Input schema / properties / release_date_gte / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / release_date_lte / formatAdded value: +"date" - changed
Input schema / properties / release_date_lte / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - changed
Input schema / properties / sort_by / descriptionPrevious value: -"TMDB sort, e.g. 'popularity.desc', 'vote_average.desc', 'primary_release_date.desc'."New value: +"Sort order. Defaults to TMDB's own default (roughly popularity-based) if omitted. TV's vocabulary differs from discover_movies' — 'name'/'first_air_date' instead of 'original_title'/'primary_release_date', and no 'revenue' (TMDB doesn't track it per-show)." - added
Input schema / properties / sort_by / enumAdded value: +[ + "popularity.asc", + "popularity.desc", + "vote_average.asc", + "vote_average.desc", + "vote_count.asc", + "vote_count.desc", + "name.asc", + "name.desc", + "first_air_date.asc", + "first_air_date.desc" +] - changed
Input schema / properties / watch_region / descriptionPrevious value: -"Country for with_watch_providers, e.g. 'US'."New value: +"Two-letter ISO-3166-1 country code, e.g. 'US'." - changed
Input schema / properties / with_networks / descriptionPrevious value: -"Comma-separated TMDB TV network, e.g. HBO or Netflix ids."New value: +"Comma-separated TMDB TV network ids, e.g. HBO=49, Netflix=213 (verified live). Unlike with_companies/with_keywords/with_people, this server has no name-based resolver for networks — supply the raw TMDB network id directly; a well-known network's id may already be known, otherwise there's no in-server way to look one up." - changed
Input schema / properties / with_watch_providers / descriptionPrevious value: -"Comma-separated TMDB watch-provider ids (e.g. Netflix's numeric id); requires watch_region to also be set."New value: +"Comma-separated TMDB watch-provider ids (use search_watch_providers to resolve a service name, e.g. 'Netflix', to its numeric id); requires watch_region to also be set." - changed
Input schema / properties / without_genres / descriptionPrevious value: -"Comma-separated TMDB genre ids to exclude."New value: +"Comma-separated TMDB genre ids to exclude; get ids from get_movie_genres/get_tv_genres." - changed
Input schema / properties / without_keywords / descriptionPrevious value: -"Comma-separated TMDB keyword to exclude ids."New value: +"Comma-separated TMDB keyword ids to exclude (use search_keywords to resolve names → ids)." - changed
Output schema / properties / results / items / properties / first_air_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / results / items / properties / first_air_date / defaultAdded value: +null
- Changed
find_by_imdb_id4 fields changed- changed
Output schema / properties / movie_results / items / properties / release_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / movie_results / items / properties / release_date / defaultAdded value: +null - changed
Output schema / properties / tv_results / items / properties / first_air_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / tv_results / items / properties / first_air_date / defaultAdded value: +null
- Added
get_collection - Changed
get_movie2 fields changed- changed
Output schema / properties / release_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / release_date / defaultAdded value: +null
- Changed
get_movie_recommendations2 fields changed- changed
Output schema / properties / results / items / properties / release_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / results / items / properties / release_date / defaultAdded value: +null
- Added
get_movies - Changed
get_person4 fields changed- changed
Output schema / properties / birthday / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / birthday / defaultAdded value: +null - changed
Output schema / properties / deathday / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / deathday / defaultAdded value: +null
- Changed
get_ratings1 field changed- added
Input schema / properties / typeAdded value: +{ + "description": "Restrict a title lookup to this entry type. Verified live: without it, OMDb's own title match can silently prefer one type over another when the exact same title exists as more than one — e.g. a title lookup for 'Chuck' with no `type` returns the 2007 TV series, not the unrelated 2016 movie of the same name, with no signal the movie was ever in contention. Only affects a title lookup; has no effect when imdb_id is given (already unambiguous).", + "enum": [ + "movie", + "series", + "episode" + ], + "type": "string" +}
- Changed
get_reviews2 fields changed- changed
Output schema / properties / results / items / properties / created_at / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / results / items / properties / created_at / defaultAdded value: +null
- Added
get_similar - Added
get_trending - Added
get_tv - Changed
get_tv_episode2 fields changed- changed
Output schema / properties / air_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / air_date / defaultAdded value: +null
- Added
get_tv_recommendations - Changed
get_tv_season4 fields changed- changed
Output schema / properties / air_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / air_date / defaultAdded value: +null - changed
Output schema / properties / episodes / items / properties / air_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / episodes / items / properties / air_date / defaultAdded value: +null
- Changed
get_tv_shows1 field changed- removed
Input schema / properties / regionRemoved value: -{ - "description": "ISO-3166-1 country code for region-specific results (default 'US').", - "pattern": "^[A-Z]{2}$", - "type": "string" -}
- Changed
get_videos3 fields changed- changed
Input schema / properties / media_type / descriptionPrevious value: -"Whether the id refers to a movie or a TV show."New value: +"Media type: 'movie' or 'tv'." - changed
Output schema / properties / results / items / properties / published_at / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / results / items / properties / published_at / defaultAdded value: +null
- Changed
get_watch_providers1 field changed- changed
Input schema / properties / media_type / descriptionPrevious value: -"Whether the id refers to a movie or a TV show."New value: +"Media type: 'movie' or 'tv'."
- Changed
search_movies3 fields changed- changed
Input schema / properties / year / descriptionPrevious value: -"Filter by release year."New value: +"Bias results toward this release year — TMDB's search 'year' filter is soft: some results outside this year can still appear (unlike discover_movies' year filter, a hard primary_release_year match). For an exact-year filter, use discover_movies instead." - changed
Output schema / properties / results / items / properties / release_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / results / items / properties / release_date / defaultAdded value: +null
- Changed
search_multi1 field changed- changed
Output schema / properties / results / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "type": "number" - }, - "media_type": { - "const": "movie", - "type": "string" - }, - "original_title": { - "type": "string" - }, - "overview": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "poster_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "release_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "title": { - "type": "string" - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "year", - "release_date", - "vote_average", - "vote_count", - "overview", - "poster_url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "first_air_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "type": "number" - }, - "media_type": { - "const": "tv", - "type": "string" - }, - "name": { - "type": "string" - }, - "original_name": { - "type": "string" - }, - "overview": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "poster_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "vote_average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "vote_count": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "year", - "first_air_date", - "vote_average", - "vote_count", - "overview", - "poster_url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "id": { - "type": "number" - }, - "known_for": { - "items": { - "type": "string" - }, - "type": "array" - }, - "known_for_department": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "media_type": { - "const": "person", - "type": "string" - }, - "name": { - "type": "string" - }, - "popularity": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "profile_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "id", - "media_type", - "known_for_department", - "popularity", - "profile_url", - "known_for" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "media_type": { + "const": "movie", + "type": "string" + }, + "original_title": { + "type": "string" + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "release_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "type": "string" + }, + "vote_average": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "vote_count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "year": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "release_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "first_air_date": { + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "number" + }, + "media_type": { + "const": "tv", + "type": "string" + }, + "name": { + "type": "string" + }, + "original_name": { + "type": "string" + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "vote_average": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "vote_count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "year": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "first_air_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "known_for": { + "items": { + "type": "string" + }, + "type": "array" + }, + "known_for_department": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "media_type": { + "const": "person", + "type": "string" + }, + "name": { + "type": "string" + }, + "popularity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "profile_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "media_type", + "known_for_department", + "popularity", + "profile_url", + "known_for" + ], + "type": "object" + } +]
- Changed
search_tv2 fields changed- changed
Output schema / properties / results / items / properties / first_air_date / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / results / items / properties / first_air_date / defaultAdded value: +null
- Added
search_watch_providers
15 tool updates
v0.8.1- Removed
discover_movies - Added
discover_tv - Removed
get_collection - Added
get_movie - Added
get_movie_credits - Added
get_movie_genres - Removed
get_movies - Added
get_person - Added
get_person_credits - Added
get_reviews - Removed
get_tv - Added
get_tv_credits - Removed
get_tv_recommendations - Added
get_videos - Added
get_watch_providers
18 tool updates
v0.8.1- Changed
discover_movies3 fields changed- removed
Input schema / properties / language / minLengthRemoved value: -2 - added
Input schema / properties / language / patternAdded value: +"^[a-z]{2}(-[A-Z]{2})?$" - added
Input schema / properties / with_original_language / patternAdded value: +"^[a-z]{2}$"
- Added
find_by_imdb_id - Changed
get_collection2 fields changed- removed
Input schema / properties / language / minLengthRemoved value: -2 - added
Input schema / properties / language / patternAdded value: +"^[a-z]{2}(-[A-Z]{2})?$"
- Removed
get_movie - Removed
get_movie_credits - Changed
get_movies2 fields changed- removed
Input schema / properties / language / minLengthRemoved value: -2 - added
Input schema / properties / language / patternAdded value: +"^[a-z]{2}(-[A-Z]{2})?$"
- Added
get_ratings - Added
get_tv - Added
get_tv_episode - Added
get_tv_genres - Added
get_tv_recommendations - Changed
get_tv_shows2 fields changed- removed
Input schema / properties / language / minLengthRemoved value: -2 - added
Input schema / properties / language / patternAdded value: +"^[a-z]{2}(-[A-Z]{2})?$"
- Removed
get_videos - Removed
get_watch_providers - Changed
search_movies2 fields changed- removed
Input schema / properties / language / minLengthRemoved value: -2 - added
Input schema / properties / language / patternAdded value: +"^[a-z]{2}(-[A-Z]{2})?$"
- Added
search_multi - Changed
search_people2 fields changed- removed
Input schema / properties / language / minLengthRemoved value: -2 - added
Input schema / properties / language / patternAdded value: +"^[a-z]{2}(-[A-Z]{2})?$"
- Added
search_tv
30 tool updates
v0.8.0- Changed
discover_movies10 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / certification / descriptionPrevious value: -"Filter by exact age certification, e.g. 'PG-13'. Requires certification_country."New value: +"Filter by exact age/content certification, e.g. 'PG-13' (movies) or 'TV-Y7' (TV). Requires certification_country, and a certification_country TMDB doesn't recognize silently disables this filter (returns unfiltered results) instead of erroring or matching nothing — double-check the country actually has data for that rating system. Case-sensitive for movies ('pg-13' matches nothing; use 'PG-13'). Unlike get_movie/get_tv's own certification field (which falls back to the US rating, then any country, when the requested region has none), this filter has NO fallback: a title with no certification entry at all for the exact country given is silently excluded from results, even if it's certified elsewhere (e.g. has a US rating) — for a country with sparse TMDB certification data, prefer certification_country='US' for broader, more reliable coverage over the user's actual country if completeness matters more than exact local ratings." - changed
Input schema / properties / min_rating / descriptionPrevious value: -"Minimum vote average (0-10)."New value: +"Minimum vote average (0-10). Must be <= max_rating if both are given." - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number for pagination."New value: +"1-based page number for pagination (TMDB returns up to 20 results per page, max 500)." - changed
Input schema / properties / page / maximumPrevious value: -9007199254740991New value: +500 - changed
Input schema / properties / with_companies / descriptionPrevious value: -"Comma-separated TMDB production company ids."New value: +"Comma-separated TMDB production company ids (use search_companies to resolve names → ids)." - changed
Input schema / properties / with_keywords / descriptionPrevious value: -"Comma-separated TMDB keyword (use search_keywords to resolve names → ids) ids."New value: +"Comma-separated TMDB keyword ids (use search_keywords to resolve names → ids)." - changed
Input schema / properties / with_watch_providers / descriptionPrevious value: -"Comma-separated TMDB watch-provider (e.g. Netflix); requires watch_region ids."New value: +"Comma-separated TMDB watch-provider ids (e.g. Netflix's numeric id); requires watch_region to also be set." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "page": { + "type": "number" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "media_type": { + "const": "movie", + "type": "string" + }, + "original_title": { + "type": "string" + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "release_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "type": "string" + }, + "vote_average": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "vote_count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "year": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "release_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + "type": "array" + }, + "total_pages": { + "type": "number" + }, + "total_results": { + "type": "number" + } + }, + "required": [ + "results", + "page", + "total_pages", + "total_results" + ], + "type": "object" +}
- Removed
discover_tv - Removed
find_by_imdb_id - Changed
get_collection3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "name": { + "type": "string" + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "parts": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "media_type": { + "const": "movie", + "type": "string" + }, + "original_title": { + "type": "string" + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "release_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "type": "string" + }, + "vote_average": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "vote_count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "year": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "release_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + "type": "array" + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "overview", + "poster_url", + "parts" + ], + "type": "object" +}
- Changed
get_movie4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / include_ratings / descriptionPrevious value: -"If true (default), enrich the result with IMDb/Rotten Tomatoes/Metacritic ratings from OMDb (requires OMDB_API_KEY). Set false to skip the extra lookup when ratings are not needed."New value: +"If true (default), enrich the result with IMDb/Rotten Tomatoes/Metacritic ratings plus an awards summary (major-award wins/nominations — Oscars, Emmys, Golden Globes, etc., whatever OMDb aggregates; free text, not a structured count, and describes the whole film/show, not any one person's award) from OMDb (requires OMDB_API_KEY). Set false to skip the extra lookup when ratings are not needed." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "budget_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "certification": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "certification_region": { + "type": "string" + }, + "certifications": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "collection": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "name": { + "type": "string" + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "poster_url" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "genres": { + "items": { + "type": "string" + }, + "type": "array" + }, + "homepage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "number" + }, + "imdb_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "imdb_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "media_type": { + "const": "movie", + "type": "string" + }, + "origin_country": { + "items": { + "type": "string" + }, + "type": "array" + }, + "original_language": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "original_title": { + "type": "string" + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "popularity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "production_companies": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ratings": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "found": { + "const": false, + "type": "boolean" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "found", + "reason" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "awards": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "found": { + "const": true, + "type": "boolean" + }, + "imdb_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "imdb_rating": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "imdb_votes": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "metascore": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "rated": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "ratings": { + "items": { + "additionalProperties": false, + "properties": { + "source": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "rotten_tomatoes": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "runtime": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "found", + "imdb_id", + "title", + "year", + "rated", + "runtime", + "imdb_rating", + "imdb_votes", + "metascore", + "rotten_tomatoes", + "awards", + "ratings" + ], + "type": "object" + } + ] + }, + "release_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "revenue_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "runtime_minutes": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "spoken_languages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tagline": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "type": "string" + }, + "tmdb_url": { + "type": "string" + }, + "vote_average": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "vote_count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "year": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "imdb_id", + "media_type", + "certification", + "certification_region", + "certifications", + "tagline", + "overview", + "year", + "release_date", + "runtime_minutes", + "status", + "genres", + "vote_average", + "vote_count", + "popularity", + "original_language", + "spoken_languages", + "production_companies", + "origin_country", + "collection", + "budget_usd", + "revenue_usd", + "homepage", + "poster_url", + "tmdb_url", + "imdb_url" + ], + "type": "object" +}
- Changed
get_movie_credits3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "cast": { + "items": { + "additionalProperties": false, + "properties": { + "character": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "number" + }, + "name": { + "type": "string" + } + }, + "required": [ + "character" + ], + "type": "object" + }, + "type": "array" + }, + "crew": { + "items": { + "additionalProperties": false, + "properties": { + "department": { + "type": "string" + }, + "id": { + "type": "number" + }, + "job": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "cast", + "crew" + ], + "type": "object" +}
- Removed
get_movie_genres - Changed
get_movie_recommendations5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number for pagination."New value: +"1-based page number for pagination (TMDB returns up to 20 results per page, max 500)." - changed
Input schema / properties / page / maximumPrevious value: -9007199254740991New value: +500 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "page": { + "type": "number" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "media_type": { + "const": "movie", + "type": "string" + }, + "original_title": { + "type": "string" + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "release_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "type": "string" + }, + "vote_average": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "vote_count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "year": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "release_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + "type": "array" + }, + "total_pages": { + "type": "number" + }, + "total_results": { + "type": "number" + } + }, + "required": [ + "results", + "page", + "total_pages", + "total_results" + ], + "type": "object" +}
- Added
get_movies - Removed
get_person - Removed
get_person_credits - Removed
get_ratings - Removed
get_reviews - Removed
get_similar - Removed
get_trending - Removed
get_tv - Removed
get_tv_credits - Removed
get_tv_episode - Removed
get_tv_genres - Removed
get_tv_recommendations - Changed
get_tv_season3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "air_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "episode_count": { + "type": "number" + }, + "episodes": { + "items": { + "additionalProperties": false, + "properties": { + "air_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "episode_number": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "runtime_minutes": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "vote_average": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "episode_number", + "name", + "air_date", + "runtime_minutes", + "vote_average", + "overview" + ], + "type": "object" + }, + "type": "array" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "season_number": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "season_number", + "name", + "air_date", + "overview", + "poster_url", + "episode_count", + "episodes" + ], + "type": "object" +}
- Added
get_tv_shows - Changed
get_videos3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "results": { + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "official": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "published_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "site": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "type", + "site", + "official", + "url", + "published_at" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "results" + ], + "type": "object" +}
- Changed
get_watch_providers3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "available": { + "const": false, + "type": "boolean" + }, + "available_regions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "region": { + "type": "string" + } + }, + "required": [ + "region", + "available", + "available_regions" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ads": { + "items": { + "type": "string" + }, + "type": "array" + }, + "available": { + "const": true, + "type": "boolean" + }, + "available_regions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "buy": { + "items": { + "type": "string" + }, + "type": "array" + }, + "free": { + "items": { + "type": "string" + }, + "type": "array" + }, + "link": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "region": { + "type": "string" + }, + "rent": { + "items": { + "type": "string" + }, + "type": "array" + }, + "streaming": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "region", + "available", + "link", + "streaming", + "free", + "ads", + "rent", + "buy", + "available_regions" + ], + "type": "object" + } + ], + "type": "object" +}
- Added
search_companies - Changed
search_keywords5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number for pagination."New value: +"1-based page number for pagination (TMDB returns up to 20 results per page, max 500)." - changed
Input schema / properties / page / maximumPrevious value: -9007199254740991New value: +500 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "page": { + "type": "number" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "total_pages": { + "type": "number" + }, + "total_results": { + "type": "number" + } + }, + "required": [ + "results", + "page", + "total_pages", + "total_results" + ], + "type": "object" +}
- Changed
search_movies5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number for pagination."New value: +"1-based page number for pagination (TMDB returns up to 20 results per page, max 500)." - changed
Input schema / properties / page / maximumPrevious value: -9007199254740991New value: +500 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "page": { + "type": "number" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "media_type": { + "const": "movie", + "type": "string" + }, + "original_title": { + "type": "string" + }, + "overview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "poster_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "release_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "type": "string" + }, + "vote_average": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "vote_count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "year": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "media_type", + "year", + "release_date", + "vote_average", + "vote_count", + "overview", + "poster_url" + ], + "type": "object" + }, + "type": "array" + }, + "total_pages": { + "type": "number" + }, + "total_results": { + "type": "number" + } + }, + "required": [ + "results", + "page", + "total_pages", + "total_results" + ], + "type": "object" +}
- Removed
search_multi - Changed
search_people5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number for pagination."New value: +"1-based page number for pagination (TMDB returns up to 20 results per page, max 500)." - changed
Input schema / properties / page / maximumPrevious value: -9007199254740991New value: +500 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "page": { + "type": "number" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "number" + }, + "known_for": { + "items": { + "type": "string" + }, + "type": "array" + }, + "known_for_department": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "media_type": { + "const": "person", + "type": "string" + }, + "name": { + "type": "string" + }, + "popularity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "profile_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "media_type", + "known_for_department", + "popularity", + "profile_url", + "known_for" + ], + "type": "object" + }, + "type": "array" + }, + "total_pages": { + "type": "number" + }, + "total_results": { + "type": "number" + } + }, + "required": [ + "results", + "page", + "total_pages", + "total_results" + ], + "type": "object" +}
- Removed
search_tv
27 tool updates
v0.3.0- First observed
discover_movies - First observed
discover_tv - First observed
find_by_imdb_id - First observed
get_collection - First observed
get_movie - First observed
get_movie_credits - First observed
get_movie_genres - First observed
get_movie_recommendations - First observed
get_person - First observed
get_person_credits - First observed
get_ratings - First observed
get_reviews - First observed
get_similar - First observed
get_trending - First observed
get_tv - First observed
get_tv_credits - First observed
get_tv_episode - First observed
get_tv_genres - First observed
get_tv_recommendations - First observed
get_tv_season - First observed
get_videos - First observed
get_watch_providers - First observed
search_keywords - First observed
search_movies - First observed
search_multi - First observed
search_people - First observed
search_tv
TDQS
Scored across 33 tools
The set has several near-neighbour pairs — get_movie vs get_movies, get_tv vs get_tv_shows, search_movies/search_tv vs search_multi, get_movie_recommendations vs get_similar, and get_ratings vs the ratings embedded in get_movie/get_tv — but the descriptions explicitly state when to prefer each, so an agent can route correctly. A few boundaries (get_ratings vs search+get_movie) require careful reading and are the main residual confusion.
Nearly everything follows verb_noun (get_movie, search_people, discover_tv, get_watch_providers), with a few deviations: get_similar/get_trending/get_videos/get_reviews omit the media noun, find_by_imdb_id uses a different verb, and the batch tools are inconsistently named (get_movies for movies but get_tv_shows for TV). Still highly readable and predictable overall.
33 tools is heavy and well above the typical sweet spot, though TMDB is a genuinely broad domain (movies, TV, seasons, episodes, people, credits, discovery, providers, collections, reference data). Several could plausibly be collapsed — eight separate search_* resolvers and two genre-listing tools — so the surface feels somewhat sprawling rather than tightly scoped.
The read-only discovery surface is thorough: search, full and compact detail, season/episode drill-down, credits, recommendations, reviews, collections, watch providers, videos, trending, theatrical releases, rich discover filters, and id resolvers for genres/keywords/companies/providers. Gaps are minor for the stated purpose — no account-level tools (watchlists, user ratings), no image galleries, and no external-id resolution beyond IMDb.
Maintenance
Related MCP Connectors
OMDb MCP — IMDB-derived movie / TV / episode data (BYO key)
TheGamesDB MCP — wraps TheGamesDB API (thegamesdb.net), a community video-game metadata database…
Movies MCP — wraps iTunes Search API (movies, free, no auth) and TVmaze API (TV shows, free, no…
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that wraps The Movie Database (TMDB) API, enabling search for movies and TV shows, retrieval of movie details, recommendations, similar movies, trending content, streaming providers, and movie discovery.8-
- FlicenseAqualityDmaintenanceAn MCP server that wraps the TMDB API, enabling search of movies and TV shows, retrieval of details, trending titles, recommendations, and streaming provider information.8-
- AlicenseAqualityCmaintenanceMCP server for the OMDb API - search movies, series, and episodes from any MCP-compatible client.5MIT
- AlicenseBqualityDmaintenanceEnables searching, discovering, and reading movie information from TMDB through MCP tools.5ISC