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

# Get Watch Availability

> Return the normalized where-to-watch answer for a sports entity in a bounded window, with proven or evidence-only fallback semantics.

Canonical tool name: `get_watch_availability`

Family: [Program Connectivity and Watchability Tools](/sports-mcp-server/tools/program-connectivity-and-watchability-tools)

## What this tool is best at

Return the normalized where-to-watch answer for a sports entity in a bounded window, with proven or evidence-only watchability semantics.

## Choose this tool when

* the host needs a direct answer to where, whether, or on what service/channel the user can watch a sports entity.
* Source ownership: Dedicated availability primary when provisioned, otherwise evidence-only watchability fallback

## Use something smaller or different when

* Do not use it as a substitute for deep sports detail or as a raw linkage-inspection tool when QA needs the underlying evidence graph instead.

## Inputs you need

### Plain-English prerequisites

* This tool does not require a prerequisite ID beyond the scoped inputs shown below.

### Required inputs in the public contract

| Input        | What it means                                                                                  |
| ------------ | ---------------------------------------------------------------------------------------------- |
| `entityId`   | Resolved entity ref for the sports object the user wants to watch.                             |
| `entityType` | Entity kind for `entityId`. Keep it aligned with the ref you preserved.                        |
| `timeFrom`   | Bounded window start for the watchability lookup. Match it to the user’s actual browse window. |
| `timeTo`     | Bounded window end for the watchability lookup.                                                |

### Optional inputs in the public contract

| Input      | What it means                                                                                         |
| ---------- | ----------------------------------------------------------------------------------------------------- |
| `language` | Optional BCP 47 language hint such as `en-US`. Use it when the host needs translated provider output. |

## Sequencing guidance

| Needed ID or scope | Call this first                                       | Then use                                                                                                      |
| ------------------ | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| scope              | [Tool Catalog](/sports-mcp-server/tools/tool-catalog) | Start from the smallest tool that can safely anchor the workflow, then deepen only if the user asks for more. |

## Response highlights

* `data.options[]` is the normalized watchability answer when channels or services can be grounded.
* `data.eventEvidence[]` carries fallback event evidence when the server cannot prove channel or service linkage.
* `data.linkageStatus` and `data.availabilityMode` tell the host whether the answer is proven, unresolved, or unavailable.

## Response shape

| Field                             | What it means                                                            |
| --------------------------------- | ------------------------------------------------------------------------ |
| `data.entityId / data.entityType` | Echo of the requested sports entity scope.                               |
| `data.options[]`                  | Normalized watch options when dedicated availability can prove them.     |
| `data.eventEvidence[]`            | Fallback event evidence rows when the answer cannot be proven.           |
| `data.linkageStatus`              | Terminal trust state: `proven`, `unresolved`, or `provider_unavailable`. |
| `data.availabilityMode`           | Operating mode: `dedicated`, `on_evidence`, or `none`.                   |
| `meta.limitations[]`              | Explanation of why the answer is proven, unresolved, or unavailable.     |

## Reuse next

* Reuse provider refs returned by this tool to avoid resolving the same entity again.
* Read `meta.agentHints.recommendedNextTools` and `meta.agentHints.disambiguationOptions` as non-binding host hints.

## Example requests

<Tabs>
  <Tab title="Recommended request">
    <CodeGroup>
      ```json JSON-RPC theme={null}
      {
        "jsonrpc": "2.0",
        "id": "tool-call-1",
        "method": "tools/call",
        "params": {
          "name": "get_watch_availability",
          "arguments": {
            "entityId": "EVENT_ID",
            "entityType": "event",
            "timeFrom": "2026-04-08T18:00:00Z",
            "timeTo": "2026-04-08T23:00:00Z"
          }
        }
      }
      ```

      ```bash curl theme={null}
      curl "https://sports-mcp-server.etonecarg.com/" \
        -X POST \
        -H "Authorization: Bearer $SPORTS_MCP_API_KEY" \
        -H "Accept: application/json, text/event-stream" \
        -H "Content-Type: application/json" \
        -H "mcp-protocol-version: 2025-03-26" \
        -d '{
        "jsonrpc": "2.0",
        "id": "tool-call-1",
        "method": "tools/call",
        "params": {
          "name": "get_watch_availability",
          "arguments": {
            "entityId": "EVENT_ID",
            "entityType": "event",
            "timeFrom": "2026-04-08T18:00:00Z",
            "timeTo": "2026-04-08T23:00:00Z"
          }
        }
      }'
      ```

      ```ts TypeScript theme={null}
      const payload = {
          "jsonrpc": "2.0",
          "id": "tool-call-1",
          "method": "tools/call",
          "params": {
            "name": "get_watch_availability",
            "arguments": {
              "entityId": "EVENT_ID",
              "entityType": "event",
              "timeFrom": "2026-04-08T18:00:00Z",
              "timeTo": "2026-04-08T23:00:00Z"
            }
          }
        };

      const response = await fetch("https://sports-mcp-server.etonecarg.com/", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${process.env.SPORTS_MCP_API_KEY!}`,
          Accept: "application/json, text/event-stream",
          "Content-Type": "application/json",
          "mcp-protocol-version": "2025-03-26",
        },
        body: JSON.stringify(payload),
      });

      const data = await response.json();
      console.log(JSON.stringify(data, null, 2));
      ```

      ```python Python theme={null}
      import json
      import os

      import requests

      payload = {
        "jsonrpc": "2.0",
        "id": "tool-call-1",
        "method": "tools/call",
        "params": {
          "name": "get_watch_availability",
          "arguments": {
            "entityId": "EVENT_ID",
            "entityType": "event",
            "timeFrom": "2026-04-08T18:00:00Z",
            "timeTo": "2026-04-08T23:00:00Z"
          }
        }
      }

      response = requests.post(
          "https://sports-mcp-server.etonecarg.com/",
          headers={
              "Authorization": f"Bearer {os.environ['SPORTS_MCP_API_KEY']}",
              "Accept": "application/json, text/event-stream",
              "Content-Type": "application/json",
              "mcp-protocol-version": "2025-03-26",
          },
          json=payload,
          timeout=30,
      )

      response.raise_for_status()
      print(json.dumps(response.json(), indent=2))
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Expanded request">
    <CodeGroup>
      ```json JSON-RPC theme={null}
      {
        "jsonrpc": "2.0",
        "id": "tool-call-1",
        "method": "tools/call",
        "params": {
          "name": "get_watch_availability",
          "arguments": {
            "entityId": "TEAM_ID",
            "entityType": "participant",
            "timeFrom": "2026-04-08T00:00:00Z",
            "timeTo": "2026-04-09T00:00:00Z"
          }
        }
      }
      ```

      ```bash curl theme={null}
      curl "https://sports-mcp-server.etonecarg.com/" \
        -X POST \
        -H "Authorization: Bearer $SPORTS_MCP_API_KEY" \
        -H "Accept: application/json, text/event-stream" \
        -H "Content-Type: application/json" \
        -H "mcp-protocol-version: 2025-03-26" \
        -d '{
        "jsonrpc": "2.0",
        "id": "tool-call-1",
        "method": "tools/call",
        "params": {
          "name": "get_watch_availability",
          "arguments": {
            "entityId": "TEAM_ID",
            "entityType": "participant",
            "timeFrom": "2026-04-08T00:00:00Z",
            "timeTo": "2026-04-09T00:00:00Z"
          }
        }
      }'
      ```

      ```ts TypeScript theme={null}
      const payload = {
          "jsonrpc": "2.0",
          "id": "tool-call-1",
          "method": "tools/call",
          "params": {
            "name": "get_watch_availability",
            "arguments": {
              "entityId": "TEAM_ID",
              "entityType": "participant",
              "timeFrom": "2026-04-08T00:00:00Z",
              "timeTo": "2026-04-09T00:00:00Z"
            }
          }
        };

      const response = await fetch("https://sports-mcp-server.etonecarg.com/", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${process.env.SPORTS_MCP_API_KEY!}`,
          Accept: "application/json, text/event-stream",
          "Content-Type": "application/json",
          "mcp-protocol-version": "2025-03-26",
        },
        body: JSON.stringify(payload),
      });

      const data = await response.json();
      console.log(JSON.stringify(data, null, 2));
      ```

      ```python Python theme={null}
      import json
      import os

      import requests

      payload = {
        "jsonrpc": "2.0",
        "id": "tool-call-1",
        "method": "tools/call",
        "params": {
          "name": "get_watch_availability",
          "arguments": {
            "entityId": "TEAM_ID",
            "entityType": "participant",
            "timeFrom": "2026-04-08T00:00:00Z",
            "timeTo": "2026-04-09T00:00:00Z"
          }
        }
      }

      response = requests.post(
          "https://sports-mcp-server.etonecarg.com/",
          headers={
              "Authorization": f"Bearer {os.environ['SPORTS_MCP_API_KEY']}",
              "Accept": "application/json, text/event-stream",
              "Content-Type": "application/json",
              "mcp-protocol-version": "2025-03-26",
          },
          json=payload,
          timeout=30,
      )

      response.raise_for_status()
      print(json.dumps(response.json(), indent=2))
      ```
    </CodeGroup>
  </Tab>
</Tabs>

## Related tools

### Previous-step tools

* [`list_programs_for_entity`](/sports-mcp-server/tool-reference/list_programs_for_entity)
* [`list_watchable_schedule`](/sports-mcp-server/tool-reference/list_watchable_schedule)
* [`list_live_slate`](/sports-mcp-server/tool-reference/list_live_slate)

### Next-step tools

* [`get_program_context`](/sports-mcp-server/tool-reference/get_program_context)
* [`get_event_center`](/sports-mcp-server/tool-reference/get_event_center)

### Alternative tools

* No common alternatives.

## Prompt patterns this tool fits

* Use `get_watch_availability` when the host already knows the right scope and needs this job directly.

## Common mistakes

* Expecting channels or services to appear when the response is in evidence-only fallback mode.
* Treating fallback event evidence as if it were proven where-to-watch availability.
