Skip to main content
Glama

Server Details

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

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 83 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Server Listing
rotv-mcp
ChatGPT
–
Claude
–

TDQS

A3.7/5.0

Scored across 14 tools

Disambiguation3/5

Several recommendation tools overlap heavily: tv_recommend_by_mood, tv_recommend_today, tv_concierge, tv_tonight_card and tv_plan_evening all answer variations of 'what should I watch', and the descriptions spend many sentences on routing rules between them. There is also cross-over between tv_now_on_tv / tv_get_prime_time / tv_search_program (time filters 'now' and 'primetime') and between tv_get_title_details and tv_compare_options. The long disambiguation prose does help an agent choose correctly, but it is compensating for genuine boundary blur rather than describing naturally distinct tools.

Naming Consistency4/5

All 14 tools share a consistent 'tv_' prefix and snake_case, which makes the family predictable. However, the verb_noun convention is not universal: tv_concierge, tv_important_today, tv_now_on_tv and tv_tonight_card are noun/adjective phrases while the rest use verbs (check_, compare_, get_, search_, plan_, recommend_). Minor deviation, still highly readable.

Tool Count4/5

14 tools sits comfortably in the reasonable band for a domain this rich (live EPG, streaming catalog, planning, couple mode, diagnostics). Each tool addresses a recognisable use case, though the four-way recommendation family means a couple of tools could arguably be merged, pushing the set slightly over the minimum needed.

Completeness4/5

Coverage is strong across the lifecycle: discovery (search, now, prime time), decision (concierge, tonight card, mood/today recommend), planning (evening), comparison, couple compromise, explanation, and operational freshness checks. The notable gap is streaming-side browsing — there is no way to list/search the Netflix/HBO/Disney+ catalog except by exact title or incidental cross-reference, and there is no channel-listing tool despite channel-scoped queries elsewhere.

Available Tools

14 tools
tv_check_freshnessCheck data freshnessA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault
sourceNoOptional filter for which source to reportall

Output Schema

NameRequiredDescription
now_utcYes
sourcesYes
summaryYes
freshnessYes
asked_at_utcYes
overall_staleYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a safe read-only operation; the description adds concrete behavioral details about the reported metrics (last-updated time, age, next refresh, staleness condition), going well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the action and conveys all necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity, high schema and annotation coverage, and the presence of an output schema, the description adequately covers all behavioral aspects and outputs, leaving no significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one parameter, and the description reinforces meaning by listing the data sources, aligning with the enum values. It adds slight contextual value beyond the schema's description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports last-updated time, age, next refresh, and staleness for specific data sources, using strong verbs and distinguishing itself from sibling tools that focus on recommendations or schedules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives, nor does it provide context on prerequisites or when not to use it. The purpose is clear enough to infer but lacks explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_compare_optionsCompare TV options side-by-sideA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
moodNo
preferNo
optionsYesArray of 2-5 titles (string) or { title, channel? } objects to compare
upcoming_window_hoursNo

Output Schema

NameRequiredDescription
moodYes
winnerYes
optionsYes
freshnessYes
asked_at_utcYes
mood_label_roYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context: scoring against mood, default 48h window, streaming lookup, and output format (side-by-side, winner). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose. Every word is necessary; no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers most aspects: inputs (2-5 titles, mood, window), process (scoring, airing, streaming), output (breakdown, winner). Missing explanation of 'prefer' parameter. Output schema exists, so return values are handled separately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (25%). The description explains the role of mood and upcoming_window_hours, and clarifies options. However, the 'prefer' parameter is not mentioned. Overall adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (compares), resource (program titles), and specific actions (scoring, finding airing, looking up streaming). It distinguishes from sibling tools like tv_recommend_by_mood and tv_get_title_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when comparing options but does not explicitly state when to use vs alternatives, nor does it mention when not to use. With 13 sibling tools, more guidance is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_conciergePersonal Entertainment Concierge — decide for meA
Read-onlyIdempotent
Inspect

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). 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 (repeat airings of the same title are collapsed to one candidate). 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".

NameRequiredDescriptionDefault
moodNoobosit | vesel | concentrat | romantic | familie | captivant (RO/EN aliases accepted)
preferNo
windowNoExplicit window. Skips lookahead.
sourcesNo
min_ratingNoHard 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.
allow_pausesNo
risk_aversionNolow = 3 alternatives, high = nonelow
duration_hoursNoShorthand when window is absent; starts at now.
exclude_keywordsNo
max_alternativesNo
exclude_categoriesNoAnti-noise filter (default: all four).

Output Schema

NameRequiredDescription
okYes
reasonNo
windowYes
contextYes
decisionYes
freshnessYes
lookaheadYes
reasoningYes
anti_noiseYes
alternativesYes
asked_at_utcYes
sources_usedYes
best_by_sourceNo
important_todayNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/idempotent/non-destructive; the description adds substantial behavior: a built-in anti-noise filter (news/politics/reality/talkshow) that requires no manual effort, title dedup of repeat airings, opportunity-cost lookahead outside the window, and event-aware ranking boosts for major broadcasts. It also explains the best_by_source/gap_pct semantics that govern how the agent should present results — none of that is derivable from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence is well front-loaded, and the PREFER-THIS-TOOL routing sits early, but the block is bloated: the mood vocabulary is restated from the schema, the trigger-phrase list is long, and feature claims (dedup, lookahead, anti-noise, event boost) are stacked as a feature dump rather than prioritized. Dense but not wasteful to the point of harm.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, 11-parameter, nested-window tool with an output schema, the description covers the decision semantics, source coverage, and sibling routing well enough to call it correctly. Remaining shortfall is the unexplained optional filters (prefer/allow_pauses/exclude_keywords), which would matter if a user asks to steer the pick.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 55%, and the description compensates for part of that: it explains mood routing with EN aliases, the 'I have X hours' window shorthand, the anti-noise exclude_categories default, and that max_alternatives/risk_aversion control up to 3 alternatives. But 'prefer', 'allow_pauses', and 'exclude_keywords' are left entirely unexplained in both schema and description, which is a real gap for an 11-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource ('decide what to watch right now', returning ONE primary decision from TV EPG + streaming catalog) and explicitly contrasts itself with named siblings: it is a decision tool, not a ranked list like tv_recommend_by_mood / tv_recommend_today, and not a scheduler like tv_plan_evening.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit positive triggers ('decide for me', 'am 2 ore', 'alege tu'), explicit exclusions (wants the whole window filled with several programmes in sequence → tv_plan_evening; 'what is important today?' → tv_important_today), and named alternatives for browsing. The routing condition between decision vs. list vs. plan is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_explain_recommendationExplain why a program was recommendedA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
titleYesProgram title to explain
channelNoOptional channel id/name/alias to disambiguate
contextNo
start_utcNoOptional ISO start time to disambiguate

Output Schema

NameRequiredDescription
okYes
reasonNo
contextNo
subjectNo
freshnessYes
confidenceNo
fresh_statusNo
sources_usedNo
streaming_xrefNo
score_breakdownNo
extracted_genresNo
alternatives_not_pickedNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by detailing the output contents (per-component values, reasons, alternatives, etc.). It does not contradict annotations, and it provides behavioral context beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the key outputs, and ends with a usage recommendation. Every sentence is necessary and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema (not shown but implied), annotations, and 75% schema coverage. The description explains the return value in detail and states its purpose. It could mention prerequisites or that context is optional, but overall it is fairly complete for a debugging tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75% (3 of 4 parameters described). The description mentions 'in a given mood/context' which adds context for the context parameter, but does not fully detail its structure. For parameters with schema descriptions, the description adds little beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a full score breakdown for a specific program in a given mood/context, listing specific outputs. It distinguishes itself from sibling tools like tv_recommend_by_mood by focusing on explaining an existing recommendation rather than generating one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use to understand or debug a recommendation,' providing clear guidance on when to use it. It doesn't explicitly state when not to use it, but the context and sibling tool names imply alternatives for other tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_find_for_coupleFind content for a coupleA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNo
fairnessNostrict
person_aYesPreferences for person A
person_bYesPreferences for person B
min_scoreNo
timeframeNotonight
include_streaming_xrefNo

Output Schema

NameRequiredDescription
countYes
itemsYes
windowYes
degradedYes
fairnessYes
person_aYes
person_bYes
freshnessYes
min_scoreYes
asked_at_utcYes
timeframe_labelYes
threshold_relaxedNo
requested_fairnessNo
requested_min_scoreNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial behavior beyond that: the two-step fallback cascade, the response fields (requested_/effective fairness, threshold_relaxed, degraded), and the instruction to inform the user when their threshold was relaxed. That is exactly the kind of out-of-band behavior an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the purpose and then the fallback rules, with no obvious filler. It is dense but each sentence carries load; the only mild friction is the long parenthetical about scoring that could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-parameter tool with an output schema, the description covers the fallback mechanics and the key response signals (threshold_relaxed, degraded) that the agent must surface. It is nearly complete, with the only gap being the undocumented secondary parameters (limit, timeframe, include_streaming_xref).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 29% across 7 parameters, so the description must compensate. It does define fairness semantics ('min(scoreA,scoreB) >= threshold — no veto') and the min_score halving behavior, but says nothing about limit, timeframe, include_streaming_xref, or the person_a/person_b preference fields, leaving most parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with a distinguishing scope: 'Finds TV programs that satisfy two people with different moods/preferences.' This clearly separates it from single-user siblings like tv_recommend_by_mood or tv_concierge without needing to open schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description defines the operative condition for the default (fairness=strict) and the exact fallback ladder when strict yields nothing, which is real when-to-use guidance. It never names an alternative sibling (e.g. tv_recommend_by_mood for solo requests) or states when NOT to use this tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_get_prime_timePrime-time TV lineupA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
dateNotoday | tomorrow | YYYY-MM-DD (interpreted in Europe/Bucharest)today
scopeNomain
exclude_newsNo

Output Schema

NameRequiredDescription
dateYes
countYes
scopeYes
windowYes
channelsYes
asked_at_utcYes
exclude_newsYes
generated_atNo
window_localYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, destructiveHint. The description adds behavioral context: the tool returns data grouped by channel, excludes news channels by default, and interprets dates in Europe/Bucharest timezone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundant words. It front-loads the core functionality, includes example queries, and states a notable default behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main use case, time range, timezone, grouping, and default behavior. However, it does not explain the 'scope' parameter (main vs all), which is a gap. Output schema exists, so return values are handled externally.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (33%). The description mentions the default exclusion of news channels for the 'exclude_news' parameter, but does not clarify the 'scope' parameter or add format details for the 'date' parameter beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns prime-time lineup (20:00–23:00 Europe/Bucharest) for a given date, grouped by channel. It includes example queries and distinguishes from siblings by specifying a specific time range and region.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Use for queries like...' which gives clear usage context, but does not mention when not to use this tool or provide alternatives among the 14 sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_get_title_detailsLookup a title across TV and streamingA
Read-onlyIdempotent
Inspect

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+). Use for queries like "is Avatar on Netflix?", "when does Game of Thrones air next?".

NameRequiredDescriptionDefault
titleYesTitle to look up (case/diacritic-insensitive)
include_streamingNoAlso look up the title in Netflix / HBO Max / Prime Video / Disney+ catalog for Romania
upcoming_window_hoursNoHow far ahead (hours) to scan TV airings

Output Schema

NameRequiredDescription
summaryYes
streamingYes
tv_airingsYes
title_queryYes
asked_at_utcYes
streaming_countYes
tv_airings_countYes
upcoming_window_hoursYes
streaming_available_countYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is fully covered. The description adds genuinely useful scope context the annotations cannot express: the results are Romania-specific TV airings plus four named Romanian streaming catalogs. It says nothing about coverage gaps (e.g. titles absent from all sources) or result ordering, and with an output schema present the remaining burden is light, so a 3 is fair.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the sources covered, followed by illustrative examples that each earn their place by mapping to one of the two result channels. No filler or restated title text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter read tool with a full output schema, the description covers sources, region and time window adequately, so an agent can invoke it correctly. It stops short of describing how the two result sets are combined or what an empty match looks like, which is the only remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter is documented with type, bounds and default, so the baseline is 3. The description restates the default 48-hour window and lists the streaming providers, which duplicates rather than extends the include_streaming description; it adds no new semantics such as matching behavior or what happens when include_streaming is false.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("looks up") and resource ("a title") and bounds the scope precisely: upcoming Romanian TV airings within N hours plus the Romanian streaming catalog of four named providers. That is far more specific than the title alone. It does not, however, draw an explicit line against close siblings like tv_search_program, so an agent must infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Two concrete example queries ("is Avatar on Netflix?", "when does Game of Thrones air next?") make the intended use case immediately recognizable. There is no statement of when to prefer a sibling tool or when this tool is the wrong choice, which keeps it below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_important_todayToday's important broadcasts (major events)A
Read-onlyIdempotent
Inspect

What actually matters on Romanian TV today: World Cup / Euro / Champions League matches, finals, knockout games, national-team fixtures, named club derbies (tier 1) and matches between two listed top clubs (UEFA 5-year ranking top 40, Liga I champions in SuperLiga; tier 2). 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?".

NameRequiredDescriptionDefault
dateNoDay to scan, YYYY-MM-DD in Europe/Bucharest. Default: today.
limitNoMax number of events to return
min_tierNo1 = only major events (World Cup, Euro, Champions League, finals, named club derbies); 2 = also notable ones (national-team matches, knockout games, matches between two listed top clubs)

Output Schema

NameRequiredDescription
dateYes
hintYes
countYes
eventsYes
min_tierYes
asked_at_utcYes
generated_atNo
omitted_replaysNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description then adds genuinely non-obvious context: detection is keyword-based from EPG titles and descriptions, there is no structured event metadata, results carry quoted evidence, and live_status is honest about 'unknown' when the EPG is silent. That is exactly the kind of caveat an agent needs to set user expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key claim and the 'use this FIRST' instruction frame it well, and the detection-methodology caveat earns its length because it prevents the agent from treating output as ground truth. The middle sentence is long and parenthetical-heavy, pushing the tier definitions into a dense clause, so it's slightly harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value shape needn't be explained, and annotations cover the safety profile; the description fills the remaining gap (provenance of detection, live_status semantics). Minor omissions such as behavior on empty days or the date-range scope are small, but they're the only things left unstated for a 3-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and min_tier is fully enumerated in-schema with the same tier-1/tier-2 definitions the description uses, so the description adds little new parameter meaning. Baseline 3 applies; the mention of tier 1/tier 2 restates the schema rather than extending it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the resource (Romanian TV broadcasts today), the exact criteria for inclusion (World Cup/Euro/Champions League matches, finals, knockouts, national-team fixtures, named derbies, top-club matchups), and how tiers map to that. An agent knows precisely what this returns versus a generic search or now-on-TV tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this FIRST for questions like 'what's important to watch today?'" gives explicit routing and a sample query, which is strong guidance. It doesn't, however, name the sibling alternatives (tv_recommend_today, tv_tonight_card, tv_plan_evening) or state when NOT to use it, so the agent must infer the boundary itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_now_on_tvWhat is on TV right nowA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMax number of items to return
scopeNomain = 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)main
categoryNoFilter by channel category: Generaliste | Știri | Sport | Filme & Seriale | Documentare | Copii | Muzică | Altele
exclude_newsNoDrop channels whose category is "Știri" (Romanian news channels)

Output Schema

NameRequiredDescription
countYes
itemsYes
scopeYes
asked_at_utcYes
generated_atNo

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior. The only behavioral claim in the description is the default scope, which merely restates the schema default of 'main'. No permissions, snapshot/freshness behavior, or limits are added beyond structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, purpose front-loaded, no filler. The final sentence partially repeats the schema's scope default, which is the only thing keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, rich annotations, and fully documented parameters, the description covers enough for correct invocation. It could note that results are a point-in-time snapshot, which would matter given the sibling tv_check_freshness, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with enum and default values and a rich scope description, so the baseline is 3. The description's mention of scope='all' duplicates what the schema already documents and adds no new syntax or meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns the programs currently broadcasting on Romanian TV channels') with a clear present-moment scope that separates it in spirit from tv_tonight_card and tv_get_prime_time. It does not name any sibling explicitly, so the differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Use this for "What is on TV now?" type questions'), which is clear usage context. It offers no when-not guidance and never points to alternatives such as tv_search_program or tv_tonight_card, so it stops short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_plan_eveningPlan an eveningA
Read-onlyIdempotent
Inspect

Builds a TV watching plan for a window of time — either one long programme or 2-3 consecutive programmes with small gaps, ordered as a timeline. Relevance comes before coverage: only programmes scoring at least max(2, 60% of the best score in the window) are used, the same anti-noise filter as tv_concierge applies (reality / talk-show / politics / news, configurable), and uncovered minutes are reported in totals.unfilled_min + unfilled_reason, with totals.unfilled_gaps giving each gap and its actual cause (start of window before the first programme, pause between programmes, end-of-window remainder below the 30-min minimum slot, max_segments reached, or nothing above the relevance floor fitting) instead of being filled; segments running past the window carry overflow_min. 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.

NameRequiredDescriptionDefault
moodNo
startNoStart time: "now" | "HH:MM" (Europe/Bucharest) | ISO instant20:00
preferNo
max_gap_minNo
duration_minNo
max_segmentsNo
exclude_categoriesNoAnti-noise filter, same as tv_concierge (default: politica, reality, talkshow, stiri). Pass [] to allow them.
allow_channel_switchNo

Output Schema

NameRequiredDescription
okYes
moodYes
planYes
reasonNo
totalsYes
end_utcYes
freshnessYes
relevanceNo
start_utcYes
anti_noiseNo
alternativesYes
asked_at_utcYes
mood_label_roYes
duration_budget_minYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, non-destructive, idempotent, non-open-world behavior, but the description adds substantial operational detail: relevance floor formula, anti-noise category filter, unfilled-minute reporting, gap causes, overflow_min, and the 30-minute minimum slot.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose and usage guidance, and most sentences add meaningful behavioral detail. It is dense and includes some output-format detail that overlaps with the output schema, but no sentence is clearly wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex planning tool with an output schema, the description supplies everything important: scope, selection logic, anti-noise filtering, unfilled-time handling, overflow behavior, and routing to the right sibling. Return values are appropriately summarized.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description must compensate. It covers start time, duration budget, mood, channel preferences, max_segments behavior, and the configurable category filter, but leaves max_gap_min and allow_channel_switch unexplained and gives no format details for prefer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: builds a TV watching plan/timeline for a time window, with concrete behavior (one long programme or 2-3 consecutive programmes). Explicitly distinguishes itself from tv_concierge for single picks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use conditions (whole evening or long window of 3+ hours), sample user phrasing, and the alternative (tv_concierge) for single decisions or streaming titles. Also scopes to TV/live Romanian EPG only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_recommend_by_moodRecommend by moodA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
moodYesMood: obosit | vesel | concentrat | romantic | familie | captivant (also accepts tired, happy, focused, family, thrilling, etc.)
limitNo
preferNoAdditional channel-category preferences (additive boost)
timeframeNonow | tonight | primetime | tomorrow | weekend | today | YYYY-MM-DD | ISO range "A/B"tonight
dislike_genresNo
dislike_keywordsNo
include_streaming_xrefNo

Output Schema

NameRequiredDescription
moodYes
countYes
itemsYes
windowYes
freshnessYes
asked_at_utcYes
generated_atNo
mood_label_roYes
timeframe_labelYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable context: it explains the combination logic (channel category, mood-fit, time proximity, streaming cross-reference) and mentions that output includes mood_parts breakdown and freshness. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The first sentence states the core purpose, and the second adds essential details about the algorithm and output. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (mentioned but not shown) and annotations cover safety, the description covers the key aspects: mood parameter, combination factors, output structure. It could mention the Romanian context more explicitly, but it already does. It is mostly complete for the task.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 43% (only 3 of 7 params have descriptions: mood, prefer, timeframe). The description adds meaningful information for mood (lists aliases) and timeframe (explains format), but does not add semantics for limit, dislike_genres, dislike_keywords, include_streaming_xref. Baseline 3 is appropriate given moderate coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns top-N Romanian TV programs ranked for a given mood, listing exact mood values and explaining the combining factors (channel category, mood-fit, time proximity, streaming cross-reference). This distinguishes it from sibling tools like tv_recommend_today or tv_now_on_tv.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells when to use (when a mood is specified) but does not explicitly state when not to use or mention specific alternatives. However, the sibling list and the phrase 'Returns top-N Romanian TV programs ranked for a given mood' make the usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_recommend_todayRecommend something to watch on Romanian TVA
Read-onlyIdempotent
Inspect

Returns up to N ranked program recommendations for a given timeframe. Uses a deterministic scorer that rewards films / documentaries / generalist channels, penalises news, boosts programs starting within the next hour, and, between items with equal score, puts first the one whose IMDb rating (as declared by the TV guide) is higher relative to its category median (rating_signal; the rating never changes the score). Items with equal score carry tie_break saying what decided their order. Use for queries like "recommend me something for tonight", "ce e bun la TV diseară".

NameRequiredDescriptionDefault
limitNo
preferNoPreferred categories for ranking boost
timeframeNonow | tonight | primetime | tomorrow | weekend | today | YYYY-MM-DD | ISO range "A/B"tonight
exclude_newsNoDrop news channels and news programs

Output Schema

NameRequiredDescription
countYes
itemsYes
preferYes
windowYes
rankingNo
asked_at_utcYes
exclude_newsYes
generated_atNo
timeframe_labelYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, and the description adds substantial behavior beyond that: the deterministic scoring rules, the tie-break hierarchy, and the critical nuance that rating_signal only orders ties and never changes the score. It does not say what happens when no items satisfy the timeframe or when limit exceeds available results, which is the remaining behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core capability is front-loaded in the first sentence, with scoring details after. The scorer/tie-break passage is dense and slightly long, but every clause conveys behavior an agent would otherwise guess wrong about, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return structure needn't be explained, and annotations cover the safety profile; the description also clarifies what tie_break and rating_signal in the output mean. Only empty-result and timeframe edge cases are unaddressed, so the definition is close to complete for a 4-param, zero-required tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and timeframe, prefer and exclude_news all carry descriptions, so the schema does most of the work. The description only echoes limit ("up to N") and timeframe, adding nothing about acceptable timeframe syntax or how the prefer categories interact with the penalty rules. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: returns ranked program recommendations for a given timeframe. The scoring model described (films/documentaries/generalist channels, news penalised, imminent-start boost) makes clear this is a curated ranking tool, distinguishable from mood-based or couple-based siblings like tv_recommend_by_mood and tv_find_for_couple.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage phrasing in two languages ("recommend me something for tonight", "ce e bun la TV diseară"), which anchors the intended intent. It stops short of naming when NOT to use it or pointing at the alternative siblings (tv_recommend_by_mood, tv_important_today, tv_tonight_card), so there is no explicit exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_search_programSearch Romanian TV programsB
Read-onlyIdempotent
Inspect

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".

NameRequiredDescriptionDefault
limitNo
queryNoFree text to match against program title (case/diacritic-insensitive)
channelNoChannel id, display name, or alias (e.g. "PRO TV", "tv-pro-tv", "HBO")
categoryNoChannel category: Generaliste | Știri | Sport | Filme & Seriale | Documentare | Copii | Muzică | Altele
timeframeNoNatural time reference: now | tonight | tomorrow | weekend | primetime | today | YYYY-MM-DD | ISO instant | ISO range "A/B"now
exclude_newsNo

Output Schema

NameRequiredDescription
countYes
itemsYes
windowYes
asked_at_utcYes
generated_atNo
channel_matchNo
timeframe_labelYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive). The description adds the detail that the search is 'in the guide,' implying data source and freshness context, but does not disclose other behavioral traits like rate limits, result pagination, or how no-results are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and examples, and is appropriately concise. The time references sentence is slightly redundant with the schema but does not bloat the description significantly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. However, the description is incomplete regarding the limit and exclude_news parameters, and does not clarify search behavior or edge cases for a tool with six optional parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, and the description repeats the exact time reference list already present in the schema, adding no new meaning for any parameter. It also fails to document the two undocumented parameters (limit and exclude_news).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (programs across all Romanian TV channels) with multiple searchable fields. It clearly conveys the tool's scope, but does not explicitly differentiate itself from sibling tools like tv_now_on_tv or tv_get_prime_time.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides example queries that imply typical usage, but gives no explicit guidance on when to use this tool versus alternatives. The example 'what is on Antena 1 right now' overlaps with sibling tools, and the description does not clarify the distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tv_tonight_cardTonight's picks — visual card (MCP Apps)A
Read-onlyIdempotent
Inspect

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 at every EPG refresh. date_is_today compares date with the current calendar date in Romania: false means the card still carries the previous day's picks (not regenerated since local midnight); freshness.stale is then true and freshness.warning says so. In MCP Apps-capable hosts this renders as an interactive card (ui://rotv/tonight-card).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
dateYes
railYes
statsYes
decisionYes
page_urlYes
freshnessYes
generated_atYes
date_is_todayYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly/idempotent/non-destructive), it discloses regeneration cadence at EPG refresh, the meaning of `date_is_today` and the resulting `freshness.stale`/`freshness.warning` flags, and that rendering becomes an interactive card only in MCP Apps hosts. That is exactly the kind of staleness and host-dependency behavior an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and every clause carries real information, but the middle sentence is a single sprawling construction with deeply nested parentheticals (theater/cinema fallback chains) that slows parsing. Content earns its place; formatting could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Zero params, an output schema, and full annotations mean the description only needs to cover behavior — and it does: composition rules, refresh timing, staleness signaling, and host capability requirements. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing to disambiguate; baseline 4 applies. The description instead spends its space on output semantics, which is the right allocation here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete deliverable — a daily card with one importance-scored main decision plus one pick per vertical (TV, streaming, theater, cinema) — so an agent knows exactly what it returns. It does not, however, contrast itself with near-neighbours like tv_recommend_today or tv_important_today, which likely overlap in scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'what is worth watching tonight' framing implies the use case, and the staleness rule gives a calling condition, but there is no explicit when-to-use/when-not guidance and no named alternative among the 13 siblings. An agent must infer whether to call this or tv_recommend_today / tv_important_today.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedtv_important_today1 field changed
      • addedOutput schema / properties / omitted_replays
        Added value: +{
        +  "type": "number"
        +}
  2. 6 tool updates
    • Changedtv_concierge3 fields changed
      • addedOutput schema / properties / decision / properties / overflow_min
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / decision / properties / overflow_reason
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / decision / properties / tie_break
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedtv_get_title_details2 fields changed
      • addedOutput schema / properties / streaming_available_count
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "title_query",
        -  "asked_at_utc",
        -  "upcoming_window_hours",
        -  "tv_airings",
        -  "tv_airings_count",
        -  "streaming",
        -  "streaming_count",
        -  "summary"
        -]New value: +[
        +  "title_query",
        +  "asked_at_utc",
        +  "upcoming_window_hours",
        +  "tv_airings",
        +  "tv_airings_count",
        +  "streaming",
        +  "streaming_count",
        +  "streaming_available_count",
        +  "summary"
        +]
    • Changedtv_important_today1 field changed
      • changedInput schema / properties / min_tier / description
        Previous value: -"1 = only major events (World Cup, Euro, Champions League, finals); 2 = also notable ones (national-team matches, knockout games)"New value: +"1 = only major events (World Cup, Euro, Champions League, finals, named club derbies); 2 = also notable ones (national-team matches, knockout games, matches between two listed top clubs)"
    • Changedtv_plan_evening7 fields changed
      • addedInput schema / properties / exclude_categories
        Added value: +{
        +  "default": [
        +    "politica",
        +    "reality",
        +    "talkshow",
        +    "stiri"
        +  ],
        +  "description": "Anti-noise filter, same as tv_concierge (default: politica, reality, talkshow, stiri). Pass [] to allow them.",
        +  "items": {
        +    "enum": [
        +      "politica",
        +      "reality",
        +      "talkshow",
        +      "stiri"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / anti_noise
        Added value: +{
        +  "$ref": "#/properties/plan/items"
        +}
      • addedOutput schema / properties / relevance
        Added value: +{
        +  "$ref": "#/properties/plan/items"
        +}
      • addedOutput schema / properties / totals / properties / overflow_min
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / totals / properties / unfilled_gaps
        Added value: +{
        +  "items": {
        +    "$ref": "#/properties/plan/items"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / totals / properties / unfilled_min
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / totals / properties / unfilled_reason
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedtv_recommend_today4 fields changed
      • addedOutput schema / properties / items / items / properties / rating_note
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / items / items / properties / rating_signal
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / items / items / properties / tie_break
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / ranking
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "order": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "tied_items": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "order",
        +    "tied_items"
        +  ],
        +  "type": "object"
        +}
    • Changedtv_search_program1 field changed
      • addedOutput schema / properties / channel_match
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "channel_ids": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "channels": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "match": {
        +      "enum": [
        +        "exact",
        +        "approximate",
        +        "none"
        +      ],
        +      "type": "string"
        +    },
        +    "matched_by": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "query": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "query",
        +    "match",
        +    "matched_by",
        +    "channel_ids",
        +    "channels"
        +  ],
        +  "type": "object"
        +}
  3. 2 tool updates
    • Changedtv_get_title_details1 field changed
      • changedInput schema / properties / include_streaming / description
        Previous value: -"Also look up the title in Netflix / HBO Max / Prime Video / Disney+ / Apple TV+ catalog for Romania"New value: +"Also look up the title in Netflix / HBO Max / Prime Video / Disney+ catalog for Romania"
    • Changedtv_tonight_card5 fields changed
      • addedOutput schema / properties / date_is_today
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / freshness / properties / picks_age_min
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / freshness / properties / warning
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / freshness / required
        Previous value: -[
        -  "stale"
        -]New value: +[
        +  "stale",
        +  "picks_age_min",
        +  "warning"
        +]
      • changedOutput schema / required
        Previous value: -[
        -  "generated_at",
        -  "date",
        -  "decision",
        -  "rail",
        -  "stats",
        -  "page_url",
        -  "freshness"
        -]New value: +[
        +  "generated_at",
        +  "date",
        +  "date_is_today",
        +  "decision",
        +  "rail",
        +  "stats",
        +  "page_url",
        +  "freshness"
        +]
  4. 1 tool update
    • Changedtv_tonight_card2 fields changed
      • addedOutput schema / properties / freshness
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "epg_age_min": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "streaming_age_min": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "stale"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "generated_at",
        -  "date",
        -  "decision",
        -  "rail",
        -  "stats",
        -  "page_url"
        -]New value: +[
        +  "generated_at",
        +  "date",
        +  "decision",
        +  "rail",
        +  "stats",
        +  "page_url",
        +  "freshness"
        +]
  5. 2 tool updates
    • Changedtv_concierge1 field changed
      • addedInput schema / properties / min_rating / description
        Added value: +"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."
    • Changedtv_find_for_couple3 fields changed
      • addedOutput schema / properties / requested_fairness
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / requested_min_score
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / threshold_relaxed
        Added value: +{
        +  "type": "boolean"
        +}
  6. 1 tool update
    • Changedtv_concierge1 field changed
      • addedOutput schema / properties / best_by_source
        Added value: +{
        +  "$ref": "#/properties/window"
        +}
  7. 1 tool update
    • Changedtv_now_on_tv1 field changed
      • changedInput schema / properties / scope / description
        Previous value: -"main = 14 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)"New value: +"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)"
  8. 1 tool update
    • Changedtv_now_on_tv1 field changed
      • changedInput schema / properties / scope / description
        Previous value: -"main = 14 main Romanian channels (PRO TV, Antena 1, Kanal D, TVR 1/2, Digi 24, etc.); all = all 254 channels"New value: +"main = 14 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)"
  9. 1 tool update
    • Addedtv_tonight_card
  10. 2 tool updates
    • Changedtv_concierge1 field changed
      • addedOutput schema / properties / important_today
        Added value: +{
        +  "items": {
        +    "$ref": "#/properties/window"
        +  },
        +  "type": "array"
        +}
    • Addedtv_important_today
  11. 12 tool updates
    • First observedtv_check_freshness
    • First observedtv_compare_options
    • First observedtv_concierge
    • First observedtv_explain_recommendation
    • First observedtv_find_for_couple
    • First observedtv_get_prime_time
    • First observedtv_get_title_details
    • First observedtv_now_on_tv
    • First observedtv_plan_evening
    • First observedtv_recommend_by_mood
    • First observedtv_recommend_today
    • First observedtv_search_program

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server that provides Danish TV guide data, enabling AI assistants to answer queries about TV schedules, channel listings, and programme searches.
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for searching, discovering, and exploring Chinese long-form video content from WeTV and Tencent Video, enabling AI assistants to recommend dramas, variety shows, anime, and movies with play links, ratings, and episode info.
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server with 36 tools for tracking TV shows and movies, managing watchlists, and syncing ratings with Trakt.tv. It enables users to search extensive databases, check into current viewings, and receive personalized recommendations through natural language commands.
    20 npm
    5
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources