Skip to main content
Glama
terryso

tv-recommender-mcp-server

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
NameRequiredDescriptionDefault
genreYes电视剧类型,如"喜剧"、"科幻"、"悬疑"等,支持中英文

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) }]
        };
      }
    );
  • 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)}`;
      }
    }
  • TypeScript interface defining the input parameters for the getRecommendationsByGenre function: { genre: string }.
    export interface GetRecommendationsByGenreParams {
      genre: string;  // 类型,如"喜剧"或"Comedy"
    }
  • 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)}`);
      }

Latest Blog Posts

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/terryso/tv-recommender-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server