Skip to main content
Glama

tv-recommender-mcp-server

story-2-6-advanced-discovery.md5.12 kB
# Epic-2 - Story-2.6 实现高级剧集发现功能 (Implement Advanced Show Discovery) **As a** 用户 (User) **I want** 使用多种条件组合(如演员、评分、年份、关键词、播放平台等)来搜索和发现剧集 (to search and discover TV shows using a combination of criteria like actors, rating, year, keywords, networks, etc.) **so that** 我可以更精确地找到符合我特定口味或要求的剧集 (I can find shows that match my specific tastes or requirements more precisely) ## Status 已完成 (Completed) ## Context - 当前只有按类型的基本推荐。 - 此功能利用TMDB的 `/discover/tv` API端点提供更强大的搜索能力,允许用户组合多个筛选条件。 - 这是对现有推荐功能的重要补充和增强。 ## Estimation Story Points: 3 ## Tasks 1. - [x] 定义新的MCP工具 `discover_shows` 1. - [x] 设计工具输入参数: 包含多个可选筛选条件的对象,如 `with_genres`, `with_cast`, `vote_average_gte`, `first_air_date_year`, `with_networks`, `with_keywords`, `page` 等。 2. - [x] 设计工具输出格式: 包含剧集列表 (带基本信息如标题、评分、简介、海报路径)、当前页码、总页数、总结果数。 2. - [x] 实现TMDB API调用逻辑 1. - [x] 添加函数:调用 `/discover/tv` API,动态构建查询参数。 2. - [x] 处理用户输入的友好名称到API所需ID的转换 (例如,类型名称 -> 类型ID,演员名称 -> 演员ID)。这可能需要调用 `/genre/tv/list`, `/search/person`, `/search/keyword` 等API。 3. - [x] 处理分页逻辑。 4. - [x] 处理API响应和错误。 3. - [x] 编写单元测试 1. - [x] 测试不同筛选参数组合的API调用。 2. - [x] 测试ID转换逻辑 (类型、演员等)。 3. - [x] 测试分页。 4. - [x] 测试错误处理。 ## Constraints - 需要有效处理大量可选参数的组合及参数验证。 - 某些筛选条件需要先通过其他API获取ID,增加了实现的复杂度。 - 需要考虑TMDB API的速率限制。 ## Data Models / Schema - **Input (Example - 参数需根据TMDB文档细化):** ```json { "with_genres": ["喜剧", "科幻"], // 或者 Genre IDs [18, 10765] "with_cast": ["布莱恩·科兰斯顿"], // 或者 Person ID [17419] "first_air_date_year": 2022, "vote_average_gte": 8.0, "with_networks": [213], // 例如 Netflix ID "sort_by": "popularity.desc", // 例如按流行度降序 "page": 1 } ``` - **Output (Example):** ```json { "page": 1, "results": [ { "id": 94997, "name": "House of the Dragon", "overview": "The Targaryen dynasty is at the absolute apex of its power...", "poster_path": "/z2yahl2uefxDCl0nogcRBstwruJ.jpg", "vote_average": 8.5 } // ... more show summaries ], "total_pages": 50, "total_results": 1000 } ``` *注:`poster_path` 需要结合TMDB配置API中的 `images.secure_base_url` 来构建完整URL。* ## Structure - 新增工具实现文件: `src/tools/discoverShowsTool.ts` - 更新服务层: `src/services/tmdbClient.ts` (添加 `/discover/tv` 及可能需要的搜索/列表API调用方法) - 更新服务器入口: `src/server.ts` (注册新工具) - 已实现 `src/utils/genreMap.ts` 来处理类型名称到ID的转换。 ## Diagrams ```mermaid sequenceDiagram participant User participant McpServer participant DiscoverTool participant TmdbService participant TmdbApi User->>McpServer: 调用 discover_shows (含参数如 genre="喜剧", cast="演员A") McpServer->>DiscoverTool: 执行工具逻辑 alt 需要ID转换 DiscoverTool->>TmdbService: 查找类型"喜剧"的ID TmdbService->>TmdbApi: GET /genre/tv/list TmdbApi-->>TmdbService: 类型列表 TmdbService-->>DiscoverTool: 返回"喜剧"的ID (e.g., 35) DiscoverTool->>TmdbService: 查找"演员A"的ID TmdbService->>TmdbApi: GET /search/person?query=演员A TmdbApi-->>TmdbService: 演员列表 TmdbService-->>DiscoverTool: 返回"演员A"的ID (e.g., 123) end DiscoverTool->>TmdbService: 调用 discoverShows (with_genres=35, with_cast=123, ...) TmdbService->>TmdbApi: GET /discover/tv?with_genres=35&with_cast=123&... TmdbApi-->>TmdbService: 发现结果 TmdbService-->>DiscoverTool: 返回结果 DiscoverTool-->>McpServer: 格式化并返回结果 McpServer-->>User: 返回剧集列表 ``` ## Dev Notes - 仔细查阅 `/discover/tv` API文档,了解所有可用筛选参数和 `sort_by` 选项。 - ID转换逻辑是关键,需要健壮地处理找不到ID的情况。 - 考虑为常用列表(如类型)实现缓存,减少API调用。 ## Chat Command Log - 功能已完成实现并集成到系统中,可以通过 `discover_shows` 工具进行高级剧集发现。 - 注意:根据TMDB API限制,发现工具对演员搜索的实现方式做了调整,使用单独的`find_shows_by_actor`和`get_recommendations_by_actor`工具来支持按演员搜索剧集。

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