TMDB MCP Server
The tmdb-mcp server provides a comprehensive toolkit for searching, discovering, and retrieving detailed information about movies, TV shows, and people from TMDB, optionally enriched with IMDb, Rotten Tomatoes, and Metacritic ratings via OMDb.
Search & Discovery
search_movies,search_tv,search_people,search_multi– Search by title/name across movies, TV, and peoplesearch_keywords– Resolve keyword names to TMDB IDs for filteringdiscover_movies/discover_tv– Filter by genre, year, rating, runtime, cast/crew, keywords, watch providers, certification, etc.get_trending– Get trending movies, TV, or people for today or this week
Movie Details
get_movie– Full details: overview, genres, runtime, budget/revenue, ratings, certification, links; optional IMDb/RT/Metacritic scoresget_movie_credits– Top-billed cast and headline crewget_movie_recommendations/get_similar– Editorial or algorithmic recommendationsget_collection– Movie franchises and their parts in release order
TV Show Details
get_tv– Full details: overview, genres, seasons/episodes, networks, status, optional ratingsget_tv_credits– Main cast and headline crewget_tv_recommendations– Recommendations based on a TV showget_tv_season/get_tv_episode– Season episode lists or single episode details (guest stars, director, writer)
People
get_person– Biography, birthday/deathday, department, and linksget_person_credits– Full filmography (cast roles and crew jobs)
Ratings, Reviews & Videos
get_ratings– IMDb, Rotten Tomatoes, and Metacritic scores by IMDb ID or title (requires OMDb key)get_reviews– User reviews with author, rating, and textget_videos– Trailers, teasers, and clips with YouTube links
Streaming & Utilities
get_watch_providers– Where to stream, rent, or buy by countryfind_by_imdb_id– Resolve an IMDb ID to TMDB dataget_movie_genres/get_tv_genres– List all TMDB genres with IDs
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 "Install 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 |
| TMDB's editorial recommendations |
| Algorithmically similar titles ( |
| What's popular now (movies / TV / people, day or week) |
| Genre id ↔ name reference |
| Filter by genre, year/date range, rating, cast/crew/people, companies, keywords, providers, certification, … |
| Same, plus networks/type/status, but no cast/crew/person 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 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. The search tools, get_movie/get_tv/get_person,
get_collection 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 ≥ 20.11. 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
31 toolsdiscover_moviesDiscover movies (filters)ARead-only
Find movies by structured filters instead of a title query: genres (include/exclude), year or release-date range, rating range, vote count, runtime range, original language, cast/crew/people, companies, keywords, watch providers, certification, a region code (minor effect only — see its own description), an adult-content toggle, and sort order. certification/with_watch_providers have validation and silent-fallback rules — see their own field descriptions. Use for 'popular sci-fi from the 1990s rated 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. 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. | |
| 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. | |
| min_votes | No | Minimum vote count (filters obscure titles). | |
| with_cast | No | Comma-separated TMDB person ids, restricted to cast (actor) roles. Use search_people to resolve an actor's name to their id. | |
| with_crew | No | Comma-separated TMDB person ids, restricted to crew roles (e.g. a director). Use search_people to resolve a name to their id. | |
| max_rating | No | Maximum vote average (0-10). | |
| min_rating | No | Minimum 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 | Comma-separated TMDB genre ids (AND); get ids from get_movie_genres/get_tv_genres. | |
| with_people | No | Comma-separated TMDB person ids, matching either a cast or crew role. Use search_people to resolve a name to their id. | |
| watch_region | No | Two-letter ISO-3166-1 country code, e.g. 'US'. | |
| certification | No | 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. | |
| include_adult | No | Include adult (NSFW) results. Defaults to false. | |
| with_keywords | No | Comma-separated TMDB keyword ids (use search_keywords to resolve names → ids). | |
| with_companies | No | Comma-separated TMDB production company ids (use search_companies to resolve names → ids). | |
| 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). | |
| 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_watch_providers | No | 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. | |
| certification_country | No | Country whose certification system the `certification` filter uses, e.g. 'US'. | |
| with_original_language | No | ISO-639-1 original-language code, e.g. 'en', 'ja'. |
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?
With readOnlyHint=true, the safety profile is already covered, so the description adds value by flagging live-tested quirks: region has 'minor effect only', and certification/with_watch_providers have 'validation and silent-fallback rules'. It does not fully spell out those rules at the top level, but it points to the detailed field descriptions, which is reasonable navigation rather than concealment.
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 tool's core purpose, then organizes caveats, usage examples, and ID-resolution guidance in a logical flow. Each sentence earns its place; the repeated 'see its own description' pattern avoids duplicating long schema content while still highlighting important behavioral notes.
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 26-parameter tool with an output schema and readOnly/openWorld annotations, the description covers purpose, typical use cases, exclusions, key caveats, and ID-resolution dependencies. The output schema removes the need to describe return values, and the field-level descriptions handle individual parameter details, making the top-level description appropriately complete.
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, and the description adds meaningful combination guidance beyond individual parameter entries: e.g., using with_crew/with_cast/with_people together with with_genres to answer genre-filtered person queries. It also summarizes the filter categories and flags the region parameter as having only a minor effect, which helps the agent reason about parameter choice.
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 movies by structured filters instead of a title query', which clearly distinguishes this from search_movies and other siblings. It enumerates the exact filter dimensions and explicitly contrasts with get_person_credits for genre-filtered person queries.
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 gives concrete example queries ('popular sci-fi from the 1990s rated above 7 available on Netflix') and explicitly names an alternative tool (get_person_credits) that lacks genre filtering, stating why discover_movies is the right choice. It also tells the agent to resolve IDs via sibling search tools, providing clear when-to-use guidance.
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, first-air year or date range, rating range, vote count, runtime, language, companies, networks, keywords, watch providers, 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 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. | |
| 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 vote average (0-10). | |
| min_rating | No | Minimum 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 | Comma-separated TMDB genre ids (AND); get ids from get_movie_genres/get_tv_genres. | |
| 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). | |
| watch_region | No | Two-letter ISO-3166-1 country code, e.g. 'US'. | |
| certification | No | 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. | |
| include_adult | No | Include adult (NSFW) results. Defaults to false. | |
| with_keywords | No | Comma-separated TMDB keyword ids (use search_keywords to resolve names → ids). | |
| with_networks | No | 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. | |
| with_companies | No | Comma-separated TMDB production company ids (use search_companies to resolve names → ids). | |
| 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). | |
| 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_watch_providers | No | 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. | |
| certification_country | No | Country whose certification system the `certification` filter uses, e.g. 'US'. | |
| with_original_language | No | ISO-639-1 original-language code, e.g. 'en', 'ja'. |
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 declare readOnlyHint=true and openWorldHint=true, but the description adds substantial behavioral context: calling with cast/crew params causes a validation error (not silent no-op), certification and with_watch_providers have silent-fallback rules, and certification has no fallback for missing country data. These are important non-obvious behaviors not captured by 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 long but every sentence earns its place. It is front-loaded with the core purpose, then logically flows into exclusions, examples, and resolver references. The structure is purposeful, not padded, and delivers dense, actionable 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?
Given 25 parameters, an output schema, and complete annotations, the description covers all critical aspects: use cases, exclusions, error behavior, fallback rules, examples, and id resolution. It is more than sufficient for an agent to select and invoke the tool 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 the baseline is 3. The description adds value beyond the schema by explaining the absence of cast/crew parameters as an intentional design choice with validation-error behavior, and by highlighting differences from discover_movies' parameter vocabulary. However, most parameter-specific semantics are already in the schema, so this is a modest increment.
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's purpose: 'Find TV shows by structured filters'. It explicitly distinguishes itself from siblings by naming the TV counterpart relationship to discover_movies and by explaining it does NOT handle cast/crew/person, directing users to get_person_credits instead. This is a specific verb+resource+scope with clear sibling 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?
The description provides explicit when-to-use and when-not-to-use guidance, including 'to find TV shows featuring someone, call get_person_credits instead'. It offers concrete example use cases (with_networks for 'HBO shows', with_type='Miniseries', with_status='Ended', certification for kids' content) and points to id-resolution tools. This goes far beyond implied usage.
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 readOnlyHint and openWorldHint. The description adds vital behavioral context: empty results are ambiguous (unknown id vs. episode id), which is not evident from annotations or 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?
Concise, front-loaded description of 3-4 sentences. No unnecessary words; every sentence adds value (purpose, usage, limitation).
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 tool with one parameter, good annotations, and an output schema, the description covers the key behavioral nuance (episode handling) completely.
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?
Only one parameter with 100% schema coverage. The description reinforces the parameter's purpose and provides an example, adding minor value beyond the schema's pattern and 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 clearly states the tool resolves an IMDb id to TMDB entities (movie, TV, person), with an example input. It distinguishes itself from siblings by specifying its unique role when only an IMDb id is available.
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 when to use (when only IMDb id and need TMDB id) and provides a critical limitation: does not resolve episode IDs, with a real example. This helps the agent avoid misuse.
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 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. |
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 and openWorldHint. The description adds behavioral context by stating it returns all parts in release order, which is not covered by 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 filler. The purpose and usage hint are front-loaded and 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?
With an output schema present and only two parameters, the description covers all needed context: what it returns, how to get the ID, and the ordering. No gaps.
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%, but the description adds meaning beyond the schema by explaining that the 'id' parameter is the collection ID obtainable from get_movie's 'collection' field, aiding correct usage.
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 gets a movie collection/franchise and all its parts in release order, with an example (The Dark Knight Collection). It distinguishes from siblings by specifying that the collection ID comes from get_movie's 'collection' field.
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 clear guidance: get the collection id from get_movie's 'collection' field. However, it does not explicitly state when not to use this tool or name alternatives, leaving some ambiguity.
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. | |
| 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 | |
| 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?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses several important behaviors: certification fallback logic (region → US → any country), the degradation of 'ratings' to {found:false, reason} when OMDb is unavailable rather than failing, and the distinct nature of OMDb's ratings.rated vs the tool's own certification. This is rich, honest disclosure that anticipates real-world edge cases.
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 long but densely packed with necessary information, and it is well-structured: main purpose, then certification details, then ratings/fallback, then guidance to alternatives. Every sentence earns its place; however, it could be slightly tightened without losing critical context. Still, the complexity of the tool justifies the length, so it's 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?
Given the tool's complexity (multiple fields, fallback behaviors, optional enrichment), the description is exceptionally complete. It covers prerequisites (OMDB_API_KEY), failure modes (degraded ratings), and the source of the ID, leaving no obvious gaps for the agent. The presence of an output schema reduces the need to explain return format, but the description already covers key behavior.
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 100%, the description adds significant semantic depth: it explains how region affects certification fallback, what language does (localizes titles and genre names), and the full implications of include_ratings (including the requirement for OMDB_API_KEY and the benefit of skipping). These details go beyond the schema's bare descriptions and help the agent make informed decisions.
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 explicitly states it retrieves full details for one movie by TMDB ID, listing many fields (overview, genres, runtime, etc.). It clearly differentiates from sibling get_movies (plural) by noting the trimmed-down headline-only nature, and from get_tv by focusing on movies. The verb 'Get' and resource 'movie details' are specific and unambiguous.
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 gives explicit when-to-use guidance: 'If you only need the headline info... use get_movies instead' and 'Get the id from search_movies.' This not only helps select the tool but also directs to the correct source for the required ID. It also explains the optional include_ratings flag and when to set it to false, providing clear alternative paths within the tool.
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?
Beyond readOnlyHint and openWorldHint annotations, description specifies the limited scope (up to 20 cast, headline crew) and example crew roles.
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 efficient sentences with no wasted words, front-loading the purpose and necessary details.
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-parameter tool with high schema coverage and existing output schema, description fully covers purpose, input, and data source.
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%, but description adds extra context by mentioning where to obtain the TMDB id (search_movies), adding value beyond 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?
Description clearly states it lists top-billed cast (up to 20) and headline crew by TMDB id, distinguishing it from sibling tools like get_movie or search_movies.
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 get the id from search_movies, providing clear context for when to use this tool.
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. The description adds behavioral context about the recommendation basis and comparison to get_similar, without contradicting the annotations. It does not discuss rate limits or pagination details, but that is acceptable given 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?
The description is three sentences, each serving a distinct purpose: explaining the tool, giving usage preference, and providing input source. It is front-loaded and contains no unnecessary words.
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 presence of an output schema, the tool definition is complete. It covers purpose, usage guidelines, input source, and differentiation from siblings. No additional details are needed for effective 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%, so the baseline is 3. The description implicitly references the required parameter (movie id) but does not add new meaning beyond the schema. The page parameter is not mentioned, but the schema describes it adequately.
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 retrieves TMDB recommendations for a given movie ID, explains the basis (co-viewing/personalization data), and explicitly distinguishes it from the sibling tool get_similar. It also directs users to obtain the ID from search_movies.
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 advises to prefer this over get_similar as the default choice and explains the difference in recommendation logic. Also provides guidance on getting the movie ID from search_movies.
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. | |
| 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?
Discloses that bad IDs do not fail the call, returning {id, found:false, reason} in order. Mentions OMDb rate limits for include_ratings. Annotations already declare readOnlyHint and openWorldHint; description adds complementary behavioral context without contradiction.
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?
Well-structured and front-loaded with purpose, but slightly verbose in the middle listing exclusions and use cases. Each sentence earns its place, though could tighten some phrasing.
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 3 parameters, output schema present, and annotations, the description is complete. Covers error behavior, rate limits, scope of data, and contrasts with sibling tool. No gaps.
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%, but description adds meaningful context: IDs sourced from search/discover/etc., language override localization, include_ratings defaults to false and explains OMDb burst calls. Provides value beyond 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?
The description clearly states it fetches compact movie cards for 1-20 TMDB IDs, explicitly listing included fields (title, year, genres, vote average, ratings) and contrasting with get_movie for full details. It distinguishes from siblings effectively.
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 when-to-use (single or multiple IDs for headline info) and when-not-to-use (call get_movie for full details including region-specific certification). Also explains handling of bad IDs.
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. |
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=true and openWorldHint=true, so the description's disclosure is minimal. It adds context about returned fields but does not mention rate limits, authorization needs, or error behavior. The description is adequate given 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?
The description is three sentences, each providing essential information without redundancy. It front-loads the purpose and follows with critical exclusions and id source, making it efficient for an agent to parse.
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 presence of an output schema and clear annotations, the description provides sufficient context. It lists the major return fields and clarifies what is not included. It does not address edge cases or error handling, but these are not critical for typical use.
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 description adds value by explaining the id's origin and the language parameter's purpose (localization). However, it does not elaborate beyond what the schema already provides for each parameter.
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 action (get full details), the resource (one person by TMDB id), and lists specific returned fields. It explicitly distinguishes from the sibling tool get_person_credits by noting what is not included (filmography).
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 provides explicit guidance on when to use this tool (for person details) and when to use the alternative (get_person_credits for filmography). It also tells where to obtain the required id (from search_people or a credits list).
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') and repeat entries for the same title are excluded so the list stays about actual roles. 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 rating. 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 declare readOnlyHint=true and openWorldHint=true. Description adds details: default cap of 25, exclusion of talk-show appearances and duplicates, deduplication of multiple crew jobs, cast entries include vote_average but crew do not, and behavior of department and limit parameters for prolific people.
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?
Long but every sentence adds valuable information. Front-loaded with main purpose. Could be slightly more concise, but efficient given the complexity.
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?
Completeness is high: covers purpose, parameters, limitations, alternatives, and output details (e.g., cast vs crew attributes). Output schema exists but description still provides behavioral context.
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% but description adds significant value beyond schema: explains why raise limit for prolific people, why use department to avoid crowding, that department only affects crew credits, and that without department, other departments compete for cap.
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 the tool lists movies and TV shows a person is known for, with cast and crew roles, most popular first, capped at 25 each. Differentiates from sibling tools like search_people, get_movie_credits, and discover_movies by specifying its focus on a person's combined filmography and exclusion of guest appearances.
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: 'for what has this actor/director been in'. Provides alternatives: use discover_movies with with_cast/with_crew/with_people for genre filtering, and for TV genres, call this tool then check media_type. Says to get id from search_people.
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, not 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}.
| 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 declare readOnlyHint and openWorldHint. The description adds important behavioral details: no-match returns {found:false, reason}, imdb_id takes precedence over title, and the type parameter's effect on ambiguous title lookups. 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 well-structured and front-loaded with the main purpose. It includes necessary details but could be slightly more concise. However, it remains clear and informative without redundancy.
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 presence of an output schema (not shown), the description adequately covers all needed context: what is returned, how to use the parameters, prerequisites, and error behavior. It addresses potential ambiguity and provides complete guidance.
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% with detailed parameter descriptions. The description adds extra value by explaining the type parameter's role in disambiguation and noting imdb_id precedence, beyond what the schema 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 explicitly states the tool looks up IMDb, Rotten Tomatoes, and Metacritic ratings, an awards summary, and OMDb age rating. It clearly distinguishes from siblings like get_movie/get_tv by noting they already include this data.
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 when-to-use guidance: 'Prefer get_movie/get_tv when you have a TMDB id — they already include this.' Also specifies required API key, parameter requirements (one of imdb_id or title), and error handling for missing parameters and no-match lookups.
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, their rating if the reviewer left one — 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 indicate read-only and open-world. The description adds that review text is clipped to ~1500 characters and that rating can be null, providing useful behavioral detail.
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 concise (two sentences), front-loaded with purpose, and contains 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?
Given the simple output and clear schema, the description fully covers what the tool does, including return fields and clipping behavior.
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 parameters are well-documented. The description adds value by explaining where to obtain the 'id' parameter, justifying a score above baseline 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?
The description clearly states 'Get user reviews for a movie or TV show', specifying the verb and resource, and distinguishes from sibling tools that search or retrieve other entities.
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 advises using IDs from search_movies/search_tv, providing context on prerequisites, though it does not explicitly state when not to use this tool.
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 can still be thematically noisy (matching on a shared keyword despite an unrelated tone or plot). Results sharing only the source title's broadest genre (e.g. two titles that are both merely tagged 'Drama' among several genres) are filtered out per page, since a title with a common genre can otherwise return results spanning TMDB's entire catalog; a page can come back thin or empty for a niche title once that filter applies. total_pages/total_results reflect TMDB's raw, pre-filter counts, not how many titles actually pass this filter — don't use them to gauge how many genuinely similar titles exist or when to stop paging; expect per-page result counts well under 20, sometimes 0 (verified live: a real title returned total_pages:23897/total_results:477939 but only 3-6 actual results per page). 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. Description adds significant behavioral context: noise from shared keywords, filtering out broad genre matches, misleading total_pages/total_results counts, and per-page results may be thin or empty. No contradictions 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?
Description is front-loaded with purpose, but is somewhat verbose. However, every sentence adds value (contrast with recommendations, caveats about filtering and pagination). Could be slightly more concise, but the information density justifies the length.
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 complexity (filtering, misleading pagination counts, possibility of empty results) and presence of output schema, the description fully covers behavioral nuances and return value interpretation. It explains not to use total_pages/total_results for gauging similarity depth, which is critical. Very complete.
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% with all parameters described. Description adds minor context (e.g., 'Get the id from search_movies/search_tv' for id, pagination context for page), but does not significantly enhance parameter meaning beyond the schema. Baseline of 3 is appropriate given high coverage.
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?
Description clearly states the tool retrieves titles TMDB considers similar based on shared genres and keywords, and explicitly contrasts with get_movie_recommendations/get_tv_recommendations. It uses specific verb 'Get' and specifies resource 'titles similar to a given movie or TV show', distinguishing it from siblings.
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 advises to use recommendations first for thematically closer picks, and use this for genre/keyword-adjacent similarity. Also states prerequisite: 'Get the id from search_movies/search_tv.' Provides clear when-to-use and when-not-to-use guidance.
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 description does not need to repeat safety. It adds value by explaining that each result row carries its own media_type for routing. However, it does not detail pagination behavior or other side effects, but the schema covers limits.
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 sentences, front-loaded with the purpose, then parameter roles, then routing guidance. Every sentence adds value with 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?
With an output schema present, the description does not need to explain return values. It adequately covers usage context (trending, routing). Could mention pagination limits, but those are in the schema. Complete enough for this straightforward 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 3. The description paraphrases the enum values for media_type and time_window but adds no new semantic detail beyond the schema. It does not mention defaults explicitly, but the schema does.
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 'Get what's trending on TMDB' with a specific verb and resource. It distinguishes itself from sibling search tools by focusing on trending content, and further explains the parameter roles.
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 explicitly says 'Good for "what's popular right now"', giving clear usage context. It also instructs on how to route results to other tools based on media_type, but does not explicitly exclude search tools for trending queries.
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. | |
| expand_episodes | No | 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. | |
| 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 | |
| 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 | |
| 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?
Annotations (readOnlyHint, openWorldHint) are minimal, so the description carries the burden of behavioral disclosure. It goes far beyond: explains rating fallback logic (region-specific certification with fallback chain, degradation of ratings to {found:false} when OMDb unavailable), expand_episodes caps (50 per season, 250 total, trimming behavior, specials-first ordering, skipped seasons returning null), and the distinction between tool's certification and OMDb's ratings.rated. No contradictions 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?
Though lengthy, every sentence adds essential information for a complex tool. It is front-loaded with the core purpose, then methodically covers optional behaviors and alternatives. The structure flows logically from primary details to edge cases and fallbacks, with no repetition or padding.
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 tool's complexity (5 parameters, output schema exists, optional heavy expansions), the description is exceptionally complete. It addresses fallback scenarios, caps, degradation, alternative tools, and prerequisites. No gaps are evident for typical agent usage, and it even covers rare edge cases like trillion-épisode shows and long specials.
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 substantially enriches each parameter's meaning. For expand_episodes, it details caps, trimming, ordering, and season-skip behavior. For include_ratings, it clarifies what ratings and awards summary include and the fallback behavior. For region, it explains the certification fallback chain. The extra detail is far beyond schema descriptions, making parameter semantics highly valuable.
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 it gets full details for one TV show by TMDB ID, enumerating the specific data fields (overview, genres, seasons/episodes counts, networks, created_by, status, certification, links). It explicitly distinguishes itself from get_tv_shows ('trimmed on purpose') and get_tv_season, making its specific verb+resource+scope unmistakable.
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 when-to-use guidance: 'If you only need the headline info ... use get_tv_shows instead' and 'call get_tv_season for that season's full detail' for episode-level detail. Also directs users to obtain the ID via search_tv, covering prerequisites and alternatives.
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 the main cast (up to 20) and production crew (executive producers, producers, composer, DoP, …) of a TV show by TMDB id. TMDB's show-level TV credits data does not reliably expose director/writer/creator credits — verified live across several shows (Breaking Bad, Stranger Things, Chernobyl, The Queen's Gambit): each show's actual creator/head-writer/director appears only as 'Executive Producer', never as 'Writer', 'Director' or 'Creator'. For who created the show, use get_tv's own created_by field instead; for a specific episode's actual director/writer (which TMDB does track reliably at that level), 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?
Adds significant behavioral context beyond annotations: states cast limited to 20, lists crew roles, and importantly verifies that director/writer/creator credits are not reliably exposed (with examples). This complements the readOnlyHint 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?
Every sentence serves a purpose: purpose, limitation with evidence, alternative tools, source of ID. No fluff, well front-loaded, and structured logically.
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 output schema exists, the description compensates by explaining the structure (cast up to 20, specific crew roles) and limitations. It provides complete guidance for using this tool alongside its siblings.
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 covers the single parameter 'id' with description 'TMDB numeric id.' Description merely restates 'by TMDB id', adding no new semantic information. With 100% schema coverage, a 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 clearly states the tool lists main cast (up to 20) and production crew by TMDB id. It distinguishes itself from siblings by detailing what it does not expose (director/writer/creator) and directs to alternatives.
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 provides when to use, when not, and alternatives: for creator credits use get_tv's created_by field, for episode specifics use get_tv_episode. Also mentions sourcing 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_episodeGet TV episodeARead-only
Get one episode of a TV show by show id + season number + episode number: overview, air date, runtime, rating, guest stars (up to 15) and director/writer. 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 | |
| air_date | Yes | |
| overview | Yes | |
| still_url | Yes | |
| guest_stars | Yes | |
| vote_average | Yes | |
| season_number | Yes | |
| episode_number | Yes | |
| runtime_minutes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, openWorldHint) already indicate non-destructive and open-ended behavior. Description adds specific output fields and constraints (up to 15 guest stars), providing valuable behavioral details beyond annotations. No contradiction.
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, each serving a clear purpose: first explains functionality and output, second provides guidance for input. No unnecessary words, efficiently front-loaded.
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 tool's simplicity (3 parameters, output schema exists), the description adequately covers the core functionality and return fields. It omits potential edge cases like missing fields or error handling, but these are minor given the openWorldHint and standard API behavior.
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 all three parameters are already well-described in the input schema. The description adds minimal value by linking the 'id' parameter to search_tv. Baseline of 3 is appropriate as description doesn't significantly enhance parameter understanding beyond what the schema 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?
Description clearly specifies the action ('Get one episode of a TV show') and the resource (episode identified by show id, season, episode number). It lists returned fields (overview, air date, etc.) and distinguishes from siblings like get_tv_season and get_tv by focusing on a single episode.
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?
Description tells the user to obtain the show id from search_tv, providing a clear prerequisite. While it doesn't explicitly state when not to use this tool, the context implies it's for individual episode details vs. season-level data. Could be improved by mentioning alternatives like get_tv_season for full season data.
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, indicating safe read operation. Description adds value by explaining the underlying algorithm (co-viewing/personalization vs. genre/keyword matching), giving agents behavioral 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 sentences delivering key information efficiently. Could be slightly more structured (e.g., separate usage guidance from description) but remains clear and front-loaded.
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 only 2 parameters, full schema coverage, annotations present, and an output schema, the description is complete. It covers purpose, selection criteria, and parameter source, leaving no major gaps.
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 documents both parameters well. The description adds marginal value by linking the id to search_tv, but does not elaborate on parameter details that the schema doesn't already cover.
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 'Get TV shows TMDB recommends for the given show id' and distinguishes from get_similar by explaining the recommender logic. It is a specific verb-resource pair that differentiates it from siblings.
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 recommends preferring this tool over get_similar as the default choice and clarifies when each is appropriate. Also instructs to get the id from search_tv, providing concrete guidance.
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 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?
Annotations declare readOnlyHint=true and openWorldHint=true; description adds key behavioral details: 50-episode cap, true total in episode_count, and that season 0 (specials) can be large. 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, front-loaded with all essential info (input, output, cap, total). Second sentence adds valuable guidance on specials and alternatives. No wasted words.
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 tool's simplicity (2 params, output schema provided), the description covers input, output, behavioral constraints, and context for using alternatives. Sufficiently complete for an agent to invoke 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 covers both parameters with descriptions (100% coverage). Description reinforces that season_number 0 is specials but adds no new semantic information 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?
Clearly states the tool retrieves one season of a TV show by show ID and season number, listing returned data (overview, episode list with air dates, runtimes, ratings) and noting the 50-episode cap and true total in episode_count. Distinct from siblings like get_tv and get_tv_episode.
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 suggests an alternative (get_tv with expand_episodes=true) for retrieving all seasons' episodes in one call and advises obtaining the show ID from search_tv. Doesn't explicitly state when not to use, but the alternative guidance is clear.
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. | |
| 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 already provide readOnlyHint and openWorldHint. The description adds significant behavioral context: bad/unknown ids never fail the whole call and instead return {id, found:false, reason} in order; include_ratings defaults to false and has rate limit implications; language overrides localization. No contradictions 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 well-structured with a clear opening sentence, then specific details and usage guidance. It is moderately long but every sentence adds value. Slightly verbose in the middle but overall efficient.
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 presence of an output schema (not shown but mentioned), the description covers all necessary aspects: purpose, parameters, behavior on errors, use cases, and comparisons to sibling tools. It is complete for a read-only bulk 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 description coverage is 100% with each parameter having a description. The description adds further value: ids can be obtained from search_tv/discover_tv/etc.; language localization explanation; include_ratings defaults to false and notes OMDb rate limit. This goes 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?
The description clearly states the tool gets compact TV show cards for 1-20 shows by TMDB id. It specifies the exact data included (name, year, genres, vote average, season/episode counts, opt-in ratings) and explicitly distinguishes from get_tv by noting the trimmed payload and use case for quick scanning.
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 provides explicit guidance on when to use this tool: for quick headline info, spotting short/miniseries, and checking many candidates without per-title get_tv calls. It clearly states when to use get_tv instead (when full details including region-specific certification are needed). It also explains how to obtain ids (from search_tv/discover_tv/get_similar/get_tv_recommendations).
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. Results are filtered to the server's configured TMDB_LANGUAGE (default 'en-US') — this tool has no per-call language override, so a title with plenty of videos in other languages can come back with few or none if the server is configured for a different language (verified live: 29 results for a title under 'en-US' vs. 2 under 'de-DE').
| 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 provide readOnlyHint=true and openWorldHint=true. The description adds significant behavioral context: it lists the types of videos included, mentions that YouTube entries include a watch URL, and crucially discloses the language restriction with a live example (29 vs 2 results). This goes beyond the annotations and fully informs the agent about the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences. The first sentence states the main purpose and key feature (YouTube watch URL). The second provides usage guidance and a critical behavioral note. Every part earns its place, and it is front-loaded with the most important 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?
Given the complexity of the tool (two parameters with clear schema, an output schema exists for return values), the description covers all necessary aspects: what videos are returned, where to get the id, and the language limitation. It is fully informative for an agent to use the tool 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?
The input schema has 100% coverage, so the baseline is 3. The description adds minimal extra meaning to the parameters: it mentions that the id comes from search tools, but the schema already describes id and media_type sufficiently. The language caveat is not a parameter. Thus, the description adds some context but doesn't significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb "List" and the resource "trailers, teasers and clips for a movie or TV show" and distinguishes the tool from siblings by noting that YouTube entries include a watch URL. It also directs where to get the required id from search_movies/search_tv, making the purpose specific and distinct from other listing tools.
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 gives explicit context on when to use: after obtaining an id from search_movies/search_tv. It also warns about the language limitation (no per-call override) with a concrete example. While it doesn't explicitly list exclusions or alternatives, the provided context is sufficient for an agent to understand the appropriate usage.
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 already declare readOnlyHint and openWorldHint. The description adds valuable behavioral context: the return structure (provider names per access type, fallback with available_regions). It does not contradict 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 two substantive sentences plus a short instruction. It is front-loaded with the main purpose. Minor redundancy (e.g., 'JustWatch data via TMDB' could be tighter) but overall 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?
Given the output schema exists, the description need not detail return values, but it does describe the key return structure (provider names, fallback). It covers the essential edge case of no data and region handling, making it complete for this tool's complexity.
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% for all three parameters. The description adds value by instructing the agent to 'Get the id from search_movies/search_tv', which clarifies the parameter source beyond the schema's description. This subtle guidance enhances semantics.
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 verb 'find' and the resource 'watch providers for a movie or TV show', distinguishes from siblings like search_movies and get_tv by specifying the exact functionality (streaming, renting, buying via JustWatch) and hints at the necessary ID source.
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 provides clear context on when to use this tool (to find streaming options) and gives a fallback behavior ('if it has no data, returns available:false plus available_regions to retry with'). It also specifies the prerequisite source for the 'id' parameter. However, it does not explicitly contrast with sibling tools like search_watch_providers.
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 indicate readOnlyHint and openWorldHint. Description adds important behavioral context: the tool may return multiple rows for the same name, and suggests disambiguating fields. Does not contradict 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?
Three well-focused sentences. First states purpose with examples, second tells downstream usage, third warns about duplicates and gives disambiguation advice. No unnecessary words. Efficient and clear.
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 tool's moderate complexity (simple search with pagination), the description covers purpose, usage, disambiguation, and downstream integration. Schema and annotations already provide rich structured data. The description is complete for agent decision-making.
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 covers 100% of parameters with descriptions. Description adds value by explaining how to use the output (feed id to other tools) and disambiguation hints, though it doesn't add extra parameter details beyond schema. Baseline 3, elevated for contextual addition.
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 the purpose: resolve company name to TMDB numeric id. Provides concrete examples (A24, Pixar) and explains downstream usage (feed to discover_movies/discover_tv via with_companies). Distinguishes from sibling tools by focusing on 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?
Explicitly tells when to use: to get a company id for use with discover endpoints. Warns about non-unique company names and advises checking origin_country and logo_url for disambiguation. Provides explicit guidance on handling multiple results.
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 — 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. | |
| 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. | |
| 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=true and openWorldHint=true. The description adds valuable behavioral context, such as the region parameter not filtering results (only selecting which release_date to display) and the year parameter being a soft bias. This complements the annotations without contradiction.
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 concise (two sentences plus a clarifying note) and front-loaded with the main purpose. Every sentence provides essential information without redundancy.
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 6 parameters, full schema coverage, annotations, and presence of output schema, the description is thorough. It covers scope, alternative tools, parameter nuances, and addresses common confusions, making it complete for agent selection.
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%, but the description adds significant meaning beyond the schema, such as explaining region's non-filtering behavior, year's soft bias, and recommending alternatives. This enhances parameter understanding.
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 it searches TMDB movies by title and returns compact summaries with TMDB id and pagination info. It also distinguishes itself from the sibling tool 'search_multi' by specifying when to use each.
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 explicitly recommends using this tool over 'search_multi' when the result is known to be a movie, and advises using 'discover_movies' for exact-year filtering. It also clarifies region and year parameter behaviors, providing clear guidance on when to use alternatives.
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. | |
| 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. Description adds value by explaining each result carries a media_type for routing, which is not in annotations. 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, front-loaded with purpose, then usage guidance. No wasted words.
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 multi-type search tool with annotations and output schema, description covers purpose, usage, and result structure adequately.
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% with detailed parameter descriptions. Description does not add extra parameter information 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?
Description clearly states the tool searches movies, TV shows, and people in one call. It distinguishes from siblings by noting more precise alternatives when the type is known.
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 to use when the query could be any type, and not to use when type is known, directing to specialized search tools.
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. | |
| 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 read-only and open-world behavior. Description adds that the tool returns the TMDB ID and top 5 known-for titles, which are useful behavioral details 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 sentences, no fluff, front-loaded with key information. Every word earns its place.
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 tool's simplicity, full schema documentation, presence of output schema, and clear relationship to sibling tools, the description is complete and sufficient.
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 does not add new meaning per parameter 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 ('Search'), identifies the resource ('people'), and adds scope ('by name'). It distinguishes from sibling 'search_multi' by stating when to use this tool over the alternative.
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 'Use this over search_multi when you already know the result is a person,' providing clear guidance on tool selection.
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. | |
| 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=true and openWorldHint=true; the description adds that results are compact summaries and that the TMDB id is the required input for downstream TV tools. It does not contradict annotations and gives useful behavioral context beyond schema 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?
Two dense sentences, front-loaded with the core action and followed by usage guidance. No filler or redundancy.
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 a full input schema, output schema, read-only/open-world annotations, and a clear sibling distinction, the description covers the essential context for a search tool. It does not need to repeat return-value details 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 description coverage is 100% and each parameter (query, page, year, language, include_adult) already has detailed meaning. The description's phrase 'by name' adds slight emphasis on query behavior, but no additional parameter semantics are needed, so 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?
Description states 'Search TMDB TV shows by name' — a specific verb and resource. It also explains returns compact summaries with TMDB id and explicitly distinguishes from search_multi, earning full marks.
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 'Use this over search_multi when you already know the result is a TV show,' which both names an alternative and sets the condition for choosing this tool. It also notes get_tv and other TV tools require the returned id, clarifying downstream usage.
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?
Annotations declare readOnlyHint=true and openWorldHint=true. The description adds behavioral context beyond annotations: explains that TMDB has no name-based lookup, only numeric IDs; that provider IDs differ by region; and that omitting watch_region searches the global list. 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 a single paragraph that is front-loaded with the primary purpose. It is slightly long but every sentence adds necessary guidance (usage, region nuance, pagination). No redundancy.
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 complexity (name-to-ID mapping, region variation, pagination), the description is thorough. It addresses key aspects: why numeric IDs are needed, region dependency, and the impact of watch_region. The output schema exists but is not needed for completeness 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%, baseline 3. The description adds meaning: explains watch_region's role in matching discover queries, media_type's effect on provider existence, and that the same ID applies to both movie and TV. This adds value beyond the schema definitions.
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's purpose: 'Resolve a streaming/rental/purchase service's name to its TMDB numeric provider id.' It uses a specific verb ('resolve') and identifies the resource (service name to ID). It also distinguishes from sibling tools like search_movies by explaining the conversion is for use with discover tools.
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 gives clear guidance: 'Feed the id into discover_movies/discover_tv's with_watch_providers...' and warns against guessing IDs. It explains region differences and the effect of omitting watch_region. It does not explicitly state when not to use, but provides sufficient context for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
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
Every tool has a clearly distinct purpose with detailed descriptions that highlight differences (e.g., search_movies vs search_tv vs search_multi, get_movie vs get_movies, get_movie_recommendations vs get_similar). No two tools overlap ambiguously.
All tools follow a consistent verb_noun pattern (e.g., search_movies, get_movie_credits, discover_tv). There is no mixing of naming conventions, making the set predictable for an agent.
With 31 tools, the count is on the higher side, but it is justified given the broad scope of TMDB data covered (movies, TV, people, collections, trending, watch providers, etc.). Each tool serves a specific need, so the count is reasonable for the server's purpose.
The tool set provides comprehensive coverage for reading TMDB data: search, discover, detailed get endpoints for movies/TV/people, credits, recommendations, similar, reviews, videos, ratings, watch providers, genres, trending, and IMDb resolution. No obvious gaps for a read-focused data server.
Maintenance
Related MCP Connectors
OMDb MCP — IMDB-derived movie / TV / episode data (BYO key)
Unlock a world of television with the TV Maze MCP server. Effortlessly search for shows by name or
Trakt MCP — TV/movie metadata + watch tracking signals
TheGamesDB MCP — wraps TheGamesDB API (thegamesdb.net), a community
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
- FlicenseBqualityCmaintenanceEnables searching, discovering, and reading movie information from TMDB through MCP tools.5-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Grinv/tmdb-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server