search_tv
Search for TV shows by entering a title or keywords, using TMDB data.
Instructions
Search TMDB for TV shows by name.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | TV show title or keywords. |
Implementation Reference
- src/tools.ts:98-109 (handler)The main handler function that executes the search_tv tool logic. It calls TMDB's /search/tv endpoint with the query, filters to English/adult=false, and maps results via summarizeTv.
export async function searchTv(args: { query: string }) { const data = await tmdbGet<PaginatedResponse<TvListItem>>("/search/tv", { query: args.query, include_adult: "false", language: "en-US", }); return { page: data.page, total_results: data.total_results, results: data.results.map(summarizeTv), }; } - src/tools.ts:94-96 (schema)Zod schema for the search_tv input parameter. Defines a single required 'query' string field.
export const searchTvSchema = { query: z.string().min(1).describe("TV show title or keywords."), }; - src/index.ts:67-72 (registration)Registers the tool named 'search_tv' on the MCP server with description 'Search TMDB for TV shows by name.', using searchTvSchema and wrapping searchTv for error handling.
server.tool( "search_tv", "Search TMDB for TV shows by name.", searchTvSchema, wrap(searchTv), ); - src/tools.ts:52-61 (helper)Helper function summarizeTv used by searchTv to format each TV result into a consistent shape (id, name, year, overview, rating, poster).
function summarizeTv(t: TvListItem) { return { id: t.id, name: t.name, year: yearOf(t.first_air_date), overview: t.overview ?? null, rating: t.vote_average ?? null, poster: posterUrl(t.poster_path), }; } - src/tools.ts:99-103 (helper)Calls tmdbGet to fetch data from TMDB's /search/tv endpoint with the user's query (include_adult=false, language=en-US).
const data = await tmdbGet<PaginatedResponse<TvListItem>>("/search/tv", { query: args.query, include_adult: "false", language: "en-US", });