> ## 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 Competition Hub

> Return one compact competition bundle with structure, schedule, standings, ranking refs, and optional watchability.

Canonical tool name: `get_competition_hub`

Family: [Hybrid Bundle Tools](/sports-mcp-server/tools/hybrid-bundle-tools)

## What this tool is best at

Return structure, schedule, standings, rankings, and optional watchable rail for one competition scope.

## Choose this tool when

* the product needs one coherent competition surface instead of stitching multiple calls together.
* Source ownership: GSD Lookup primary, availability overlay optional

## Use something smaller or different when

* the host only needs a single atomic section like standings or a single schedule list.

## 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                                                                                                                                                                   |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `timeFrom` | Bounded window start. Use an ISO date or timestamp that matches the user’s browse moment or watchability horizon. Some tools require this field as part of the public contract. |
| `timeTo`   | Bounded window end. Keep it tight enough that the request still represents one real product moment. Some tools require this field as part of the public contract.               |

### Optional inputs in the public contract

| Input                 | What it means                                                                                                                 |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `competitionId`       | Competition ref for the selected competition scope. Use the best provider-facing ref you preserved from the resolving step.   |
| `competitionSeasonId` | Season-specific competition ref when the UX is centered on one season rather than the broader competition.                    |
| `includeSections`     | Optional section allow-list for bundle tools. Use it when the host wants one composed tool but still needs a bounded payload. |
| `rowLimit`            | Optional cap for repeated rows returned inside bundles such as hubs or event-center watchability sections.                    |
| `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                                                                                                            |
| ------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- |
| competition scope  | [`resolve_entities`](/sports-mcp-server/tool-reference/resolve_entities) | Carry the best provider ref into `get_competition_hub`, then branch into atomic tools only if the user drills down. |

## Response highlights

* Return structure, schedule, standings, rankings, and optional watchable rail for one competition scope.

## Response shape

| Field                                                            | What it means                                                              |
| ---------------------------------------------------------------- | -------------------------------------------------------------------------- |
| `data.structure`                                                 | Competition structure or season structure block.                           |
| `data.items[]`                                                   | Bounded schedule preview rows.                                             |
| `data.standings / data.standingsRows[] / data.standingsGroups[]` | Standings payload plus normalized preview rows and grouped slices.         |
| `data.rankingRefs`                                               | Actionable `overallRefs` and `classificationRefs` for later ranking calls. |
| `data.rankingPreview[]`                                          | Preview leaderboard rows chosen from the best non-empty ranking selection. |
| `data.watchability[]`                                            | Optional bounded watchability rail for the selected competition scope.     |
| `data.watchabilityAvailabilityMode`                              | Overall watchability mode for the competition hub preview.                 |

## 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_competition_hub",
          "arguments": {
            "competitionId": "LEAGUE_ID",
            "timeFrom": "2026-04-08",
            "timeTo": "2026-04-09"
          }
        }
      }
      ```

      ```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_competition_hub",
          "arguments": {
            "competitionId": "LEAGUE_ID",
            "timeFrom": "2026-04-08",
            "timeTo": "2026-04-09"
          }
        }
      }'
      ```

      ```ts TypeScript theme={null}
      const payload = {
          "jsonrpc": "2.0",
          "id": "tool-call-1",
          "method": "tools/call",
          "params": {
            "name": "get_competition_hub",
            "arguments": {
              "competitionId": "LEAGUE_ID",
              "timeFrom": "2026-04-08",
              "timeTo": "2026-04-09"
            }
          }
        };

      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_competition_hub",
          "arguments": {
            "competitionId": "LEAGUE_ID",
            "timeFrom": "2026-04-08",
            "timeTo": "2026-04-09"
          }
        }
      }

      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_competition_hub",
          "arguments": {
            "competitionSeasonId": "COMPETITION_SEASON_ID",
            "timeFrom": "2026-04-08T00:00:00Z",
            "timeTo": "2026-04-15T00:00:00Z",
            "language": "en-US"
          }
        }
      }
      ```

      ```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_competition_hub",
          "arguments": {
            "competitionSeasonId": "COMPETITION_SEASON_ID",
            "timeFrom": "2026-04-08T00:00:00Z",
            "timeTo": "2026-04-15T00:00:00Z",
            "language": "en-US"
          }
        }
      }'
      ```

      ```ts TypeScript theme={null}
      const payload = {
          "jsonrpc": "2.0",
          "id": "tool-call-1",
          "method": "tools/call",
          "params": {
            "name": "get_competition_hub",
            "arguments": {
              "competitionSeasonId": "COMPETITION_SEASON_ID",
              "timeFrom": "2026-04-08T00:00:00Z",
              "timeTo": "2026-04-15T00:00:00Z",
              "language": "en-US"
            }
          }
        };

      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_competition_hub",
          "arguments": {
            "competitionSeasonId": "COMPETITION_SEASON_ID",
            "timeFrom": "2026-04-08T00:00:00Z",
            "timeTo": "2026-04-15T00:00:00Z",
            "language": "en-US"
          }
        }
      }

      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

* [`resolve_entities`](/sports-mcp-server/tool-reference/resolve_entities)
* [`get_competition_structure`](/sports-mcp-server/tool-reference/get_competition_structure)
* [`list_schedule`](/sports-mcp-server/tool-reference/list_schedule)

### Next-step tools

* [`get_standings`](/sports-mcp-server/tool-reference/get_standings)
* [`get_rankings`](/sports-mcp-server/tool-reference/get_rankings)
* [`list_watchable_schedule`](/sports-mcp-server/tool-reference/list_watchable_schedule)

### Alternative tools

* No common alternatives.

## Prompt patterns this tool fits

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

## Common mistakes

* Treating it like a compare tool. For comparisons, call the hub multiple times and compare in the client or agent.
