Skip to main content
Glama

tv-recommender-mcp-server

prd.md17 kB
# 1. Title: PRD for 美剧推荐 MCP 服务器 <version>0.2</version> ## Status: 定稿 (v0.2) ## Intro 本项目旨在开发一个 Model Context Protocol (MCP) 服务器,用于提供美剧推荐服务。该服务器将集成到支持 MCP 的大型语言模型 (LLM) 客户端(如 Claude Desktop)中,通过调用外部影视数据库 API(如 TMDb 或 TVmaze)来扩展 LLM 的能力,使用户能够通过自然语言交互获取实时、个性化和可解释的美剧推荐。 ## Goals - **业务目标:** 解决 LLM 在美剧推荐方面的局限性,提升用户通过 LLM 发现影视内容的体验,增加用户与 LLM 交互的价值。 - **产品目标 (MVP):** - 成功部署一个可通过 MCP 客户端调用的 TypeScript MCP 服务器。 - 提供三个核心推荐工具:按类型推荐、查找相似剧集、获取剧集详情。 - 确保与外部 API 的稳定集成和数据获取。 - **成功标准/KPIs:** - 实现高服务可用性(工具调用成功率 > 95%)。 - 实现可接受的响应时间(P95 < 2 秒)。 - (未来)用户反馈评分或推荐采纳率。 ## Features and Requirements - **功能性需求:** - 实现 MCP Server 基础框架 (TypeScript)。 - 实现与外部影视 API (TMDb 或 TVmaze) 的集成。 - 实现三个核心推荐工具的 MCP 接口。 - 实现工具内部调用 API、处理数据和格式化响应的逻辑。 - 实现基本的错误处理和日志记录。 - **非功能性需求:** - **性能:** API 调用及处理的 P95 响应时间 < 2 秒。 - **可靠性:** 工具调用成功率 > 95%。 - **安全性:** API Key 安全存储和使用。 - **可维护性:** 代码结构清晰,遵循 TypeScript 最佳实践。 - **用户体验需求:** - 工具返回的推荐结果应清晰、相关且易于 LLM 理解和呈现。 - 错误信息应转化为用户友好的提示 (❓Q6.2)。 - **集成需求:** - 服务器需能被标准 MCP 客户端发现和调用。 - **合规需求:** - 遵守所选外部 API 的服务条款和使用限制。 ## Epic List ### Epic-1: 核心推荐工具 MVP (包含 MVP 范围内的所有核心功能和故事) ### Epic-2: 增强与扩展 (Future Enhancement) (包含获取热门剧集、查询观看平台、支持电影、关键词发现、演员早期作品、剧集详情、提供商聚合等) ### Epic-3: 个性化与集成 (Future Enhancement) (包含连接 Trakt.tv、智能追剧进度管理等用户个性化功能) ### Epic-4: 可视化与探索 (Future Enhancement) (包含系列/宇宙可视化等) ## Epic 1: Story List (核心推荐工具 MVP) - **Story 1.1: MCP Server 基础设置与 API 集成** (`story-1-1-setup-integration.md`) Status: '' Requirements: - 初始化 TypeScript 项目 (使用 Node.js)。 - 添加 MCP TypeScript SDK 依赖。 - 实现基础的 MCP Server 启动逻辑 (stdio transport)。 - **决定并集成外部 API 客户端 (TMDb)。** - 实现 API Key 的安全配置方式 (e.g., 环境变量)。 - 建立基础的错误处理和日志框架。 - **处理剧集查找结果 (如果重名则默认选择第一个结果;如果找不到则返回明确的错误文本)。** - **Story 1.2: 实现 `get_recommendations_by_genre` 工具** (`story-1-2-recommend-genre.md`) Status: '' Requirements: - 在 MCP Server 中定义 `get_recommendations_by_genre` 工具接口。 - 工具接受 `genre` (string) 参数。 **(支持中文和英文类型名,需要内部映射)** - 实现调用外部 API 按类型查询剧集的逻辑。 - **定义推荐标准 (按评分) 和数量 (默认 10 部)。** - 处理 API 结果,筛选并格式化推荐列表。**(返回格式应包含:年份、评分、简介)** - **实现无法识别类型或无结果时的响应逻辑 (返回明确的错误文本)。** - **Story 1.3: 实现 `get_similar_shows` 工具** (`story-1-3-recommend-similar.md`) Status: '' Requirements: - 在 MCP Server 中定义 `get_similar_shows` 工具接口。 - 工具接受 `show_title` (string) 参数。 - 实现调用外部 API 通过标题查找剧集 ID 的逻辑。 - **处理剧集查找结果 (如果重名则默认选择第一个结果;如果找不到则返回明确的错误文本)。** - 实现调用外部 API 通过 ID 查找相似剧集的逻辑 (基于 TMDb 的相似性标准)。 - **定义推荐数量 (默认 10 部)。** - 处理并格式化相似剧集列表。**(返回格式应包含:年份、评分、简介)** - **Story 1.4: 实现 `get_show_details` 工具** (`story-1-4-show-details.md`) Status: '' Requirements: - 在 MCP Server 中定义 `get_show_details` 工具接口。 - 工具接受 `show_title` (string) 参数。 - 实现调用外部 API 通过标题查找剧集详情的逻辑。 - **处理剧集查找结果 (如果重名则进行去重处理;如果找不到则返回明确的错误文本)。** - **定义返回的详细信息字段 (剧名、年份、评分、类型、简介、演员、季数、状态)。** - **格式化并返回结构化的剧集详情。** ## Epic 2: Story List (增强与扩展) - **Story 2.1: Keyword/Theme Based Discovery** (`story-2-1-keyword-discovery.md`) Status: Draft Requirements: 按关键词或主题发现影视剧。 - **Story 2.2: Early Actor Works Discovery** (`story-2-2-early-works.md`) Status: Draft Requirements: 查看演员早期作品并按时间排序。 - **Story 2.3: Detailed Episode Information and Interaction** (`story-2-3-episode-details.md`) Status: Draft Requirements: 查看单集详情(客串、评分、剧照)并支持单集评分。 - **Story 2.4: Provider/Network/Company Content Aggregation** (`story-2-4-provider-aggregation.md`) Status: Draft Requirements: 按平台/网络/公司聚合浏览内容。 - **Story 2.5: 查询演员信息及其作品** (`story-2-5-actor-info.md`) Status: 已完成 (Completed) Requirements: 查询演员详细信息和参演剧集列表。 - **Story 2.6: 实现高级剧集发现功能** (`story-2-6-advanced-discovery.md`) Status: 已完成 (Completed) Requirements: 使用多种条件组合搜索剧集。 - **Story 2.7: 查询热门与趋势剧集** (`story-2-7-popular-trending.md`) Status: 已完成 (Completed) Requirements: 查看当前热门和近期趋势剧集。 - **Story 2.8: 查询剧集用户评论** (`story-2-8-reviews-ratings.md`) Status: 已完成 (Completed) Requirements: 查看其他用户对剧集的评论。 - **Story 2.9: 查询剧集预告片与视频** (`story-2-9-trailers.md`) Status: 已完成 (Completed) Requirements: 获取剧集预告片和其他视频链接。 - **Story 2.10: 查询剧集观看渠道** (`story-2-10-watch-providers.md`) Status: 已完成 (Completed) Requirements: 查询剧集在特定地区的观看渠道。 ## Epic 3: Story List (个性化与集成) - **Story 3.1: Smart Watch Progress Management** (`story-3-1-watch-progress.md`) Status: Draft Requirements: 标记已看剧集并提示下一集未看。 ## Epic 4: Story List (可视化与探索) - **Story 4.1: Visual Franchise/Universe Exploration** (`story-4-1-franchise-visualization.md`) Status: Draft Requirements: 可视化展示系列电影/宇宙的时间线或关系图。 ## Technology Stack | Technology | Description | Notes/Decision | | ------------------- | --------------------------------------------------- | -------------------------------------------------- | | Language | TypeScript | User Preference | | Runtime | Node.js | Required for TypeScript execution | | MCP SDK | MCP TypeScript SDK | Core dependency for MCP Server implementation | | HTTP Client | `axios` or `node-fetch` | For making requests to external APIs | | External API | **TMDb** | User Decision | | Package Manager | npm or yarn | Standard for Node.js/TypeScript projects | | Deployment | **Local** | User Decision (MVP Stage) | | API Key Management | Environment Variables or Secrets Manager | For securely storing API keys | ## Reference { Mermaid Diagrams, visual aids, citations, external URLs - Placeholder } ## Data Models, API Specs, Schemas, etc... { Key data structures returned by tools or used internally - Placeholder } <example> ### Potential Tool Response Structure (Conceptual) ```typescript // For get_recommendations_by_genre / get_similar_shows interface ShowRecommendation { title: string; year?: number; rating?: number; // Or string representation summary?: string; } // For get_show_details interface ShowDetails { title: string; year?: number; rating?: number; // Or string representation genres?: string[]; overview: string; cast?: string[]; // Top N actors totalSeasons?: number; status?: 'Returning Series' | 'Ended' | 'Canceled' | 'In Production'; // ... other fields decided in Q2.3.3 } // Generic Tool Response type ToolResult = string | ShowRecommendation[] | ShowDetails; ``` </example> ## Project Structure { Diagram the folder and file organization structure - Placeholder } <example> ```text tv-recommender-mcp-server/ ├── src/ │ ├── server.ts # Main MCP server initialization │ ├── tools/ # Directory for MCP tool implementations │ │ ├── recommendations.ts # Genre/Similar recommendations logic │ │ └── details.ts # Show details logic │ ├── services/ # External API interaction logic │ │ └── tmdbClient.ts # (or tvmazeClient.ts) API client wrapper │ ├── types/ # Shared TypeScript types/interfaces │ └── utils/ # Helper functions (e.g., formatting) ├── tests/ # Unit/Integration tests ├── .env.example # Example environment variables ├── package.json ├── tsconfig.json └── README.md ``` </example> ## Change Log | Change | Story ID | Description | | -------------------- | -------- | --------------------------- | | Initial draft PRD | N/A | Created initial PRD draft | | Refactor to Template | N/A | Restructured PRD per template | | Finalize MVP Req. | N/A | Incorporated user decisions | --- 请您再次审阅这份重构后的 PRD。它现在更符合模板的结构,包含了 Epics 和 Stories,并将之前的待澄清问题 `❓` 关联到了具体的 Story Requirements 或表格中。 接下来,我们应该聚焦于解决这些待澄清的问题,以完成这份 PRD。 ## 1. Introduction ### 1.1. Overview 本项目旨在开发一个 Model Context Protocol (MCP) 服务器,用于提供美剧推荐服务。该服务器将集成到支持 MCP 的大型语言模型 (LLM) 客户端(如 Claude Desktop)中,通过调用外部影视数据库 API(如 TMDb 或 TVmaze)来扩展 LLM 的能力,使用户能够通过自然语言交互获取实时、个性化和可解释的美剧推荐。 ### 1.2. Goals * **业务目标:** 解决 LLM 在美剧推荐方面的局限性,提升用户通过 LLM 发现影视内容的体验,增加用户与 LLM 交互的价值。 * **产品目标 (MVP):** * 成功部署一个可通过 MCP 客户端调用的 TypeScript MCP 服务器。 * 提供三个核心推荐工具:按类型推荐、查找相似剧集、获取剧集详情。 * 确保与外部 API 的稳定集成和数据获取。 * 实现高服务可用性(工具调用成功率 > 95%)和可接受的响应时间(P95 < 2 秒)。 ### 1.3. Target Audience 熟悉并使用支持 MCP 的 LLM 客户端的个人用户,他们是美剧爱好者,寻求更自然、交互式的剧集发现方式。 ## 2. MVP Features & User Stories 以下是 MVP 版本计划实现的核心功能和对应的初步用户故事。我们需要对这些故事进行细化。 ### 2.1. 按类型推荐 (`get_recommendations_by_genre`) * **用户故事:** 作为一个想看特定类型美剧的用户,我希望可以告诉 LLM 我想看的类型(例如"喜剧"或"科幻"),以便它能给我推荐几部该类型下的高分剧集,并附带简短介绍。 * **功能需求:** * MCP Server 需暴露一个名为 `get_recommendations_by_genre` 的工具。 * 工具接受一个参数:`genre` (类型名称,字符串)。**决策:需要同时支持中文和英文类型名,并进行内部映射。** * 服务器根据 `genre` 调用 TMDb API 查询剧集。 * 服务器处理 API 返回结果,筛选出 **默认 10 部** 剧集,并 **按评分排序**。 * 服务器将结果格式化为文本返回给 LLM。**决策:返回格式需包含剧名、年份、评分和简介。** 示例如下: ``` 根据您选择的[类型],为您推荐以下剧集: 1. [剧名1] ([年份]): [评分] - [简介] 2. [剧名2] ([年份]): [评分] - [简介] ... (共10部) ``` * **决策:如果用户提供的类型无法识别或该类型下没有剧集,返回明确的错误文本给 LLM。** ### 2.2. 查找相似剧集 (`get_similar_shows`) * **用户故事:** 作为一个刚看完一部很喜欢的美剧的用户,我希望可以告诉 LLM 这部剧的名字,以便它能给我推荐几部风格或主题相似的其他剧集。 * **功能需求:** * MCP Server 需暴露一个名为 `get_similar_shows` 的工具。 * 工具接受一个参数:`show_title` (剧集名称,字符串)。 * 服务器首先需要通过 `show_title` 调用 TMDb API 找到对应的剧集 ID。**决策:如果找到多个同名剧集,默认选择第一个结果。如果找不到,返回明确的错误文本。** * 服务器使用剧集 ID 调用 TMDb API 的"查找相似"功能。 * 服务器处理并格式化返回的相似剧集列表,**默认返回 10 部**。**决策:返回格式需包含剧名、年份、评分和简介。** ### 2.3. 获取剧集详情 (`get_show_details`) * **用户故事:** 作为一个对某部美剧感兴趣的用户,我希望可以告诉 LLM 这部剧的名字,以便它能告诉我关于这部剧的详细信息,如剧情简介、主要演员、评分、播出年份和季数等。 * **功能需求:** * MCP Server 需暴露一个名为 `get_show_details` 的工具。 * 工具接受一个参数:`show_title` (剧集名称,字符串)。 * 服务器通过 `show_title` 调用 TMDb API 查询剧集详情。**决策:如果找到多个同名剧集,进行去重处理。如果找不到,返回明确的错误文本。** * 服务器处理并格式化返回的剧集信息。**决策:返回的详细信息包含:剧名、年份、评分、类型、简介、演员、季数、状态。** * **决策:返回格式应为结构化的数据(例如 JSON 对象),方便 LLM 解析和呈现。** * 增加对电影推荐的支持。 ## 3. 技术需求与约束 * **开发语言:** TypeScript * **核心依赖:** MCP TypeScript SDK, `axios` 或 `node-fetch` (用于 API 调用) * **外部依赖:** * **影视数据库 API:** **TMDb** (The Movie Database)。 * 需要申请并安全管理 TMDb API 的 Key。 * **部署:** **本地运行** (MVP 阶段)。 * **错误处理:** 需要为 API 调用失败、数据解析错误、速率限制等情况设计健壮的错误处理机制。 ## 4. 非功能性需求 * **性能:** API 调用及处理的 P95 响应时间应低于 2 秒。 * **可靠性:** 工具调用成功率应高于 95%。需要监控 API 的可用性。 * **安全性:** API Key 必须通过环境变量等方式安全存储和使用,不能硬编码。 * **可维护性:** 代码结构清晰,遵循 TypeScript 最佳实践,易于扩展和维护。 ## 5. 未来考虑 (Post-MVP) * 实现 `get_trending_shows` 工具。 * 实现 `find_streaming_platform` 工具 (可能需要额外的数据源)。 * 支持更复杂的查询,例如结合类型和年份进行推荐。 * 考虑用户个性化,例如允许用户连接 Trakt.tv 账户。 * 增加对电影推荐的支持。 ## 6. 开放问题与讨论点 * **Q6.2:** 错误信息应该如何呈现给最终用户(通过 LLM)? -> **决策: 转化为用户友好的提示文本。** ---

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