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

# Quickstart

> Make your first successful Sports MCP Server calls with a bounded, source-aware integration path.

# Quickstart

The fastest path to a successful integration is:

1. resolve scope only when the prompt is ambiguous
2. choose whether the job is competition-first or availability-first
3. deepen only when the user actually needs more detail

## Pick the right first path

<Tabs>
  <Tab title="Unknown IDs">
    Start with `resolve_entities` when the prompt is fuzzy and your host does not yet know which competition, participant, venue, or program the user means.

    <CodeGroup>
      ```json JSON-RPC theme={null}
      {
        "jsonrpc": "2.0",
        "id": "resolve-1",
        "method": "tools/call",
        "params": {
          "name": "resolve_entities",
          "arguments": {
            "query": "Premier League",
            "entityType": "competition",
            "resolutionProfile": "balanced",
            "limit": 5
          }
        }
      }
      ```

      ```bash curl theme={null}
      curl "https://sports-mcp-server.etonecarg.com/" \
        -X POST \
        -H "Authorization: Bearer $SPORTS_MCP_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
        "jsonrpc": "2.0",
        "id": "resolve-1",
        "method": "tools/call",
        "params": {
          "name": "resolve_entities",
          "arguments": {
            "query": "Premier League",
            "entityType": "competition",
            "limit": 5
          }
        }
      }'
      ```

      ```ts TypeScript theme={null}
      const payload = {
        jsonrpc: "2.0",
        id: "resolve-1",
        method: "tools/call",
        params: {
          name: "resolve_entities",
          arguments: {
            query: "Premier League",
            entityType: "competition",
            resolutionProfile: "balanced",
            limit: 5,
          },
        },
      };

      const response = await fetch("https://sports-mcp-server.etonecarg.com/", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${process.env.SPORTS_MCP_API_KEY!}`,
          "Content-Type": "application/json",
        },
        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": "resolve-1",
          "method": "tools/call",
          "params": {
              "name": "resolve_entities",
              "arguments": {
                  "query": "Premier League",
                  "entityType": "competition",
                  "resolutionProfile": "balanced",
                  "limit": 5,
              },
          },
      }

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

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

  <Tab title="Known competition or participant">
    Skip resolution when your host already has a stable provider ref.

    Choose the next call by job:

    * use [`list_schedule`](/sports-mcp-server/tool-reference/list_schedule) when the question is about the sports calendar
    * use [`list_watchable_schedule`](/sports-mcp-server/tool-reference/list_watchable_schedule) when the question is about what can be watched
    * use [`get_competition_hub`](/sports-mcp-server/tool-reference/get_competition_hub) when the product needs one coherent competition surface
  </Tab>
</Tabs>

## Then choose the right schedule path

<Tabs>
  <Tab title="Competition-first schedule truth">
    Use this when the user is asking about fixtures, rounds, matchups, or the sports calendar itself.

    <CodeGroup>
      ```json JSON-RPC theme={null}
      {
        "jsonrpc": "2.0",
        "id": "schedule-1",
        "method": "tools/call",
        "params": {
          "name": "list_schedule",
          "arguments": {
            "competitionId": "LEAGUE_ID",
            "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 "Content-Type: application/json" \
        -d '{
        "jsonrpc": "2.0",
        "id": "schedule-1",
        "method": "tools/call",
        "params": {
          "name": "list_schedule",
          "arguments": {
            "competitionId": "LEAGUE_ID",
            "timeFrom": "2026-04-08T00:00:00Z",
            "timeTo": "2026-04-09T00:00:00Z"
          }
        }
      }'
      ```

      ```ts TypeScript theme={null}
      const payload = {
        jsonrpc: "2.0",
        id: "schedule-1",
        method: "tools/call",
        params: {
          name: "list_schedule",
          arguments: {
            competitionId: "LEAGUE_ID",
            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!}`,
          "Content-Type": "application/json",
        },
        body: JSON.stringify(payload),
      });

      console.log(await response.json());
      ```

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

      import requests

      payload = {
          "jsonrpc": "2.0",
          "id": "schedule-1",
          "method": "tools/call",
          "params": {
              "name": "list_schedule",
              "arguments": {
                  "competitionId": "LEAGUE_ID",
                  "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']}"},
          json=payload,
          timeout=30,
      )
      response.raise_for_status()
      print(response.json())
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Availability-first watchability">
    Use this when the user is asking what is on, what can be watched, or what is live.

    <CodeGroup>
      ```json JSON-RPC theme={null}
      {
        "jsonrpc": "2.0",
        "id": "watchable-1",
        "method": "tools/call",
        "params": {
          "name": "list_watchable_schedule",
          "arguments": {
            "competitionId": "ON_COMPETITION_GID",
            "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 "Content-Type: application/json" \
        -d '{
        "jsonrpc": "2.0",
        "id": "watchable-1",
        "method": "tools/call",
        "params": {
          "name": "list_watchable_schedule",
          "arguments": {
            "competitionId": "ON_COMPETITION_GID",
            "timeFrom": "2026-04-08T00:00:00Z",
            "timeTo": "2026-04-09T00:00:00Z"
          }
        }
      }'
      ```

      ```ts TypeScript theme={null}
      const payload = {
        jsonrpc: "2.0",
        id: "watchable-1",
        method: "tools/call",
        params: {
          name: "list_watchable_schedule",
          arguments: {
            competitionId: "ON_COMPETITION_GID",
            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!}`,
          "Content-Type": "application/json",
        },
        body: JSON.stringify(payload),
      });

      console.log(await response.json());
      ```

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

      import requests

      payload = {
          "jsonrpc": "2.0",
          "id": "watchable-1",
          "method": "tools/call",
          "params": {
              "name": "list_watchable_schedule",
              "arguments": {
                  "competitionId": "ON_COMPETITION_GID",
                  "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']}"},
          json=payload,
          timeout=30,
      )
      response.raise_for_status()
      print(response.json())
      ```
    </CodeGroup>
  </Tab>
</Tabs>

## Open a single event only when needed

Use [`get_event_center`](/sports-mcp-server/tool-reference/get_event_center) when the product truly benefits from one coherent bundle.

<CodeGroup>
  ```json JSON-RPC theme={null}
  {
    "jsonrpc": "2.0",
    "id": "event-1",
    "method": "tools/call",
    "params": {
      "name": "get_event_center",
      "arguments": {
        "eventId": "MATCH_ID",
        "timeFrom": "2026-04-08T18:00:00Z",
        "timeTo": "2026-04-08T23:00:00Z",
        "includeLineups": true,
        "includeTimeline": true,
        "includeStats": true,
        "includeWatchOptions": true
      }
    }
  }
  ```

  ```bash curl theme={null}
  curl "https://sports-mcp-server.etonecarg.com/" \
    -X POST \
    -H "Authorization: Bearer $SPORTS_MCP_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
    "jsonrpc": "2.0",
    "id": "event-1",
    "method": "tools/call",
    "params": {
      "name": "get_event_center",
      "arguments": {
        "eventId": "MATCH_ID",
        "timeFrom": "2026-04-08T18:00:00Z",
        "timeTo": "2026-04-08T23:00:00Z",
        "includeLineups": true,
        "includeTimeline": true,
        "includeStats": true,
        "includeWatchOptions": true
      }
    }
  }'
  ```

  ```ts TypeScript theme={null}
  const payload = {
    jsonrpc: "2.0",
    id: "event-1",
    method: "tools/call",
    params: {
      name: "get_event_center",
      arguments: {
        eventId: "MATCH_ID",
        timeFrom: "2026-04-08T18:00:00Z",
        timeTo: "2026-04-08T23:00:00Z",
        includeLineups: true,
        includeTimeline: true,
        includeStats: true,
        includeWatchOptions: true,
      },
    },
  };

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

  console.log(await response.json());
  ```

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

  import requests

  payload = {
      "jsonrpc": "2.0",
      "id": "event-1",
      "method": "tools/call",
      "params": {
          "name": "get_event_center",
          "arguments": {
              "eventId": "MATCH_ID",
              "timeFrom": "2026-04-08T18:00:00Z",
              "timeTo": "2026-04-08T23:00:00Z",
              "includeLineups": True,
              "includeTimeline": True,
              "includeStats": True,
              "includeWatchOptions": True,
          },
      },
  }

  response = requests.post(
      "https://sports-mcp-server.etonecarg.com/",
      headers={"Authorization": f"Bearer {os.environ['SPORTS_MCP_API_KEY']}"},
      json=payload,
      timeout=30,
  )
  response.raise_for_status()
  print(response.json())
  ```
</CodeGroup>

## Quick rules

* Keep windows bounded.
* Preserve provider refs exactly as they came back.
* Treat `partial`, `missingSections`, and `limitations` as first-class workflow signals.
* Prefer atomic tools unless the product clearly benefits from a hybrid bundle.

## Read this next

* [Connect and Call Tools](/sports-mcp-server/getting-started/connect-and-call-tools)
* [Dual-Source Doctrine](/sports-mcp-server/concepts/dual-source-doctrine)
* [Tool Catalog](/sports-mcp-server/tools/tool-catalog)
