---
name: infersports
description: Live football & basketball odds and scores from InferSports — who's favored, the live score, today's matches and what's worth watching, a specific day's schedule (in your timezone), a one-line pre-match brief, one normalized sharp betting line, the sharp de-vigged fair probability, whether an external prediction-market (Polymarket/Kalshi) price is good vs that fair line, today's value spots (where a book beats the sharp fair line), odds-format conversion, and finished-match results. Use whenever the user asks about a match, the score, who's winning or favored, kickoff time, what's on or worth watching today, the fixtures on a specific day, a pre-match preview, a betting line or Asian handicap, the fair/de-vigged odds, whether a Polymarket/Kalshi price is fair or good, where today's value/edges are, odds in another format, or a past result. Read-only; keyless, no account or API key needed.
---

# InferSports odds & scores

Live Asian-priced football and basketball odds + scores, over the InferSports REST API.
**Read-only. Keyless (Free tier) — no setup.** Output is **CONCISE by default** (one short line per
item) to stay cheap on a small context window; add `--detailed` for full JSON only when you truly need it.

**Scope: football and basketball only.** InferSports carries no other sport. A question about any other
sport (baseball, tennis, …) has no answer here — say so; it is not a cue to look elsewhere.

## Golden rule (determinism)
**Answer by running the bundled scripts below. Never fetch a URL yourself, never guess an endpoint,
never hand-build an API call, and never web-search for a score, line, or result — this skill is the
source of truth for odds and scores.** The scripts hold the correct fixed endpoints; you only pick the
verb and pass arguments. Each prints a compact, ready-to-read line. If a script returns `ambiguous` or
`not found`, **that is the answer**: surface the `ask:` / alternatives to the user, or re-run with
`--date` / `--sport` / a more specific name — do **not** go looking elsewhere.

## Report the numbers, never a pick (read-only)
InferSports is **read-only and never recommends a bet — and neither do you when relaying it.** Give the
line / score / odds / value exactly as the script printed them. Do **NOT** add a pick of your own, a
lean, "best play", "I'd take…", or any betting suggestion — **even if the user asks "should I bet?" or
"which bet?"** For those, give the data and a plain "the call is yours." `scan.sh`, `line.sh` and
`compare.sh` surface where a price beats the sharp **de-vigged fair** line — that detected edge is
*information* (detection only), so relay it as printed, but never turn it into advice or a recommended side.

## The eleven verbs
Run from this skill's directory. All read-only and safe to repeat. Several **package several reads into one
ready-to-read answer**: `preview.sh` (one-match brief), `digest.sh` (today's highlights), `scan.sh`
(today's value) and `compare.sh` (judge an external price) — the fan-out / de-vig happens for you; you get
a capped, concise result.

| The user asks… | Run |
|---|---|
| What games are on today? | `scripts/today.sh [--sport football\|basketball] [--status live\|scheduled\|finished] [--tz Asia/Shanghai] [--limit N]` |
| What's on a specific day? / this Friday / June 12 in my timezone | `scripts/events.sh --date YYYY-MM-DD [--tz Asia/Shanghai] [--sport football\|basketball] [--status live\|scheduled\|finished] [--limit N]` |
| What's worth watching today? / today's highlights | `scripts/digest.sh [--sport football\|basketball] [--limit N(<=12)] [--status live\|scheduled\|finished]` |
| Who's favored? / What's the score? / When do they play? | `scripts/match.sh "<team, A vs B, or evt_… id>" [--tz Asia/Shanghai]` |
| A quick pre-match brief (favored + sharp line + kickoff, one line) | `scripts/preview.sh "<team, A vs B, or evt_… id>" [--tz Asia/Shanghai] [--sport] [--date YYYY-MM-DD]` |
| What's the sharp line / handicap? | `scripts/line.sh "<team, A vs B, or evt_… id>" [--market asian_handicap\|1x2\|totals] [--format hk\|malay\|…] [--sport] [--date YYYY-MM-DD]` |
| What's the sharp **fair** (de-vigged) probability? / the reference to check a price against | `scripts/fair.sh "<team, A vs B, or evt_… id>" [--market 1x2\|asian_handicap\|totals] [--period] [--sport] [--date]` |
| Is my Polymarket/Kalshi (external) price good? / is this prediction-market price fair? | `scripts/compare.sh "<team, A vs B, or evt_… id>" --prob <0..1> [--outcome home\|draw\|away\|over\|under] [--market 1x2\|asian_handicap\|totals] [--label polymarket]` |
| Where's the value today? / today's edges | `scripts/scan.sh [--sport football\|basketball] [--market 1x2\|asian_handicap\|totals] [--min-edge PCT] [--limit N] [--status live\|scheduled\|finished]` |
| Convert odds / explain a handicap | `scripts/convert.sh <value> <from> <to[,to2,…]>`  ·  `scripts/convert.sh --handicap -0.75` |
| What was the score of a finished match? | `scripts/result.sh "<team>" [--date YYYY-MM-DD]`  ·  `scripts/result.sh --id evt_…` |

## How to chain them (cheaply)
1. Broad question ("what's on today?") → `today.sh`; a **specific day** ("what's on June 12?",
   "this Friday") → `events.sh --date YYYY-MM-DD` (add `--tz` so the day is your local day, not UTC).
   Both return **one line per match, capped**, each starting with an `evt_…` id.
2. Drill into ONE match → `match.sh` (casual: score/favored) or `line.sh` (betting). Pass **either** the
   team name **or** the `evt_…` id straight from `today.sh` — both work (the id is resolved for you).
   If a *name* is ambiguous (senior vs U21, two same-day fixtures), pin it with `--date YYYY-MM-DD`
   and/or `--sport`, or use the more specific name (e.g. `"Estonia U21"`). A date written into the
   query (e.g. `"Estonia vs Lithuania 2026-06-07"`) is understood too.
3. `today.sh` is **capped** (default 20, max 50) so a busy weekend never floods your context. If you
   see "more exist", **narrow** with `--sport/--status/--league`, or jump straight to `match.sh "<team>"`.

## Examples
```
scripts/match.sh "Brazil vs Argentina" --tz America/Sao_Paulo
# → Brazil vs Argentina — LIVE 1h 12 1-0.
#   favorite: Brazil (61.4%)

scripts/line.sh "Man City vs Arsenal" --format hk
# → Man City vs Arsenal — consensus AH home -0.5; best home 1.08 …; fair 1.99/2.01.

scripts/convert.sh 2.08 decimal hk,malay,american,probability
# → decimal=2.08 hk=1.08 malay=-0.926 american=108 probability=0.4808

scripts/digest.sh --sport football --limit 5
# → Worth watching today (2026-06-08) — top 5 of 75
#   evt_… | A v B | LIVE 1-0 1h 36 | 5 books · value
#   evt_… | C v D | 13:00 UTC | 7 books

scripts/preview.sh "France vs Argentina" --tz Europe/Paris
# → France vs Argentina — France favored (84.0%) · AH -2.25 · kicks off 21:10 Europe/Paris

scripts/scan.sh --sport football --market asian_handicap --min-edge 1 --limit 5
# → Value scan 2026-06-08 — 5 shown (scanned 76)
#   evt_… | A v B | sbobet AH -1 home @2.14 | fair 2.08 | +2.9% | scheduled
#   Detection only — the edge is information, not a pick.

scripts/compare.sh "France vs Argentina" --prob 0.52 --outcome home --label polymarket
# → France v Argentina — 1x2 home: sharp fair 55.6% vs polymarket 52.0% → +3.6pp (ROI +6.9%) · GOOD · de-vig pinnacle/power
#   ⚠ 1x2 fair = regulation 90-min … (caveats) ;  Detection only — the call is yours.
#   (You pre-net the prediction-market price for its fee/spread; we never ingest that data.)

scripts/fair.sh "France vs Argentina"
# → France v Argentina — sharp fair (1x2): home 55.6% / draw 28.2% / away 22.5% · de-vig pinnacle

scripts/today.sh --status live --sport football --limit 15
scripts/result.sh "Myanmar" --date 2026-06-06

scripts/events.sh --date 2026-06-12 --tz Asia/Shanghai --sport football
# → Events 2026-06-12 (Asia/Shanghai) — 2 shown
#   evt_… | Mexico vs South Africa — Kicks off 03:00 Asia/Shanghai on Jun 12.
#   evt_… | Korea Republic vs Czechia — Kicks off 10:00 Asia/Shanghai on Jun 12.
```

## Reading the output
- `ask: …` with a few `evt_… | Home vs Away` lines = the fixture was **ambiguous**. Put the question
  to the user (or use their hint) and re-run with the chosen team / `--date` / `--sport`. **Do not
  guess, and do not web-search instead.**
- `ERROR: …` then `FIX: …` = do exactly what FIX says; it is the repair step.
- `not found` = the match isn't live/scheduled, isn't in the 30-day results cache, **or the sport
  isn't covered** (football + basketball only — baseball/tennis/etc. return not found). Treat it as a
  **final answer**: say plainly it isn't in InferSports (you may suggest `today.sh` for football/basketball).
  Do **not** web-search it or quote odds from another source — this skill speaks only for InferSports.

## What this skill does NOT do
It wraps the **highest-frequency** reads plus two packaged scans (`preview.sh`, `scan.sh`). For
**arbitrage** detection, opening-line (初盘) movement, full **per-book** breakdowns, or the bookmaker
catalogue, see [`references/full-api.md`](references/full-api.md) — the full REST docs and the 16-tool
MCP server. (`scan.sh` already gives today's **value** top-N; the full API adds per-book depth and arb.)
**InferSports is informational and read-only — it never places, recommends, or sizes a bet.**

## Config (all optional)
- `INFERSPORTS_API_KEY` — an `isk_…` key to raise rate limits / unlock the sharp book. Default keyless = Free tier (enough for these verbs).
- `INFERSPORTS_API_BASE` — override the API host (default `https://api.infersports.dev`).
- `INFERSPORTS_MOCK=1` — answer from bundled `fixtures/` instead of the network (offline, deterministic; for testing the skill).
