discover_movies
Discover movies filtered by genre, minimum rating, release year, and sort order to find films that match your preferences.
Instructions
Discover movies by genre, minimum rating, year, and sort order.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| genre | No | Genre name (e.g. 'Action', 'Comedy'). | |
| min_rating | No | Minimum vote average. | |
| year | No | Primary release year. | |
| sort_by | No | TMDB sort key, e.g. 'popularity.desc', 'vote_average.desc', 'primary_release_date.desc'. |
Implementation Reference
- src/index.ts:109-114 (registration)Registration of the 'discover_movies' tool with the MCP server, binding its schema and handler.
server.tool( "discover_movies", "Discover movies by genre, minimum rating, year, and sort order.", discoverMoviesSchema, wrap(discoverMovies), ); - src/tools.ts:290-300 (schema)Zod schema defining input parameters for discover_movies: genre (string), min_rating (number 0-10), year (integer 1880-2100), sort_by (string).
export const discoverMoviesSchema = { genre: z.string().optional().describe("Genre name (e.g. 'Action', 'Comedy')."), min_rating: z.number().min(0).max(10).optional().describe("Minimum vote average."), year: z.number().int().min(1880).max(2100).optional().describe("Primary release year."), sort_by: z .string() .optional() .describe( "TMDB sort key, e.g. 'popularity.desc', 'vote_average.desc', 'primary_release_date.desc'.", ), }; - src/tools.ts:302-333 (handler)Core handler function that resolves genre name to ID, calls TMDB /discover/movie endpoint, and returns summarized results.
export async function discoverMovies(args: { genre?: string; min_rating?: number; year?: number; sort_by?: string; }) { let genreId: number | undefined; if (args.genre) { const id = await getMovieGenreId(args.genre); if (id == null) { throw new Error( `Unknown genre '${args.genre}'. Try one like Action, Comedy, Drama, Horror, Romance, Science Fiction.`, ); } genreId = id; } const data = await tmdbGet<PaginatedResponse<MovieListItem>>("/discover/movie", { with_genres: genreId, "vote_average.gte": args.min_rating, primary_release_year: args.year, sort_by: args.sort_by ?? "popularity.desc", include_adult: "false", language: "en-US", }); return { page: data.page, total_results: data.total_results, results: data.results.map(summarizeMovie), }; } - src/tools.ts:41-50 (helper)Helper function summarizeMovie used in discoverMovies to format movie results (id, title, year, overview, rating, poster).
function summarizeMovie(m: MovieListItem) { return { id: m.id, title: m.title, year: yearOf(m.release_date), overview: m.overview ?? null, rating: m.vote_average ?? null, poster: posterUrl(m.poster_path), }; }