amodb-mcp
OfficialAllows resolving IMDb IDs (e.g. tt0137523) to amodb IDs and retrieving IMDb scores for movie and TV titles.
Allows resolving Kinopoisk IDs to amodb IDs for movie and TV title lookup.
Provides access to Metacritic scores for movie and TV titles through amodb records.
Provides access to Rotten Tomatoes scores for movie and TV titles through amodb records.
Allows resolving Wikidata IDs to amodb IDs and including Wikidata facts in movie and TV records.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@amodb-mcpFind Fight Club and show its runtime and top cast"
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.
A Model Context Protocol server for movie and TV data. It lets Claude, Cursor, VS Code and other MCP clients search titles, read full movie, TV and person records, and check trending lists through the amodb API.
amodb is a paid API, get a key at https://amodb.dev/pricing. The API is compatible with TMDB v3, so the tools use the same ids and field names.
Tools
Tool | What it does |
| Search movies, TV shows or people by name. Use it to get a numeric id. |
| Full movie record. Add cast, trailers, release dates, streaming providers, ratings, moods, soundtracks, Wikidata facts and more with |
| Full TV show record, with the same |
| One season with its episode list. |
| Actor or crew record. Add the full filmography with |
| Turn an IMDb id (for example |
| Trending movies, TV shows or people, for the day or the week. |
| Find movies by genre, year, rating, language, region and sort order. |
| Cinema showtimes for a movie or TV title. Without a country it lists the countries that have showtimes. With a country it lists cinemas and times. |
List tools return 10 items by default. Pass limit (1 to 20) to change that. get_showtimes returns 5 cinemas with 10 showtimes each by default, see max_venues and max_showtimes_per_venue, and reports the full counts. The get_ tools return the full record, so use append only for what you need.
The tools cover what the amodb API serves. TMDB account, list, rating and session calls, aggregate credits and change feeds are not offered, so there is no tool for them.
Related MCP server: Miru
Install
You need Node 18 or newer and an amodb key. The client starts the server with npx, nothing to install by hand.
Claude Desktop
Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) and restart the app:
{
"mcpServers": {
"amodb": {
"command": "npx",
"args": ["-y", "amodb-mcp"],
"env": {
"AMODB_API_KEY": "your_key_here"
}
}
}
}Cursor
Put the same block in ~/.cursor/mcp.json for all projects, or in .cursor/mcp.json for one project:
{
"mcpServers": {
"amodb": {
"command": "npx",
"args": ["-y", "amodb-mcp"],
"env": {
"AMODB_API_KEY": "your_key_here"
}
}
}
}VS Code
Create .vscode/mcp.json. VS Code asks for the key once and keeps it out of the file:
{
"inputs": [
{
"type": "promptString",
"id": "amodb-key",
"description": "amodb API key",
"password": true
}
],
"servers": {
"amodb": {
"type": "stdio",
"command": "npx",
"args": ["-y", "amodb-mcp"],
"env": {
"AMODB_API_KEY": "${input:amodb-key}"
}
}
}
}Local checkout
git clone https://github.com/AmoDataBase/amodb-mcp
cd amodb-mcp
npm install
npm run buildThen point the client at the built file:
{
"mcpServers": {
"amodb": {
"command": "node",
"args": ["/path/to/amodb-mcp/dist/index.js"],
"env": {
"AMODB_API_KEY": "your_key_here"
}
}
}
}Configuration
Variable | Required | Meaning |
| Yes, for tool calls | Your amodb key. Without it the server starts, lists its tools, and every call returns an error. |
| No | Default language for titles and overviews, for example |
| No | API base URL. Default |
Example prompts
"Find Fight Club, then show its runtime, the top cast and where I can stream it."
"What is trending on TV this week?"
"Look up the IMDb id tt0137523 and tell me who directed it."
"Show the IMDb, Rotten Tomatoes and Metacritic scores of Fight Club."
"Which cinemas in Russia show Fight Club, and when?"
"Find science fiction movies from 2010 with a rating of 7.5 or higher and at least 500 votes."
Rate limits
Every plan gets all data. Plans differ only in requests per minute, see https://api.amodb.dev/plans. On a 429 response the server waits for the Retry-After time (at most 10 s) and retries up to 3 times, then returns the error to the model.
Troubleshooting
AMODB_API_KEY is not set: the client did not pass theenvblock. Check the config file and restart the client.HTTP 401 or 402: the key is wrong or the plan has expired. Check your account at https://amodb.dev.
The client cannot start the server: check
node -v(18 or newer). On Windows, ifnpxis not found, use"command": "cmd"and"args": ["/c", "npx", "-y", "amodb-mcp"].
Diagnostics go to stderr. Nothing except protocol messages is written to stdout.
Development
npm install
npm run build
npm test
npm startThe tests run the built server over stdio against a local stub API, so they need no key and no network.
Links
Website: https://amodb.dev
Docs: https://amodb.dev/docs
Pricing: https://amodb.dev/pricing
Status: https://amodb.dev/status
Changelog: https://github.com/AmoDataBase/amodb-mcp/blob/main/CHANGELOG.md
Security: https://github.com/AmoDataBase/amodb-mcp/blob/main/SECURITY.md
Organization: https://github.com/AmoDataBase
License
MIT, see LICENSE.
Available Tools
9 toolsdiscover_moviesDiscover movies by filterARead-onlyIdempotent
Find movies by filters instead of a name: genre, release year, minimum rating, original language, region and sort order. Use it for requests like "best rated sci-fi from 2010" or "popular French comedies". Returns at most limit movies (default 10). Common genre ids: 28 Action, 12 Adventure, 16 Animation, 35 Comedy, 80 Crime, 99 Documentary, 18 Drama, 10751 Family, 14 Fantasy, 36 History, 27 Horror, 10402 Music, 9648 Mystery, 10749 Romance, 878 Science Fiction, 53 Thriller, 10752 War, 37 Western. When you sort by vote_average, also set vote_count_gte (for example 200) so that titles with a handful of votes do not lead the list.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page number, starting at 1. Each page holds up to 20 results. | |
| limit | No | Maximum number of results to return, 1 to 20. Default 10. Keep it small to save context. | |
| region | No | ISO 3166-1 country code, for example US or DE. Used for release dates and certifications. | |
| sort_by | No | Sort order, for example popularity.desc (default) or vote_average.desc. | |
| language | No | Language tag for titles and overviews, for example en-US, ru-RU or pt-BR. Served languages: en, ru, uk, be, zh, pt, bg, he, cs, ro, fr, pl, it, es. Any other tag falls back to English. Omit to use the server default. | |
| with_genres | No | Genre ids. A movie must match all of them. Example: [878, 12] for science fiction and adventure. | |
| vote_count_gte | No | Minimum number of votes, for example 500. Filters out titles with too few votes to trust. | |
| vote_average_gte | No | Minimum vote average on a 0 to 10 scale, for example 7.5. | |
| primary_release_year | No | Only movies whose primary release year is this year, for example 2010. | |
| with_original_language | No | Original language as an ISO 639-1 code, for example fr, ja or ru. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnly, idempotent, destructive=false, openWorld), so the bar is lower. The description still adds real behavioral value beyond them: it discloses that at most `limit` movies return (default 10) and warns that sorting by vote_average needs vote_count_gte to avoid low-vote titles leading the list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, usage examples, and output size, then the necessary detail. The genre enumeration is long but high-value reference data, not filler, and the closing tip is actionable. Slightly verbose but every sentence 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?
With 10 params, no output schema, and 0 required params, the description does exactly what's needed: it explains the return size, the filter interplay, and the genre codes, and annotations cover safety. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3. The description exceeds that by supplying the full genre-id mapping (28 Action, 878 Science Fiction, etc.) that the schema only alludes to as 'genre ids', plus the interaction rule between sort_by and vote_count_gte — neither is derivable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (find movies) and explicitly demarcates scope: by filters rather than by name. This distinguishes it from the sibling search_titles, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete usage examples ('best rated sci-fi from 2010', 'popular French comedies') that map directly to filter combinations, giving clear context for when the tool applies. It does not name alternatives explicitly or state exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_external_idFind by external idARead-onlyIdempotent
Look up a movie, TV show or person by an id from another system, when you do not have the amodb numeric id. Typical use: the user gives an IMDb id such as tt0137523 (titles) or nm0000093 (people), a Kinopoisk id (digits), or a Wikidata id (Q followed by digits). Returns movie_results, tv_results and person_results, each item with a media_type; take the id from the matching list and pass it to get_movie, get_tv_show or get_person. The result also has tv_episode_results and tv_season_results, which are always empty. A missing or unknown external_source, or a malformed id, is an error.
| Name | Required | Description | Default |
|---|---|---|---|
| external_id | Yes | The id to look up, for example tt0137523, 361 or Q35332. | |
| external_source | Yes | Which id system external_id belongs to: imdb_id for ids that start with tt or nm, kinopoisk_id for Kinopoisk digits, wikidata_id for Q ids, tvdb_id, facebook_id, twitter_id or instagram_id. The other values (freebase_mid, freebase_id, tvrage_id, tiktok_id, youtube_id) are accepted but return nothing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive, so the safety bar is met; the description goes further and discloses the return structure (movie_results, tv_results, person_results with media_type), warns that tv_episode_results and tv_season_results are always empty, and states that an unknown external_source or malformed id is an error.
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?
Four sentences, front-loaded with the purpose and then the input examples, return shape and error behavior. Every sentence carries information, though the enumeration of id formats is slightly redundant with the parameter descriptions.
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?
There is no output schema, yet the description still explains the response buckets, the always-empty ones, the media_type discriminator, and how to chain into sibling tools. For a two-parameter lookup with rich annotations, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description adds practical value by mapping id shapes to source values (tt/nm prefixes imply imdb_id, Q implies wikidata_id, Kinopoisk digits imply kinopoisk_id) and by restating which sources return nothing rather than erroring, though much of this duplicates the schema's own 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?
States a specific verb (look up) and resource (movie, TV show, person) and immediately scopes it to lookups by an id from another system rather than the amodb numeric id, which cleanly separates it from get_movie/get_tv_show/get_person and search_titles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the trigger condition ('when you do not have the amodb numeric id') and gives concrete typical inputs (IMDb tt0137523 / nm0000093, Kinopoisk digits, Wikidata Q ids). It also closes the loop by telling the agent to pass results to get_movie, get_tv_show or get_person, so the adjacent workflow is fully specified.
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-onlyIdempotent
Get the full record of one movie by its numeric id: title, overview, runtime, genres, release date, budget, revenue, status and vote average. Use append to add related data in the same call: credits for cast and crew, videos for trailers, release_dates for age certifications, watch/providers for where to stream, external_ids for the IMDb and Kinopoisk ids, keywords, recommendations, similar and alternative_titles. The reviews section is empty for most titles. The amodb extras are also appended: ratings (imdb, kinopoisk, tmdb out of 10, metacritic and rotten_tomatoes out of 100, each as value and votes or null), moods (meters named action, fear, humor and so on, avg on a 0 to 10 scale, source measured or estimated), soundtracks (albums with tracks) and wikidata (budget, box office, sequels, awards, based_on). For cinema times use get_showtimes. Get the id from search_titles first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric movie id, for example 550. Find it with search_titles. | |
| append | No | Extra data to fetch in the same call, as a list. Allowed values: credits, images, videos, keywords, recommendations, similar, reviews, release_dates, watch/providers, external_ids, alternative_titles, moods, soundtracks, ratings, wikidata. Example: ["credits", "videos"]. Each value makes the response larger, so request only what you need. | |
| language | No | Language tag for titles and overviews, for example en-US, ru-RU or pt-BR. Served languages: en, ru, uk, be, zh, pt, bg, he, cs, ro, fr, pl, it, es. Any other tag falls back to English. Omit to use the server default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: append values enlarge the response ('request only what you need') and the caveat that the reviews section is empty for most titles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then the sibling handoff, with denser append detail after. The appended-data inventory is long and somewhat list-heavy, but nearly every clause conveys information an agent needs to choose append values, so little is 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?
No output schema exists, so the description must carry return-value detail, and it does: the core fields, every append section's contents, and the amodb extras (ratings scales, moods scale, soundtracks, wikidata). It even notes the reviews section is usually empty, which is exactly the kind of expectation-setting an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description goes further than the schema by explaining what each append value actually yields (credits = cast/crew, videos = trailers, watch/providers = streaming locations, external_ids = IMDb/Kinopoisk ids) and describing the shape of ratings, moods and soundtracks. That is meaning the bare enum list does not carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource ('Get the full record of one movie by its numeric id') and enumerates the returned fields, making it immediately distinguishable from get_tv_show, get_person and get_season. It also routes the agent to search_titles for id acquisition.
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 the alternative for a related need ('For cinema times use get_showtimes') and the prerequisite workflow ('Get the id from search_titles first'). Both when-to-use and when-to-use-something-else are covered.
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-onlyIdempotent
Get the record of one actor, director or other crew member by numeric id: name, biography, birth and death dates, place of birth and known department. Use append to add combined_credits for the full filmography (movies and TV together), movie_credits or tv_credits for one kind, images for photos, or external_ids for the IMDb id. Get the id from search_titles with media_type person.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric person id, for example 287. Find it with search_titles. | |
| append | No | Extra data to fetch in the same call, as a list. Allowed values: combined_credits, movie_credits, tv_credits, images, external_ids. Example: ["combined_credits"]. Each value makes the response larger, so request only what you need. | |
| language | No | Language tag for titles and overviews, for example en-US, ru-RU or pt-BR. Served languages: en, ru, uk, be, zh, pt, bg, he, cs, ro, fr, pl, it, es. Any other tag falls back to English. Omit to use the server default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered by structured data. The description adds some context in explaining that append pulls combined vs. split credit sets, but it does not disclose what happens on an unknown id, payload size implications, or language fallback 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?
Two sentences, front-loaded with verb and returned fields, then the append guidance. The field enumeration is slightly sprawling but every element is informative; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return content and does so by listing the core fields. It is complete for correct invocation, with only minor gaps (error behavior for a bad id, whether append results are nested under a key).
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 goes beyond the enum list by interpreting each append value semantically (combined_credits = full filmography with movies and TV together; movie_credits/tv_credits = one kind; images = photos; external_ids = the IMDb id), which resolves ambiguity the bare enum cannot.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource (get the record of one person) and enumerates exactly what is returned: name, biography, birth/death dates, place of birth, known department. It clearly distinguishes itself from siblings like search_titles and get_movie, which is enough for an agent to route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing for the required id ('Get the id from search_titles with media_type person') and explains the append path for extra data. It lacks an explicit 'do not use this for X, use Y instead' exclusion, but the when-to-use context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_seasonGet season and episodesARead-onlyIdempotent
Get one season of a TV show with its full episode list: episode number, name, air date, runtime, overview and vote average for each episode. Use it to answer questions about episodes, air dates or season length. Season number 0 holds the specials. You need the TV show id from search_titles or get_tv_show.
| Name | Required | Description | Default |
|---|---|---|---|
| tv_id | Yes | Numeric TV show id, for example 1399. | |
| language | No | Language tag for titles and overviews, for example en-US, ru-RU or pt-BR. Served languages: en, ru, uk, be, zh, pt, bg, he, cs, ro, fr, pl, it, es. Any other tag falls back to English. Omit to use the server default. | |
| season_number | Yes | Season number, starting at 1. Use 0 for specials. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds value beyond that by listing the return payload (since no output schema exists) and flagging the specials case, though it says nothing about pagination or behavior on an invalid season number.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core purpose and return payload, then usage, then the specials caveat and the id dependency. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no output schema, it compensates by listing the episode fields returned, and annotations cover safety. Missing only minor operational detail such as behavior for out-of-range seasons or how the language fallback interacts with episode overviews.
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 each parameter is fully documented there. The description's 'Season number 0 holds the specials' merely restates the schema's own 'Use 0 for specials', and the language parameter is left entirely to the schema, so no new semantic value is added. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get one season of a TV show with its full episode list') and enumerates the returned fields, which cleanly distinguishes it from get_tv_show (show-level) and the other siblings. An agent can tell exactly what this returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context ('Use it to answer questions about episodes, air dates or season length') and explicitly routes the agent to search_titles or get_tv_show for the required tv_id. It does not name a sibling to avoid or state exclusions, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_showtimesGet cinema showtimesARead-onlyIdempotent
Find where and when a movie or TV title is showing in cinemas, from today on. Without country the reply lists the countries that have showtimes, each with counts of venues, cities and showtimes and the first and last day, most showtimes first; results is then empty. Call it again with a two letter country code (for example RU) to get the cinemas: name, chain, city, address, timezone, and per showtime the local start time, date, formats, auditorium, price and booking_url. Start times are local to the cinema. Output is limited to the first max_venues cinemas (default 5) and max_showtimes_per_venue showtimes each (default 10); showtimes_total and venues_total give the full counts. Many titles have no showtimes at all.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric movie or TV show id. Find it with search_titles. | |
| country | No | ISO 3166-1 country code, for example RU or DE. Omit it to list the countries that have showtimes. | |
| language | No | Language tag for titles and overviews, for example en-US, ru-RU or pt-BR. Served languages: en, ru, uk, be, zh, pt, bg, he, cs, ro, fr, pl, it, es. Any other tag falls back to English. Omit to use the server default. | |
| max_venues | No | Maximum number of cinemas to return, 1 to 50. Default 5. | |
| media_type | Yes | Whether id is a movie or a TV show id. | |
| max_showtimes_per_venue | No | Maximum number of showtimes per cinema, 1 to 100. Default 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, but the description adds substantial behavioral context beyond them: start times are local to the cinema, output is truncated by max_venues and max_showtimes_per_venue with totals (showtimes_total, venues_total) giving the full counts, the no-country reply has an empty results list, and many titles have no showtimes. These are real operational traits an agent needs and none are derivable from 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?
Effectively one dense paragraph that is front-loaded with the core purpose and the country/no-country fork before drilling into return fields and pagination limits. Every sentence carries information, though the middle payload enumeration is long and the truncation caveat is buried near the end rather than surfaced early.
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 no output schema, the description carries the full burden and does so: it documents the shape of both the country-summary reply and the cinema/showtime reply, including per-showtime fields (local start time, date, formats, auditorium, price, booking_url) and the totals fields for detecting truncation. An agent has everything needed to call and interpret this 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 coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: what omitting country actually produces ('results is then empty'), that country must be a two-letter code, and that the max_* limits truncate rather than filter the underlying totals. The per-parameter enumeration largely repeats the schema, so it falls short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Find where and when a movie or TV title is showing in cinemas'), scoped by title type and starting from today. This is clearly distinguishable from siblings like get_movie or search_titles, which return metadata rather than venue/showtime 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?
Explicitly describes the two-step call pattern: omit country to get a country summary, then re-call with a two-letter code to get cinemas, including what the reply looks like in each case. It also warns that many titles have no showtimes, which sets expectations. It does not name alternatives (e.g., when to prefer search_titles first), leaving that to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tv_showGet TV show detailsARead-onlyIdempotent
Get the full record of one TV show by its numeric id: name, overview, genres, networks, status, number of seasons and episodes, and the list of seasons. Use append to add related data in the same call: credits for cast and crew, videos for trailers, content_ratings for age ratings, watch/providers for where to stream, external_ids for the IMDb, TVDB and Kinopoisk ids, keywords, recommendations, similar, alternative_titles and episode_groups. The reviews section and created_by are empty for most shows. The amodb extras moods, soundtracks, ratings and wikidata are also appended, with the same shapes as for movies. For cinema times use get_showtimes. Use get_season to list the episodes of one season. Get the id from search_titles first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric TV show id, for example 1399. Find it with search_titles. | |
| append | No | Extra data to fetch in the same call, as a list. Allowed values: credits, images, videos, keywords, recommendations, similar, reviews, content_ratings, external_ids, watch/providers, alternative_titles, episode_groups, moods, soundtracks, ratings, wikidata. Example: ["credits", "content_ratings"]. Each value makes the response larger, so request only what you need. | |
| language | No | Language tag for titles and overviews, for example en-US, ru-RU or pt-BR. Served languages: en, ru, uk, be, zh, pt, bg, he, cs, ro, fr, pl, it, es. Any other tag falls back to English. Omit to use the server default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so safety is covered. The description adds genuinely useful context beyond that: that 'append' inflates the response and should be requested sparingly, and that certain sections are empty for most shows.
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 purpose and return shape are front-loaded, followed by append semantics and routing. It is long but nearly every clause carries information; the only mild waste is enumerating append values that the schema also lists.
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 no output schema, the description carries the burden of explaining return values, and it does so thoroughly (field list, empty sections, appended extras). Nothing an agent needs to call this correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description explains what each append value actually returns (credits for cast/crew, external_ids for IMDb/TVDB/Kinopoisk ids, etc.) and notes moods/soundtracks/ratings/wikidata mirror the movie shapes — meaning the schema alone does not provide.
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 names a specific verb and resource ('Get the full record of one TV show by its numeric id') and immediately enumerates the returned fields, so it is unmistakably distinct from get_movie, get_season and get_showtimes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent to siblings under stated conditions: get_showtimes for cinema times, get_season for the episodes of one season, and search_titles to obtain the id. It also tells the agent which sections are usually empty (reviews, created_by), which prevents wasted calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_titlesSearch titles and peopleARead-onlyIdempotent
Search for movies, TV shows or people by name. Call this first when you have a title or a name and need the numeric id that the other tools require. Returns the best matches with id, title or name, release date, overview and popularity, at most limit items (default 10). Use media_type "multi" (the default) when you do not know the kind; each result then carries a media_type field. The year filter only applies to movie (release year) and tv (first air year).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page number, starting at 1. Each page holds up to 20 results. | |
| year | No | Release year for movie searches, or first air year for tv searches. Ignored for person and multi. | |
| limit | No | Maximum number of results to return, 1 to 20. Default 10. Keep it small to save context. | |
| query | Yes | Title or person name to search for, for example "Fight Club" or "Tom Hanks". | |
| language | No | Language tag for titles and overviews, for example en-US, ru-RU or pt-BR. Served languages: en, ru, uk, be, zh, pt, bg, he, cs, ro, fr, pl, it, es. Any other tag falls back to English. Omit to use the server default. | |
| media_type | No | What to search: movie, tv, person, or multi for all three. Default multi. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), so the bar is lower. The description adds genuine behavioral context beyond them: what fields come back, that results are capped at `limit` (default 10), and that the year filter only applies to movie/tv searches, not person or multi.
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?
It is front-loaded with purpose and the routing rule, then details returns and defaults. It is dense and mostly earns its space, though the year-filter explanation partially duplicates the schema's own year parameter description.
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 no output schema, the description correctly takes on the burden of describing return values (id, title/name, release date, overview, popularity) and the result cap. Combined with the routing guidance and defaults, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description reinforces defaults and cross-parameter behavior: `limit` default of 10, "multi" as the media_type default, and the year filter's applicability. It also discloses a return-side effect not in the schema (each multi result carries a media_type field), which is slightly beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Search for movies, TV shows or people by name") and distinguishes itself from the sibling get_movie/get_tv_show/get_person tools, which are detail lookups rather than searches. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use context: "Call this first when you have a title or a name and need the numeric id that the other tools require," which effectively routes the agent from search to the get_* tools. It also advises using media_type "multi" when the kind is unknown. It stops short of naming specific alternative siblings or stating when not to search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trendingTrending titlesARead-onlyIdempotent
List what is trending now: movies, TV shows, people, or all three mixed. Use it for questions like "what is popular today" or "what are people watching this week". Returns at most limit items (default 10), most popular first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return, 1 to 20. Default 10. Keep it small to save context. | |
| language | No | Language tag for titles and overviews, for example en-US, ru-RU or pt-BR. Served languages: en, ru, uk, be, zh, pt, bg, he, cs, ro, fr, pl, it, es. Any other tag falls back to English. Omit to use the server default. | |
| media_type | No | What to list: all, movie, tv or person. Default all. | |
| time_window | No | Trending over the last day or the last week. Default day. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: results are capped at 'limit' and ordered most-popular-first, which tells the agent how to interpret the return list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, then usage triggers, then return behavior. Every sentence carries information and nothing is 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?
With no output schema, the description usefully discloses the result cap and ordering, and annotations carry the safety profile. Minor gaps remain (e.g., no note on how person entries differ from movie/TV entries in the result set), but an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with limit, language, media_type and time_window all thoroughly documented including enums and defaults. The description only restates the limit default and media-type scope, adding nothing the schema doesn't already say, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('List what is trending now') and enumerates the scope ('movies, TV shows, people, or all three mixed'), so an agent immediately knows this returns currently-popular items. It does not explicitly contrast itself with related siblings like search_titles or discover_movies, but the time-based popularity framing is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete trigger questions ('what is popular today', 'what are people watching this week'), which is clear usage context. However, it names no alternatives or exclusions (e.g., when to prefer search_titles or discover_movies), so the routing guidance stops short of full when/when-not coverage.
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.
9 tool updates
v0.1.0- First observed
discover_movies - First observed
find_by_external_id - First observed
get_movie - First observed
get_person - First observed
get_season - First observed
get_showtimes - First observed
get_tv_show - First observed
search_titles - First observed
trending
TDQS
Scored across 9 tools
Each tool has a clearly distinct input type and resource: name search, id-based detail retrieval, external-id lookup, trending, filter discovery, and cinema showtimes. Overlaps such as search_titles versus discover_movies are explicitly separated by description (name vs. filters), so misselection is unlikely.
Eight of nine tools follow a consistent snake_case verb_noun or verb_preposition_noun pattern (search_titles, get_movie, get_tv_show, find_by_external_id, etc.). 'trending' is a lone noun without a verb, but it is still readable and no mixed conventions appear.
Nine tools is well within the effective range for a read-only media metadata API. Each tool covers a distinct capability, with no obvious filler or redundancy.
The surface covers the core read lifecycle: search, detail by id, external-id fallback, trending, filter discovery, seasons/episodes, people, and showtimes. A TV-specific discover tool and standalone episode-by-id lookup are missing, but agents can work around these via get_tv_show and get_season.
Maintenance
Related MCP Connectors
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceExposes specialized agents as MCP tools so users can manage and triage Jira tasks, analyze repositories for health and conventions, generate commit/PR/DevOps patterns, assemble reports, produce slides and infographics, and run semantic search over a knowledge base. Everything is invokable directly from inside a coding session in Claude Code, Cursor, or Claude Desktop.1MIT
- AlicenseNot gradedqualityAmaintenanceExposes search, locate, expand, and find_related tools over MCP so AI coding agents in Claude Code, Cursor, Copilot, and other clients can retrieve the best code chunks (path, lines, snippet) by meaning instead of grep or glob. This hybrid code search lets agents find the right files in fewer steps, using up to 50% fewer tokens.296 npm12MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI clients such as Claude, Cursor, VS Code, and Windsurf to list and manage workspaces, projects, tasks, AI agents, and automations through a hosted OAuth-secured endpoint or a local stdio package. Also generates MCP tools from any OpenAPI spec.1,264 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI clients such as Claude, Cursor, VS Code, and Windsurf to manage workspaces, projects, tasks, and AI agents through natural language, using a hosted OAuth-authenticated endpoint or a local stdio package. It also ships an OpenAPI codegen tool for generating MCP tools from any OpenAPI spec.1,264 npmMIT