인터페이스는 현지화되어 있으며, Skill 소개와 설명 문서는 선택한 언어로 AI가 자동 번역합니다. 코드·명령어·경로·전문 용어는 원문을 유지하며 원작자 문서가 우선합니다.
Skills 둘러보기
데이터 및 연구 · SKILL.md

puckapi-tool

puckapi-tool

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-detecti…

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill 문서

GitHub

name: puckapi-tool description: "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." metadata: version: 1.0.0 author: PuckAPI user-invocable: false

PuckAPI Tool

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

Database coverage: 6,882,653 plays | 23,495 games (2010-11 onward) | 107,058 odds records (2019-20 onward, sparse in the first year) | 4,898 players | 1,509 goalie-seasons | 1,803 skater-seasons | 21,994 games with derived goalie starts | 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 20102011 (2010-11 season). There is nothing before it; querying an earlier season returns empty, not an error

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
저장한 Skills