电视节目数据服务

一个基于TVMaze API的Model Context Protocol (MCP)服务器,提供电视节目搜索、详情查询、演员信息、季度信息和剧集信息等功能。

  • by vivekjne
  • TypeScript
  • 混合部署
  • 更新于
在 GitHub 查看 vivekjne/tvmaze-mcp-server

使用说明

TVMaze MCP服务器

该项目实现了一个由官方TypeScript SDK支持的模型上下文协议(MCP)服务器。它目前公开了五个TVMaze支持的工具: search_tv_shows 对于关键字搜索结果, get_tv_show 对于通过节目ID的直接查找, get_tv_show_people 对于演员和工作人员列表, get_tv_show_seasons 用于季节元数据,以及 get_season_episodes 用于每季剧集列表(可选嘉宾阵容)。

入门指南

npm install
npm run build

使用实时TypeScript进行开发

npm run dev

运行已编译的服务器(stdio)

npm start

服务器使用stdio传输,因此它被设计为由任何兼容MCP的客户端(Claude Desktop、VS Code MCP集成、MCP Inspector等)启动。将您的客户端指向已编译的入口点(node dist/index.js)或者TypeScript开发命令(npm run dev).

作为HTTP(远程)服务器运行

集 TVMAZE_TRANSPORT=http 切换到流式HTTP模式(脚本 npm run dev:http / npm run start:http 已设置此标志):

TVMAZE_TRANSPORT=http PORT=3000 npm start
# or
npm run start:http

环境变量:

  • PORT / TVMAZE_PORT:侦听端口(默认为 3000)
  • TVMAZE_ALLOWED_HOSTS:用于DNS重新绑定保护的逗号分隔列表(建议在prod中使用)
  • TVMAZE_ALLOWED_ORIGINS:基于浏览器的MCP客户端的CORS分配列表
  • TVMAZE_ENABLE_DNS_PROTECTION:设置为 false 禁用(默认为启用)

在Node运行的任何地方部署HTTP模式,然后使用传输类型配置MCP客户端 http 和URL https://your-domain/mcp.

Docker/渲染部署

在本地构建并运行容器:

docker build -t tvmaze-mcp .
docker run -p 3000:3000 tvmaze-mcp

容器默认值 TVMAZE_TRANSPORT=http 并奔跑 npm run start:http,暴露端口3000。根据需要覆盖环境变量(-e PORT=8080 -e TVMAZE_ALLOWED_HOSTS=...).

渲染部署说明:

  1. 创建新的 Web服务,选择 码头工人 作为运行时,并将其指向此仓库——Render将自动使用提供的 Dockerfile.
  2. 不需要自定义构建或启动命令;Dockerfile已经运行 npm run start:http.
  3. 添加 PORT (Render会自动注入它),加上任何 TVMAZE_ALLOWED_HOSTS, TVMAZE_ALLOWED_ORIGINS,或“环境”选项卡下的其他环境变量。
  4. 部署后,将MCP客户端连接到 https://<your-render-service>.onrender.com/mcp.

工具: search_tv_shows

字段 详细信息
描述 使用查找显示 https://api.tvmaze.com/search/shows?q=<query>
输入 query (字符串,必填), limit (int,可选,1-20,默认5)
输出 包含原始查询、每个结果的相关性得分和归一化TVMaze显示元数据的结构化列表

该工具从摘要中修剪HTML,显示有用的元数据(状态、评级、首映日期等),并返回人类可读的文本内容和结构化的JSON,以便客户端可以随心所欲地格式化响应。

工具: get_tv_show

字段 详细信息
描述 从以下位置获取单个节目 https://api.tvmaze.com/shows/{id}
输入 id (正整数,必填)
输出 show 与搜索工具中使用的规范化模式匹配的对象

当您的客户已经知道TVMaze ID(例如,从搜索结果中)并且需要直接从规范显示端点获取更丰富的元数据或新的详细信息时,请使用此功能。摘要的净化方式与搜索工具相同。

工具: get_tv_show_people

字段 详细信息
描述 胎儿铸件(/shows/{id}/cast)和船员(/shows/{id}/crew)指定节目的数组
输入 id (正整数,必填), castLimit / crewLimit (可选整数,1-20,明文预览默认值5)
输出 包含 showId、全演员阵容和全剧组阵容(每个条目都按照TVMaze的回应进行组织)

该工具显示了中的完整列表 structuredContent 因此,客户端可以根据需要进行过滤或显示,而文本部分突出显示前几个条目以供快速检查。

工具: get_tv_show_seasons

字段 详细信息
描述 通过以下方式列出所有季节 https://api.tvmaze.com/shows/{id}/seasons
输入 showId (正整数,必填), previewLimit (可选整数,1-20,默认值5)
输出 对象包含 showId 和完整 seasons 数组(每个条目包括ID、姓名、日期、剧集计数等)

文本结果总结了前几个季节,以便人类快速了解情况,同时将整个数据集留在 structuredContent.

工具: get_season_episodes

字段 详细信息
描述 通过以下方式列出一季的剧集 https://api.tvmaze.com/seasons/{id}/episodes,可选择嵌入客串演员阵容
输入 seasonId (正整数,必填), includeGuestCast (bool,默认值 false), previewLimit (可选整数,1-20,默认值5)
输出 对象 seasonId, includeGuestCast,以及完整 episodes 数组(每集包括元数据, _embedded.guestcast)

使用 includeGuestCast: true 当你需要每集的嘉宾人数/细节时。明文摘要显示了前几集加上任何客串演员的数量,这样你就可以快速浏览季节结构。

后续步骤

  • 通过其stdio配置将此服务器连接到您首选的MCP客户端。
  • 使用中的相同模式,使用其他TVMaze端点(剧集、演员阵容、时间表等)扩展服务器 src/index.ts.