Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Esports data — Dota 2 (OpenDota) and League of Legends esports (Leaguepedia). Pro matches, tournaments, teams, and structured LoL competitive data. Use when: user asks about Dota 2 pro matches/teams/leagues, or LoL esports tournaments/rosters/results. Don't use when: user asks about esports betting/odds — use the `kalshi` (get_esports_odds) or `polymarket` (get_esports_events) skills (no keyless bookmaker-odds source exists). Don't use for non-Dota/LoL titles (only Dota 2 and LoL are covered).
.claude/skills/machina-sports-esports/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | -35% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -36% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -24% | 0% |
Keyless, public sources. No API key, no signup.
api.opendota.com). Real JSON. Free tier ~60 req/min.lol.fandom.com). Structuredrows. CC-BY-SA — attribute Leaguepedia when you reuse the data.
in-body error (Leaguepedia API error: ...) on an HTTP 200 — not a 4xx. Results are cached ~30 min; don't hammer it.
implied-probability signals, use kalshi get_esports_odds --game=cs2 or polymarket get_esports_events.
CLI:
bashsports-skills esports get_pro_matches --limit=10 sports-skills esports get_pro_teams --limit=10 sports-skills esports get_leagues --tier=premium sports-skills esports get_lol_tournaments --region=Korea --limit=5 sports-skills esports lol_cargo_query --tables=Teams --fields=Name,Region --limit=5
Python:
pythonfrom sports_skills import esports esports.get_pro_matches(limit=10) esports.get_lol_tournaments(region="Brazil")
| Command | Description | |---|---| | get_pro_matches | Recent Dota 2 professional matches (OpenDota) | | get_leagues | Dota 2 leagues/tournaments, filter by tier (OpenDota) | | get_pro_teams | Top Dota 2 teams by rating (OpenDota) | | get_match | Detailed Dota 2 match by id (OpenDota) | | get_lol_tournaments | Recent LoL esports tournaments (Leaguepedia) | | lol_cargo_query | Raw Leaguepedia Cargo query (any table/fields) |
lol_cargo_query needs tables + fields. Common tables (fields vary — verify with a small query first): Tournaments (Name, DateStart, DateEnd, League, Region, Prizepool), MatchSchedule (Team1, Team2, Winner, DateTime_UTC, BestOf), ScoreboardGames, Players, Teams. Full schema: <https://lol.fandom.com/wiki/Special:CargoTables>.
Leaguepedia API error: You've exceeded your rate limit → you're beingthrottled. Wait and retry; the connector caches for ~30 min to help.
matches/teams from OpenDota → transient; OpenDota is volunteer-runbest-effort infra with no SLA. Retry.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 11,575 | 6,031 | -48% | 1 | 1 | 0% | 1,456 | 1,188 | -18% | 0 | 0 | — |
case-02 | fail→fail | 6,654 | 1,738 | -74% | 1 | 1 | 0% | 1,393 | 902 | -35% | 0 | 0 | — |
case-03 | fail→pass | 5,998 | 2,362 | -61% | 1 | 1 | 0% | 1,392 | 908 | -35% | 0 | 0 | — |
case-04 | fail→pass | 6,830 | 2,984 | -56% | 1 | 1 | 0% | 1,205 | 1,320 | +10% | 0 | 0 | — |
case-05 | fail→fail | 7,736 | 7,858 | +2% | 1 | 1 | 0% | 676 | 2,208 | +227% | 0 | 0 | — |
case-06 | fail→pass | 7,968 | 6,240 | -22% | 1 | 1 | 0% | 1,413 | 1,913 | +35% | 0 | 0 | — |
case-07 | fail→fail | 9,419 | 5,527 | -41% | 1 | 1 | 0% | 1,244 | 1,302 | +5% | 0 | 0 | — |
case-08 | fail→fail | 12,597 | 5,638 | -55% | 1 | 1 | 0% | 1,872 | 1,125 | -40% | 0 | 0 | — |
case-09 | fail→fail | 9,842 | 5,307 | -46% | 1 | 1 | 0% | 1,900 | 1,004 | -47% | 0 | 0 | — |
case-10 | fail→pass | 7,532 | 4,926 | -35% | 1 | 1 | 0% | 1,543 | 989 | -36% | 0 | 0 | — |
case-11 | fail→fail | 9,733 | 7,038 | -28% | 1 | 1 | 0% | 2,029 | 1,171 | -42% | 0 | 0 | — |
case-12 | fail→fail | 7,770 | 7,659 | -1% | 1 | 1 | 0% | 1,628 | 1,080 | -34% | 0 | 0 | — |
case-13 | fail→pass | 13,863 | 6,146 | -56% | 1 | 1 | 0% | 2,462 | 1,866 | -24% | 0 | 0 | — |
case-14 | fail→pass | 10,925 | 3,960 | -64% | 1 | 1 | 0% | 1,979 | 1,378 | -30% | 0 | 0 | — |
case-15 | fail→fail | 10,900 | 2,449 | -78% | 1 | 1 | 0% | 1,739 | 1,182 | -32% | 0 | 0 | — |
case-16 | pass→pass | 11,902 | 2,127 | -82% | 1 | 1 | 0% | 2,105 | 1,128 | -46% | 0 | 0 | — |
case-17 | pass→pass | 6,148 | 1,794 | -71% | 1 | 1 | 0% | 1,123 | 1,005 | -11% | 0 | 0 | — |
case-18 | fail→pass | 4,931 | 1,505 | -69% | 1 | 1 | 0% | 1,005 | 938 | -7% | 0 | 0 | — |
case-19 | fail→pass | 8,174 | 2,060 | -75% | 1 | 1 | 0% | 1,486 | 1,042 | -30% | 0 | 0 | — |
case-20 | fail→pass | 7,520 | 1,313 | -83% | 1 | 1 | 0% | 1,481 | 950 | -36% | 0 | 0 | — |
case-21 | fail→pass | 10,147 | 1,578 | -84% | 1 | 1 | 0% | 1,892 | 934 | -51% | 0 | 0 | — |
case-22 | pass→pass | 8,636 | 3,265 | -62% | 1 | 1 | 0% | 1,586 | 1,387 | -13% | 0 | 0 | — |
case-23 | fail→pass | 8,127 | 4,350 | -46% | 1 | 1 | 0% | 1,610 | 1,371 | -15% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 17 counted toward the lift figure. The other 6 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +48 percentage points is the difference between those two pass rates over the 17 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.