返回 Skills
machina-sports/sports-skills· MIT 内容可用

nba-data

NBA data via ESPN public endpoints — scores, standings, rosters, schedules, game summaries, play-by-play, win probability, injuries, transactions, futures, depth charts, team/player stats, leaders, and news. Zero config, no API keys.

安装

与 skills.sh 相同的 Command / Prompt 安装方式


name: nba-data description: | NBA data via ESPN public endpoints — scores, standings, rosters, schedules, game summaries, play-by-play, win probability, injuries, transactions, futures, depth charts, team/player stats, leaders, and news. Zero config, no API keys.

Use when: user asks about NBA scores, standings, team rosters, schedules, game stats, box scores, play-by-play, injuries, transactions, betting futures, depth charts, team/player statistics, or NBA news. Don't use when: user asks about WNBA (use wnba-data), college basketball (use cbb-data), or other sports. license: MIT metadata: author: machina-sports version: "0.1.0"

NBA Data

Before writing queries, consult references/api-reference.md for endpoints, ID conventions, and data shapes.

Setup

Before first use, check if the CLI is available:

which 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:

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

Quick Start

Prefer the CLI — it avoids Python import path issues:

sports-skills nba get_scoreboard
sports-skills nba get_standings --season=2025
sports-skills nba get_teams

CRITICAL: Before Any Query

CRITICAL: Before calling any data endpoint, verify:

  • Season year is derived from the system prompt's currentDate — never hardcoded.
  • If only a team name is provided, call get_teams to resolve the team ID before using team-specific commands.

Choosing the Season

Derive the current year from the system prompt's date (e.g., currentDate: 2026-02-18 → current year is 2026).

  • If the user specifies a season, use it as-is.
  • If the user says "current", "this season", or doesn't specify: The NBA season runs October–June. If the current month is October–December, the active season year matches the current year. If January–June, the active season started the previous calendar year (use that year as the season).

Commands

CommandDescription
get_scoreboardLive/recent NBA scores
get_standingsStandings by conference
get_teamsAll 30 NBA teams
get_team_rosterFull roster for a team
get_team_scheduleSchedule for a specific team
get_game_summaryDetailed box score and scoring plays
get_leadersNBA statistical leaders
get_newsNBA news articles
get_play_by_playFull play-by-play for a game
get_win_probabilityWin probability chart data
get_scheduleSchedule for a specific date or season
get_injuriesInjury reports across all teams
get_transactionsRecent transactions
get_futuresFutures/odds markets
get_depth_chartDepth chart for a team
get_team_statsTeam statistical profile
get_player_statsPlayer statistical profile

See references/api-reference.md for full parameter lists and return shapes.

Examples

Example 1: Today's scores User says: "What are today's NBA scores?" Actions:

  1. Call get_scoreboard() Result: All live and recent NBA games with scores and status

Example 2: Conference standings User says: "Show me the Western Conference standings" Actions:

  1. Derive season year from currentDate
  2. Call get_standings(season=<derived_year>)
  3. Filter results for Western Conference Result: Western Conference standings table with W-L, PCT, GB per team

Example 3: Team roster User says: "Who's on the Lakers roster?" Actions:

  1. Call get_team_roster(team_id="13") Result: Full Lakers roster with name, position, jersey number, height, weight

Example 4: Game box score User says: "Show me the full box score for last night's Celtics game" Actions:

  1. Call get_scoreboard(date="<yesterday>") to find the event_id
  2. Call get_game_summary(event_id=<id>) for full box score Result: Complete box score with per-player stats and scoring plays

Example 5: Injury report User says: "Who's injured on the Lakers?" Actions:

  1. Call get_injuries()
  2. Filter results for Los Angeles Lakers (team_id=13) Result: Lakers injury list with player name, position, status, and injury type

Example 6: Player statistics User says: "Show me LeBron's stats this season" Actions:

  1. Derive season year from currentDate
  2. Call get_player_stats(player_id="1966", season_year=<derived_year>) Result: Season stats by category with value, rank, and per-game averages

Commands that DO NOT exist — never call these

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

If a command is not listed in the Commands table above, it does not exist.

Error Handling

When a command fails, do not surface raw errors to the user. Instead:

  1. Catch silently and try alternatives
  2. If team name given instead of ID, use get_teams to find the ID first
  3. Only report failure with a clean message after exhausting alternatives

Troubleshooting

Error: sports-skills command not found Cause: Package not installed Solution: Run pip install sports-skills

Error: Team not found by ID Cause: Wrong or outdated ESPN team ID used Solution: Call get_teams to get the current list of all 30 NBA teams with their IDs

Error: No data returned for a future game Cause: ESPN only returns data for completed or in-progress games Solution: Use get_schedule to see upcoming game details; get_scoreboard only covers active/recent games

Error: Offseason — scoreboard returns 0 events Cause: No games scheduled during the offseason (July–September) Solution: Use get_standings or get_news instead; use get_schedule to find when the season resumes

附带文件

references/api-reference.md
# NBA Data — API Reference

## Commands

### get_scoreboard
Get live/recent NBA scores.
- `date` (str, optional): Date in YYYY-MM-DD format. Defaults to today.

Returns `events[]` with game info, scores, status, and competitors.

### get_standings
Get NBA standings by conference.
- `season` (int, optional): Season year

Returns `groups[]` with Eastern/Western conferences and team standings including W-L, PCT, GB, streak, home/away/conference records, and PPG.

### get_teams
Get all 30 NBA teams. No parameters.

Returns `teams[]` with id, name, abbreviation, logo, and location.

### get_team_roster
Get full roster for a team.
- `team_id` (str, required): ESPN team ID (e.g., "13" for Lakers)

Returns `athletes[]` with name, position, jersey number, height, weight, experience.

### get_team_schedule
Get schedule for a specific team.
- `team_id` (str, required): ESPN team ID
- `season` (int, optional): Season year

Returns `events[]` with opponent, date, score (if played), and venue.

### get_game_summary
Get detailed box score and scoring plays.
- `event_id` (str, required): ESPN event ID

Returns `game_info`, `competitors`, `boxscore` (stats per player), `scoring_plays`, and `leaders`.

### get_leaders
Get NBA statistical leaders (points, rebounds, assists, etc.).
- `season` (int, optional): Season year

Returns `categories[]` with leader rankings per stat category.

### get_news
Get NBA news articles.
- `team_id` (str, optional): Filter by team

Returns `articles[]` with headline, description, published date, and link.

### get_play_by_play
Get full play-by-play data for a game.
- `event_id` (str, required): ESPN event ID

Returns play-by-play detail including period, clock, team, play description, and scoring plays.

### get_win_probability
Get win probability chart data for a game.
- `event_id` (str, required): ESPN event ID

Returns timestamped home/away win probability percentages throughout the game.

### get_schedule
Get NBA schedule for a specific date or season.
- `date` (str, optional): Date in YYYY-MM-DD format
- `season` (int, optional): Season year (used only if no date provided)

Returns `events[]` for the specified date.

### get_injuries
Get current NBA injury reports across all teams. No parameters.

Returns `teams[]` with per-team injury lists including player name, position, status (Out/Doubtful/Questionable/Day-To-Day), injury type, and detail.

### get_transactions
Get recent NBA transactions (trades, signings, waivers).
- `limit` (int, optional): Max transactions to return. Defaults to 50.

Returns `transactions[]` with date, team, and description.

### get_futures
Get NBA futures/odds markets (Championship winner, MVP, etc.).
- `limit` (int, optional): Max entries per market. Defaults to 25.
- `season_year` (int, optional): Season year. Defaults to current.

Returns `futures[]` with market name and entries (team/player name + odds value).

### get_depth_chart
Get depth chart for a specific team.
- `team_id` (str, required): ESPN team ID

Returns `charts[]` with positional depth and player depth order.

### get_team_stats
Get full team statistical profile for a season.
- `team_id` (str, required): ESPN team ID
- `season_year` (int, optional): Season year. Defaults to current.
- `season_type` (int, optional): 1=preseason, 2=regular (default), 3=postseason.

Returns `categories[]` with detailed stats including value, rank, and per-game averages.

### get_player_stats
Get full player statistical profile for a season.
- `player_id` (str, required): ESPN athlete ID
- `season_year` (int, optional): Season year. Defaults to current.
- `season_type` (int, optional): 1=preseason, 2=regular (default), 3=postseason.

Returns `categories[]` with detailed stats including value, rank, and per-game averages.

## Team IDs

| Team | ID | Team | ID |
|------|-----|------|-----|
| Atlanta Hawks | 1 | Memphis Grizzlies | 29 |
| Boston Celtics | 2 | Miami Heat | 14 |
| Brooklyn Nets | 17 | Milwaukee Bucks | 15 |
| Charlotte Hornets | 30 | Minnesota Timberwolves | 16 |
| Chicago Bulls | 4 | New Orleans Pelicans | 3 |
| Cleveland Cavaliers | 5 | New York Knicks | 18 |
| Dallas Mavericks | 6 | Oklahoma City Thunder | 25 |
| Denver Nuggets | 7 | Orlando Magic | 19 |
| Detroit Pistons | 8 | Philadelphia 76ers | 20 |
| Golden State Warriors | 9 | Phoenix Suns | 21 |
| Houston Rockets | 10 | Portland Trail Blazers | 22 |
| Indiana Pacers | 11 | Sacramento Kings | 23 |
| LA Clippers | 12 | San Antonio Spurs | 24 |
| Los Angeles Lakers | 13 | Toronto Raptors | 28 |
| Utah Jazz | 26 | Washington Wizards | 27 |

Use `get_teams` for the complete, authoritative list.
references/team-ids.md
# NBA Team IDs

| Team | ID | Team | ID |
|------|-----|------|-----|
| Atlanta Hawks | 1 | Memphis Grizzlies | 29 |
| Boston Celtics | 2 | Miami Heat | 14 |
| Brooklyn Nets | 17 | Milwaukee Bucks | 15 |
| Charlotte Hornets | 30 | Minnesota Timberwolves | 16 |
| Chicago Bulls | 4 | New Orleans Pelicans | 3 |
| Cleveland Cavaliers | 5 | New York Knicks | 18 |
| Dallas Mavericks | 6 | Oklahoma City Thunder | 25 |
| Denver Nuggets | 7 | Orlando Magic | 19 |
| Detroit Pistons | 8 | Philadelphia 76ers | 20 |
| Golden State Warriors | 9 | Phoenix Suns | 21 |
| Houston Rockets | 10 | Portland Trail Blazers | 22 |
| Indiana Pacers | 11 | Sacramento Kings | 23 |
| LA Clippers | 12 | San Antonio Spurs | 24 |
| Los Angeles Lakers | 13 | Toronto Raptors | 28 |
| Utah Jazz | 26 | Washington Wizards | 27 |

**Tip:** Use `get_teams` to get the full, accurate list of team IDs.
scripts/validate_params.sh
#!/bin/bash
# Validates parameters before executing sports-skills commands
SPORT="nba"
MONTH=$(date +%m)

case "$SPORT" in
  nba)
    if [[ $MONTH -ge 7 && $MONTH -le 9 ]]; then
      echo "WARNING: NBA is in off-season (Oct–Jun). Scoreboard may be empty."
      echo "SUGGESTION: Use get_news or get_standings with a prior season."
    fi
    ;;
esac

if [[ "$*" == *"--date="* ]]; then
  DATE=$(echo "$*" | grep -o '\-\-date=[^ ]*' | cut -d= -f2)
  if [[ ! "$DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
    echo "ERROR: Date must be YYYY-MM-DD format. Got: $DATE"
    exit 1
  fi
fi

if [[ "$*" == *"--team_id="* ]]; then
  TEAM_ID=$(echo "$*" | grep -o '\-\-team_id=[^ ]*' | cut -d= -f2)
  if [[ -z "$TEAM_ID" ]]; then
    echo "ERROR: --team_id requires a value. Use get_teams to find valid IDs."
    exit 1
  fi
fi

echo "OK"