Install any skill in seconds. Free to start, no credit card required.
Get Started Free →College Basketball (CBB) data via ESPN public endpoints — scores, standings, rosters, schedules, game summaries, play-by-play, win probability, rankings, futures, team/player stats, and news for NCAA Division I men's basketball. Zero config, no API keys. Use when: user asks about college basketball scores, March Madness, NCAA tournament, standings, rankings, team rosters, schedules, play-by-play, betting futures, team/player statistics, or CBB news. Don't use when: user asks about NBA/WNBA (use
.claude/skills/machina-sports-cbb-data/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-08 | ✓→✗ | ▼ Worse | 434% | 0% |
| case-14 | ✓→✓ | = Same ✓ | 124% | 0% |
| case-15 | ✓→✓ | = Same ✓ | 252% | 0% |
| case-23 | ✓→✓ | = Same ✓ | 298% | 0% |
Before writing queries, consult references/api-reference.md for endpoints, conference IDs, team IDs, and data shapes.
Before first use, check if the CLI is available:
bashwhich sports-skills || pip install sports-skills
If pip install fails with a Python version error, the package requires Python 3.10+. Find a compatible Python:
bashpython3 --version # check version # If < 3.10, try: python3.12 -m pip install sports-skills # On macOS with Homebrew: /opt/homebrew/bin/python3.12 -m pip install sports-skills
No API keys required.
Prefer the CLI — it avoids Python import path issues:
bashsports-skills cbb get_scoreboard sports-skills cbb get_rankings sports-skills cbb get_standings --group=23
CRITICAL: Before calling any data endpoint, verify:
currentDate — never hardcoded.group parameter is set to the correct conference ID (see references/api-reference.md).get_teams to resolve the team ID.Derive the current year from the system prompt's date (e.g., currentDate: 2026-02-28 → current year is 2026).
season = current_year + 1. If January–April, use season = current_year. If May–October (offseason), use season = current_year (most recently completed season).group parameter to filterrank field (null = unranked) on scoreboard competitors| Command | Description | |---|---| | get_scoreboard | Live/recent college basketball scores | | get_standings | Standings by conference (use group parameter) | | get_teams | All 360+ D1 men's basketball teams | | get_team_roster | Full roster for a team | | get_team_schedule | Schedule for a specific team | | get_game_summary | Detailed box score and player stats | | get_rankings | AP Top 25 and Coaches Poll rankings | | get_news | College basketball news | | get_play_by_play | Full play-by-play for a game | | get_win_probability | Win probability chart data | | get_schedule | Schedule for a date or season | | get_futures | Futures/odds markets (National Championship, etc.) | | get_team_stats | Team statistical profile | | get_player_stats | Player statistical profile | | get_ncaa_scoreboard | Official NCAA scoreboard — D1, D2, and D3 | | get_ncaa_schedule | Which dates have games (official index) | | get_ncaa_game | Official NCAA game information | | get_ncaa_boxscore | Official NCAA box score | | get_ncaa_play_by_play | Official play-by-play | | get_ncaa_bracket | March Madness bracket with live scores | | get_ncaa_schools | NCAA schools index (all divisions) | | get_power_index | BPI (Basketball Power Index) ratings for D1 teams | | get_tournament_projections | NCAA tournament projections with seeds, regions, and advancement probabilities | | compare_teams | Compare two teams using BPI ratings and season stats | | find_upset_candidates | Potential upsets based on BPI vs seed differential |
See references/api-reference.md for full parameter lists and return shapes.
The get_ncaa_* commands read the NCAA's own endpoints (data.ncaa.com + sdataprod.ncaa.com) — coverage ESPN does not carry:
division="d2"/"d3" — ESPN's collegecoverage is D1-centric.
ESPN-backed get_scoreboard/get_schedule previously inherited ESPN's Top-25-only un-grouped default (1 game on an ordinary Friday instead of ~24). Pass group explicitly for a narrower ESPN grouping.
get_ncaa_bracket.get_ncaa_game, get_ncaa_boxscore,get_ncaa_play_by_play.
get_ncaa_schools.NCAA game ids (from get_ncaa_scoreboard) and ESPN event ids share nothing — join on game date plus team names. Game-detail and bracket commands ride NCAA's GraphQL persisted queries, whose hashes rotate when ncaa.com redeploys; when that happens those commands say so explicitly while the scoreboard/schedule commands keep working.
Example 1: Current rankings User says: "What are the college basketball rankings?" Actions:
get_rankings()Result: AP Top 25 and Coaches Poll with rank, previous rank, record, and points
Example 2: Conference standings User says: "Show me SEC basketball standings" Actions:
currentDateget_standings(group=23, season=<derived_year>) (group 23 = SEC)Result: SEC standings with W-L records per team
Example 3: Today's scores User says: "What are today's college basketball scores?" Actions:
get_scoreboard()Result: All live and recent CBB games with scores and ranked status
Example 4: Team roster User says: "Show me Duke's roster" Actions:
get_team_roster(team_id="150")Result: Full Duke roster with name, position, jersey number
Example 5: March Madness futures User says: "Who's favored to win March Madness?" Actions:
get_futures(limit=10)Result: Top National Championship contenders with odds values
Example 6: Team statistics User says: "Show me Duke's team stats" Actions:
currentDateget_team_stats(team_id="150", season_year=<derived_year>)Result: Duke's season stats by category with value, rank, and per-game averages
get_odds~~ / ~~get_betting_odds~~ — not available. For prediction market odds, use the polymarket or kalshi skill.search_teams~~ — does not exist. Use get_teams instead.get_box_score~~ — does not exist. Use get_game_summary instead.get_player_ratings~~ — does not exist. Use get_player_stats instead.get_ap_poll~~ — does not exist. Use get_rankings instead.If a command is not listed in the Commands table above, it does not exist.
When a command fails, do not surface raw errors to the user. Instead:
Error: sports-skills command not found Cause: Package not installed Solution: Run pip install sports-skills
Error: No games found on scoreboard Cause: CBB is seasonal (November–April); off-season scoreboard will be empty Solution: Use get_rankings or get_news year-round; check get_schedule for when the season resumes
Error: Too many games returned — hard to filter Cause: During the season, 50+ games per day are scheduled Solution: Use --group to filter by conference, or --limit to cap results
Error: Rankings empty Cause: Rankings are published weekly during the season (November–March) only Solution: Use get_news in the offseason; rankings resume in November
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 15,232 | 15,522 | +2% | 1 | 1 | 0% | 1,969 | 2,423 | +23% | 0 | 0 | — |
case-02 | fail→fail | 20,353 | 16,379 | -20% | 1 | 1 | 0% | 2,798 | 2,548 | -9% | 0 | 0 | — |
case-03 | fail→fail | 21,955 | 18,507 | -16% | 1 | 1 | 0% | 3,537 | 2,525 | -29% | 0 | 0 | — |
case-04 | fail→fail | 19,228 | 19,016 | -1% | 1 | 1 | 0% | 807 | 2,714 | +236% | 0 | 0 | — |
case-05 | fail→fail | 7,914 | 17,674 | +123% | 1 | 1 | 0% | 439 | 2,653 | +504% | 0 | 0 | — |
case-06 | fail→fail | 10,876 | 15,356 | +41% | 1 | 1 | 0% | 675 | 2,391 | +254% | 0 | 0 | — |
case-07 | fail→fail | 14,791 | 18,754 | +27% | 1 | 1 | 0% | 176 | 2,768 | +1473% | 0 | 0 | — |
case-08 | pass→fail | 8,755 | 15,488 | +77% | 1 | 1 | 0% | 464 | 2,480 | +434% | 0 | 0 | — |
case-09 | fail→fail | 29,073 | 16,807 | -42% | 1 | 1 | 0% | 312 | 2,380 | +663% | 0 | 0 | — |
case-10 | fail→fail | 16,517 | 13,432 | -19% | 1 | 1 | 0% | 1,790 | 2,586 | +44% | 0 | 0 | — |
case-11 | fail→pass | 17,252 | 7,986 | -54% | 1 | 1 | 0% | 2,190 | 2,563 | +17% | 0 | 0 | — |
case-12 | fail→fail | 11,093 | 15,552 | +40% | 1 | 1 | 0% | 912 | 2,442 | +168% | 0 | 0 | — |
case-13 | fail→fail | 6,256 | 7,886 | +26% | 1 | 1 | 0% | 868 | 2,687 | +210% | 0 | 0 | — |
case-14 | pass→pass | 12,686 | 8,306 | -35% | 1 | 1 | 0% | 1,217 | 2,731 | +124% | 0 | 0 | — |
case-15 | pass→pass | 10,022 | 8,951 | -11% | 1 | 1 | 0% | 807 | 2,839 | +252% | 0 | 0 | — |
case-16 | fail→fail | 22,243 | 9,506 | -57% | 1 | 1 | 0% | 3,254 | 2,884 | -11% | 0 | 0 | — |
case-17 | fail→fail | 82,322 | 15,181 | -82% | 1 | 1 | 0% | 8,216 | 2,408 | -71% | 0 | 0 | — |
case-18 | fail→fail | 20,356 | 14,511 | -29% | 1 | 1 | 0% | 2,668 | 2,375 | -11% | 0 | 0 | — |
case-19 | fail→fail | 14,938 | 16,040 | +7% | 1 | 1 | 0% | 2,084 | 2,408 | +16% | 0 | 0 | — |
case-20 | fail→fail | 15,862 | 16,683 | +5% | 1 | 1 | 0% | 1,814 | 2,419 | +33% | 0 | 0 | — |
case-21 | fail→fail | 13,979 | 14,942 | +7% | 1 | 1 | 0% | 1,367 | 2,355 | +72% | 0 | 0 | — |
case-22 | fail→fail | 13,774 | 8,895 | -35% | 1 | 1 | 0% | 1,644 | 2,710 | +65% | 0 | 0 | — |
case-23 | pass→pass | 8,767 | 6,516 | -26% | 1 | 1 | 0% | 601 | 2,390 | +298% | 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 7 counted toward the lift figure. The other 16 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 0 percentage points is the difference between those two pass rates over the 7 comparable cases. 3 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.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/9/2026 | — |
| gemini-3.6-flash | verified | 8/3/2026 | — |
Other measured skills in the registry, with their headline benchmark lift.