get_recommendations_by_genre
Find TV shows by genre for personalized viewing. Input a genre (e.g., comedy, sci-fi, mystery) to receive tailored recommendations in your preferred category.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| genre | Yes | 电视剧类型,如"喜剧"、"科幻"、"悬疑"等,支持中英文 |
Implementation Reference
- src/server.ts:39-48 (registration)Registers the MCP tool 'get_recommendations_by_genre' with Zod input schema { genre: z.string() } and an inline async handler that logs the request, calls getRecommendationsByGenre(params), and returns the results as JSON string in MCP content format.server.tool("get_recommendations_by_genre", { genre: z.string().describe('电视剧类型,如"喜剧"、"科幻"、"悬疑"等,支持中英文') }, async (params) => { console.log(`收到按类型获取推荐请求,类型: ${params.genre}`); const results = await getRecommendationsByGenre(params); return { content: [{ type: "text", text: JSON.stringify(results) }] }; } );
- src/tools/recommendations.ts:106-139 (handler)Core handler function getRecommendationsByGenre that validates input, maps genre name to TMDb ID using mapGenreToId, fetches recommendations via tmdbClient.getRecommendationsByGenre, formats the results using helper functions, and returns a formatted string or error message.export async function getRecommendationsByGenre( params: GetRecommendationsByGenreParams ): Promise<string> { try { // 检查参数 if (!params.genre) { throw new ApiError('缺少必要参数:genre', 400); } // 将用户输入的类型映射到TMDb类型ID const genreId = mapGenreToId(params.genre); // 如果无法识别类型 if (!genreId) { return `抱歉,无法识别您提供的类型"${params.genre}",请尝试其他类型如"喜剧"、"科幻"等。`; } // 获取类型名称(使用中文) const genreName = getGenreNameById(genreId) || params.genre; // 调用TMDb API获取推荐 const response = await tmdbClient.getRecommendationsByGenre(genreId); // 格式化结果 const recommendations = formatShowResults(response.results); // 返回格式化的字符串 return formatRecommendationsToString(genreName, recommendations); } catch (error) { // console.error('获取推荐时发生错误:', error); return `获取推荐时发生错误: ${formatErrorMessage(error)}`; } }
- src/tools/recommendations.ts:19-21 (schema)TypeScript interface defining the input parameters for the getRecommendationsByGenre function: { genre: string }.export interface GetRecommendationsByGenreParams { genre: string; // 类型,如"喜剧"或"Comedy" }
- src/services/tmdbClient.ts:86-105 (helper)TMDbClient method that performs the actual API call to /discover/tv with genre filter, vote count threshold, sorted by vote_average.desc, limits results, and handles errors.async getRecommendationsByGenre(genreId: number, limit = 10) { try { const response = await this.getClient().get('/discover/tv', { params: { with_genres: genreId, sort_by: 'vote_average.desc', // 按评分降序排序 'vote_count.gte': 100, // 至少有100个评分,避免低质量内容 page: 1 } }); // 限制返回结果数量 response.data.results = response.data.results.slice(0, limit); return response.data; } catch (error) { // 记录错误并重新抛出 // console.error(`获取类型ID ${genreId} 的推荐失败:`, error); throw new Error(`获取类型ID ${genreId} 的推荐失败: ${error instanceof Error ? error.message : String(error)}`); }