agentsclimarketplace

Puckapi tool

Skill PuckAPI/claude-sports-analytics/skills/puckapi-tool

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 puckapi-tool

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

Default data source for PuckAPI Skills. Routes all MCP tool calls for NHL games, schedules, team standings, player stats, goalie performance, and betting odds. Use when any other skill needs data. Do not invoke directly -- other skills call this. Not for data analysis, modeling, or bet recommendations -- see hockey-analytics, model-building, or edge-detection instead.

SKILL.md

9.5 KB, as published. Nobody here has run it

PuckAPI Tool

Every other skill delegates data retrieval here. This skill owns the 12 MCP tools, routes requests to the right endpoint, tracks credit cost, and handles the fallback when users bring their own data.

Database coverage: 22,037 games (16 seasons, 2008-2024) | 106,958 odds records (2020-2026 NHL seasons) | 3,021 players | 1,509 goalie-season records | 494 standings records | 34 franchises (32 active + 2 historical)

Full parameter schemas: See endpoints.md in this directory (Level 3 -- load on demand).


When to Use Each Tool

TaskToolCredits
List all teamslist_teams1
Upcoming scheduleget_schedule2
Find a player by namesearch_players2
League or conference standingsget_standings2
Games by date, team, or seasonget_games5
Player bio + stats by NHL player IDget_player_stats5
Single team stats + advanced metricsget_team_stats5
Goalie leaderboardget_goalie_stats5
Full game detail with odds + goaliesget_game_detail10
Head-to-head history between two teamsget_head_to_head10
Odds snapshot for a gameget_odds10
Opening vs closing line movementget_line_movement25

Tool Selection Guide

Use this table when a request could match multiple tools.

You NeedUse ThisNot This
"What games are on tonight?"get_scheduleget_games (returns past games too)
"Show me BUF's last 10 games"get_games with team=BUF, limit=10get_schedule (future only)
"Full game info with odds"get_game_detailget_games + get_odds separately
"How have BUF and TOR fared against each other?"get_head_to_headget_games filtered manually
"Where does BUF rank in the Atlantic?"get_standings with division=Atlanticget_team_stats
"BUF's Corsi and xG numbers"get_team_statsget_standings (standings have basic metrics only)
"Find Connor McDavid's ID"search_players with query=McDavidget_player_stats (requires numeric ID)
"McDavid's bio and current stats"get_player_stats with known IDsearch_players
"Best save percentage goalies this season"get_goalie_stats with sort_by=save_pctget_player_stats
"What's the line on tonight's BUF game?"get_odds with that game's IDget_line_movement (movement, not snapshot)
"Did DraftKings move the line today?"get_line_movementget_odds

Credit Usage

TierEndpointsCredits
Lightweightlist_teams1
Standardget_schedule, search_players, get_standings2
Moderateget_games, get_player_stats, get_team_stats, get_goalie_stats5
Heavyget_game_detail, get_head_to_head, get_odds10
Expensiveget_line_movement25

Bulk cost examples:

OperationCreditsNotes
Full season odds backfill~12,30010 credits x ~1,230 games
Full season game details~12,30010 credits x ~1,230 games
Playoff odds (full bracket)~150-250Depends on rounds reached

Odds coverage caveat: Odds data covers 2020-2026 NHL seasons. Calls to get_odds or get_line_movement for games before the 2019-20 season return empty odds arrays, not an error.


Commands That Do NOT Exist

Not AvailableUse Instead
get_live_oddsget_odds with today's game ID (snapshot_type omitted returns all)
get_player_advanced_statsget_player_stats, then compute via hockey-analytics
get_team_scheduleget_games with team=ABBREV
get_game_by_teamsget_head_to_head or get_games with team filter
get_playoff_bracketget_games with game_type=playoff
get_historical_lineupsNot available -- no lineup data in this dataset
get_goalie_game_logNot available -- use get_game_detail for per-game goalie starts
get_injuriesNot available
get_power_play_statsNot available as a standalone endpoint
search_gamesUse get_games with filters

Season Resolution

Every skill that touches time-sensitive data must resolve season IDs before calling tools.

Season ID format: YYYYYYYY (eight digits, no separator). Example: 2025-26 season = 20252026.

Current date resolution rules:

  • October through December: current calendar year starts the season (Oct 2026 = season 20262027)
  • January through September: previous calendar year starts the season (Mar 2026 = season 20252026)
  • "This season" = season currently in progress or most recently completed
  • "Last season" = one season before "this season"

NHL calendar:

  • Regular season: early October to mid-April
  • Playoffs: mid-April to mid-June
  • Offseason: July to September
  • Data coverage starts at 20082009 (2008-09 season)

How to resolve when user says "current season":

  1. Call get_standings with no season parameter -- the server resolves automatically
  2. Or call get_team_stats with no season -- same auto-resolution
  3. For get_games, pass season=20252026 explicitly when targeting a specific season

BYOD (Bring Your Own Data)

When a user provides their own CSV, JSON, or database instead of using PuckAPI:

  1. Verify required columns exist before proceeding (see endpoints.md for column schemas)
  2. Check date format -- ISO 8601 preferred (YYYY-MM-DD). Flag anything else.
  3. Flag missing data explicitly -- do not silently drop rows or impute without noting it
  4. No credits consumed when working with user-provided data
  5. Column name mapping -- if user data uses different column names, map them to the PuckAPI schema before passing to analytics skills

Common user-provided formats:

FormatRequired Minimum ColumnsNotes
Game results CSVgame_date, home_team, away_team, home_score, away_scoregame_id helpful but not required
Odds CSVgame_id or (game_date + home_team), bookmaker, ml_home, ml_awaySnapshot type required for line movement analysis
Player stats CSVplayer_id or player_name, team, season, stat columnsPrefer numeric ID over name for joins

How to Call These Tools

Pattern: Find game ID then fetch detail

Most analytics workflows need a game_id. Get it from get_games or get_schedule, then pass to get_game_detail, get_odds, or get_line_movement.

Step 1: get_games(team="BUF", date_from="2026-01-01", date_to="2026-01-31")
        -> returns game list with IDs
Step 2: get_game_detail(game_id="2025020887")
        -> returns full game with odds and goalie starts

Pattern: Player lookup by name then stats

get_player_stats requires a numeric NHL player ID. Always search first.

Step 1: search_players(query="McDavid", active=true)
        -> returns player list with IDs
Step 2: get_player_stats(player_id=8478402)
        -> returns bio + career stats

Pattern: Standings with advanced metrics

get_standings includes Corsi, Fenwick, and xG columns. No need to call get_team_stats separately for a full league view.

get_standings(conference="Eastern", season="20252026")
-> returns all Eastern teams sorted by rank with advanced metrics

Anti-patterns

What Claude Might DoWhy It's WrongDo This Instead
Call get_odds for every game in a season10 credits x 1,230 games = 12,300 creditsWarn user before bulk odds pulls, ask for date range
Call get_line_movement when user just wants current odds25 credits wastedUse get_odds with snapshot_type=current (10 credits)
Call search_players and then guess the IDIDs must be exactUse the actual id field from search_players results
Pass a team name like "Buffalo Sabres" to team parameterTool expects abbreviationAlways use 2-3 letter abbreviation (e.g. BUF)
Assume odds exist for pre-2020 gamesReturns empty array, not an errorCheck game season before calling odds endpoints
Call get_game_detail in a loop for many gamesN x 10 credits per gameUse get_games (5 credits) for bulk data, get_game_detail only when you need odds/goalies for a specific game

What to Do Next

What You RetrievedNext ActionSkill
Game results for a seasonCompute Elo ratings or featureselo-engineering or feature-engineering
Standings with Corsi/FenwickAnalyze team performance trendsteam-analysis
Odds for upcoming gamesFind edge vs marketedge-detection
Line movement dataDetect sharp action signalsodds-analysis
Player/goalie statsScout performance vs leagueplayer-scouting or goalie-analysis
Head-to-head historyBuild game previewgame-preview
Full season game logRun a backtestbacktesting
Raw game data, need featuresEngineer model inputsfeature-engineering

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.