agentsclimarketplace

Game preview

Skill PuckAPI/claude-sports-analytics/skills/game-preview

28 free Claude Code skills for NHL analytics, betting models, and hockey research. Works with PuckAPI MCP server for live data.

Install
npx -y skills add PuckAPI/claude-sports-analytics --skill game-preview

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Complete pre-game analysis for a single NHL (or other sport) matchup: team records, goalie matchup, key stats, odds snapshot, model edge, and head-to-head history in one shareable report. Use when user asks about a specific game tonight, matchup breakdown, game preview, pre-game analysis, who starts in goal, or wants a report on [Team A] vs [Team B]. Do not use for full slate analysis -- see daily-card. Do not use for odds-only lookup -- see odds-explorer. Do not use for deep model building -- see model-building or feature-engineering.

SKILL.md

10.0 KB, as published. Nobody here has run it

Game Preview

Default data tool: PuckAPI (puckapi-tool). Uses get_standings + get_team_stats + get_head_to_head + get_goalie_stats + get_odds. Credit cost per preview: ~34 credits (2+5+10+5+10+2). For a full slate, use daily-card instead -- pulling individual previews per game costs more.

You are an expert sports analyst. Your goal is to produce a complete, shareable pre-game report that replaces 30 minutes of manual research. This is the demo skill -- make it look like something worth screenshotting.

When to Use

  • User asks for a game preview, breakdown, or matchup analysis for a specific game
  • User asks "who starts tonight" or wants goalie context for a game
  • User wants a shareable pre-game report for one matchup
  • User wants to know the odds, edge, and relevant stats for a single game before betting
  • User asks "[Team A] vs [Team B] tonight" in any form

When NOT to Use

  • Full slate analysis across all games tonight -- see daily-card
  • Odds-only lookup without the full report -- see odds-explorer
  • Deep goalie stat analysis beyond matchup context -- see goalie-analysis
  • Deep team stat analysis beyond matchup context -- see team-analysis
  • Building or running a prediction model -- see model-building or edge-detection

Commands Available

CommandWhat It DoesCredits
get_standingsCurrent records, division standings, points percentage2
get_team_stats5v5 metrics, special teams, home/away splits5
get_head_to_headSeason series + last 5-10 historical meetings10
get_goalie_statsProbable starter stats, SV%, GAA, recent form5
get_oddsMoneyline, puck line, total across books10
get_scheduleConfirm game time, rest days, back-to-back status2

Commands That Do NOT Exist

Not AvailableUse Instead
get_game_previewCompose this manually from the 6 calls above
get_starterUse get_goalie_stats + get_game_detail; note pregame starters require beat reporter sources
get_live_oddsUse get_odds with today's date
get_injury_reportNot available via API; direct user to team injury report feeds
get_rest_daysDerive from get_schedule using game dates

Season Resolution

  • October through December: current calendar year is the season start (2026-27 season)
  • January through September: previous calendar year is the season start (2025-26 season)
  • "This season" = season currently in progress or most recently completed
  • "Last season" = one season before "this season"
  • NHL regular season: October to April. Playoffs: April to June.

Initial Assessment

Before starting, understand:

  1. Which two teams? Confirm spelling and current team names (relocations happen).
  2. Does the user have a model? If yes, include the Model Edge section. If no, skip it.
  3. What is the game date? Default to today unless specified.

How It Works

Pull all data in parallel where possible, then compose the report in six sections.

Step 1: Matchup Context

Call get_standings for both teams. Pull:

  • Current record (W-L-OTL), points, points percentage
  • Division rank and conference rank
  • Recent form: last 10 games record (W-L-OTL in last 10 if available, else compute from game log)
  • Rest status: derive from get_schedule -- days since last game, back-to-back flag

Call get_head_to_head for season series between the two teams this season.

Step 2: Goalie Matchup

Call get_goalie_stats for both teams' likely starters.

Pull: GP, GS, W-L-OTL, SV%, GAA, SO, last 5 starts SV%.

If both goalies have faced each other: pull from get_head_to_head output.

Note: the API shows post-game confirmed starters only. For pregame starter, explicitly tell the user to check beat reporter sources or team injury reports. Do not guess or fabricate a starter.

Reference goalie-analysis skill logic for computing xSV% and GSAA if the data supports it.

Step 3: Key Stats Comparison

Call get_team_stats for both teams. Pull and compare:

MetricHome TeamAway Team
Corsi%
Fenwick%
Goals For per game
Goals Against per game
Expected Goals For
Expected Goals Against
Goal Differential
Points Percentage

Flag any metric where the gap between teams exceeds one standard deviation from league average.

Step 4: Odds Snapshot

Call get_odds (10 credits). Pull moneyline, puck line (-1.5/+1.5), and total (Over/Under) across all available books.

Show:

  • Best available moneyline for each side (line shop)
  • Consensus total (most common line)
  • Implied probabilities (devigified from the consensus line)

If the moneylines across books vary by more than 5 cents, flag the discrepancy as a soft market signal.

Step 5: Model Edge (conditional)

Only include if the user has provided model probabilities.

Compute EV against best available line using edge-detection skill logic:

ev = (model_prob * decimal_odds) - 1

Show: model probability, implied probability, edge magnitude, 1/4 Kelly stake.

If no model is available, show this section as: "Model Edge: provide your model probability to compute EV."

Step 6: Head-to-Head History

From get_head_to_head, pull the last 5-10 meetings between these teams (all-time or recent seasons).

Note: small samples (< 5 games) carry no predictive value for head-to-head trends. State this explicitly rather than over-interpreting 2-3 games.

Credit Usage

OperationCreditsNotes
get_standings (both teams)2One query covers both
get_team_stats (both teams)5One query covers both
get_head_to_head10Season series + history
get_goalie_stats (both teams)5One query covers both
get_odds10Tied for most expensive with H2H
get_schedule (rest check)2Optional; skip if user knows dates
Total per preview~34Skip get_odds and get_head_to_head for 14-credit version

Data Source

PuckAPI (default): All six endpoints. Data is clean and joined.

Your own data: If user provides team/goalie stats as CSV:

  1. Verify columns: team names, record fields (W, L, OTL), SV%, GAA, corsiPct, fenwickPct, goalsForPerGame, goalsAgainstPerGame
  2. For odds: user must provide manually or use get_odds
  3. Credits only consumed for the API calls made; own-data sections are free

Anti-patterns

RationalizationWhy It's WrongDo This Instead
"The goalie starting tonight is X"Pregame starters are not in the APIState the last confirmed starter and direct user to beat reporter for pregame confirmation
"Team A has won 4 of the last 5 H2H meetings"5 H2H games over 2+ seasons is noise, not a trendReport the data, note the small sample, do not interpret as a meaningful edge
"The odds haven't moved so the sharp money is neutral"Lack of line movement is not confirmation of neutralityReport the current lines; absence of movement is absence of signal, not neutrality
"Skip the stats and just give the pick"A pick without context is gambling, not analysisAlways include the data that supports or contradicts any directional conclusion

Output Format

## Game Preview: [Away Team] @ [Home Team]
[Date] | [Arena] | [Time]

---

### Matchup Context
[Away] Record: XX-XX-XX | Pts%: .XXX | Div Rank: X | Last 10: X-X-X
[Home] Record: XX-XX-XX | Pts%: .XXX | Div Rank: X | Last 10: X-X-X
Rest: [Away] X days | [Home] X days [BACK-TO-BACK flag if applicable]
Season Series: [Away] X – [Home] X

---

### Goalie Matchup
[Away] Likely Starter: [Name] | SV%: .XXX | GAA: X.XX | Last 5: .XXX
[Home] Likely Starter: [Name] | SV%: .XXX | GAA: X.XX | Last 5: .XXX
Note: Pregame starters unconfirmed -- check beat reporter sources.

---

### Key Stats Comparison
| Metric        | [Away] | [Home] |
|---------------|--------|--------|
| Corsi%        | XX.X%  | XX.X%  |
| Fenwick%      | XX.X%  | XX.X%  |
| GF/game       | X.XX   | X.XX   |
| GA/game       | X.XX   | X.XX   |
| xGF           | X.XX   | X.XX   |
| xGA           | X.XX   | X.XX   |
| Goal Diff     | +/-N   | +/-N   |

---

### Odds Snapshot
Moneyline: [Away] [+/-XXX] | [Home] [+/-XXX] (best available)
Puck Line: [Away] +1.5 [odds] | [Home] -1.5 [odds]
Total: O/U X.X [odds]
Implied (devigified): [Away] XX.X% | [Home] XX.X%

---

### Model Edge
[If model provided]
Model: [Away] XX.X% | [Home] XX.X%
Market: [Away] XX.X% | [Home] XX.X%
Edge: [Side] +X.X% EV | 1/4 Kelly: X.X% of bankroll
[If no model]
Provide your model probability to compute EV.

---

### Head-to-Head History (Last N meetings)
| Date | Winner | Score | Notes |
|------|--------|-------|-------|

---

Built with PuckAPI Skills

What to Do Next

What You FoundNext ActionSkill
Want to see the full slate tonightFull card with edge rankings across all gamesdaily-card
Have a model and want to confirm EVCompute edge, Kelly sizing, significanceedge-detection
Want to dig deeper on the goalie matchupLeaderboard context, xSV%, workload flagsgoalie-analysis
Want shareable visual outputGenerate matchup card chartvisualization
Want to bet and track performanceLog this bet after placingbet-tracker
Want deeper team metricsFull 5v5, special teams, shot quality breakdownteam-analysis

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.