{"name":"eu.madeinro/rotv-mcp","slug":"madeinro-rotv-mcp","title":null,"description":"Romanian TV guide MCP: live listings, prime time, search, recommendations, MCP Apps tonight card.","url":"https://mcp.market/server/madeinro-rotv-mcp","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-14T11:08:16.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T04:55:58.054Z","last_ok_at":"2026-11-04T04:55:58.054Z","latency_ms":202},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/marian5070/rotv.mcp","website":"https://tv.madeinro.eu","version":"3.3.0","remotes":[{"type":"streamable-http","url":"https://tv.madeinro.eu/mcp"}],"packages":[],"tools":[{"name":"tv_check_freshness","description":"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).","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_compare_options","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_concierge","description":"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\".","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_explain_recommendation","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_find_for_couple","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_get_prime_time","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_get_title_details","description":"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?\".","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_important_today","description":"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?\".","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_now_on_tv","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_plan_evening","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_recommend_by_mood","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_recommend_today","description":"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ă\".","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_search_program","description":"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\".","write_action":false,"price_micros":0,"input_schema":{"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#"}},{"name":"tv_tonight_card","description":"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).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":85,"grade":"A","scanned_at":"2026-09-25T21:46:35.599Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-25T21:46:35.384Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 2267ms"]},"poisoning":{"score":15,"max":15,"notes":["14 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 11 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://tv.madeinro.eu/mcp","reachable":true,"authRequired":false,"latencyMs":2267,"serverInfo":{"name":"rotv-mcp","version":"3.3.0"}}],"packages":[],"repo":{"found":true,"owner":"marian5070","repo":"rotv.mcp","archived":false,"pushedAt":"2026-09-14T11:08:16Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/114614020?v=4","ownerCreatedAt":"2022-09-28T18:45:42Z","license":"MIT"},"icon":{"url":"https://tv.madeinro.eu/apple-touch-icon.png","source":"site","width":180,"height":180},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-14T11:08:16.000Z","score":23}}}},"grade_history":[],"reviews":[]}