Sandbox
@infersports/infersports-skill

Sports odds skill for Claude Code and Codex

InferSports packages live Asian-priced football and basketball odds, scores, fair lines, and comparison tools as an agent skill. The scripts handle the API calls and de-vig math so the agent can answer with one concise line per request.

33 stars0 forksShellUpdated 3mo ago
Who it's for

Builders who want their agent to fetch live sports odds, scores, and fair lines without hand-building API calls.

What it delivers

You can ask for match status, price comparisons, or value spots and get a short, read-only answer instead of assembling the data yourself.

What it does

Twelve command verbs

Provides `today`, `events`, `digest`, `match`, `preview`, `line`, `fair`, `scoreprob`, `compare`, `scan`, `convert`, and `result`.

Read-only, keyless mode

Works without an account or API key on the free tier, and the README says it never places or sizes bets.

Packed answers for small context windows

Commands like `digest`, `preview`, `scan`, `scoreprob`, and `compare` combine multiple API reads into one capped response.

Offline fixtures for testing

`INFERSPORTS_MOCK=1` serves deterministic responses from bundled fixtures for CI or local checks.

Odds conversion and de-vig math

Converts decimal, Hong Kong, Malay, Indonesian, American, and implied probability formats, and computes fair lines.

Ambiguity and error protocol

Returns `ask:` or `ERROR:` plus `FIX:` lines so the agent can recover without guessing.

How to get it

  1. 1Run
    Read https://infersports.dev/skill.md and follow the instructions to connect to InferSports.
  2. 2Run
    /plugin marketplace add infersports/infersports-skill
    /plugin install infersports@infersports
  3. 3Run
    claude mcp add --transport http infersports https://api.infersports.dev/mcp

README

InferSports

InferSports Skill

Live Asian-priced football & basketball odds, scores, and de-vigged fair lines — packaged as an Agent Skill for Claude Code, Codex, OpenClaw, or any agent that can run a shell script.

Read-only · Keyless · 12 verbs · one line of output per answer

License Skill MCP server API docs


You ask in plain English; the agent picks a verb and relays one concise line back:

# "anything worth watching today?"
$ scripts/digest.sh --sport football --limit 3
Worth watching today (2026-06-12) — top 3 of 64
  evt_… | Brazil vs Argentina    | LIVE 1-0 1h 36 | 5 books · value
  evt_… | Mexico vs South Africa | 19:00 UTC      | 7 books
  evt_… | Korea Rep. vs Czechia  | 10:00 UTC      | 6 books

# "Polymarket has Mexico at 52¢ to beat South Africa — good price?"
$ scripts/compare.sh "Mexico vs South Africa" --prob 0.52 --outcome home --label polymarket
Mexico v South Africa — 1x2 home: sharp fair 55.6% vs polymarket 52.0% → +3.6pp (ROI +6.9%) · GOOD · de-vig pinnacle/power

# "what's the score in the Brazil game?"
$ scripts/match.sh "Brazil vs Argentina" --tz America/Sao_Paulo
Brazil vs Argentina — LIVE 1h 12 1-0.
  favorite: Brazil (61.4%)

No account, no API key, no payment. It serves two crowds equally well: people who just want to know what's worth watching tonight, and prediction-market traders (Polymarket, Kalshi) who want a sharp, de-vigged reference price before taking a side.

Why this exists

  • Asian market data, normalized. Asian handicap, totals, and 1x2 (full-time and half-time) from 7 curated books, every quote convertible between decimal, Hong Kong, Malay, Indonesian, American, and implied probability — quarter-line math handled correctly.
  • Built for small context windows. Every verb returns one line per item, capped (a busy weekend never floods the context). --detailed opts into full JSON only when you actually need it.
  • Deterministic by design. The scripts own the endpoints; the agent never hand-builds an API call, guesses a URL, or web-searches a score. Ambiguity comes back as an explicit ask: with candidates — never a silent guess.
  • Read-only, no betting advice. It reports lines, prices, and detected edges as data. It never places, recommends, or sizes a bet — and instructs the agent not to either.

Install

The one-liner (any agent)

Read https://infersports.dev/skill.md and follow the instructions to connect to InferSports.

The agent fetches the guide and picks the right surface for its host — this skill, the remote MCP server, or plain REST. Prefer an exact recipe? Use one below.

Claude Code — plugin (recommended)

/plugin marketplace add infersports/infersports-skill
/plugin install infersports@infersports

Prefer MCP? One line

claude mcp add --transport http infersports https://api.infersports.dev/mcp

The remote MCP server carries 16 tools (everything the skill does, plus per-book depth, arbitrage detection, and opening lines). Skill and MCP server coexist fine.

Any agent (Codex · OpenClaw · others) — one prompt

Paste this whole block to your agent:

Install the "InferSports" sports-odds skill for me, verify it works, then show me what to ask.

1. Find where your agent loads Agent Skills and create it if missing:
   • Claude Code → ~/.claude/skills/   (or ./.claude/skills/ for this project only)
   • OpenClaw (lobster) → ~/.openclaw/workspace/skills/
   • Codex / other → your skills (agent-skills) directory
2. Clone this repo to a temp folder:
   git clone --depth 1 https://github.com/infersports/infersports-skill /tmp/infersports-skill
3. Find the folder containing SKILL.md (it's plugins/infersports/skills/infersports) and copy
   that whole folder — named `infersports` — into your skills directory.
4. chmod +x <skills_dir>/infersports/scripts/*.sh
5. Verify offline:  INFERSPORTS_MOCK=1 <skills_dir>/infersports/scripts/today.sh --limit 3   (→ 3 demo matches)
6. Verify live (KEYLESS — no key, no signup):  <skills_dir>/infersports/scripts/today.sh --limit 3   (→ real matches)
7. Reload skills if needed, then confirm install and give me 3 example questions.

Read-only & keyless — never needs an account, API key, or payment. Needs bash, curl, python3.

No git? Swap step 2 for: download https://infersports.dev/skill.tgz and extract (tar xzf skill.tgz) so the infersports/ folder lands in your skills directory.

Requirements: bash, curl, python3 on PATH (already present on macOS/Linux). The skill talks only to the public InferSports API at https://api.infersports.dev.

The 12 verbs

VerbAnswersExample
todaywhat's on today — live and scheduled, capped; filter a competition by nametoday.sh --league "World Cup"
eventsa specific day's schedule, in your timezoneevents.sh --date 2026-06-12 --tz Asia/Shanghai --league "World Cup"
digesttoday's highlights, ranked, top-Ndigest.sh --sport football --limit 5
matchscore, favorite, kickoff for one matchmatch.sh "Brazil vs Argentina"
previewone-line brief — pre-match: favored % + line; live: score + from-here % + the pre-match opening line ("which team is stronger?")preview.sh "France vs Argentina" --tz Europe/Paris
linethe sharp consensus line + best price, any odds formatline.sh "Man City vs Arsenal" --format hk
fairde-vigged fair probabilities (the sharp reference)fair.sh "France vs Argentina" --market 1x2
scoreprobmarket-implied correct-score probabilities — the most likely scorelines, from the market itselfscoreprob.sh "Korea vs Czechia" --top 3
comparejudge an external (Polymarket/Kalshi) price vs faircompare.sh "France vs Argentina" --prob 0.52 --outcome home
scantoday's value spots — where a book beats the fair linescan.sh --market asian_handicap --min-edge 1 --limit 5
convertodds-format conversion + handicap explainerconvert.sh 2.08 decimal hk,malay,american · convert.sh --handicap -0.75
resultfinished-match score (30-day cache)result.sh "Myanmar" --date 2026-06-06

digest, preview, scan, scoreprob, and compare are packaged: each folds several API reads (and the de-vig math) into a single capped answer, so the agent doesn't burn context orchestrating the fan-out itself.

Match arguments accept a team name, "A vs B", or an evt_… id straight from today/events output. Ambiguous names (senior vs U21, two same-day fixtures) return an ask: list to pin down with --date / --sport.

What the data covers

Sportsfootball + basketball — nothing else, by design
MarketsAsian handicap · totals (over/under) · 1x2, full-time and half-time
Books7 curated bookmakers; keyless Free tier covers the core set, an isk_… key unlocks the full catalogue and higher limits
Odds formatsdecimal · Hong Kong · Malay · Indonesian · American · implied probability
Fair linespower-method de-vig over the sharp book — the reference fair, compare, and scan are built on
Results30-day rolling cache of finished-match scores

Design notes

Things the skill does that a thin API wrapper wouldn't:

  • Concise-by-default contract. One line per item, hard caps everywhere (today defaults to 20, max 50; digest ≤ 12). The skill is written for agents where every token of output competes with the user's actual task.
  • ask: / ERROR:+FIX: protocol. Ambiguity and failures come back as structured, actionable lines the agent can act on mechanically — re-run with the suggested flag, or put the choice to the user. not found is documented as a final answer, not a cue to go scrape the web.
  • Offline mode for CI. INFERSPORTS_MOCK=1 answers every verb from bundled fixtures/ — deterministic, no network. That's how you test an agent that uses this skill without flaky live data.
  • No-pick policy, enforced in the prompt. SKILL.md instructs the agent to relay numbers and detected edges as printed and to decline "which bet should I place?" — detection is information, not advice.

Repo layout

plugins/infersports/skills/infersports/
  SKILL.md          # the manifest the agent reads: verbs, rules, examples
  VERSION           # release version — sent as User-Agent infersports-skill/<version>
  scripts/          # the 12 verbs + shared _common.sh / _fmt.py
  references/       # full-api.md — the complete REST + MCP surface
  fixtures/         # offline mock responses (INFERSPORTS_MOCK=1)

Beyond the skill

The skill wraps the highest-frequency reads. The full API adds per-book odds depth, cross-book line comparison, arbitrage detection, opening-line snapshots, and the bookmaker catalogue:

Configuration (all optional)

VariableEffect
INFERSPORTS_API_KEYan isk_… key — higher rate limits, full book catalogue. Default keyless Free tier is enough for these verbs
INFERSPORTS_API_BASEoverride the API host (default https://api.infersports.dev)
INFERSPORTS_MOCK=1answer from bundled fixtures instead of the network

License

MIT — see LICENSE.

Files in the repo

Repository payload6 top-level entries
  • .claude-plugin
  • assets
  • plugins
  • .gitignore
  • LICENSE
  • README.md

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More skills

Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.

117k
1 add

Open-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)

71k
mvanhorn/
last30days-skill

AI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary

62k
Imbad0202/
academic-research-skills

Academic Research Skills for Claude Code: research → write → review → revise → finalize

48k

817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0

33k

Distilly — Distill how they think into reusable Skills for any Agent or Bot. Formerly Colleague Skill(原同事 Skill).

25k