> ## Documentation Index
> Fetch the complete documentation index at: https://docs.etonecarg.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Watchability Index Engineering Guide

> How the Watchability Index team should use Sports MCP Server as the retrieval and composition layer for watchability products.

# Watchability Index Engineering Guide

This guide translates the Watchability Index product requirements into an integration plan for teams building on top of Sports MCP Server 1.4.1.

## Short version

* use Sports MCP Server as the read-only retrieval and composition layer
* use `GSD` for deep sports truth
* use the dedicated availability contract for grounded watchability
* use `On Programs` for program-first context and reverse linkage
* use `SportsEventCurrent` only to refresh already linked watch/program rows
* keep watchability scoring, market weighting, sentiment, storage, and delivery outside the MCP server

## Split responsibilities cleanly

<Tabs>
  <Tab title="What the server should do">
    * discover the right competition, participant, venue, event, or program
    * build a bounded candidate set for upcoming or live windows
    * separate competition-first schedule truth from watchable schedule truth
    * connect events to programs and programs back to sports entities
    * enrich selected events with standings, rankings, lineups, timeline, stats, odds, and media
    * preserve explicit provenance, partials, and crosswalk confidence
  </Tab>

  <Tab title="What the product stack should do">
    * scoring logic
    * weighting by market or audience
    * sentiment or editorial ranking inputs
    * persistence and warehousing
    * scheduled jobs and delivery
    * final presentation logic
  </Tab>
</Tabs>

## Recommended architecture

```mermaid theme={null}
flowchart LR
  A["Watchability jobs"] --> B["Sports MCP Server 1.4.1"]
  B --> C["GSD Lookup"]
  B --> D["On Programs / Availability"]
  B --> E["Known linked freshness only"]
  B --> F["GSD Metadata"]
  A --> G["Watchability scoring service"]
  G --> H["Ranking, weighting, and persistence"]
```

## Recommended tool map

| Product need                                             | Start with                                                                                 | Add only if needed                                                                                                                                                                                                             |
| -------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Resolve a league, team, player, venue, event, or program | [`resolve_entities`](/sports-mcp-server/tool-reference/resolve_entities)                   | [`get_competition_structure`](/sports-mcp-server/tool-reference/get_competition_structure)                                                                                                                                     |
| Build the next 14-day baseline candidate set             | [`list_watchable_schedule`](/sports-mcp-server/tool-reference/list_watchable_schedule)     | [`list_schedule`](/sports-mcp-server/tool-reference/list_schedule), [`get_competition_structure`](/sports-mcp-server/tool-reference/get_competition_structure)                                                                 |
| Add sports context behind one future event               | [`get_event_summary`](/sports-mcp-server/tool-reference/get_event_summary)                 | [`get_standings`](/sports-mcp-server/tool-reference/get_standings), [`get_rankings`](/sports-mcp-server/tool-reference/get_rankings), [`get_participant_profile`](/sports-mcp-server/tool-reference/get_participant_profile)   |
| Build a live candidate set                               | [`list_live_slate`](/sports-mcp-server/tool-reference/list_live_slate)                     | [`get_event_center`](/sports-mcp-server/tool-reference/get_event_center), [`get_event_timeline`](/sports-mcp-server/tool-reference/get_event_timeline), [`get_event_stats`](/sports-mcp-server/tool-reference/get_event_stats) |
| Link events to actual programs                           | [`list_programs_for_entity`](/sports-mcp-server/tool-reference/list_programs_for_entity)   | [`get_watch_availability`](/sports-mcp-server/tool-reference/get_watch_availability), [`get_program_context`](/sports-mcp-server/tool-reference/get_program_context)                                                           |
| QA a program-first sports tile                           | [`list_entities_for_program`](/sports-mcp-server/tool-reference/list_entities_for_program) | [`get_program_context`](/sports-mcp-server/tool-reference/get_program_context)                                                                                                                                                 |
| Add visuals to a promoted rail                           | [`get_media_assets`](/sports-mcp-server/tool-reference/get_media_assets)                   | [`get_event_center`](/sports-mcp-server/tool-reference/get_event_center)                                                                                                                                                       |

## Recommended operating loops

<Tabs>
  <Tab title="Pre-event baseline generation">
    1. Call [`list_watchable_schedule`](/sports-mcp-server/tool-reference/list_watchable_schedule) for the next bounded window.
    2. Call [`list_schedule`](/sports-mcp-server/tool-reference/list_schedule) only if the scoring job also needs competition-first rows.
    3. For selected candidates, fetch [`get_event_summary`](/sports-mcp-server/tool-reference/get_event_summary).
    4. Add standings or rankings only where the scoring model truly needs them.
  </Tab>

  <Tab title="Live update loop">
    1. Poll [`list_live_slate`](/sports-mcp-server/tool-reference/list_live_slate) on a bounded cadence.
    2. Deepen only the top events with [`get_event_timeline`](/sports-mcp-server/tool-reference/get_event_timeline) or [`get_event_stats`](/sports-mcp-server/tool-reference/get_event_stats).
    3. Use [`get_watch_availability`](/sports-mcp-server/tool-reference/get_watch_availability) only when the product needs to confirm current watchability.
  </Tab>

  <Tab title="Program-first debugging">
    1. Start from [`list_entities_for_program`](/sports-mcp-server/tool-reference/list_entities_for_program).
    2. Deepen with [`get_program_context`](/sports-mcp-server/tool-reference/get_program_context).
    3. Inspect `crosswalkConfidence`, `sources`, `partial`, and `limitations` before deciding the mapping is wrong.
  </Tab>
</Tabs>

## Practical integration rules

* treat schedule as a dual-source domain
* keep candidate selection watchability-led and event enrichment GSD-led
* keep scoring outside the server
* preserve `sources`, `crosswalkConfidence`, `partial`, and `limitations` in your scoring pipeline

## Read this next

* [Dual-Source Doctrine](/sports-mcp-server/concepts/dual-source-doctrine)
* [What Else Should I Watch?](/sports-mcp-server/prompt-to-tool-mapping/what-else-should-i-watch)
* [Tool Catalog](/sports-mcp-server/tools/tool-catalog)
