Server definition
- Hash
- sha256:c656d609eb18d5620a41ad385c3f8a35d3c8e36ba7666f5c638b17919f9b7fce
- What it is
- What a remote MCP server returned when asked what it offers: 14 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"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).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"source": {
"default": "all",
"description": "Optional filter for which source to report",
"enum": [
"all",
"epg",
"streaming"
],
"type": "string"
}
},
"type": "object"
},
"name": "tv_check_freshness",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"freshness": {
"additionalProperties": true,
"properties": {
"epg_age_min": {
"type": [
"number",
"null"
]
},
"stale": {
"type": "boolean"
},
"streaming_age_min": {
"type": [
"number",
"null"
]
}
},
"required": [
"stale"
],
"type": "object"
},
"now_utc": {
"type": "string"
},
"overall_stale": {
"type": "boolean"
},
"sources": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"summary": {
"type": "string"
}
},
"required": [
"asked_at_utc",
"now_utc",
"sources",
"overall_stale",
"summary",
"freshness"
],
"type": "object"
}
},
{
"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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"mood": {
"type": "string"
},
"options": {
"description": "Array of 2-5 titles (string) or { title, channel? } objects to compare",
"items": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"channel": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"title"
],
"type": "object"
}
]
},
"maxItems": 5,
"minItems": 2,
"type": "array"
},
"prefer": {
"items": {
"type": "string"
},
"type": "array"
},
"upcoming_window_hours": {
"default": 48,
"maximum": 72,
"minimum": 1,
"type": "integer"
}
},
"required": [
"options"
],
"type": "object"
},
"name": "tv_compare_options",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"freshness": {
"additionalProperties": true,
"properties": {
"epg_age_min": {
"type": [
"number",
"null"
]
},
"stale": {
"type": "boolean"
},
"streaming_age_min": {
"type": [
"number",
"null"
]
}
},
"required": [
"stale"
],
"type": "object"
},
"mood": {
"type": "string"
},
"mood_label_ro": {
"type": "string"
},
"options": {
"items": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"type": "array"
},
"winner": {
"anyOf": [
{
"additionalProperties": true,
"properties": {
"query": {
"type": "string"
},
"reason": {
"type": "string"
},
"total_score": {
"type": "number"
}
},
"required": [
"query",
"total_score",
"reason"
],
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"asked_at_utc",
"mood",
"mood_label_ro",
"options",
"winner",
"freshness"
],
"type": "object"
}
},
{
"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, plus best_by_source when both TV and streaming were considered (the best TV airing in the window next to the best catalog title — present both to the user when gap_pct is small, since streaming is available any time and TV only now), 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 and tv_recommend_today whenever the user wants ONE answer / a single decision — those tools return ranked LISTS for browsing, this tool returns a DECISION. It returns exactly ONE pick and leaves the rest of the window as a pause: when the user wants the whole window FILLED with several programmes in sequence (\"plan my evening\", \"ce văd toată seara\", \"fă-mi un program pentru 20–24\", a TV window of 3+ hours), use tv_plan_evening instead. 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\".",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"allow_pauses": {
"default": true,
"type": "boolean"
},
"duration_hours": {
"description": "Shorthand when window is absent; starts at now.",
"maximum": 6,
"minimum": 0.5,
"type": "number"
},
"exclude_categories": {
"default": [
"politica",
"reality",
"talkshow",
"stiri"
],
"description": "Anti-noise filter (default: all four).",
"items": {
"enum": [
"politica",
"reality",
"talkshow",
"stiri"
],
"type": "string"
},
"type": "array"
},
"exclude_keywords": {
"items": {
"type": "string"
},
"type": "array"
},
"max_alternatives": {
"default": 3,
"maximum": 5,
"minimum": 0,
"type": "integer"
},
"min_rating": {
"default": 0,
"description": "Hard minimum rating (0-10). When > 0, only titles with a MEASURED rating at or above it are eligible: streaming catalog rating, or the IMDb rating the TV guide declares. TV programmes without any rating (most sport, news, shows) are excluded, not waved through.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"mood": {
"description": "obosit | vesel | concentrat | romantic | familie | captivant (RO/EN aliases accepted)",
"type": "string"
},
"prefer": {
"items": {
"type": "string"
},
"type": "array"
},
"risk_aversion": {
"default": "low",
"description": "low = 3 alternatives, high = none",
"enum": [
"low",
"high"
],
"type": "string"
},
"sources": {
"default": [
"tv",
"streaming"
],
"items": {
"enum": [
"tv",
"streaming"
],
"type": "string"
},
"type": "array"
},
"window": {
"additionalProperties": false,
"description": "Explicit window. Skips lookahead.",
"properties": {
"duration_min": {
"default": 120,
"maximum": 360,
"minimum": 30,
"type": "integer"
},
"start": {
"default": "now",
"description": "\"now\" | \"HH:MM\" (Europe/Bucharest) | ISO instant",
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"name": "tv_concierge",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"alternatives": {
"items": {
"$ref": "#/properties/window"
},
"type": "array"
},
"anti_noise": {
"additionalProperties": true,
"properties": {
"by_category": {
"$ref": "#/properties/window"
},
"enabled_categories": {
"items": {
"type": "string"
},
"type": "array"
},
"filtered_count": {
"type": "number"
}
},
"required": [
"enabled_categories",
"filtered_count",
"by_category"
],
"type": "object"
},
"asked_at_utc": {
"type": "string"
},
"best_by_source": {
"$ref": "#/properties/window"
},
"context": {
"$ref": "#/properties/window"
},
"decision": {
"additionalProperties": true,
"properties": {
"confidence_breakdown": {
"anyOf": [
{
"$ref": "#/properties/window"
},
{
"type": "null"
}
]
},
"confidence_label": {
"type": "string"
},
"confidence_pct": {
"type": "number"
},
"degraded": {
"type": "boolean"
},
"primary_kind": {
"type": [
"string",
"null"
]
},
"primary_summary": {
"type": "string"
},
"primary_title": {
"type": [
"string",
"null"
]
},
"segments": {
"items": {
"$ref": "#/properties/window"
},
"type": "array"
}
},
"required": [
"degraded",
"primary_kind",
"primary_title",
"segments",
"confidence_pct",
"confidence_label",
"confidence_breakdown"
],
"type": "object"
},
"freshness": {
"additionalProperties": true,
"properties": {
"epg_age_min": {
"type": [
"number",
"null"
]
},
"stale": {
"type": "boolean"
},
"streaming_age_min": {
"type": [
"number",
"null"
]
}
},
"required": [
"stale"
],
"type": "object"
},
"important_today": {
"items": {
"$ref": "#/properties/window"
},
"type": "array"
},
"lookahead": {
"$ref": "#/properties/window"
},
"ok": {
"type": "boolean"
},
"reason": {
"type": "string"
},
"reasoning": {
"items": {
"type": "string"
},
"type": "array"
},
"sources_used": {
"items": {
"type": "string"
},
"type": "array"
},
"window": {
"additionalProperties": true,
"properties": {},
"type": "object"
}
},
"required": [
"ok",
"asked_at_utc",
"window",
"context",
"decision",
"reasoning",
"anti_noise",
"alternatives",
"lookahead",
"sources_used",
"freshness"
],
"type": "object"
}
},
{
"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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"channel": {
"description": "Optional channel id/name/alias to disambiguate",
"type": "string"
},
"context": {
"additionalProperties": false,
"properties": {
"mood": {
"type": "string"
},
"prefer": {
"items": {
"type": "string"
},
"type": "array"
},
"timeframe": {
"type": "string"
}
},
"type": "object"
},
"start_utc": {
"description": "Optional ISO start time to disambiguate",
"type": "string"
},
"title": {
"description": "Program title to explain",
"maxLength": 200,
"minLength": 2,
"type": "string"
}
},
"required": [
"title"
],
"type": "object"
},
"name": "tv_explain_recommendation",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"alternatives_not_picked": {
"items": {
"$ref": "#/properties/subject"
},
"type": "array"
},
"confidence": {
"type": "string"
},
"context": {
"$ref": "#/properties/subject"
},
"extracted_genres": {
"items": {
"$ref": "#/properties/subject"
},
"type": "array"
},
"fresh_status": {
"$ref": "#/properties/subject"
},
"freshness": {
"additionalProperties": true,
"properties": {
"epg_age_min": {
"type": [
"number",
"null"
]
},
"stale": {
"type": "boolean"
},
"streaming_age_min": {
"type": [
"number",
"null"
]
}
},
"required": [
"stale"
],
"type": "object"
},
"ok": {
"type": "boolean"
},
"reason": {
"type": "string"
},
"score_breakdown": {
"$ref": "#/properties/subject"
},
"sources_used": {
"items": {
"type": "string"
},
"type": "array"
},
"streaming_xref": {
"anyOf": [
{
"$ref": "#/properties/subject"
},
{
"type": "null"
}
]
},
"subject": {
"additionalProperties": true,
"properties": {},
"type": "object"
}
},
"required": [
"ok",
"freshness"
],
"type": "object"
}
},
{
"description": "Finds TV programs that satisfy two people with different moods/preferences. Default fairness=strict (min(scoreA,scoreB) >= threshold — no veto). If strict returns nothing it falls back in two declared steps: first fairness=average at the SAME min_score; only if that is still empty is min_score halved. The response always carries requested_fairness, requested_min_score, the effective fairness / min_score, threshold_relaxed and degraded — tell the user when their threshold was relaxed. Returns per-person score breakdown + compromise note when one side wins by >1.5 points.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"fairness": {
"default": "strict",
"enum": [
"strict",
"average"
],
"type": "string"
},
"include_streaming_xref": {
"default": true,
"type": "boolean"
},
"limit": {
"default": 5,
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"min_score": {
"default": 1,
"type": "number"
},
"person_a": {
"additionalProperties": false,
"description": "Preferences for person A",
"properties": {
"dislike_genres": {
"items": {
"type": "string"
},
"type": "array"
},
"dislike_keywords": {
"items": {
"type": "string"
},
"type": "array"
},
"mood": {
"type": "string"
},
"prefer": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"person_b": {
"additionalProperties": false,
"description": "Preferences for person B",
"properties": {
"dislike_genres": {
"$ref": "#/properties/person_a/properties/dislike_genres"
},
"dislike_keywords": {
"$ref": "#/properties/person_a/properties/dislike_keywords"
},
"mood": {
"$ref": "#/properties/person_a/properties/mood"
},
"prefer": {
"$ref": "#/properties/person_a/properties/prefer"
}
},
"type": "object"
},
"timeframe": {
"default": "tonight",
"type": "string"
}
},
"required": [
"person_a",
"person_b"
],
"type": "object"
},
"name": "tv_find_for_couple",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"count": {
"type": "number"
},
"degraded": {
"type": "boolean"
},
"fairness": {
"type": "string"
},
"freshness": {
"additionalProperties": true,
"properties": {
"epg_age_min": {
"type": [
"number",
"null"
]
},
"stale": {
"type": "boolean"
},
"streaming_age_min": {
"type": [
"number",
"null"
]
}
},
"required": [
"stale"
],
"type": "object"
},
"items": {
"items": {
"$ref": "#/properties/person_a"
},
"type": "array"
},
"min_score": {
"type": "number"
},
"person_a": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"person_b": {
"$ref": "#/properties/person_a"
},
"requested_fairness": {
"type": "string"
},
"requested_min_score": {
"type": "number"
},
"threshold_relaxed": {
"type": "boolean"
},
"timeframe_label": {
"type": "string"
},
"window": {
"additionalProperties": true,
"properties": {
"from_utc": {
"type": "string"
},
"to_utc": {
"type": "string"
}
},
"required": [
"from_utc",
"to_utc"
],
"type": "object"
}
},
"required": [
"asked_at_utc",
"timeframe_label",
"window",
"person_a",
"person_b",
"fairness",
"min_score",
"degraded",
"count",
"items",
"freshness"
],
"type": "object"
}
},
{
"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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"date": {
"default": "today",
"description": "today | tomorrow | YYYY-MM-DD (interpreted in Europe/Bucharest)",
"type": "string"
},
"exclude_news": {
"default": true,
"type": "boolean"
},
"scope": {
"default": "main",
"enum": [
"main",
"all"
],
"type": "string"
}
},
"type": "object"
},
"name": "tv_get_prime_time",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"channels": {
"items": {
"additionalProperties": true,
"properties": {
"channel_category": {
"type": [
"string",
"null"
]
},
"channel_id": {
"type": "string"
},
"channel_name": {
"type": "string"
},
"programs": {
"items": {
"additionalProperties": true,
"properties": {
"category": {
"type": [
"string",
"null"
]
},
"description": {
"type": "string"
},
"duration_min": {
"type": "number"
},
"start_local": {
"type": "string"
},
"start_utc": {
"type": "string"
},
"stop_local": {
"type": "string"
},
"stop_utc": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"title",
"start_local",
"start_utc",
"stop_local",
"stop_utc",
"duration_min"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"channel_id",
"channel_name",
"programs"
],
"type": "object"
},
"type": "array"
},
"count": {
"type": "number"
},
"date": {
"type": "string"
},
"exclude_news": {
"type": "boolean"
},
"generated_at": {
"type": [
"string",
"null"
]
},
"scope": {
"type": "string"
},
"window": {
"additionalProperties": true,
"properties": {
"from_utc": {
"type": "string"
},
"to_utc": {
"type": "string"
}
},
"required": [
"from_utc",
"to_utc"
],
"type": "object"
},
"window_local": {
"type": "string"
}
},
"required": [
"asked_at_utc",
"date",
"window_local",
"window",
"scope",
"exclude_news",
"count",
"channels"
],
"type": "object"
}
},
{
"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?\".",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"include_streaming": {
"default": true,
"description": "Also look up the title in Netflix / HBO Max / Prime Video / Disney+ / Apple TV+ catalog for Romania",
"type": "boolean"
},
"title": {
"description": "Title to look up (case/diacritic-insensitive)",
"maxLength": 200,
"minLength": 2,
"type": "string"
},
"upcoming_window_hours": {
"default": 48,
"description": "How far ahead (hours) to scan TV airings",
"maximum": 72,
"minimum": 1,
"type": "integer"
}
},
"required": [
"title"
],
"type": "object"
},
"name": "tv_get_title_details",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"streaming": {
"items": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"type": "array"
},
"streaming_count": {
"type": "number"
},
"summary": {
"type": "string"
},
"title_query": {
"type": "string"
},
"tv_airings": {
"items": {
"additionalProperties": true,
"properties": {
"channel_category": {
"type": [
"string",
"null"
]
},
"channel_id": {
"type": "string"
},
"channel_name": {
"type": "string"
},
"program": {
"additionalProperties": true,
"properties": {
"category": {
"type": [
"string",
"null"
]
},
"description": {
"type": "string"
},
"duration_min": {
"type": "number"
},
"start_local": {
"type": "string"
},
"start_utc": {
"type": "string"
},
"stop_local": {
"type": "string"
},
"stop_utc": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"title",
"start_local",
"start_utc",
"stop_local",
"stop_utc",
"duration_min"
],
"type": "object"
}
},
"required": [
"channel_id",
"channel_name",
"program"
],
"type": "object"
},
"type": "array"
},
"tv_airings_count": {
"type": "number"
},
"upcoming_window_hours": {
"type": "number"
}
},
"required": [
"title_query",
"asked_at_utc",
"upcoming_window_hours",
"tv_airings",
"tv_airings_count",
"streaming",
"streaming_count",
"summary"
],
"type": "object"
}
},
{
"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. Each event carries live_status (live / replay / unknown) with the evidence it was derived from; unknown means the EPG does not say whether the broadcast is live. Use this FIRST for questions like \"what's important to watch today?\".",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"date": {
"description": "Day to scan, YYYY-MM-DD in Europe/Bucharest. Default: today.",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"limit": {
"default": 10,
"description": "Max number of events to return",
"maximum": 25,
"minimum": 1,
"type": "integer"
},
"min_tier": {
"default": 2,
"description": "1 = only major events (World Cup, Euro, Champions League, finals); 2 = also notable ones (national-team matches, knockout games)",
"maximum": 2,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "tv_important_today",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"count": {
"type": "number"
},
"date": {
"type": "string"
},
"events": {
"items": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"type": "array"
},
"generated_at": {
"type": [
"string",
"null"
]
},
"hint": {
"type": "string"
},
"min_tier": {
"type": "number"
}
},
"required": [
"asked_at_utc",
"date",
"min_tier",
"count",
"events",
"hint"
],
"type": "object"
}
},
{
"description": "Returns the programs currently broadcasting on Romanian TV channels. Use this for \"What is on TV now?\" type questions. Default scope is the main channels; pass scope=\"all\" for every channel in the guide.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"category": {
"description": "Filter by channel category: Generaliste | Știri | Sport | Filme & Seriale | Documentare | Copii | Muzică | Altele",
"type": "string"
},
"exclude_news": {
"default": false,
"description": "Drop channels whose category is \"Știri\" (Romanian news channels)",
"type": "boolean"
},
"limit": {
"default": 15,
"description": "Max number of items to return",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"scope": {
"default": "main",
"description": "main = the main Romanian channels (PRO TV, Antena 1, Kanal D, TVR 1/2, Digi 24, etc.); all = every channel in the guide (the live count is in tv_tonight_card stats.channelsMonitored)",
"enum": [
"main",
"all"
],
"type": "string"
}
},
"type": "object"
},
"name": "tv_now_on_tv",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"count": {
"type": "number"
},
"generated_at": {
"type": [
"string",
"null"
]
},
"items": {
"items": {
"additionalProperties": true,
"properties": {
"channel_category": {
"type": [
"string",
"null"
]
},
"channel_id": {
"type": "string"
},
"channel_name": {
"type": "string"
},
"program": {
"additionalProperties": true,
"properties": {
"category": {
"type": [
"string",
"null"
]
},
"description": {
"type": "string"
},
"duration_min": {
"type": "number"
},
"start_local": {
"type": "string"
},
"start_utc": {
"type": "string"
},
"stop_local": {
"type": "string"
},
"stop_utc": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"title",
"start_local",
"start_utc",
"stop_local",
"stop_utc",
"duration_min"
],
"type": "object"
}
},
"required": [
"channel_id",
"channel_name",
"program"
],
"type": "object"
},
"type": "array"
},
"scope": {
"type": "string"
}
},
"required": [
"asked_at_utc",
"scope",
"count",
"items"
],
"type": "object"
}
},
{
"description": "Builds a TV watching plan that FILLS a window of time — either one long programme or 2-3 consecutive programmes with small gaps, ordered as a timeline. Use it when the user wants a schedule for the whole evening or a long window (3+ hours) rather than a single pick: \"plan my evening\", \"ce văd toată seara\", \"fă-mi un program pentru 20–24\". TV only (live Romanian EPG, no streaming titles); for ONE decision that may also be a streaming title, use tv_concierge. Accepts start time, duration budget, mood, and channel preferences. Output: ordered timeline + alternatives dropped + totals.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"allow_channel_switch": {
"default": true,
"type": "boolean"
},
"duration_min": {
"default": 180,
"maximum": 360,
"minimum": 30,
"type": "integer"
},
"max_gap_min": {
"default": 10,
"maximum": 30,
"minimum": 0,
"type": "integer"
},
"max_segments": {
"default": 3,
"maximum": 3,
"minimum": 1,
"type": "integer"
},
"mood": {
"type": "string"
},
"prefer": {
"items": {
"type": "string"
},
"type": "array"
},
"start": {
"default": "20:00",
"description": "Start time: \"now\" | \"HH:MM\" (Europe/Bucharest) | ISO instant",
"type": "string"
}
},
"type": "object"
},
"name": "tv_plan_evening",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"alternatives": {
"items": {
"$ref": "#/properties/plan/items"
},
"type": "array"
},
"asked_at_utc": {
"type": "string"
},
"duration_budget_min": {
"type": "number"
},
"end_utc": {
"type": "string"
},
"freshness": {
"additionalProperties": true,
"properties": {
"epg_age_min": {
"type": [
"number",
"null"
]
},
"stale": {
"type": "boolean"
},
"streaming_age_min": {
"type": [
"number",
"null"
]
}
},
"required": [
"stale"
],
"type": "object"
},
"mood": {
"type": "string"
},
"mood_label_ro": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"plan": {
"items": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"type": "array"
},
"reason": {
"type": [
"string",
"null"
]
},
"start_utc": {
"type": "string"
},
"totals": {
"additionalProperties": true,
"properties": {
"gap_min": {
"type": "number"
},
"segments": {
"type": "number"
},
"switches": {
"type": "number"
},
"total_filled_min": {
"type": "number"
}
},
"required": [
"segments",
"total_filled_min",
"gap_min",
"switches"
],
"type": "object"
}
},
"required": [
"ok",
"asked_at_utc",
"start_utc",
"end_utc",
"duration_budget_min",
"mood",
"mood_label_ro",
"plan",
"totals",
"alternatives",
"freshness"
],
"type": "object"
}
},
{
"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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"dislike_genres": {
"items": {
"type": "string"
},
"type": "array"
},
"dislike_keywords": {
"items": {
"type": "string"
},
"type": "array"
},
"include_streaming_xref": {
"default": true,
"type": "boolean"
},
"limit": {
"default": 5,
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"mood": {
"description": "Mood: obosit | vesel | concentrat | romantic | familie | captivant (also accepts tired, happy, focused, family, thrilling, etc.)",
"maxLength": 40,
"minLength": 2,
"type": "string"
},
"prefer": {
"description": "Additional channel-category preferences (additive boost)",
"items": {
"type": "string"
},
"type": "array"
},
"timeframe": {
"default": "tonight",
"description": "now | tonight | primetime | tomorrow | weekend | today | YYYY-MM-DD | ISO range \"A/B\"",
"type": "string"
}
},
"required": [
"mood"
],
"type": "object"
},
"name": "tv_recommend_by_mood",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"count": {
"type": "number"
},
"freshness": {
"additionalProperties": true,
"properties": {
"epg_age_min": {
"type": [
"number",
"null"
]
},
"stale": {
"type": "boolean"
},
"streaming_age_min": {
"type": [
"number",
"null"
]
}
},
"required": [
"stale"
],
"type": "object"
},
"generated_at": {
"type": [
"string",
"null"
]
},
"items": {
"items": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"type": "array"
},
"mood": {
"type": "string"
},
"mood_label_ro": {
"type": "string"
},
"timeframe_label": {
"type": "string"
},
"window": {
"additionalProperties": true,
"properties": {
"from_utc": {
"type": "string"
},
"to_utc": {
"type": "string"
}
},
"required": [
"from_utc",
"to_utc"
],
"type": "object"
}
},
"required": [
"asked_at_utc",
"mood",
"mood_label_ro",
"timeframe_label",
"window",
"count",
"items",
"freshness"
],
"type": "object"
}
},
{
"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ă\".",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"exclude_news": {
"default": true,
"description": "Drop news channels and news programs",
"type": "boolean"
},
"limit": {
"default": 5,
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"prefer": {
"default": [
"filme",
"documentare"
],
"description": "Preferred categories for ranking boost",
"items": {
"enum": [
"filme",
"seriale",
"documentare",
"sport",
"copii",
"muzica"
],
"type": "string"
},
"type": "array"
},
"timeframe": {
"default": "tonight",
"description": "now | tonight | primetime | tomorrow | weekend | today | YYYY-MM-DD | ISO range \"A/B\"",
"type": "string"
}
},
"type": "object"
},
"name": "tv_recommend_today",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"count": {
"type": "number"
},
"exclude_news": {
"type": "boolean"
},
"generated_at": {
"type": [
"string",
"null"
]
},
"items": {
"items": {
"additionalProperties": true,
"properties": {
"channel_category": {
"type": [
"string",
"null"
]
},
"channel_id": {
"type": "string"
},
"channel_name": {
"type": "string"
},
"program": {
"additionalProperties": true,
"properties": {
"category": {
"type": [
"string",
"null"
]
},
"description": {
"type": "string"
},
"duration_min": {
"type": "number"
},
"start_local": {
"type": "string"
},
"start_utc": {
"type": "string"
},
"stop_local": {
"type": "string"
},
"stop_utc": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"title",
"start_local",
"start_utc",
"stop_local",
"stop_utc",
"duration_min"
],
"type": "object"
},
"score": {
"type": "number"
},
"why_recommended": {
"type": "string"
}
},
"required": [
"channel_id",
"channel_name",
"program",
"score",
"why_recommended"
],
"type": "object"
},
"type": "array"
},
"prefer": {
"items": {
"type": "string"
},
"type": "array"
},
"timeframe_label": {
"type": "string"
},
"window": {
"additionalProperties": true,
"properties": {
"from_utc": {
"type": "string"
},
"to_utc": {
"type": "string"
}
},
"required": [
"from_utc",
"to_utc"
],
"type": "object"
}
},
"required": [
"asked_at_utc",
"timeframe_label",
"window",
"prefer",
"exclude_news",
"count",
"items"
],
"type": "object"
}
},
{
"description": "Search programs across all Romanian TV channels in the guide 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\".",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"category": {
"description": "Channel category: Generaliste | Știri | Sport | Filme & Seriale | Documentare | Copii | Muzică | Altele",
"type": "string"
},
"channel": {
"description": "Channel id, display name, or alias (e.g. \"PRO TV\", \"tv-pro-tv\", \"HBO\")",
"type": "string"
},
"exclude_news": {
"default": false,
"type": "boolean"
},
"limit": {
"default": 10,
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Free text to match against program title (case/diacritic-insensitive)",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"timeframe": {
"default": "now",
"description": "Natural time reference: now | tonight | tomorrow | weekend | primetime | today | YYYY-MM-DD | ISO instant | ISO range \"A/B\"",
"type": "string"
}
},
"type": "object"
},
"name": "tv_search_program",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"asked_at_utc": {
"type": "string"
},
"count": {
"type": "number"
},
"generated_at": {
"type": [
"string",
"null"
]
},
"items": {
"items": {
"additionalProperties": true,
"properties": {
"channel_category": {
"type": [
"string",
"null"
]
},
"channel_id": {
"type": "string"
},
"channel_name": {
"type": "string"
},
"match_reason": {
"type": "string"
},
"program": {
"additionalProperties": true,
"properties": {
"category": {
"type": [
"string",
"null"
]
},
"description": {
"type": "string"
},
"duration_min": {
"type": "number"
},
"start_local": {
"type": "string"
},
"start_utc": {
"type": "string"
},
"stop_local": {
"type": "string"
},
"stop_utc": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"title",
"start_local",
"start_utc",
"stop_local",
"stop_utc",
"duration_min"
],
"type": "object"
}
},
"required": [
"channel_id",
"channel_name",
"program"
],
"type": "object"
},
"type": "array"
},
"timeframe_label": {
"type": "string"
},
"window": {
"additionalProperties": true,
"properties": {
"from_utc": {
"type": "string"
},
"to_utc": {
"type": "string"
}
},
"required": [
"from_utc",
"to_utc"
],
"type": "object"
}
},
"required": [
"asked_at_utc",
"timeframe_label",
"window",
"count",
"items"
],
"type": "object"
}
},
{
"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 (a stage performance happening TODAY, else an online play; a future date only when nothing is on tonight, labelled as the next performance), cinema (box office ∩ today's real screenings, else one of today's most-screened films) — 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).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "tv_tonight_card",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"date": {
"type": "string"
},
"decision": {
"anyOf": [
{
"additionalProperties": true,
"properties": {},
"type": "object"
},
{
"type": "null"
}
]
},
"generated_at": {
"type": [
"string",
"null"
]
},
"page_url": {
"type": "string"
},
"rail": {
"additionalProperties": false,
"properties": {
"cinema": {
"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"
}
]
},
"tv": {
"anyOf": [
{
"$ref": "#/properties/decision/anyOf/0"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"stats": {
"anyOf": [
{
"$ref": "#/properties/decision/anyOf/0"
},
{
"type": "null"
}
]
}
},
"required": [
"generated_at",
"date",
"decision",
"rail",
"stats",
"page_url"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:c656d609eb18d5620a41ad385c3f8a35d3c8e36ba7666f5c638b17919f9b7fce | sha256sum