rotv-mcp

Romanian TV guide MCP: live listings, prime time, search, recommendations, MCP Apps tonight card.

我该使用它吗

质量与安全性

B
描述质量
99%
模式完整度
82%
命名质量
80%
投毒风险
60%
权限匹配度
100%
协议合规性
100%

发现(3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains suspicious base64-like encoded string在 tv_recommend_by_mood 中
  • MEDIUMTool description contains suspicious base64-like encoded string在 tv_concierge 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~7,647token 数(工具定义)
~5.0 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 5.97%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "rotv-mcp": {
      "url": "https://tv.madeinro.eu/mcp"
    }
  }
}

远程端点

https://tv.madeinro.eu/mcpstreamable-http

它能做什么

工具清单

工具(14)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢tv_now_on_tv(scope, exclude_news, category, limit)

Returns the programs currently broadcasting on Romanian TV channels. Use this for "What is on TV now?" type questions. Default scope is the 14 main channels; pass scope="all" for the full 254-channel list.

输入模式

{
  "type": "object",
  "properties": {
    "scope": {
      "type": "string",
      "enum": [
        "main",
        "all"
      ],
      "default": "main",
      "description": "main = 14 main Romanian channels (PRO TV, Antena 1, Kanal D, TVR 1/2, Digi 24, etc.); all = all 254 channels"
    },
    "exclude_news": {
      "type": "boolean",
      "default": false,
      "description": "Drop channels whose category is \"Știri\" (Romanian news channels)"
    },
    "category": {
      "type": "string",
      "description": "Filter by channel category: Generaliste | Știri | Sport | Filme & Seriale | Documentare | Copii | Muzică | Altele"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 15,
      "description": "Max number of items to return"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "generated_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "asked_at_utc": {
      "type": "string"
    },
    "scope": {
      "type": "string"
    },
    "count": {
      "type": "number"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "channel_id": {
            "type": "string"
          },
          "channel_name": {
            "type": "string"
          },
          "channel_category": {
            "type": [
              "string",
              "null"
            ]
          },
          "program": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "start_local": {
                "type": "string"
              },
              "start_utc": {
                "type": "string"
              },
              "stop_local": {
                "type": "string"
              },
              "stop_utc": {
                "type": "string"
              },
              "duration_min": {
                "type": "number"
              },
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "title",
              "start_local",
              "start_utc",
              "stop_local",
              "stop_utc",
              "duration_min"
            ],
            "additionalProperties": true
          }
        },
        "required": [
          "channel_id",
          "channel_name",
          "program"
        ],
        "additionalProperties": true
      }
    }
  },
  "required": [
    "asked_at_utc",
    "scope",
    "count",
    "items"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_search_program(query, channel, category, timeframe, exclude_news, ...)

Search programs across all 254 Romanian TV channels by free-text title, channel, category, and time window. Use for queries like "documentaries on Discovery tomorrow", "football on Saturday", "what is on Antena 1 right now". Time references accepted: now, tonight, tomorrow, weekend, primetime, today, YYYY-MM-DD, ISO instant, or ISO range "A/B".

输入模式

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Free text to match against program title (case/diacritic-insensitive)"
    },
    "channel": {
      "type": "string",
      "description": "Channel id, display name, or alias (e.g. \"PRO TV\", \"tv-pro-tv\", \"HBO\")"
    },
    "category": {
      "type": "string",
      "description": "Channel category: Generaliste | Știri | Sport | Filme & Seriale | Documentare | Copii | Muzică | Altele"
    },
    "timeframe": {
      "type": "string",
      "default": "now",
      "description": "Natural time reference: now | tonight | tomorrow | weekend | primetime | today | YYYY-MM-DD | ISO instant | ISO range \"A/B\""
    },
    "exclude_news": {
      "type": "boolean",
      "default": false
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "generated_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "asked_at_utc": {
      "type": "string"
    },
    "timeframe_label": {
      "type": "string"
    },
    "window": {
      "type": "object",
      "properties": {
        "from_utc": {
          "type": "string"
        },
        "to_utc": {
          "type": "string"
        }
      },
      "required": [
        "from_utc",
        "to_utc"
      ],
      "additionalProperties": true
    },
    "count": {
      "type": "number"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "channel_id": {
            "type": "string"
          },
          "channel_name": {
            "type": "string"
          },
          "channel_category": {
            "type": [
              "string",
              "null"
            ]
          },
          "program": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "start_local": {
                "type": "string"
              },
              "start_utc": {
                "type": "string"
              },
              "stop_local": {
                "type": "string"
              },
              "stop_utc": {
                "type": "string"
              },
              "duration_min": {
                "type": "number"
              },
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "title",
              "start_local",
              "start_utc",
              "stop_local",
              "stop_utc",
              "duration_min"
            ],
            "additionalProperties": true
          },
          "match_reason": {
            "type": "string"
          }
        },
        "required": [
          "channel_id",
          "channel_name",
          "program"
        ],
        "additionalProperties": true
      }
    }
  },
  "required": [
    "asked_at_utc",
    "timeframe_label",
    "window",
    "count",
    "items"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_get_prime_time(date, scope, exclude_news)

Returns the prime-time lineup (20:00–23:00 Europe/Bucharest) for a given date, grouped by channel. Use for queries like "what is on prime time tonight" or "tomorrow night TV". By default, news channels are excluded.

输入模式

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "default": "today",
      "description": "today | tomorrow | YYYY-MM-DD (interpreted in Europe/Bucharest)"
    },
    "scope": {
      "type": "string",
      "enum": [
        "main",
        "all"
      ],
      "default": "main"
    },
    "exclude_news": {
      "type": "boolean",
      "default": true
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "generated_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "asked_at_utc": {
      "type": "string"
    },
    "date": {
      "type": "string"
    },
    "window_local": {
      "type": "string"
    },
    "window": {
      "type": "object",
      "properties": {
        "from_utc": {
          "type": "string"
        },
        "to_utc": {
          "type": "string"
        }
      },
      "required": [
        "from_utc",
        "to_utc"
      ],
      "additionalProperties": true
    },
    "scope": {
      "type": "string"
    },
    "exclude_news": {
      "type": "boolean"
    },
    "count": {
      "type": "number"
    },
    "channels": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "channel_id": {
            "type": "string"
          },
          "channel_name": {
            "type": "string"
          },
          "channel_category": {
            "type": [
              "string",
              "null"
            ]
          },
          "programs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "title": {
                  "type": "string"
                },
                "start_local": {
                  "type": "string"
                },
                "start_utc": {
                  "type": "string"
                },
                "stop_local": {
                  "type": "string"
                },
                "stop_utc": {
                  "type": "string"
                },
                "duration_min": {
                  "type": "number"
                },
                "category": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "description": {
                  "type": "string"
                }
              },
              "required": [
                "title",
                "start_local",
                "start_utc",
                "stop_local",
                "stop_utc",
                "duration_min"
              ],
              "additionalProperties": true
            }
          }
        },
        "required": [
          "channel_id",
          "channel_name",
          "programs"
        ],
        "additionalProperties": true
      }
    }
  },
  "required": [
    "asked_at_utc",
    "date",
    "window_local",
    "window",
    "scope",
    "exclude_news",
    "count",
    "channels"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_recommend_today(timeframe, prefer, exclude_news, limit)

Returns up to N ranked program recommendations for a given timeframe. Uses a deterministic scorer that rewards films / documentaries / generalist channels, penalises news, and boosts programs starting within the next hour. Use for queries like "recommend me something for tonight", "ce e bun la TV diseară".

输入模式

{
  "type": "object",
  "properties": {
    "timeframe": {
      "type": "string",
      "default": "tonight",
      "description": "now | tonight | primetime | tomorrow | weekend | today | YYYY-MM-DD | ISO range \"A/B\""
    },
    "prefer": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "filme",
          "seriale",
          "documentare",
          "sport",
          "copii",
          "muzica"
        ]
      },
      "default": [
        "filme",
        "documentare"
      ],
      "description": "Preferred categories for ranking boost"
    },
    "exclude_news": {
      "type": "boolean",
      "default": true,
      "description": "Drop news channels and news programs"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 5
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "generated_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "asked_at_utc": {
      "type": "string"
    },
    "timeframe_label": {
      "type": "string"
    },
    "window": {
      "type": "object",
      "properties": {
        "from_utc": {
          "type": "string"
        },
        "to_utc": {
          "type": "string"
        }
      },
      "required": [
        "from_utc",
        "to_utc"
      ],
      "additionalProperties": true
    },
    "prefer": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "exclude_news": {
      "type": "boolean"
    },
    "count": {
      "type": "number"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "channel_id": {
            "type": "string"
          },
          "channel_name": {
            "type": "string"
          },
          "channel_category": {
            "type": [
              "string",
              "null"
            ]
          },
          "program": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "start_local": {
                "type": "string"
              },
              "start_utc": {
                "type": "string"
              },
              "stop_local": {
                "type": "string"
              },
              "stop_utc": {
                "type": "string"
              },
              "duration_min": {
                "type": "number"
              },
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "title",
              "start_local",
              "start_utc",
              "stop_local",
              "stop_utc",
              "duration_min"
            ],
            "additionalProperties": true
          },
          "score": {
            "type": "number"
          },
          "why_recommended": {
            "type": "string"
          }
        },
        "required": [
          "channel_id",
          "channel_name",
          "program",
          "score",
          "why_recommended"
        ],
        "additionalProperties": true
      }
    }
  },
  "required": [
    "asked_at_utc",
    "timeframe_label",
    "window",
    "prefer",
    "exclude_news",
    "count",
    "items"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_get_title_details(title, include_streaming, upcoming_window_hours)

Looks up a title across upcoming Romanian TV airings (next N hours, default 48) and the live streaming catalog for Romania (Netflix, HBO Max, Prime Video, Disney+, Apple TV+). Use for queries like "is Avatar on Netflix?", "when does Game of Thrones air next?".

输入模式

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "Title to look up (case/diacritic-insensitive)"
    },
    "include_streaming": {
      "type": "boolean",
      "default": true,
      "description": "Also look up the title in Netflix / HBO Max / Prime Video / Disney+ / Apple TV+ catalog for Romania"
    },
    "upcoming_window_hours": {
      "type": "integer",
      "minimum": 1,
      "maximum": 72,
      "default": 48,
      "description": "How far ahead (hours) to scan TV airings"
    }
  },
  "required": [
    "title"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "title_query": {
      "type": "string"
    },
    "asked_at_utc": {
      "type": "string"
    },
    "upcoming_window_hours": {
      "type": "number"
    },
    "tv_airings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "channel_id": {
            "type": "string"
          },
          "channel_name": {
            "type": "string"
          },
          "channel_category": {
            "type": [
              "string",
              "null"
            ]
          },
          "program": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "start_local": {
                "type": "string"
              },
              "start_utc": {
                "type": "string"
              },
              "stop_local": {
                "type": "string"
              },
              "stop_utc": {
                "type": "string"
              },
              "duration_min": {
                "type": "number"
              },
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "title",
              "start_local",
              "start_utc",
              "stop_local",
              "stop_utc",
              "duration_min"
            ],
            "additionalProperties": true
          }
        },
        "required": [
          "channel_id",
          "channel_name",
          "program"
        ],
        "additionalProperties": true
      }
    },
    "tv_airings_count": {
      "type": "number"
    },
    "streaming": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    "streaming_count": {
      "type": "number"
    },
    "summary": {
      "type": "string"
    }
  },
  "required": [
    "title_query",
    "asked_at_utc",
    "upcoming_window_hours",
    "tv_airings",
    "tv_airings_count",
    "streaming",
    "streaming_count",
    "summary"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_recommend_by_mood(mood, timeframe, prefer, dislike_genres, dislike_keywords, ...)

Returns top-N Romanian TV programs ranked for a given mood (obosit/vesel/concentrat/romantic/familie/captivant — RO/EN aliases accepted). Combines: channel category, mood-fit (genre + duration + keywords), time proximity, and streaming cross-reference. Output includes mood_parts breakdown and freshness embedded.

输入模式

{
  "type": "object",
  "properties": {
    "mood": {
      "type": "string",
      "minLength": 2,
      "maxLength": 40,
      "description": "Mood: obosit | vesel | concentrat | romantic | familie | captivant (also accepts tired, happy, focused, family, thrilling, etc.)"
    },
    "timeframe": {
      "type": "string",
      "default": "tonight",
      "description": "now | tonight | primetime | tomorrow | weekend | today | YYYY-MM-DD | ISO range \"A/B\""
    },
    "prefer": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Additional channel-category preferences (additive boost)"
    },
    "dislike_genres": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "dislike_keywords": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 5
    },
    "include_streaming_xref": {
      "type": "boolean",
      "default": true
    }
  },
  "required": [
    "mood"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "generated_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "asked_at_utc": {
      "type": "string"
    },
    "mood": {
      "type": "string"
    },
    "mood_label_ro": {
      "type": "string"
    },
    "timeframe_label": {
      "type": "string"
    },
    "window": {
      "type": "object",
      "properties": {
        "from_utc": {
          "type": "string"
        },
        "to_utc": {
          "type": "string"
        }
      },
      "required": [
        "from_utc",
        "to_utc"
      ],
      "additionalProperties": true
    },
    "count": {
      "type": "number"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    "freshness": {
      "type": "object",
      "properties": {
        "epg_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "streaming_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "stale": {
          "type": "boolean"
        }
      },
      "required": [
        "stale"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "asked_at_utc",
    "mood",
    "mood_label_ro",
    "timeframe_label",
    "window",
    "count",
    "items",
    "freshness"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_plan_evening(start, duration_min, mood, prefer, max_segments, ...)

Builds a coherent TV watching plan for an evening — either one long program filling the budget or 2-3 segments with small gaps. Accepts start time, duration budget, mood, and channel preferences. Output: ordered timeline + alternatives dropped + totals.

输入模式

{
  "type": "object",
  "properties": {
    "start": {
      "type": "string",
      "default": "20:00",
      "description": "Start time: \"now\" | \"HH:MM\" (Europe/Bucharest) | ISO instant"
    },
    "duration_min": {
      "type": "integer",
      "minimum": 30,
      "maximum": 360,
      "default": 180
    },
    "mood": {
      "type": "string"
    },
    "prefer": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "max_segments": {
      "type": "integer",
      "minimum": 1,
      "maximum": 3,
      "default": 3
    },
    "allow_channel_switch": {
      "type": "boolean",
      "default": true
    },
    "max_gap_min": {
      "type": "integer",
      "minimum": 0,
      "maximum": 30,
      "default": 10
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "reason": {
      "type": [
        "string",
        "null"
      ]
    },
    "asked_at_utc": {
      "type": "string"
    },
    "start_utc": {
      "type": "string"
    },
    "end_utc": {
      "type": "string"
    },
    "duration_budget_min": {
      "type": "number"
    },
    "mood": {
      "type": "string"
    },
    "mood_label_ro": {
      "type": "string"
    },
    "plan": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    "totals": {
      "type": "object",
      "properties": {
        "segments": {
          "type": "number"
        },
        "total_filled_min": {
          "type": "number"
        },
        "gap_min": {
          "type": "number"
        },
        "switches": {
          "type": "number"
        }
      },
      "required": [
        "segments",
        "total_filled_min",
        "gap_min",
        "switches"
      ],
      "additionalProperties": true
    },
    "alternatives": {
      "type": "array",
      "items": {
        "$ref": "#/properties/plan/items"
      }
    },
    "freshness": {
      "type": "object",
      "properties": {
        "epg_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "streaming_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "stale": {
          "type": "boolean"
        }
      },
      "required": [
        "stale"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "ok",
    "asked_at_utc",
    "start_utc",
    "end_utc",
    "duration_budget_min",
    "mood",
    "mood_label_ro",
    "plan",
    "totals",
    "alternatives",
    "freshness"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_compare_options(options, mood, prefer, upcoming_window_hours)

Compares 2-5 program titles by scoring each against the chosen mood, finding the next TV airing (next 48h by default) and looking each up in the streaming catalog. Returns side-by-side breakdown and a winner with reasoning.

输入模式

{
  "type": "object",
  "properties": {
    "options": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "channel": {
                "type": "string"
              }
            },
            "required": [
              "title"
            ],
            "additionalProperties": false
          }
        ]
      },
      "minItems": 2,
      "maxItems": 5,
      "description": "Array of 2-5 titles (string) or { title, channel? } objects to compare"
    },
    "mood": {
      "type": "string"
    },
    "prefer": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "upcoming_window_hours": {
      "type": "integer",
      "minimum": 1,
      "maximum": 72,
      "default": 48
    }
  },
  "required": [
    "options"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "asked_at_utc": {
      "type": "string"
    },
    "mood": {
      "type": "string"
    },
    "mood_label_ro": {
      "type": "string"
    },
    "options": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    "winner": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "query": {
              "type": "string"
            },
            "total_score": {
              "type": "number"
            },
            "reason": {
              "type": "string"
            }
          },
          "required": [
            "query",
            "total_score",
            "reason"
          ],
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    },
    "freshness": {
      "type": "object",
      "properties": {
        "epg_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "streaming_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "stale": {
          "type": "boolean"
        }
      },
      "required": [
        "stale"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "asked_at_utc",
    "mood",
    "mood_label_ro",
    "options",
    "winner",
    "freshness"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_find_for_couple(person_a, person_b, timeframe, fairness, min_score, ...)

Finds TV programs that satisfy two people with different moods/preferences. Default fairness=strict (min(scoreA,scoreB) >= threshold — no veto). Auto-falls-back to fairness=average if strict returns empty, marked with degraded:true. Returns per-person score breakdown + compromise note when one side wins by >1.5 points.

输入模式

{
  "type": "object",
  "properties": {
    "person_a": {
      "type": "object",
      "properties": {
        "mood": {
          "type": "string"
        },
        "prefer": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "dislike_genres": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "dislike_keywords": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false,
      "description": "Preferences for person A"
    },
    "person_b": {
      "type": "object",
      "properties": {
        "mood": {
          "$ref": "#/properties/person_a/properties/mood"
        },
        "prefer": {
          "$ref": "#/properties/person_a/properties/prefer"
        },
        "dislike_genres": {
          "$ref": "#/properties/person_a/properties/dislike_genres"
        },
        "dislike_keywords": {
          "$ref": "#/properties/person_a/properties/dislike_keywords"
        }
      },
      "additionalProperties": false,
      "description": "Preferences for person B"
    },
    "timeframe": {
      "type": "string",
      "default": "tonight"
    },
    "fairness": {
      "type": "string",
      "enum": [
        "strict",
        "average"
      ],
      "default": "strict"
    },
    "min_score": {
      "type": "number",
      "default": 1
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 5
    },
    "include_streaming_xref": {
      "type": "boolean",
      "default": true
    }
  },
  "required": [
    "person_a",
    "person_b"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "asked_at_utc": {
      "type": "string"
    },
    "timeframe_label": {
      "type": "string"
    },
    "window": {
      "type": "object",
      "properties": {
        "from_utc": {
          "type": "string"
        },
        "to_utc": {
          "type": "string"
        }
      },
      "required": [
        "from_utc",
        "to_utc"
      ],
      "additionalProperties": true
    },
    "person_a": {
      "type": "object",
      "properties": {},
      "additionalProperties": true
    },
    "person_b": {
      "$ref": "#/properties/person_a"
    },
    "fairness": {
      "type": "string"
    },
    "min_score": {
      "type": "number"
    },
    "degraded": {
      "type": "boolean"
    },
    "count": {
      "type": "number"
    },
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/properties/person_a"
      }
    },
    "freshness": {
      "type": "object",
      "properties": {
        "epg_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "streaming_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "stale": {
          "type": "boolean"
        }
      },
      "required": [
        "stale"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "asked_at_utc",
    "timeframe_label",
    "window",
    "person_a",
    "person_b",
    "fairness",
    "min_score",
    "degraded",
    "count",
    "items",
    "freshness"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_explain_recommendation(title, channel, start_utc, context)

Returns a full score breakdown for a specific program in a given mood/context: per-component value + reason, extracted genres, streaming cross-ref, freshness, sources used, and a list of alternatives that were not picked (with the specific reason each was dropped). Use to understand or debug a recommendation.

输入模式

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "Program title to explain"
    },
    "channel": {
      "type": "string",
      "description": "Optional channel id/name/alias to disambiguate"
    },
    "start_utc": {
      "type": "string",
      "description": "Optional ISO start time to disambiguate"
    },
    "context": {
      "type": "object",
      "properties": {
        "mood": {
          "type": "string"
        },
        "prefer": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "timeframe": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "title"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    },
    "subject": {
      "type": "object",
      "properties": {},
      "additionalProperties": true
    },
    "context": {
      "$ref": "#/properties/subject"
    },
    "score_breakdown": {
      "$ref": "#/properties/subject"
    },
    "extracted_genres": {
      "type": "array",
      "items": {
        "$ref": "#/properties/subject"
      }
    },
    "streaming_xref": {
      "anyOf": [
        {
          "$ref": "#/properties/subject"
        },
        {
          "type": "null"
        }
      ]
    },
    "sources_used": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "fresh_status": {
      "$ref": "#/properties/subject"
    },
    "alternatives_not_picked": {
      "type": "array",
      "items": {
        "$ref": "#/properties/subject"
      }
    },
    "confidence": {
      "type": "string"
    },
    "freshness": {
      "type": "object",
      "properties": {
        "epg_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "streaming_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "stale": {
          "type": "boolean"
        }
      },
      "required": [
        "stale"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "ok",
    "freshness"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_check_freshness(source)

Reports the last-updated time of each underlying data source (EPG normalized, EPG homepage, streaming catalog), the age in minutes, the expected next refresh, and whether any source is stale (older than 1.5× the expected refresh interval).

输入模式

{
  "type": "object",
  "properties": {
    "source": {
      "type": "string",
      "enum": [
        "all",
        "epg",
        "streaming"
      ],
      "default": "all",
      "description": "Optional filter for which source to report"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "asked_at_utc": {
      "type": "string"
    },
    "now_utc": {
      "type": "string"
    },
    "sources": {
      "type": "object",
      "properties": {},
      "additionalProperties": true
    },
    "overall_stale": {
      "type": "boolean"
    },
    "summary": {
      "type": "string"
    },
    "freshness": {
      "type": "object",
      "properties": {
        "epg_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "streaming_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "stale": {
          "type": "boolean"
        }
      },
      "required": [
        "stale"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "asked_at_utc",
    "now_utc",
    "sources",
    "overall_stale",
    "summary",
    "freshness"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_concierge(window, duration_hours, mood, exclude_categories, exclude_keywords, ...)

You have a window of free time — decide for me what to watch right now. Returns ONE primary decision (TV program OR streaming title) with confidence percentage, full reasoning breakdown, and up to 3 diverse alternatives with explicit trade-offs (pros/cons, reason not picked). Picks across live Romanian TV EPG AND streaming catalog (Netflix, HBO Max, Disney+, Prime Video, Apple TV+, SkyShowtime). Built-in anti-noise filter automatically removes news, political talk, reality shows, talk-shows (NO manual filtering needed by the model). Built-in title dedup (handles ~46% duplicate-airing ratio in TV EPG). Built-in opportunity-cost lookahead (flags better options just outside the window). Event-aware: major broadcasts (World Cup / Euro / Champions League / finals) get an importance boost in ranking AND are always listed in the important_today field, even when the mood-based pick is something else — for questions like "what is important today?", prefer tv_important_today. PREFER THIS TOOL over tv_recommend_by_mood, tv_plan_evening, and tv_recommend_today whenever the user wants ONE answer / a single decision / a plan for a specific window — those tools return ranked LISTS for browsing, this tool returns a DECISION. Routes any mood internally (obosit / vesel / concentrat / romantic / familie / captivant + EN aliases tired/happy/focused/romantic/family/thrilling). Trigger phrases: "what should I do", "decide for me", "pick for me", "I have X hours", "ce să fac", "am 2 ore", "alege tu", "mood X durată Y", "o singură decizie", "fii consilierul meu", "what to watch", "concierge me".

输入模式

{
  "type": "object",
  "properties": {
    "window": {
      "type": "object",
      "properties": {
        "start": {
          "type": "string",
          "default": "now",
          "description": "\"now\" | \"HH:MM\" (Europe/Bucharest) | ISO instant"
        },
        "duration_min": {
          "type": "integer",
          "minimum": 30,
          "maximum": 360,
          "default": 120
        }
      },
      "additionalProperties": false,
      "description": "Explicit window. Skips lookahead."
    },
    "duration_hours": {
      "type": "number",
      "minimum": 0.5,
      "maximum": 6,
      "description": "Shorthand when window is absent; starts at now."
    },
    "mood": {
      "type": "string",
      "description": "obosit | vesel | concentrat | romantic | familie | captivant (RO/EN aliases accepted)"
    },
    "exclude_categories": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "politica",
          "reality",
          "talkshow",
          "stiri"
        ]
      },
      "default": [
        "politica",
        "reality",
        "talkshow",
        "stiri"
      ],
      "description": "Anti-noise filter (default: all four)."
    },
    "exclude_keywords": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "tv",
          "streaming"
        ]
      },
      "default": [
        "tv",
        "streaming"
      ]
    },
    "max_alternatives": {
      "type": "integer",
      "minimum": 0,
      "maximum": 5,
      "default": 3
    },
    "risk_aversion": {
      "type": "string",
      "enum": [
        "low",
        "high"
      ],
      "default": "low",
      "description": "low = 3 alternatives, high = none"
    },
    "allow_pauses": {
      "type": "boolean",
      "default": true
    },
    "min_rating": {
      "type": "number",
      "minimum": 0,
      "maximum": 10,
      "default": 0
    },
    "prefer": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    },
    "asked_at_utc": {
      "type": "string"
    },
    "window": {
      "type": "object",
      "properties": {},
      "additionalProperties": true
    },
    "context": {
      "$ref": "#/properties/window"
    },
    "decision": {
      "type": "object",
      "properties": {
        "degraded": {
          "type": "boolean"
        },
        "primary_kind": {
          "type": [
            "string",
            "null"
          ]
        },
        "primary_title": {
          "type": [
            "string",
            "null"
          ]
        },
        "primary_summary": {
          "type": "string"
        },
        "segments": {
          "type": "array",
          "items": {
            "$ref": "#/properties/window"
          }
        },
        "confidence_pct": {
          "type": "number"
        },
        "confidence_label": {
          "type": "string"
        },
        "confidence_breakdown": {
          "anyOf": [
            {
              "$ref": "#/properties/window"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "degraded",
        "primary_kind",
        "primary_title",
        "segments",
        "confidence_pct",
        "confidence_label",
        "confidence_breakdown"
      ],
      "additionalProperties": true
    },
    "reasoning": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "anti_noise": {
      "type": "object",
      "properties": {
        "enabled_categories": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "filtered_count": {
          "type": "number"
        },
        "by_category": {
          "$ref": "#/properties/window"
        }
      },
      "required": [
        "enabled_categories",
        "filtered_count",
        "by_category"
      ],
      "additionalProperties": true
    },
    "alternatives": {
      "type": "array",
      "items": {
        "$ref": "#/properties/window"
      }
    },
    "lookahead": {
      "$ref": "#/properties/window"
    },
    "important_today": {
      "type": "array",
      "items": {
        "$ref": "#/properties/window"
      }
    },
    "sources_used": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "freshness": {
      "type": "object",
      "properties": {
        "epg_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "streaming_age_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "stale": {
          "type": "boolean"
        }
      },
      "required": [
        "stale"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "ok",
    "asked_at_utc",
    "window",
    "context",
    "decision",
    "reasoning",
    "anti_noise",
    "alternatives",
    "lookahead",
    "sources_used",
    "freshness"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_important_today(date, min_tier, limit)

What actually matters on Romanian TV today: World Cup / Euro / Champions League matches, finals, knockout games, national-team fixtures. Detected from real EPG text (titles + descriptions) with quoted evidence — the EPG has no structured event metadata, so detection is keyword-based and honest about it. Use this FIRST for questions like "what's important to watch today?".

输入模式

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Day to scan, YYYY-MM-DD in Europe/Bucharest. Default: today."
    },
    "min_tier": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2,
      "default": 2,
      "description": "1 = only major events (World Cup, Euro, Champions League, finals); 2 = also notable ones (national-team matches, knockout games)"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "default": 10,
      "description": "Max number of events to return"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "generated_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "asked_at_utc": {
      "type": "string"
    },
    "date": {
      "type": "string"
    },
    "min_tier": {
      "type": "number"
    },
    "count": {
      "type": "number"
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    "hint": {
      "type": "string"
    }
  },
  "required": [
    "asked_at_utc",
    "date",
    "min_tier",
    "count",
    "events",
    "hint"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tv_tonight_card

The daily "what is worth watching tonight?" card: one main decision (importance-scored major event, or a deterministic prime-time film fallback) plus one pick per vertical — TV, streaming (official Netflix RO top 10), theater (online + stage union), cinema (box office ∩ today's real screenings) — and measured stats. Same data as the tv.madeinro.eu homepage hero, regenerated daily. In MCP Apps-capable hosts this renders as an interactive card (ui://rotv/tonight-card).

输入模式

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "generated_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "date": {
      "type": "string"
    },
    "decision": {
      "anyOf": [
        {
          "type": "object",
          "properties": {},
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    },
    "rail": {
      "type": "object",
      "properties": {
        "tv": {
          "anyOf": [
            {
              "$ref": "#/properties/decision/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        },
        "streaming": {
          "anyOf": [
            {
              "$ref": "#/properties/decision/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        },
        "teatru": {
          "anyOf": [
            {
              "$ref": "#/properties/decision/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        },
        "cinema": {
          "anyOf": [
            {
              "$ref": "#/properties/decision/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "stats": {
      "anyOf": [
        {
          "$ref": "#/properties/decision/anyOf/0"
        },
        {
          "type": "null"
        }
      ]
    },
    "page_url": {
      "type": "string"
    }
  },
  "required": [
    "generated_at",
    "date",
    "decision",
    "rail",
    "stats",
    "page_url"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

社区

评价此服务器

证据

最近观测

已验证未记录版本14 个工具
已验证未记录版本14 个工具